Reto
Escriba un programa o función que tome una cadena s
y un entero n
como parámetros. Su programa debe imprimir (o devolver) la cadena cuando se transforma de la siguiente manera:
Comenzando en la parte superior izquierda y moviéndose hacia abajo y hacia la derecha, escriba s
como una ola de altura n
. Luego, de arriba a abajo, combine cada fila como una cadena (sin espacios).
Ejemplo
Dada la cadena "WATERMELON" y una altura de 3:
La ola debería verse así:
W R O
A E M L N
T E
Luego, combine las filas de arriba a abajo:
WRO
AEMLN
TE
Por lo tanto, su programa debería devolver la cadena "WROAEMLNTE"
Del mismo modo, "WATERMELON" con altura 4 debería producir la siguiente ola:
W E
A M L
T R O
E N
Su programa debería devolver la cadena "WEAMLTROEN"
Reglas
Entrada
La entrada puede tomarse en cualquier formato razonable. La cadena puede ser en cualquier caso que prefiera. Puedes suponer que0 < n <= s.length
Salida
La salida debe consistir solo en la cadena transformada (ya sea devuelta o impresa en STDOUT), más cualquier nueva línea final.
Tanteo
Este es el código de golf , por lo que la respuesta más corta en bytes gana Las lagunas estándar no están permitidas.
Casos de prueba
Input Output
programmingpuzzles, 5 -> piermnlsomgzgapzru
codegolf, 3 -> cgoeofdl
elephant, 4 -> enlatehp
1234567, 3 -> 1524637
qwertyuiop, 1 -> qwertyuiop
n
> 1? Por favor aclare y si no agrega un caso de prueban > 0
, peron=1
es un caso válido. Actualizaré la pregunta ahora.Respuestas:
Casco , 6 bytes
Pruébalo en línea!
Funciona para
n = 1
también.Explicación
La función de orden superior funciona
δ
así debajo del capó. Suponga que tiene una función de orden superior que toma una función unaria y una lista, y devuelve una nueva lista. Por ejemplo,Ö
toma una función y ordena una lista usándola como clave. LuegoδÖ
toma una función binaria y dos listas, comprime las listas juntas, aplicaÖ
para ordenar los pares usando la función binaria como clave, y finalmente proyecta los pares a la segunda coordenada. UsamosK
como la función clave, que simplemente devuelve su primer argumento e ignora el segundo.fuente
MATL , 16 bytes
Pruébalo en línea! O verificar todos los casos de prueba .
Explicación
Considere insumos
5
,'programmingpuzzles'
.fuente
Haskell , 64 bytes
Pruébalo en línea!
fuente
J ,
54, 29, 2726 bytes-1 byte gracias a hoosierEE
Pruébalo en línea!
fuente
n=1
desde el principio|@i:
en lugar de[:|i:
R , 68 bytes
Pruébalo en línea!
n=1
caso arreglado gracias a @ J.Doefuente
Python 2 ,
11910898929197939190 bytesPruébalo en línea!
-1 byte, gracias a Jonathan Frech
fuente
05AB1E (heredado) ,
118 bytesInspirado por @LuisMendo MAT respuesta 's .
-3 bytes gracias a @Adnan porque soy un idiota ..>.>
Pruébalo en línea .
Explicación:
NOTA: Se
counter_variable
utiliza, porque en la versión de Python Legacy de 05AB1E,Σ
no tenía un índice incorporadoN
, que sí tiene en la nueva versión de reescritura de Elixir de 05AB1E. Entonces, ¿por qué sigo usando la versión heredada? Porque en la reescritura de Elixir, transforma implícitamente la cadena en una lista de caracteres, lo que requiere un adicional}J
para transformarla nuevamente en una cadena para generar (y también contiene un error en este momento dondeè
no funciona para indexar en la lista alargada ..: S)fuente
¹g∍
pieza ya que 05AB1E usa indexación cíclica paraè
.Japt , 16 bytes
¡Pruébalo en línea!
Explicación
fuente
ü
método es nuevo?-P
indicador para guardar otro 2.Jalea , 8 bytes
6 bytes fallan para la altura 1; dos bytes utilizados para abordarlo ... ¿tal vez se pueda encontrar un 7?
Un enlace diádico que acepta un número entero positivo y una lista de caracteres que produce una lista de caracteres.
Pruébalo en línea!
¿Cómo?
fuente
JavaScript (ES6), 75 bytes
Fórmula más corta sugerida por @MattH (-3 bytes)
Toma entrada como
(string)(n)
.Pruébalo en línea!
JavaScript (ES7), 78 bytes
Guardado 4 bytes gracias a @ETHproductions
Toma entrada como
(string)(n)
.Pruébalo en línea!
fuente
o
con enx/n&1?n-x%n:x%n
lugar den*n-(x%(n*2)-n)**2
.K ( Kona ), 23 bytes
Una traducción de la respuesta J de Galen
fuente
MBASIC ,
146159155 bytesActualizado para manejar n = 1
Salida:
fuente
Perl 6 , 49 bytes
Pruébalo en línea!
Toma la entrada como una función curry.
Explicación:
La secuencia por la que se ordena se ve así (para
n=5
):fuente
J , 24 bytes
Pruébalo en línea!
Verbo diádico explícito. Ejecútalo como
'codegolf' f 3
.Cómo funciona
Normalmente, la función explícita toma 5 bytes adicionales en forma de
n :'...'
. Pero si se agrega el manejo de errores, la diferencia se reduce a 2 bytes debido a los parentes y al espacio en(tacit)<space>::
.fuente
sort up
? Su verbo explícito todavía es 3 bytes más corto. ¡Buena decisión!APL (Dyalog Classic) , 23 bytes
Pruébalo en línea!
fuente
Powershell,
9995 bytesScript de prueba:
Salida:
Explicación
La secuencia de comandos:
La expresión
((1..$n+$n..1)*$s.Length|gu
genera una secuencia como1,2,3,3,2,1,1,2,3,3,2,1...
y elimina duplicados adyacentes.gu
es un alias para Get-Unique .$n=3
la secuencia deduplicada es:1,2,3,2,1,2,3,2,1...
$n=1
la secuencia deduplicada es:1
La expresión
$i++*($n-gt1)
devuelve un índice en la secuencia deduplicada.=$i++
si de lo$n>1
contrario=0
fuente
Ruby ,
7565 bytesPruébalo en línea!
Toma la entrada como una matriz de caracteres, devuelve una cadena
Cómo funciona:
h
cadenash
y luego baja hasta,0
etc.)fuente
C,
142134bytes8 bytes guardados gracias a Jonathan Frech
Código:
Explicación:
Pruébalo en línea!
fuente
Carbón , 21 bytes
fuente
SNOBOL4 (CSNOBOL4) , 191 bytes
Pruébalo en línea!
Toma
S
entoncesN
en líneas separadas.Explicación:
fuente
Limpio ,
10584 bytesPruébalo en línea!
fuente
JavaScript (Node.js) , 83 bytes
Pruébalo en línea!
fuente
Pyth ,
2221 bytesToma entrada como
n
seguido pors
en líneas separadas. Pruébelo en línea aquí , o verifique todos los casos de prueba a la vez aquí .Editar: guardado un byte moviendo el cheque vacío al final del procesamiento. Versión previa:
seMhD,V*lz|+PUQP_UQ]0z
fuente
Rojo , 153 bytes
Pruébalo en línea!
Explicación:
fuente
Tengo dos soluciones al problema. La primera solución que hice primero, luego pensé en otra forma de hacerlo que pensé que ahorraría bytes, pero no fue así, así que la incluí de todos modos.
Solución 1
PHP ,
152144116 bytesPruébalo en línea!
Solución 2
PHP , 162 bytes
Pruébalo en línea!
fuente
$f
y$n-1-$i
puede ser$n-~$i
. 144 bytesn=1
. Este funciona para el mismo número de bytes.echo
para ahorrar 5 bytes másRuby , 84 bytes
Pruébalo en línea!
fuente