Los desafíos de Rosetta Stone Code son desafíos en los que debes completar la tarea en tantos idiomas como sea posible.
El reto
Se le darán dos números n
y s
, en una lista, como entrada. El n
será un número que debe contar hasta. n
será cualquier número del 2 al 10000. s
será el número que omita al contar hasta n
. s
será de 1 a n
/ 2 (la mitad de n
). Si n
fue 600, s
no podría ser mayor a 300. Debe generar todos los números hasta n
saltar s
comenzando con 1. Cada número de salida debe estar en una nueva línea, en la misma línea separada por espacios o en una lista.
El giro
Para este Rosetta Stone Code Challenge, cada fragmento en el que escriba el programa debe tener la misma longitud. es decir: si su programa Python tiene 56 caracteres, entonces su programa Java también debe tener 56 caracteres. Los espacios y comentarios no cuentan como caracteres. Los nombres de variables / funciones no pueden tener más de 10 caracteres. Recuerde, esto también es un código de golf, así que trate de mantener su código corto.
Ejemplo
Entrada
[100, 7]
Salida
1
8
15
22
29
36
43
50
57
64
71
78
85
92
99
Nota: La salida puede estar en una sola línea separada por espacios o formato de lista
Criterio ganador
El ganador se decidirá por esta fórmula:
numberOfLanguages/codeSize
codeSize
no es el tamaño total del código, sino el tamaño promedio del código de un fragmento.
El usuario con la puntuación más alta ganará. es decir: una respuesta con 4 idiomas y un tamaño de 31 bytes ganaría una respuesta con 7 idiomas y un tamaño de 80 bytes. Se elegirá un ganador a las 2:00 UTC del 9 de marzo de 2015.
Marcador
Todas las puntuaciones se redondean a la milésima más cercana.
Maltysen - 14 idiomas / 24 caracteres = 0.583 ---- Ganador
mbomb007 - 15 idiomas / 29 caracteres = 0.517
Jakube - 5 idiomas / 11 caracteres = 0.455
Teun Pronk - 4 idiomas / 51 caracteres = 0.078
captncraig - 1 idioma / 56 caracteres = 0.018
fuente
NumberOfLanguages / CodeSize
?Respuestas:
14 idiomas - 24 bytes = 0.58333333333
** Facepalm **. Olvidé no contar el espacio en mi respuesta de Python. Entonces estoy en 24 bytes ahora.
Aprendí muchos idiomas nuevos de este desafío, que probablemente usaré en golf. Un sitio que realmente me ayudó a encontrar estos idiomas fue http://www.tutorialspoint.com/codingground.htm . Simplemente no espere que mis programas se ejecuten en él, requiere un formato de programa completo, y simplemente lo usé para aprender sobre los idiomas y usé otros REPL para ejecutarlos.
1. Pyth :
Pyth no tiene una función de rango por paso a diferencia de Python, por lo que usé el rango regular y
picado(gracias @Jakube) utilicé el operador mod.Define una función g (hasta, paso)
2. Golfscript:
Este es mi primer programa de golfscript. Probablemente no sea la mejor manera de hacerlo.
3. Bash Utils:
Utiliza el comando seq que tiene INCREMENT param.
4,5. Python, sabio :
Código autoexplicativo.
Sage es un lenguaje basado en Python usado para cosas de matemáticas.
6. Mathematica:
De nuevo, se explica por sí mismo.
7. Matlab:
Utiliza la notación de rango de Matlab y define una función anónima.
8. Livescript:
Al igual que Coffeescript, es un derivado de JS. Tiene una sintaxis de rango genial. Notación de flecha de nuevo.
9. Erlang:
Erlang aprendido solo por esto. Bastante autoexplicativo, define la función r.
10. F #:
Como obvio, las definiciones de funciones de F # son como variables.
11. Haskell:
La notación de rango de Haskell le da los dos primeros en el rango para el incremento, y no un incremento explícito.
12. R:
Lenguaje muy interesante, incluso si las definiciones de funciones son un poco detalladas.
13. Julia:
Lenguaje impresionante , se utilizará para jugar al golf en el futuro.
14. CJam:
Como mi vieja respuesta de golfscript, excepto con el análisis y el relleno de entrada.
fuente
Mmhdcr1GH100 7
no funciona como pensé que lo haría.M
define una funcióng
, a la que debe llamar primero. TratarMmhdcr1GHg100 7
.%
Es lo mismo que Python[::a]
. No hay necesidad de cortar. Y estoy bastante seguro de que su rango debe incluirG
, por ejemplo, el usor1hG
.7
. Negativo no se ve bien.23 idiomas, 15 caracteres = 1.5333333
fuente
jrojcoq-]m[m]uN
sería una versión burlesca que genera un número y no envía datos ficticios a la pila solo para volver a mostrarlos.5 idiomas 11 caracteres = 0.4545
Tomó este desafío como una oportunidad para ver algunos lenguajes nuevos (CJam, Burlesque, zsh, gs2). Primera vez que trabajo con estos idiomas.
El método detrás de la creación de la salida es diferente en casi cada idioma. Solo el método CJam y gs2 son idénticos. Los 4 métodos son, crear un rango [1, 100] y cortarlo con módulo (CJam y gs2), crear el rango [1, ..., 100] y filtrar elementos que son 1 mod 7 (Pyth), creando el rango [1, ..., 100], divídalo en fragmentos de len 7 y use el primer elemento de cada fragmento (Burlesque), y cree la secuencia directamente (zsh).
Traté de diseñar cada programa de tal manera que parezca perfecto para alguien que no está familiarizado con el idioma.
edición 1: agregado burlesco, 2 idiomas anteriores con 10 caracteres = 0.2
edit 2: gs2 agregado, 3 idiomas anteriores con 11 caracteres = 0.2727
edit 3: zsh agregado, 4 idiomas anteriores con 11 caracteres = 0.3636
CJam
Pruébalo línea con la entrada
100 7
.Burlesco
Además de zsh, este es el único programa de golf. Burlesque es bastante impresionante, tiene una amplia gama de funciones diferentes, como
ro
. Lamentablemente, no hay nada como el[::a]
operador de corte Python .No hay un intérprete en línea, pero puede obtener Burlesque aquí. . Como Burlesque no admite funciones o IO, primero debe colocar los valores en la pila, como
100 7 jrojcoq-]m[
gs2
Sí, esto es solo 11 caracteres. En gs2 cada byte tiene un significado diferente. Pero debido a que escribir en bytes es bastante difícil y no es divertido, también puede escribir en mnemotécnicos, que puede compilar en el código gs2 real. El código gs2, que se ejecuta es
o como volcado hexadecimal:
Dato curioso: no escribí en mnemotecnia, sino directamente los números del volcado hexadecimal.
Puede probarlo descargando el compilador . Compile el archivo mnemonics con
python gs2c.py < mnemonics.txt > compiled
o simplemente cópieloW@!'."B !4+
en un archivo llamadocompiled
y luego ejecútelo conecho 100 7 | python gs2.py compiled
.La mnemotecnia es bastante autoexplicable, pero esto es lo que está sucediendo en la pila.
Por cierto, son posibles 8 bytes, quizás incluso menos.
editar: bifurqué gs2, manipulé ligeramente un comando e hice una solicitud de extracción, que ya está fusionada. Entonces, la tarea se puede hacer con 6 bytes: lo
read-nums extract-array swap range1 mod unlines
que se traduce en57 0e 42 2f 34 2b
, que es incluso mejor que la pyth óptima.zsh
Esto define una función
f
, que crea una secuencia. Para usarlo en Windows, instalé el shell babun , donde simplemente puede escribir estos comandos. Simplemente escribaf() seq 1 $2 $1
y en la siguiente líneaf 100 7
.Primero intenté escribir esto en Bash, pero allí tienes que escribir
()
alrededor del bloque de código, comof() ( seq 1 $2 $1 )
. Entonces cambié a zsh en su lugar.Pyth
Esto realmente duele, ya que, por supuesto, veo el obvio golf de 7 bytes. Puede probarlo en línea con la entrada
100, 7
.fuente
100ro7en?i
que produce{8 15 22 29 36 43 50 57 64 71 78 85 92 99}
. Puedes ir aún más corto usando7mo14.+?i
.[::a]
comando en Python.EveryNth([1,2,3,4,5,6,7,8, 9], 3)
vuelve[3, 6, 9]
y no[1,4,7]
, como se requería en este desafío.en
obras son diferentes de lo que cabría esperar de otros idiomas. Maldigo el día que lo implementé de esta manera: D. Las soluciones comunes para eso son usar elmo
que mencioné anteriormente o usarco
como en el9ro3co)-]
que produce{1 4 7}
. PD: Tenía un intérprete en línea en los viejos tiempos, pero mi nuevo proveedor de alojamiento ya no es compatible con CGI, pero podría convencer a alguien que tenga un servidor con soporte de CGI para alojar nuevamente al intérprete en línea :)15 idiomas, 29 caracteres = (15/29) ≈ 0.517
He arreglado todo mi código hasta ahora. Ahora estoy buscando otros idiomas.
1. Python (24 de golf)
2.> <> (Pescado) - (19 + caracteres basura)
Este programa asume que el número y el tamaño del paso estaban en la pila de antemano, empujados en ese orden. Usos
ao
para imprimir nuevas líneas entre números.Explicación (código, pila después de la ejecución del código anterior, comentarios):
3. APL (19 de golf)
Golfed . Pega aquí: http://ngn.github.io/apl/web/
Llamar así:
7 f 100
. Esto crea una matriz de 1 a n, multiplica cada elemento por s, agrega uno a cada elemento y luego toma los primeros elementos ceil (n / s).4-7. Haskell , Clean , Curry , Frege (14 golf - los espacios no cuentan)
Este programa es válido en Haskell, Clean, Curry y Frege.
Golfizado Ejecutar aquí: https://ideone.com/Ii0pgP
8. Scotch (15 de golf)
9. Jaskell (24 jugadores de golf): construido según la documentación.
Filtre la lista donde el resto del módulo s es 1.
10. CoffeeScript (25 golf) Corre aquí
11. R (25 golfed) Corre aquí: http://www.r-fiddle.org/#/fiddle?id=k3vRnCOW&version=2
12. Cobra (26 golfistas)
13. S-Lang (28 golfizados)
14. Boo (29)
No estoy seguro si la función de rango puede tomar 3 parámetros ...
15. Funge-98 (29, ¿alguna ayuda para jugar al golf?)
Tan cerca como pude llegar a mi> <> programa. Como no hay instrucciones de pila "rotar", tuve que usar "poner" y "obtener" en su lugar. Befunge realmente necesita algunas instrucciones de rotación / cambio de pila, o incluso una instrucción "sobre".
Explicación:
NO SE UTILIZA EN EL MOMENTO, DEMASIADO LARGO : mi puntaje mejora al no incluirlos.
Ruby (35) Corre aquí: http://ideone.com/yFZELR
PowerShell (38)
Perl (39) Ejecutar aquí: https://ideone.com/HGoleN
fuente
i
, lo que empuja a un personaje. Además, mientras estamos en el tema, ¿es aceptable que el programa se bloquee después de completar con éxito su salida (haciendo estallar una pila vacía)?seq.int()
. Funciona igual querange
en Python. Entonces puedes llegar al 29.4 idiomas 51 caracteres = (4/51) = 0,0784313725490196
No tengo idea de cuántos números después de la coma quieres, así que lo dejaré así.
Todos los fragmentos tienen 51 caracteres cuando elimina todo el espacio en blanco.
Trabajando en código más y más corto pero es un comienzo
Iniciar sesión
Respuesta inicial
Enviado Python (3.4), Lua (5.1) y Javascript.
Puntuación: 3/51 = 0,0588235294117647
Actualización 1 Puntaje
rubí agregado
: 4/51 = 0,0784313725490196.
Python 3.4
Lua 5.1
Javascript
Rubí
fuente
di _reque(s) _reque(n) gl a=1 while $a<=$n{ di $a gl a=$a+$s }
1 idioma - 56 caracteres = 0.01785714285
piet (2x28) -
fuente