Todos deberían estar familiarizados con la secuencia de Conway (también conocida como 'mirar y decir') por ahora:
1
11
21
1211
111221
312211
etc
También puede comenzar por cualquier número arbitrario como punto de partida. Dejar f(s)
ser el siguiente elemento de la secuencia. Ahora por cada dado s
que podemos encontrar f(s)
. Lo contrario no es tan trivial: no es y
posible encontrar al predecesor de s
esa manera f(s) = y
. Por ejemplo, porque y = 1
no podemos encontrar un predecesor. Pero si y
tiene una longitud uniforme , puede dividirla en pares de dígitos que describen cada parte de un predecesor:
513211 divides in 51,32,11
so: 51 comes from 11111
32 comes from 222
11 comes from 1
put together: 111112221
Entonces, de esta manera, podemos definir un predecesor único para cada y
longitud uniforme.
Nota : El 'predecesor' s
definido de esta manera generalmente NO satisface f(s) = y
.
Objetivo
Escriba un fragmento de función / programa que acepte una cadena de dígitos como entrada que
- calcula el siguiente elemento de la secuencia de Conway si la longitud de la cadena de entrada es impar
- calcula el predecesor de la cadena de entrada como se definió anteriormente si la longitud de la cadena de entrada es par .
El código más corto en bytes gana.
Preguntas recientes basadas en las secuencias de mirar y decir:
513111
se divide en51
,32
y11
?11111111111111
ser? Según su especificación, lo sería1111111
. Debe modificar su especificación para definir una respuesta razonable para esto.11111111111111
simplemente no tiene predecesor. Es una entrada ilegal.Respuestas:
CJam,
4645444342 bytesPruébalo aquí. Toma el número en STDIN e imprime el resultado en STDOUT.
fuente
si
->~
= 45Rubí,
125 120 119101 bytesEntrada de cadena tomada a través de la función
f
:Ampliado con notas:
fuente
Prólogo - 170 bytes
Este recorte define la función
(-)/2
. Puedes invocarlo comoParece que solo hay una longitud en esta secuencia con una paridad extraña: la inicial
[1]
.Legible:
fuente
Python: 139 caracteres
caso de prueba individual
fuente
s)] if
as)]if
.2 else
Haskell,
134 128115Si tiene que ser de la entrada estándar / salida estándar, agregue
main=interact l
por150 144131 caracteres totales. La función se llamal
.fuente
l "11"
ponía a trabajar, recibo una excepción conl "111"
ol "1111111111111"
Perl - 98 bytes
El tamaño de todas estas declaraciones de control me molesta, pero estoy bastante contento con el funcionamiento de las expresiones regulares.
Sin comprimir:
fuente
Erlang, 205
La función principal es f, tomando la entrada como una cadena de Erlang y devolviendo la salida también como una cadena.
La función se puede acortar 15 bytes (190) eliminando el requisito de mayúsculas y minúsculas de más de 9 caracteres idénticos.
f
llama,g
que calcula el predecesor de forma recursiva, y si el número de caracteres es impar (se encuentra cuando finaliza el cálculo), llama a la funcióni
que, emparejadah
, calcula el siguiente elemento.fuente
Haskell, 105
Creo que es bueno que no haya utilizado ninguna función auxiliar :-).
fuente
|x:y:z<-r
- No sabía que pudieras hacer eso. ¡Eso es tan cool!APL (45)
Sí, esa es una definición de función válida, incluso con
∊
el exterior.fuente
Java 7, Puntuación =
252235 bytesSí, es Java otra vez; El peor lenguaje de golf del mundo. Este enfoque utiliza cadenas. Enteros arbitrariamente grandes son compatibles con Java, pero tomarían mucho más espacio para codificar.
Llamada con
f(intputString)
. Devuelve la cadena correspondiente.Golfizado:
Golfed expandido con código de estructura:
Parcialmente Golfizado:
Completamente expandido:
Para ejecutar, primero compile la segunda entrada con:
javac LookAndSayExpandedGolfed.java
Luego corre con:
java LookAndSayExpandedGolfed
Editar: se corrigió el error.
fuente
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 4 at java.lang.String.charAt(String.java:658)
--1
supone que debe ser--i
?513211
->11111
.Javascript (en el navegador, ES5, IE8 +), 152
Puede acortarse en 4 caracteres si omite var, o algunos caracteres más con otras variables globales no variadas intermedias también, pero supongamos que no somos malos programadores por un minuto.
Cambiando a la función de sintaxis corta ES6 con argumento y valor de retorno en lugar de usar prompt, alert for IO puede ahorrar más.
JSFiddle aquí: http://jsfiddle.net/86L1w6Lk/
fuente
var
... todos somos "malos programadores" aquí. ;)Python 3 - 159 bytes
fuente
Cobra - 217
(186 si puedo asumir
use
queSystem.Text.RegularExpressions
existe una declaración para en otro lugar)fuente
JavaScript (ES6) 85
Usando la expresión regular reemplazar con la función. Diferentes expresiones regulares y diferentes funciones dependiendo de que la longitud de entrada sea par o impar.
fuente