En Elixir, las listas (vinculadas) están en el formato [head | tail]
donde head puede ser cualquier cosa y tail es una lista del resto de la lista, y []
la lista vacía es la única excepción a esto.
Las listas también se pueden escribir como lo [1, 2, 3]
que es equivalente a[1 | [2 | [3 | []]]]
Su tarea es convertir una lista como se describe. La entrada siempre será una lista válida (en Elixir) que contiene solo números que coinciden con la expresión regular \[(\d+(, ?\d+)*)?\]
. Puede tomar la entrada con (un espacio después de cada coma) o sin espacios. La salida puede ser con (un espacio antes y después de cada uno |
) o sin espacios.
Para entradas con ceros a la izquierda, puede emitir sin ceros o con.
La entrada debe tomarse como una cadena (si se escribe una función), al igual que la salida.
Ejemplos
[] -> []
[5] -> [5 | []]
[1, 7] -> [1 | [7 | []]]
[4, 4, 4] -> [4 | [4 | [4 | []]]]
[10, 333] -> [10 | [333 | []]]
relacionado , no un duplicado, ya que esto en parte implica agregar modo ]
al final. Además, la respuesta de Haskell aquí es bastante diferente a la de allí.
Respuestas:
Haskell, 50 bytes
Pruébalo en línea!
Esto le
+0
permite al verificador de tipo Haskell saber que estamos tratando con listas de números, porread
lo que analizará la cadena de entrada por nosotros.fuente
Python 2 , 50 bytes
Pruébalo en línea!
fuente
JavaScript (ES6), 50 bytes
Pruébalo en línea!
Versión recursiva, 51 bytes.
Pruébalo en línea!
fuente
Retina ,
39333220 bytesGuardado 13 bytes gracias a H.PWiz, ovs, ASCII-only y Neil.
Pruébalo en línea!
Explicación
Si no tenemos una lista vacía, agregue una coma final.
Si bien hay comas, envuelve las cosas con
|[ thing ]
.fuente
\b]
con,]
. (De lo contrario, había descubierto de forma independiente la misma solución.)\b
era una cosa por alguna razón> _> 20 bytes @MnemonicPerl 5
-pl
,3128 bytesPruébalo en línea!
¿Cómo?
fuente
Elixir ,
11185 bytesPruébalo en línea!
Nunca he usado Elixir antes. Define una función que toma una cadena y una referencia a sí misma y devuelve una cadena.
fuente
Ceilán , 113 bytes
Pruébalo en línea!
Aquí está escrito:
Pruébalo en línea!
Como lo señalan los ovs en un comentario (ahora eliminado): si se seleccionan las opciones "sin espacios" para entrada y salida indicadas en la pregunta, se pueden guardar 3 bytes más (los obvios con espacios en ellos).
Si no necesitamos analizar la entrada, pero podríamos obtener una secuencia como entrada, se acortará mucho (69 bytes).
Pruébalo en línea!
fuente
Python 3 , 65 bytes
Pruébalo en línea!
Si la entrada podría ser una lista, entonces:
Python 3 , 53 bytes
Pruébalo en línea!
fuente
SNOBOL4 (CSNOBOL4) , 114 bytes
Pruébalo en línea!
fuente
Stax , 19 bytes
Ejecutar y depurarlo
Mi primera publicación de Stax, por lo que probablemente no sea óptima.
Desempaquetado y comentado:
Ejecute y depure este
fuente
Casco , 22 bytes
Pruébalo en línea!
fuente
Befunge-98 (PyFunge) ,
2221 bytesPruébalo en línea!
Si no hubiera restricciones extrañas en la producción, podríamos hacer esto en 18:
Dato curioso, este es técnicamente un programa que no hace nada en Python.
fuente
Rubí
-p
, 39 bytesPrograma completo:
Pruébalo en línea!
rubí ,
4845 bytesFunción recursiva:
Pruébalo en línea!
fuente
R ,
847169 bytesPruébalo en línea!
fuente
\K
mirada atrás más cortaProtón , 57 bytes
Pruébalo en línea!
fuente
Jalea , 19 bytes
Pruébalo en línea!
Una alternativa no recursiva a la solución de Erik .
fuente
Jalea , 18 bytes
Pruébalo en línea!
fuente
Jalea , 18 bytes
Un programa completo que imprime el resultado (como enlace monádico acepta una lista de caracteres pero devuelve una lista de caracteres y enteros).
Pruébalo en línea!
¿Cómo?
fuente
Java 10, 107 bytes
Pruébalo en línea.
Explicación:
fuente
ML estándar , 71 bytes
Pruébalo en línea! Utiliza el formato sin espacios. Ej.
it "[10,333,4]"
Rendimientos"[10|[333|[4]|[]]]]"
.sin golf
Pruébalo en línea!
fuente
R ,
140136 bytesAbajo 4 bytes según el consejo de sonido de Giuseppe
Pruébalo en línea!
fuente
substr
es más corto y el primeropaste0
puede serpaste
llegar a 136 bytes.eval
,parse
y ensub
lugar deunlist
,strsplit
ysubstr
también solo administré 136 bytes (pensé que podría ser más corto pero no lo fue)R , 108 bytes
Pruébalo en línea!
Tardó casi un año en encontrar una solución R mejor que la anterior ... ¡debería haber sabido
Reduce
que sería la respuesta! Salidas sin espacios, la entrada puede ser con o sin espacios.fuente
Python 2 , 63 bytes
Pruébalo en línea!
fuente
sed +
-E
, 46 bytesUn enfoque bastante sencillo. La segunda línea toma
[\d+, ...]
y lo cambia a[\d | [...]]
. La tercera línea vuelve a la primera línea, si la sustitución fue exitosa. La sustitución se repite hasta que falla y luego el programa termina. Corre consed -E -f filename.sed
, pasando la entrada a través de stdin.fuente
Rojo , 110 bytes
Pruébalo en línea!
Explicación de la versión sin golf:
El rojo es tan fácil de leer, que dudo que necesite agregar los comentarios anteriores :)
fuente
Perl 6 , 38 bytes
Pruébalo en línea!
fuente