Skip to content

Commit 43a69d5

Browse files
committed
mouredev#4 - Lua
1 parent eddd48c commit 43a69d5

File tree

1 file changed

+146
-0
lines changed

1 file changed

+146
-0
lines changed
Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
--[[
2+
```
3+
/*
4+
* EJERCICIO:
5+
* Muestra ejemplos de todas las operaciones que puedes realizar con cadenas de caracteres
6+
* en tu lenguaje. Algunas de esas operaciones podrían ser (busca todas las que puedas):
7+
* - Acceso a caracteres específicos, subcadenas, longitud, concatenación, repetición, recorrido,
8+
* conversión a mayúsculas y minúsculas, reemplazo, división, unión, interpolación, verificación...
9+
*
10+
* DIFICULTAD EXTRA (opcional):
11+
* Crea un programa que analice dos palabras diferentes y realice comprobaciones
12+
* para descubrir si son:
13+
* - Palíndromos
14+
* - Anagramas
15+
* - Isogramas
16+
*/
17+
```
18+
]]
19+
20+
-- strings
21+
local cadena = "Hola Mundo"
22+
print(cadena)
23+
print(string.len(cadena))
24+
print(#cadena)
25+
26+
-- concatenacion
27+
local palabra1 = "Hola"
28+
local palabra2 = "Mundo"
29+
print(palabra1 .. ", " .. palabra2)
30+
31+
-- repeticion
32+
local repeticion = string.rep(palabra1 .." ", 5)
33+
print(repeticion)
34+
35+
-- acceso a caracteres especificos
36+
local cadena = "Mundo"
37+
print(cadena:sub(2, 3))
38+
39+
-- subcadenas
40+
local cadena = "Hola Mundo"
41+
print(cadena:sub(1, 4))
42+
43+
local cadena = "Hola Mundo"
44+
local encuentra = string.find(cadena, "Mundo")
45+
print(encuentra) -- esto nos dice la posicion
46+
47+
-- conversion de mayusculas a minusculas
48+
local cadena = "Hola Mundo"
49+
print(string.upper(cadena))
50+
print(string.lower(cadena))
51+
52+
-- remplazo (string.gsub)
53+
local cadena = "Hola Mundo"
54+
print(cadena:gsub("Mundo", "Lua"))
55+
56+
-- cadena
57+
local cadena = "Hola, Mundo"
58+
for i in cadena:gmatch("[^,]+") do
59+
print(i)
60+
end
61+
62+
-- union
63+
local cadena = {"Hola", "mundo", "Hola", "amigo"}
64+
print(table.concat(cadena, " "))
65+
66+
local cadena = "Hola Mundo"
67+
print(cadena:match("^Hola"))
68+
print(cadena:match("Mundo$"))
69+
70+
-- interpolacion
71+
local palabra1, palabra2 = "Hola", "mundo"
72+
print(string.format("La palabra 1 es: %s, y la segunda palabra seria: %s", palabra1, palabra2))
73+
74+
-- extra
75+
function analizarPalabra(palabra)
76+
return palabra:lower():gsub("%s+", "")
77+
end
78+
79+
local function palindromo(palabra)
80+
palabra = analizarPalabra(palabra)
81+
local longitud = #palabra
82+
83+
for i = 1, math.floor(longitud / 2) do
84+
if palabra:sub(i, i) ~= palabra:sub(longitud - i + 1, longitud - i + 1) then
85+
return false
86+
end
87+
end
88+
return true
89+
end
90+
91+
local function anagrama(palabra1, palabra2)
92+
palabra1 = analizarPalabra(palabra1)
93+
palabra2 = analizarPalabra(palabra2)
94+
95+
if #palabra1 ~= #palabra2 then
96+
return false
97+
end
98+
99+
local function contar_letras(palabra)
100+
local conteo = {}
101+
for letra in palabra:gmatch(".") do
102+
conteo[letra] = (conteo[letra] or 0) + 1
103+
end
104+
return conteo
105+
end
106+
107+
local conteo1 = contar_letras(palabra1)
108+
local conteo2 = contar_letras(palabra2)
109+
110+
for letra, cantidad in pairs(conteo1) do
111+
if conteo2[letra] ~= cantidad then
112+
return false
113+
end
114+
end
115+
116+
return true
117+
end
118+
119+
local function isograma(palabra)
120+
palabra = analizarPalabra(palabra)
121+
local letras_vistas = {}
122+
123+
for letra in palabra:gmatch(".") do
124+
if letras_vistas[letra] then
125+
return false
126+
end
127+
letras_vistas[letra] = true
128+
end
129+
return true
130+
end
131+
132+
-- Pruebas
133+
local word1 = "oso"
134+
local word2 = "aibofobia"
135+
print("¿La palabra '"..word1.."' es un palíndromo?: ", palindromo(word1))
136+
print("¿La palabra '"..word2.."' es un palíndromo?: ", palindromo(word2))
137+
138+
print("\nPruebas de anagramas:")
139+
print("roma - amor:", anagrama("roma", "amor")) -- true
140+
print("hola - aloh:", anagrama("hola", "aloh")) -- true
141+
print("lobo - bolo:", anagrama("lobo", "bolo")) -- true
142+
print("perro - pera:", anagrama("perro", "pera")) -- false
143+
144+
print("\nPruebas de isogramas:")
145+
print("murciélago:", isograma("murcielago")) -- true
146+
print("repetir:", isograma("repetir"))

0 commit comments

Comments
 (0)