Sandbox publica aquí .
Cree una función o programa que "Springify" una cadena.
- La entrada será una cadena en Stdin, o la alternativa más cercana
- La entrada solo contendrá ASCII y / o espacios imprimibles
- La salida será a Stdout, o la alternativa más cercana
- Las líneas y espacios finales son aceptables
Cómo hacer saltar una cuerda
- Formatee la cadena en tantas bobinas de resorte ASCII como sea necesario
- Rellene las bobinas con espacios, hasta la bobina más cercana
- Lea los personajes, siguiendo la primavera alrededor de las bobinas.
Esta es una bobina de resorte ASCII:
#
# ####
# #
# ####
#
Donde los #
s son los personajes de la cadena
Aquí hay un ejemplo:
abcdefghijklmnopqrstuvwxyz
se convierte
a
b cdef
g h
i jklm
n
o
p qrst
u v
w xyz.
.
Donde los .
s reemplazan espacios para visibilidad.
Luego, la cadena se vuelve a leer, siguiendo el resorte ASCII hacia abajo, alrededor de los bucles, presionando g
y u
dos veces:
1| a <-3
V b cdef
g h
4| i jklm
V n 2->
...
... dando:
abgjklmhfedcginopuxyz vtsrquw
(con un espacio final)
Casos de prueba
(citas agregadas para resaltar los espacios finales - ignore en términos de IO)
I: "abcdefghijklmnopqrstuvwxyz"
O: "abgjklmhfedcginopuxyz vtsrquw "
I: "!@#"
O: "!@ # "
I: ""
O: ""
I: "12345 67890"
O: "12690 7 54368 "
I: " "
O: " "
Tenga en cuenta que la longitud de salida es siempre un múltiplo de 15, la longitud de una bobina de resorte
Este es el código de golf , por lo que gana la respuesta más corta en bytes.
Respuestas:
Jalea , 26 bytes
TryItOnline!
¿Cómo?
fuente
Python 2,
10410298 BytesGracias por el comentario ayuda!
https://tio.run/#2VDVy
Original:
fuente
input()
y tomar entrada en el formato"<stuff>"
.lambda
para dar una función anónima en lugar de un programa; esto a menudo es más corto .+13
to+14
y el+1
to+(len(t)%14>0)
lo haría, pero debe haber un camino más corto.JavaScript (ES6), 79 bytes
Cadena hexadecimal robada descaradamente de @ETHproductions.
fuente
Retina , 71 bytes
Pruébalo en línea!
Permutar cuerdas no es exactamente conciso en Retina ...
fuente
JavaScript (ES7),
144143141114104103 bytes¡Gracias a ETHProductions por un ahorro de 10B!
Ejemplo
Salida
fuente
+('0x'+whatever)
para convertirla en un número:(_,c)=>b[(c/15|0)*14+ +('0x'+'0169abc7543268d'[c%15])]
'0x'+'...'[c%15]-0+(c/15|0)*14
ahorrarte un par de paréntesis :-)Perl 6 , 61 bytes
Cómo funciona
La estructura básica es esta:
La expresión utilizada para indexar en cada segmento de 14 caracteres es la
"abgjklmhfedcgin".ords X- 97
siguiente:abgjklmhfedcgin
.97 98 103 106 107 108 109 104 102 101 100 99 103 105 110
.0 1 6 9 10 11 12 7 5 4 3 2 6 8 13
.Perl 6 , 64 bytes
Pruébalo en línea!
Cómo funciona
La estructura básica es esta:
Mismos índices que el anterior, pero ya que estamos llamando
.flat
todos modos, podemos utilizar una expresión anidada (1 byte, pero más corto) para ellos:0,1,6,9..12,7,5...2,6,8,13
.(Parece trivial, pero en realidad se basa en una peculiaridad de análisis de Rakudo Perl 6 que probablemente sea un error . Para escribirlo sin explotar ese error, uno tendría que agregar parens alrededor del
5...2
.)fuente
Befunge-93, 97 bytes
Pruébalo en línea!
Este es un desglose del código fuente con las diversas partes componentes resaltadas.
El bucle principal comienza a ejecutarse de derecha a izquierda, envolviendo el lado derecho del campo de juego. Aquí es donde leemos el primer carácter de stdin y terminamos si es un EOF.
La siguiente sección se asegura de que los caracteres EOF se conviertan en espacios utilizando la fórmula
c = c + 31*!(c+1)
. Aunque esto no se aplicará en la primera iteración, puede ocurrir en pases posteriores.Se guarda una copia del carácter en la memoria temporal, y luego se realiza una búsqueda del índice actual en la tabla en la línea cuatro ( ) para determinar si el carácter se debe generar o no.
Si el carácter necesita ser sacado, tomamos la rama izquierda. Aquí se realiza un intercambio para cancelar el intercambio que ocurrirá a continuación, y luego se empuja un cero para forzar la rama hacia la derecha.
Si el personaje no salió, lo cambiamos por la pila debajo del contador de índice (este es el intercambio que se cancela en la rama izquierda). Y en ambos casos guardamos el carácter en la memoria en el desplazamiento del índice actual, incrementamos el índice y verificamos si es mayor que 13.
Si no, leemos el siguiente carácter de stdin y repetimos el ciclo interno.
Si es así, habremos terminado un conjunto de 14 caracteres, 7 de los cuales salieron (
abgjklm
) y 7 restantes en la pila (cdefhin
). Dejamos a los dos últimos, salida de los restantes 5 (hfedc
), y luego recuperar y salida de los casos especialesg
,i
yn
de la memoria.Y eso nos lleva de vuelta al inicio del ciclo principal, donde repetimos el proceso nuevamente para los siguientes 14 caracteres.
fuente
Mathematica,
7772 bytes¡Gracias a JungHwan Min por guardar 5 bytes!
Función sin nombre que toma una lista de caracteres como entrada y devuelve una lista de caracteres.
Partition[#,14,14,{1,1}," "]
divide la entrada en sublistas de longitud 14, rellenando con espacios si es necesario.LetterNumber@"abgjklmhfedcgin"
evalúa a{1,2,7,10,11,12,13,8,6,5,4,3,7,9,14}
, lo que indica el orden en el que se debe incluir cada sublista de longitud 14 (repitiendo el séptimo elemento adecuadamente). Luego[[;;,...]]
toma los elementos de todas las sublistas de longitud 14 en ese orden yJoin@@
une las respuestas.Presentación previa:
fuente
LetterNumber@"abgjklmhfedcgin"
Es una forma más corta de comprimir la lista. También en;;
lugar deAll
guardar un byte.Python 3 , 86 bytes
Pruébalo en línea!
Como
Tq>]zQ|1/X;:L$o
beneficio adicional, la cadena es un programa CJam válido que imprime los caracteres únicos en la entrada estándar, ordenados. Pruébalo en línea! (+ explicación)fuente
PHP, 94 bytes
divide el argumento de la línea de comandos en fragmentos de 14 bytes y recorre la cadena de traducción como índice para la subcadena. Corre con
php -nr '<code>' <string>
.Me alegró descubrir que
??
también acepta la cadena vacía (para un índice "no válido") como nula.fuente
Ruby, 83 bytes
La primera idea fue usar números hexadecimales, pero ord-48 guarda otro byte (robado de la respuesta de throx).
fuente