Dada una lista de enteros separados por espacios, su tarea es encontrar el siguiente entero en la secuencia. Cada número entero en la secuencia es el resultado de aplicar una sola operación matemática ( +
, -
, *
o /
) al entero anterior, y cada secuencia se compone de un número variable de dichas operaciones (pero no más de 10). Ninguna secuencia será más larga que la mitad de la secuencia de enteros, por lo que cada secuencia de operaciones aparecerá al menos dos veces para su confirmación.
La entrada será a través de stdin (o prompt
para soluciones de JavaScript).
Aquí hay algunos ejemplos explicativos.
Entrada:
1 3 5 7 9 11
Salida:
13
Bastante fácil, este. Todos los valores son valores anteriores +2
.
Entrada:
1 3 2 4 3 5 4 6 5 7 6
Ouput:
8
Dos pasos en esta secuencia, +2
entonces -1
.
Entrada:
2 6 7 3 9 10 6 18 19 15 45 46
Salida:
42
Tres pasos - *3
, +1
, -4
.
Casos de prueba
Aquí hay algunos casos de prueba más:
Entrada:
1024 512 256 128 64 32 16
Salida:
8
Entrada:
1 3 9 8 24 72 71 213 639
Salida:
638
Entrada:
1 2 3 4 5 2 3 4 5 6 3 4 5 6 7
Salida:
4
Entrada:
1 2 4 1 3 9 5 8 32 27 28 56 53 55 165 161 164 656 651 652 1304
Salida:
1301
Tengo una solución Scala sin golf (42 líneas) que publicaré en un par de días.
Este es el código de golf: la respuesta más corta gana.
Respuestas:
Golfscript,
203138 caracteresEsto usa mucho más
if
s que un programa Golfscript estándar, y su funcionamiento es bastante críptico, por lo que aquí hay una versión comentada (pero no descartada que no sea mediante la adición de espacios en blanco y comentarios):Mi presentación original fue la siguiente en 88 caracteres:
Sin embargo, esto intenta calcular las operaciones desde la primera aparición de cada una, por lo que si la operación es multiplicación o división y el argumento la primera vez es 0, se rompe.
fuente
Haskell,
276261259257243 caracteresAquí está mi solución ineficiente. Funciona en enteros ilimitados (y limitados). Esta solución funciona correctamente con una división no exacta (por ejemplo:)
5 / 2 = 2
.Cómo funciona: creo todas las secuencias posibles de operaciones (posibles). Luego pruebo contra la secuencia de entrada de números para ver si la secuencia generada creará la entrada. Si es así, devuelve el siguiente número en la secuencia. El código siempre devolverá una respuesta derivada de una secuencia más corta de operaciones. Esto sucede porque la lista de secuencias de operaciones se genera en ese orden. Es arbitrario (pero consistente) decidir entre empates. Por ejemplo, el código devuelve
6
o8
para la secuencia2 4
.Sin golf:
fuente
Control.Monad -> Monad
posible? Y qué talinteract$show.n.q read.words
Python,
333366...315303278269261246 caracteresCrea operaciones con el primer par de números y verifica en otros pares. Almacena todas las operaciones y, si todas tienen éxito, aplica la operación apropiada en el último elemento de la lista.
Editado: pasa la prueba del mal :-) Ahora busque la operación en todas las posiciones.
fuente
0 0 1 2 3 6 7 14
0 0 0 0 1 0 0 0 0 1
No tiene salida0
.lambda x:x+b-a
->(b-a).__add__
. Lástima que sea solo un personaje, estoy aprendiendo mucho sobre Python al hacer esto.l
implícitamente un ahorro global mucho: pastie.org/2416407Python,
309305295279 caracteresManeja todos los casos de prueba originales, así como el retorcido de Peter Taylor
0 0 1 2 3 6 7 14
:Sin protección, con salida de depuración (muy útil para verificar la corrección):
Uso:
fuente
v<1
funciona como guardia.Rubí 1.9
(437)(521)(447)(477)Funciona para todos los casos de prueba, incluido el "malvado". Lo jugaré más tarde.
EDITAR: Me di cuenta de que hay otro caso que no estaba manejando correctamente, cuando la continuación necesita usar la operación "misteriosa". La secuencia
2 0 0 -2 -4 -6
estaba inicialmente devolviendo 0 en lugar de -12. Ahora lo he arreglado.EDITAR: se corrigieron un par de casos más y se redujo el código a 447.
EDITAR: Ugh. Tuve que agregar algún código para manejar otras secuencias "malvadas" como
0 0 0 6 18 6 12
fuente
Scala
Esta es la solución que se me ocurrió:
Sin golf:
fuente
echo "0 0 1 2 3 6 7 14" | scala Sequence
mantiene la pantalla en negro.scala Sequence
y luego ingrese la secuencia y presione enter.Scala 936
sin golf:
Falla miserablemente en Peter Taylor
h
, pero no veo la posibilidad de sanar el programa en un tiempo razonable.fuente
-
como un caso especial de+
y/
como un caso especial de*
? Mi forma de pasar la entrada de Peter Taylor (y similar) fue cortar el primer número de la secuencia e intentar nuevamente. Todavía no he tenido tiempo de ver cómo funciona su programa para saber si eso ayudaría con el suyo.-1, 0, 0, 1, 2, 3, 6, 7, 14
necesitará una curación diferente.