El objetivo de Rosetta Stone Challenge es escribir soluciones en tantos idiomas como sea posible. ¡Muestra tu programación multilingüismo!
El reto
Su desafío es implementar un programa que ingrese una lista de números y genere la regla utilizada para generar cada número sucesivo de la serie, en tantos lenguajes de programación como sea posible . Puede usar cualquier tipo de función de biblioteca estándar que tenga su idioma, ya que esto es principalmente un escaparate de idiomas.
¿Qué es una "serie"?
Una serie es una lista ordenada de enteros. Cada número sucesivo de la serie se puede generar aplicando una regla simple al número anterior de la serie. En este desafío, la regla consiste en multiplicar el número por una constante y luego agregar una segunda constante. Ambas constantes pueden ser cualquier número entero. El objetivo de este desafío es generar esas dos constantes.
Para la serie 2 5 11
, la regla se puede escribir como 2 1
. Esto significa que cada número es el número anterior, multiplicado por 2, más 1. Un hecho importante es que la mayoría de las series tienen exactamente una regla. Algunas series tienen un número infinito o ninguno, pero no tendrá que lidiar con esto.
Entrada
La entrada será una lista de tres enteros diferentes que son los números en la secuencia. Los números pueden ser espacios, comas o líneas nuevas delimitadas, pero especifique cuál. Voy a ser flexible en esta limitación porque ciertos idiomas pueden tener restricciones de entrada. Aquí hay cuatro ejemplos de entrada:
0 7 14
2 5 11
2 0 -4
5 -19 77
Salida
La salida será dos enteros que representan la regla utilizada para generar la serie. El primer número será la constante multiplicativa, mientras que el segundo número será la constante aditiva. El formato de la salida puede ser espacio, coma o nueva línea delimitada. Soy flexible en esta limitación también. Estos son los ejemplos correspondientes de salida:
1 7
2 1
2 -4
-4 1
El criterio objetivo ganador
En cuanto a un criterio ganador objetivo, aquí está: cada idioma es una competencia separada en cuanto a quién puede escribir la entrada más corta, pero el ganador general sería la persona que gana la mayoría de estas subcompeticiones. Esto significa que una persona que responde en muchos idiomas poco comunes puede obtener una ventaja. Code-golf es principalmente un factor decisivo para cuando hay más de una solución en un idioma: la persona con el programa más corto obtiene crédito por ese idioma.
Reglas, restricciones y notas
Su programa se puede escribir en cualquier idioma que existiera antes del 9 de abril de 2012. También tendré que confiar en la comunidad para validar algunas respuestas escritas en algunos de los idiomas más infrecuentes / esotéricos, ya que es poco probable que pueda evaluar ellos.
Tabla de clasificación actual
Esta sección se actualizará periódicamente para mostrar la cantidad de idiomas y quién lidera cada uno.
- AWK (32) - mellamokb
- bash (31) - Peter Taylor
- Befunge (29) - Howard
- bc (39) - kernigh
- brainfuck (174) - CMP
- C (78) - l0n3_shArk
- C ++ (96) - leftaroundabout
- Lisp común (88) - kernigh
- Capilla Cray (59) - Kyle Kanos
- csh (86) - kernigh
- Cuda (301) - Leftaroundabout
- dc (30) - kernigh
- LOTE DE DOS (54) - mellamokb
- Elemento (27) - Howard
- es (95) - kernigh
- Factor (138) - kernigh
- Felix (86) - kirbyfan64sos
- Fortran (44) - Kyle Kanos
- Ir (101) - Howard
- GolfScript (16) - Howard
- Golflua (44) - Kyle Kanos
- Haskell (35) - Leftaroundabout
- J (23) - Gareth
- Java (141) - Howard
- JavaScript (47) - mellamokb
- Julia (71) - ML
- Lua (51) - Howard
- Mercurio (319) - Leftaroundabout
- MoonScript (48) - kirbyfan64sos
- Nimrod (146) - Leftaroundabout
- Búho (22) - res
- Pascal (88) - leftaroundabout
- Perl (57) - Gareth
- PHP (61) - mellamokb
- PicoLisp (72) - kernigh
- Piet (56) - ML
- PostScript (61) - Howard
- Python (40) - Howard
- Q (36) - tmartin
- QBasic (34) - mellamokb
- R (50) - res
- Rubí (44) - Howard
- Scala (102) - Gareth
- SQL (57) - Aman ZeeK Verma
- TI-83 BASIC (25) - mellamokb
- Máquina de registro ilimitada (285) - Paxinum
- VBA (57) - Gaffi
- Espacio en blanco (123) - res
- zsh (62) - kernigh
Ranking de usuarios actuales
Los rangos iguales se ordenan alfabéticamente.
Howard (9): Befunge (29), Element (27), Go (101), GolfScript (16), Java (141), Lua (51), PostScript, (61) Python, (40) Ruby (44)
kernigh (8): bc (39), Common Lisp (88), csh (86), dc (30), es (95), Factor (138), PicoLisp (72), zsh (62)
a la izquierda (6): C ++ (96), Cuda (301), Haskell (35), Mercurio (319), Nimrod (146), Pascal (88)
mellamokb (6): AWK (32), DOS BATCH (54), JavaScript (47), PHP (61), QBasic (34), TI-83 BASIC (41)
Gareth (3): J (23), Perl (57), Scala (102)
Kyle Kanos (3): Capilla Cray (59), Fortran (44), Golflua (44)
res (3): Búho (22), R (50), Espacio en blanco (123)
kirbyfan64sos (2): Felix (86), MoonScript (48)
ML (2): Julia (71), Piet (56)
Aman Zeek verma (1): SQL (57)
CMP (1): brainfuck (174)
Gaffi (1): VBA (57)
l0n3_shArk (1): C (78)
Paxinum (1): máquina de registro ilimitada (285)
Peter Taylor (1): fiesta (31)
tmartin (1): Q (36)
fuente
code-golf
ycode-challenge
etiquetas .Respuestas:
GolfScript, 16 caracteres
La entrada se da como una lista separada por espacios.
JavaScript, 56 caracteres
La entrada se da en el indicador.
Ruby, 44 caracteres.
La entrada se da aquí como una lista separada por comas.
Python, 40 caracteres
La entrada está nuevamente separada por comas.
Java, 141 caracteres
Entrada separada por nueva línea.
Lua, 51 caracteres
Entrada separada por nueva línea.
Go, 101 caracteres
Entrada separada por nueva línea.
Fortran, 90 caracteres
Entrada separada por nueva línea.
Befunge, 29 personajes
PostScript, 61 caracteres
Búho, 23 personajes
Entrada separada por nueva línea.
Elemento , 27 caracteres.
Entrada separada por nueva línea.
fuente
Brainfuck - 174
Piet - 82?
No estoy seguro de cómo medir el golf competitivo aquí. Voy a ir con el tamaño total de la imagen (en codeles) El mío es 41x2:
Befunge - 34
Inglés - 278
No estoy seguro de si esto cuenta, pero pensé en intentarlo. Es notablemente difícil describir incluso un algoritmo simple con precisión. Desearía que el inglés admitiera algún tipo de símbolo de agrupación para establecer la precedencia.
fuente
D:\Software\Programming\Piet\npiet-1.3a-win32>npiet series2.png
? 5
? -19
? 77
05
La solución debería ser-4 1
QBasic, 42
Requiere entrada con comas, salidas con espacios (¿está bien?)
Mercurio, 319
Haskell
8581Ahora entradas con espacios, salidas con líneas nuevas.
C, 80
C ++, 96
Nimrod, 146
Entrada con líneas nuevas, salida con coma.
Este no contará, pero creo que todavía encaja de alguna manera:
Teorema matemático, 713 caracteres de LaTeX
Mientras estamos escribiendo
:=
definiciones ...Pascal,
9088Cuda, 301
fuente
m
y reutilizandoc
, y otros dos utilizando enc-=b;c/=b-a;
lugar dec=(c-b)/(b-a);
.scanf()
cadena de formato.AWK, 35 caracteres
2 0 -4
aC, 39 caracteres
z=f(2, 0, -4)
bc
expresión. Despuésbc
leer el archivo fuente, lee la entrada estándar. Es por eso que la entrada debe verse como una llamada de función.bc
, que requiere una nueva línea después de{
.Lisp común, 88 caracteres
2 0 -4
csh, 86 caracteres
2 0 -4
csh
es el único idioma para el que cuento la nueva línea al final del archivo. Esto se debe a quecsh
nunca ejecuta el último comando a menos que haya nueva línea allí.set i=($<)
no funciona, porque$<
no tiene división de palabras.dc, 30 caracteres
2 0 _4
donde_
está el guión bajo.es, 95 caracteres
2 0 -4
es
es el caparazón extensible de Paul Haahr y Byron Rakitzis.Factor, 138 caracteres
2 0 -4
PicoLisp,
7472 caracteres2 0 -4
a(read)b(read)c(read)
ar read a(r)b(r)c(r)
.TI-83 BASIC,
6361 caracteres2
ENTER0
ENTER¯4
ENTER, donde¯
es el menos unario de la calculadora.→
(la flecha derecha) cuenta como U + 2192. Por ejemplo, la calculadora cuentaInput A
como 2 caracteres, pero yo cuentoInput A
como 7 caracteres. También cuento:
como 1 personaje.zsh, 62 caracteres
2 0 -4
fuente
AWK (32)
Demostración: http://ideone.com/kp0Dj
golpe (38)
Demostración: http://ideone.com/tzFi8
DOS / LOTE (54
55)Toma los parámetros como una lista de argumentos separados por espacios.
Java (143
185)JavaScript (48
6167)Demostración: http://jsfiddle.net/BT8bB/6/
PHP (61
77)Demostración: http://ideone.com/CEgke
QBasic (34)
TI-83 Basic (25
41)Sí, el paréntesis derecho faltante es a propósito. Es una técnica de optimización bien conocida que cerrar los paréntesis antes de una operación STO no es necesario en la programación básica de TI-83.
fuente
p
no está definido. ¿La especificación JS dice que los argumentos de la función deben evaluarse antes de que se resuelva la función?Espacio en blanco, 123
E / S está separada por nueva línea. (Para obtener el código fuente, ingrese al modo de edición y copie el espacio en blanco entre las etiquetas de formato previo; o, vea el en línea formato previo ejemplo en en Ideone ).
Explicación, donde S, T, L representa espacio, tabulación, salto de línea:
R, 50
La E / S está separada por espacios.
Búho
--- 22 ---
E / S está separada por nueva línea.
--- 19 --- (si esta versión está permitida; pero creo que es una trampa, ya que \ es el código ejecutable):
La E / S está separada por espacios. Uso de la línea de comandos:
owl prog 5 19\ 77
(el \ actúa como un postfix unario menos en Owl).fuente
J, 23 caracteres
Uso:
Los números negativos están representados por guiones bajos en J.
PHP, 88 caracteres
Scala, 102 caracteres
Perl, 57 caracteres
Requiere la opción '-p', para lo cual he agregado 2 caracteres. Asume que la entrada es válida para guardar algunos caracteres.
Todas mis respuestas toman números separados por espacios.
fuente
1!:1]3
a la derecha de la expresión leerá la entrada de STDIN. Creo que ha habido discusión sobre meta o en comentarios a algunas respuestas J sobre si esto debería permitirse o no. Soy algo ambivalente: disfruto descubriendo cómo hacer que J haga lo que quiero en el espacio más pequeño, tomaré la penalización de 6 caracteres por la entrada de STDIN si eso es lo que todos quieren.(],1{x-0{x*])%~/2-/\x=:".1!:1]1
parece estar bien en el modo de consola.)($a=($_[1]-pop)/($_[0]-$_[1])).$/.($_[1]-$_[0]*$a)
PHP,
74,72, 69Cuando la entrada se pasa como argumentos:Ahora, como sugirió @mellamokb, usando $ n = $ argv:C,
77, 78^ no funciona así, estas son las cosas: [gracias a @ugoren por haberlo notado]fuente
fscanf
yscanf
sin espacios. ¡Increíble!$argv
, es decir,$n=$argv
al principio?scanf
haría primero yd=..
luegob-d*a
?VBA, 57 caracteres
( Esto es básicamente lo mismo que las otras funciones 'BÁSICAS', pero ya no vi ningún envío de VBA ) .
fuente
Debug.?y;b-a*y
bash (42 caracteres)
Golpe puro:
bash (31 caracteres)
Desplazándose a otra cosa:
(Basado en la implementación de Howard OWL )
fuente
Este es un código (no optimizado) para la máquina de registro no limitada, que se describe aquí: http://www.proofwiki.org/wiki/Definition:Unlimited_Register_Machine
La entrada debe estar en el registro 1,2 y 3, y la salida estará en el registro 1, 2 después de que el programa haya terminado. Los números no negativos y no enteros no se manejan, pero las entradas 0,7,14 y 2,5,11 se manejan correctamente.
Zero[8] Trans[2,11] Jump[3,11,7] Succ[11] Succ[8] Jump[11,11,3] Zero[5] Trans[1,12] Jump[2,12,13] Succ[12] Succ[5] Jump[12,12,9] Zero[17] Trans[8,13] Jump[13,17,25] Zero[16] Trans[5,14] Jump[13,14,22] Succ[14] Succ[16] Jump[14,14,18] Succ[9] Trans[16,13] Jump[17,17,15] Zero[6] Zero[20] Jump[9,6,40] Zero[7] Trans[1,21] Jump[20,7,36] Succ[21] Trans[21,19] Trans[19,21] Succ[7] Jump[7,7,30] Trans[21,18] Trans[18,20] Succ[6] Jump[6,6,27] Trans[20,4] Zero[10] Trans[4,15] Jump[2,15,47] Succ[15] Succ[10] Jump[15,15,43] Trans[9,1] Trans[10,2]
EDITAR: eliminando paréntesis y acortando nombres de instrucciones:
URM 285
Z8 T2,11 J3,11,7 S11 S8 J11,11,3 Z5 T1,12 J2,12,13 S12 S5 J12,12,9 Z17 T8,13 J13,17,25 Z16 T5,14 J13,14,22 S14 S16 J14,14,18 S9 T16,13 J17,17,15 Z6 Z20 J9,6,40 Z7 T1,21 J20,7,36 S21 T21,19 T19,21 S7 J7,7,30 T21,18 T18,20 S6 J6,6,27 T20,4 Z10 T4,15 J2,15,47 S15 S10 J15,15,43 T9,1 T10,2
fuente
DOS-BATCH, 98
Entrada en líneas separadas
Bash, 51
Ejemplo:
sh prog.sh 2 0 -4
(argumentos separados por espacios)Perl, 84
Java, 297
Entrada separada por espacios, salida separada por espacios.
SQL, 57
Esta es una entrada triste, pero 'solo' resuelve el propósito. La consulta vincula la entrada en tiempo de ejecución 1,2,3 son variables en orden de entrada.
fuente
bash
solución, solo quería sugerirle que podría haber eliminado todos esos espacios adicionales y haber guardado 6 caracteres.Q, 36
uso
fuente
Fortran 44
La entrada estará en una sola línea (coma o espacio separado)
Capilla Cray 59
La entrada será en una sola línea, sin nueva línea (agregue 2 caracteres para eso usando
writeln
en lugar dewrite
).Golflua 44
Entrada delimitada de nueva línea, salida delimitada por espacios
fuente
Julia, 71 caracteres
Entrada y salida delimitadas por espacios.
i,j,k=int(split(readline(STDIN)));println("$(l=div(k-j,j-i)) $(j-i*l)")
Ejemplo de entrada y salida:
Piet
8660 6056 codeles (14x4), codel tamaño 10 para una mejor visibilidadDe hecho, podría reducir la cantidad de codeles en un enorme 35%. No esperaba un resultado tan bueno. Codificar este programa al revés fue, como esperaba, bastante exitoso. Dudo que pueda ser más corto que esto, pero estaría realmente interesado si alguien pudiera encontrar una solución más pequeña.
El desafío no establece si el programa tiene que detenerse después de mostrar el resultado, por lo que mi programa más pequeño (56 codel) debería ser válido. Simplemente vuelve al principio después de mostrar el resultado, solicitando un nuevo triplete de enteros. Debido al apretado empaquetado, no hay lugar para la salida de dos caracteres de nueva línea, pero eso no es problema con el intérprete npiet, porque siempre imprime un '?' si espera entrada
Hay dos tamaños posibles para construir una versión en bucle, pero una versión que se ejecuta solo una vez solo es posible en un programa que tenga al menos 64 codeles (16x4) de gran tamaño. Las versiones a continuación muestran el motivo. Quizás también sea interesante para aquellos que están familiarizados con Piet.
La versión final de 56 codeles más compacta, con un bucle :
Segunda versión (60 codeles), con un bucle
Si la versión 56 codel está en contra de las reglas, aquí está la versión final 64 codel, que se ejecuta solo una vez :
Mi primera versión (86 codeles)
La entrada y la salida están delimitadas por nueva línea.
Ejemplo de entrada y salida:
Para las versiones en bucle, parece un poco más feo:
Elegí nueva línea como delimitador porque la codificación ASCII 10 (\ n) obviamente solo necesita 7 códeles, en comparación con ASCII 32 () que necesita 8 códeles o incluso ASCII 40 (,) que necesita 9 códeles.
La codificación hacia atrás desde el resultado hasta la primera entrada es una excelente manera de reducir el uso de codeles para las operaciones ROL. El orden de la pila al principio y al final se conoce, el resto se hace fácilmente a mano.
Aquí hay una versión de texto del programa 64 codel (con pila), en mi taquigrafía inventada. Los programas más cortos simplemente no terminan sino que vuelven al principio.
fuente
MoonScript (48 caracteres, entrada delimitada por nueva línea, salida delimitada por espacios)
Felix (86 caracteres, entrada delimitada por nueva línea, salida delimitada por comas)
Julia (84 caracteres, entrada delimitada por espacios, salida delimitada por espacios)
fuente
julia file.jl
del mismo error?