lunes, 21 de septiembre de 2020

Anagramas

Reto: Anagramas

Crear una función que detecte si dos palabras son anagramas.

Dada una palabra, si reordenamos sus letras obtendremos un anagrama de ella. Por ejemplo, Roma es un anagrama de Amor y viceversa. Otros ejemplos de anagramas son:

  • saco -cosa
  • frase - fresa
  • Eva - ave
  • Marta - trama - matar
  • amor - ramo - Roma - mora
  • valora - Álvaro
  • riesgo - Sergio
  • poder - Pedro
  • delira - lidera
  • raza -azar
  • alma - mala - lama
  • rica - cría
  • aire - reía
  • gato - gota - toga
  • Ernesto - eternos - estreno - enteros
https://repl.it/@valoro/anagrama

Método 1

Vamos a crear una función que nos diga con True o False si dos palabras son o no son un anagrama una de la otra.


Convertimos las palabras a minúsculas y las convertimos en listas de caracteres. De esta forma la palabra Roma se convierte en la lista:

['r', 'o', 'm', 'a']

Luego se ordena de menor a mayor con sort(). De esta forma, haciendo este proceso en las dos palabras, si coinciden las listas ordenadas quiere decir que contienen los mismos caracteres. Esto nos permite asegurar que las palabras son anagramas la una de la otra.
def anagrama(cadena1,cadena2):  
  cadena1lista=list(cadena1.lower()) #lo pasamos a minúsculas y lo convertimos en una lista de caracteres  
  cadena2lista=list(cadena2.lower())  
  cadena1lista.sort()        #lo ordenamos  
  cadena2lista.sort()  
  return cadena1lista==cadena2lista #comparamos las listas de caracteres ordenadas, si son iguales dará True  
palabra1='Roma'  
palabra2='amor'  
print("¿Son anagramas {} y {}?: ".format(palabra1,palabra2),anagrama(palabra1,palabra2))  




Método 2

Vamos a eliminar los acentos o tildes de las palabras antes de trabajar con ellas.

Hemos creado una función denominada normalizar que elimina los acentos (tildes) de las letras vayan en mayúsculas o en minúsculas.

El método 1 no detectaría que Álvaro y valora son anagramas, pero el método 2 si nos responde True. Se basa en el uso de la función replace.
def normalizar(s):  
  parejas = (  
    ("á", "a"),  
    ("é", "e"),  
    ("í", "i"),  
    ("ó", "o"),  
    ("ú", "u"),  
  )  
  for a, b in parejas:  
    s = s.replace(a, b).replace(a.upper(), b.upper())  
  return s  
def anagrama(cadena1,cadena2):  
 cadena1=normalizar(cadena1)  
 cadena2=normalizar(cadena2)  
 cadena1lista=list(cadena1.lower())  
 cadena2lista=list(cadena2.lower())  
 cadena1lista.sort()  
 cadena2lista.sort()  
 return cadena1lista==cadena2lista  
palabra1='Álvaro'  
palabra2='valora'  
print("¿Son anagramas {} y {}?: ".format(palabra1,palabra2),anagrama(palabra1,palabra2))  

miércoles, 16 de septiembre de 2020

Lista de la compra usando localStorage en JS

Usando el método localStorage de JavaScript podemos guardar datos en el propio navegador. Esto nos permite guardar los datos que queramos y que al cerrar el navegador o incluso al reiniciar el PC podamos seguir accediendo a los datos sin problema. 

El código en GitHub: https://github.com/magnitopic/edujs/tree/master/ListaCompraJS

Mira el codigo ejecutandose en relp.it: https://listacomprajs.valoro.repl.co/

index.html

 <!DOCTYPE html>  
 <html lang="en">  
 <head>  
   <meta charset="UTF-8">  
   <meta name="viewport" content="width=device-width, initial-scale=1.0">  
   <title>Main HTML</title>  
 </head>  
 <body>  
   <h1>Lista de la compra</h1>  
   <p>Añadir item a la lista</p>  
   <input type="text" id="entrada">  
   <button onclick="anadir()">Añadir</button>  
   <div id="resultado">  
     <ul id="lista-compra"></ul>  
   </div>  
   <script src="script.js"></script>  
 </body>  
 </html>  

script.js
 'use strict'  
 var contador= 0;  
 function anadir(){  
   var x = document.getElementById("entrada").value;  
   if(x.length <= 0){  
   }else{  
     localStorage.setItem(x,x);  
     location.reload();   
   }  
 }  
 var ul = document.getElementById('lista-compra');  
   for(var i in localStorage){  
     if(typeof localStorage[i] =='string'){  
       var li= document.createElement("li");  
       li.append(localStorage[i]);  
       ul.append(li);  
     }  
   }  

Párrafo con colores random

Con este código queremos tener un 50% de probabilidades de interaccionar con el párrafo. Si la suerte determina que no podemos interactuar con el párrafo al pasar el cursor por encima se nos cambiará a una señal de prohibido. En caso contrario al pasar el cursor encima cambiará para hacer click y al actuar cambiará el color del texto a un valor hexadecimal aleatorio.

El código en GitHub: https://github.com/magnitopic/edujs/tree/master/jQueryColorRandom

Mira el codigo ejecutandose en relp.it: https://repl.it/@valoro/ParrafoColorRandom#index.html

index.html
 <!DOCTYPE html>  
 <html lang="en">  
 <head>  
   <meta charset="UTF-8">  
   <meta name="viewport" content="width=device-width, initial-scale=1.0">  
   <title>Document</title>  
   <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>  
 </head>  
 <body>  
   <p>Lo importante es no dejar de hacer preguntas.</p>  
   <script src="script.js"></script>  
 </body>  
 </html>  

script.js
 $(function(){  
   'use strict'  
   function aleatorio(){  
     return Math.random();  
   }   
   if( aleatorio()<= 0.5){  
     $('p').hover(function(){  
       $("p").css("cursor", "not-allowed");  
     })  
   }else{  
     $('p').hover(function(){  
       $("p").css("cursor", "pointer");  
     })  
     $('p').click(function(){  
       $("p").css("color", '#'+(0x1000000+(aleatorio())*0xffffff).toString(16).substr(1,6));  
     })  
   }  
 });