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 sque podemos encontrar f(s). Lo contrario no es tan trivial: no es yposible encontrar al predecesor de sesa manera f(s) = y. Por ejemplo, porque y = 1no podemos encontrar un predecesor. Pero si ytiene 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 ylongitud uniforme.
Nota : El 'predecesor' sdefinido 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:

513111se divide en51,32y11?11111111111111ser? Según su especificación, lo sería1111111. Debe modificar su especificación para definir una respuesta razonable para esto.11111111111111simplemente 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)] ifas)]if.2 elseHaskell,
134 128115Si tiene que ser de la entrada estándar / salida estándar, agregue
main=interact lpor150 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.
fllama,gque 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ónique, 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.javaLuego corre con:
java LookAndSayExpandedGolfedEditar: 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)--1supone 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
usequeSystem.Text.RegularExpressionsexiste 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