Convertir números a letras.

Este ejercicio estuvo de moda esta semana, y solo con el fin de que no se quede este humilde código en el baúl de los olvidos, lo dejo para la comunidad.

Soy nuevo en Groovy, y como siempre me gustan las recomendaciones y críticas sobre mi código.

Resumen del código: Convierte números enteros del 0 al 1000 en su forma escrita, letras en minúsculas y español.
Conforme se analicen números en la función ‘convierteNumeroAPalabras’ se irán agregando en el mapa ‘numerosEscritos’. Así que si se deseara llenar el mapa con la secuencia completa se usaría algo como:  , después solo se podrían recuperar la conversión con un método propio del mapa, por ejemplo:  

 

Saludos a todos. : )

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

pruebas

Yo tengo una batería de pruebas un poco más completa, para un convertidor que yo hice:

 

Imagen de ezamudio

duh

Ah y mi función, que realmente la hice como un closure, cuando estaba aprendiendo Groovy precisamente... en vez de un mapa, tengo varias listas y obtengo las cadenas por su posición. Creo que es más eficiente usar un mapa.

 

Imagen de rodrigo salado anaya

Forma tan creativa.

Órale, que forma tan creativa de resolverlo, y acabe aprendiendo la existencia de intdiv. En un principio pensé en ocupar algo muy similar a ti con las listas.
¿Existe en Groovy alguna manera de no usar tanas sentencias if’s, algo como Pattern Matching?
No creo verdad. Pero bueno tenía que preguntar.
Saludos.

Imagen de ezamudio

case

Puedes usar case, el case en Groovy es mucho más avanzado que el que conoces de Java, que casi fue tomado de C. Pero si ves los if's que tengo, son muy heterogéneos, no estoy evaluando distintos valores de la misma variable, sino que evalúo distintas variables, a veces con condiciones adicionales; no usé case porque sólo quedaría más enredado (menos legible).

Imagen de yngwie74

Python

Sr. Rodrigo

Me llama la atención que con Groovy su solución se comienza a parecer (con sus obvias diferencias, claro) un *poquito* a la versión en Python que discutimos hace unos días. Probablemente es el resultado de usar un lenguaje más dinámico.

El detalle que veo y que para mi es como una fila de focos parpadeando, es el switch a media función. Seguramente en caso de tener una suite más extensa, como la de ezamudio habría marcado una diferencia, ya que como --creo que a estas alturas-- todos sabemos: mientras más específicas las pruebas, más genérico el código.

Y gracias por compartir el código con la comunidad!!

--Alfred

@RSa... algo como un...

@RSa... algo como un...  ?

Imagen de ezamudio

switch y pattern matching

En este caso yo no usé switch ni pattern matching, ni siquiera en la versión de Scala, por lo que ya mencioné: las condiciones que evalúo son sobre distintas variables, a lo mucho tengo if-else sobre la misma variable, y además las comparaciones son numéricas (que si un número es mayor o menor a otro, etc). Ni el switch de Groovy ni el pattern matching en Scala permiten hacer comparaciones numéricas así (que si X es mayor a 0 por ejemplo), al menos de manera directa, hay que hacer algo de código adicional (un case class en el caso de Scala, o Matcher en el caso de Groovy).

algoritmo convertir numero a letras