MV Coders on fire

Khanser

#30 Si tiene compilador o intérprete, es apto para usarse ya sea php, java, c, lisp, haskell o lo que sea xD

Khanser

Bueno, pues damos por concluida la ronda de votaciones teniendo como ganador al kata de Números Romanos.

El programa a realizar debe admitir como parámetro de entrada un número entero positivo mayor que 0 y menor que 4000. Los romanos tenian como regla no repetir más de 3 veces seguidas un símbolo numérico, por lo que no se puede poner MMMM para el 4000, así que no se puede poner.

Se usarán los símbolos siguientes:

  • I -> 1

  • V -> 5

  • X -> 10

  • L -> 50

  • C -> 100

  • D -> 500

  • M -> 1000

Reglas:

  • Se pueden repetir hasta un máximo de 3 veces seguidas los símbolos I, X, C y M

  • No se pueden repetir los símbolos V,L,D

  • Elementos de sustracción I -> V,X | X -> L,C | C -> D,M

  • No pueden sustraer de los símbolos V, L y D

Más adelante sacaremos los juegos de prueba.

1 respuesta
Merkury

#32 Una cosa, haciéndolo en una web ¿podemos utilizar Jquery?

1 respuesta
EnZo

#33 Para que quieres usar JQuery? Para la UI?

1 respuesta
Merkury

#34 Con Jquery se pueden hacer mas cosas que la UI eh :P

1 respuesta
EnZo

#35 Lo sé. Pero no entiendo que sentido tiene usar jquery para realizar ese kata. Cuando con javascript nativo puedes hacerlo. Y ya se que todo lo que hagas con jquery puedes hacerlo con js nativo. Pero te ahorra mucho tiempo manejando el dom de un documento. Pero para este caso no se que utilidad le vas a dar...

1 respuesta
Merkury

#36 Pues basicamente que me gusta mas jquery que Javascript sin mas XD

2 respuestas
EnZo

#37 Ok ok xD. Pero no vas a usar mucho jquery en realidad. Quizá para obtener los datos de entrada mediante un form y representarlos luego, pero poco más. Lo demás será todo js nativo.
Si me hubieses dicho mootools que su core extiende el objeto String y el Number pues no habria preguntao... :P

1 respuesta
Merkury

#38 Ya pero mootools no me acabo de apañar XD

B

Si el código es guarro pero funciona, pasa algo? Aquí el menda es el rey de las chapuzas...

1 respuesta
Merkury

#40 La cosa es que sea legible que luego los compartiremos.

#42

1 respuesta
GreyShock

#37 Yo te entiendo, yo uso jQuery hasta para ir al baño xD Es un error de optimización, pero es que es taaaan bonito y tan cómodo que no concibo la vida JS sin él xD

1 1 respuesta
elkaoD

¿Se puede postear ya? Implementado en Common LISP en 5 min, pero no sé si postearlo por no spoilear a otros karatekas.

B

#41 hombre, legible es, pero no es ni elegante ni fino ni nada de eso...

B

Yo lo tengo ya, creo que funciona bien aunque no me he puesto a probarlo muy a fondo.

Estoy oxidadísimo en C así que es posible que haya hecho alguna burrada :\

#46: A mí me parece molón porque usas algo que desconozco, y eso siempre mola xDD. A ver si me animo a hacerlo en Erlang, que estoy aprendiendo.

EDIT: https://github.com/SantiMunin/MV-Coders-on-fire/tree/master/1_decimal_to_roman

Aquí podéis verlo en C y en Erlang :P

2 respuestas
elkaoD

#45 ok entonces posteo yo también.

Recomiendo no ver el código si aún no habéis hecho la kata porque es un spoiler total y me gustaría ver las implementaciones del resto. No sé si hay otra forma de hacerlo en realidad (no he buscado nunca la "solución" ), pero esta la pensé hace mucho tiempo y me parece de lo más simple. La gente se suele complicar mucho cuando es facilísimo.

A lo mejor a alguien le parece cutre que no use tabla de símbolos a lo #45 pero... paso xD A lo mejor luego edito con tabla de símbolos.

Common LISP

Ej. uso:
(romanos 1923)
Salida.
(M C M X X I I I)

EDIT: Venga va, como era obvio al final me he picado y lo he hecho con tabla de símbolos.

Common LISP con tabla
3 respuestas
EnZo

#46 Me cuesta infinito entender tu algoritmo :(

1 respuesta
elkaoD

#47 supongo que no entiendes LISP o no entiendes la recursividad. Es más fácil de lo que parece. Te explico el algoritmo sin tabla:

spoiler

El algoritmo con tabla es lo mismo, pero buscando en la tabla el símbolo correcto.

EDIT: Comprobando tu código #45 veo que también usas mi mismo concepto de no usar casos especiales (a la peña en mi clase se le iba mucho la cabeza tratando 9, 90, etc. xD), pero no entiendo muy bien por qué divides y no simplemente restas :S ¿Es por meter directamente X veces el mismo símbolo en lugar de en varios pasos? Por cierto, ojo con tu symbol, que debería ser [3] y no [2].

2 respuestas
B

#48: Te refieres a la línea 47 o a la 56?

Si es por la 47, es para meter todos los simbolos del mismo tipo de una vez. Por ejemplo, si tengo 3500, pues meto 3 veces M y después me quedo con el resto de dividir entre 1000, que sería 500.

Lo del symbol por qué sería 3? Por la mierda está del "\0"? Qué puta mierda es C en temas de comodidad colega xDDD

Efectivamente se me pasó, como ya digo yo de C sé lo justo de utilizarlo en varias asignaturas, pero nunca lo he utilizado para hacer mis proyectos (que es donde más aprendo yo). De hecho mi idea es aprender herramientas con esto, no hacerlo con lo que ya domino.

Nucklear

Me voy a animar a hacer el reto en python, así practico un poco. Probablemente sea una guarrada lo que vaya a hacer no me peguéis xD

Khanser

Yo lo he hecho en

java

:)
Todo straight code, nada de OO xD

eisenfaust

#46 Se ve que el corolario de Robert Morris se cumple xD

(defun int->roman (num) (format nil "~@r" num))
2 2 respuestas
Nucklear

Aqui va lo mio en python:

spoiler

#55 ¿No? A mi en local me está funcionando. 0W y 0E en Eclipse y hace lo que quiero

1 respuesta
EnZo

#48 Mucho mas claro ahora :) Gracias por la aclaracion :P

Khanser

Edit: #53 Mirándolo mejor, me he equivocado, parece que sí que funciona :)

2 respuestas
Nucklear

#55 Ok xD

LOc0
PHP

#58

PHP_no_hostil
PHP_inverso

Salu2 ;)

2 1 respuesta
Khanser

#57 Profavó, arregla un poco el código para que se pueda leer por humanos :D

1 respuesta
elkaoD

#52 no me puedo creer que format formatée en números romanos :O Ni se me pasó por la cabeza.

Por cierto, ¿ves alguna cagada en mi código? Como novato en Lisp no sé si "sobrecomplico" las cosas. Nótese que he intentado ser recursivo antes que usar whiles y demás (prefiero funcional puro.)

PD: entendiste mal el corolario. El "including Common Lisp" no se refiere a añadir a "C or Fortran" si no a "program". O así lo interpreto yo.

1 respuesta
Gusete

#52 uhhhh... sexy! :D