Palabras retorcidas!
Dada una cadena y un entero positivo. Debes torcer la cuerda, de un lado a otro.
Ejemplo de entrada / salida
Entrada
Programming Puzzles & Code Golf
4
Salida
Prog
mmar
ing
zzuP
les
oC &
de G
flo
Entrada
La entrada puede tomarse a través de STDIN o argumento de función. La entrada consistirá en una cadena y un entero positivo, n . El entero determinará la longitud de cada línea torcida.
La cuerda está retorcida de un lado a otro. Una entrada de HELLO, WORLD!
y 5 se vería así:
Salida
El resultado será el texto retorcido. Puede que no haya ningún espacio en blanco al final. Si la longitud de la cadena de entrada no es divisible por la longitud de la línea, agregue un espacio hasta que se complete la línea:
Un ejemplo de esto:
Entrada
Hello, World!
5
Salida (tenga en cuenta el espacio en blanco al final)
Hello
roW ,
ld!
Respuestas:
Pyth,
1915Rellena previamente la cadena y luego invierte la línea a medida que la imprime El relleno es igual al tamaño del cuadro, pero la última línea después de cortar la entrada se descarta.
Pruébalo aquí
fuente
CJam, 19 bytes
Ejemplo de entrada:
Explicaciones
fuente
Muñeco de nieve 1.0.1 , 91 bytes
O todo en una línea (para estética, o más específicamente, antiestética), a un costo de 2 bytes:
Esto es demasiado corto para Snowman. (Sin embargo, es probable que sea lo más corto que pueda ser; trabajé en jugar al golf durante bastante tiempo).
Esto tiene una advertencia: saldrá con un error (pero aún producirá la salida correcta) el 50% del tiempo, cuando la última línea no está invierte. (Esto se debe a que uso
ag
para agrupar los elementos de la matriz en grupos de dos para poder invertir todos los demás, pero no compruebo si el último elemento tiene ambos elementos esperados, por lo que intentará acceder a un elemento inexistente si hay un número impar de líneas)Sin golf / explicación:
fuente
Pitón 2, 60
Toma
n
caracteres a la vez desde el des
, imprimiéndolos con una direcciónd
que alterna entre1
y-1
. Para el espaciado en la última línea,s
se rellena conn
espacios al final antes de cortarlo, lo que solo lo afecta cuando tiene menos den
quedan caracteres.Una solución recursiva ahorraría un carácter (59) excepto que deja una nueva línea final, que no está permitida.
fuente
Haskell ,
8375 bytesSimple
chunksOf
Implementación con tomar y soltar, aplicando un número par o impar de reversiones a la salida a medida que avanzamos.¡Gracias a @BMO por cinco bytes y a @ ØrjanJohansen por tres bytes!
Pruébalo en línea!
fuente
cycle
ahorra 5 bytes, ¡ pruébelo en línea!g
e intercambiandon
yl
: ¡ Pruébelo en línea!Atascado ,
42414038 BytesEsto es demasiado largo, ¡probablemente intente jugar más al golf!
La entrada debería ser como
"string"|n
.Explicación:
fuente
Haskell, 108 bytes
Eso es bastante largo, Dios. Aquí está en acción:
fuente
let
expresión?let
declaración dos en uno separada por un punto y coma, normalmente usaría nuevas líneas y sangría, pero Haskell también le permite escribirlet a=b; c=d in expr
.(%) :: String -> String -> String
lugar deIO ()
.Python 2, 109 bytes
Tuve que agregar relleno con espacios para que la última línea sea correcta.
Pruébalo aquí
fuente
Lua,
918888848382 bytesVersión antigua:
Nueva versión:
fuente
O, 60 bytes
Mi primer programa O, ¡y uno largo!
Demo en vivo.
fuente
Perl, 87 bytes
Versión anterior (imprime una nueva línea final):
La cadena se pasa como un argumento de función sin nueva línea final. Llama así:
fuente
Paperas, 86 bytes
Aunque podría ser 2 bytes más corto si elimina el primer ',!' caracteres en la declaración R (leída de STDIN); que agrega un retorno de carro entre la entrada y la salida. Si eso no estuviera allí, la salida es técnicamente correcta, pero la primera línea aparecerá adjunta a la cadena de entrada. [[El terminal estándar de paperas que uso no tiene eco local. ]] Tal como está, aquí está la prueba:
También tenga en cuenta que en realidad hay una pulsación de tecla de retorno / entrada de carro entre el '123' y el '6' al final de la entrada. [[El eco local de nuevo. ]]
Si alguien está interesado, puedo describir lo que sucede con el código; pero me doy cuenta de que no hay muchos entusiastas de las paperas ... :-)
fuente
PowerShell, 102 bytes
Se invoca de la siguiente manera (si se guarda en el archivo
CodeGolf55051.ps1
)Intentos previos
(más largo o inválido)
PowerShell, 110 bytes
PowerShell, 111 bytes
Explicación
PowerShell, 180 bytes
PowerShell, 196 bytes
Explicación
(
{...}
en los comentarios anteriores es en realidad{0}|{1}|{2}
; pongo{...}
para mejorar la legibilidad.Powershell, 120 bytes (no válido)
fuente
param($s,$i)$s+' '*($i-$s.Length%$i)-replace'(.{4})?(.)(.)(.)(.)',"`$1`n`$5`$4`$3`$2`n"-split"`n"|?{$_-ne""}
que lo llevará a 108.[$r]
índice final con[-not$r]
... de lo contrario, la primera línea dice lo contrario (es decir, de derecha a izquierda) que en los ejemplos proporcionados. De lo contrario, ejecución muy hábil!n
es positivo, y se nos garantiza que la longitud de la cadena no es negativa (por definición), eso significa que(($i-$l%$i)%i)
es equivalente a($i-$l%$i)
guardar cuatro caracteres.(-$l)%$i
. No sé de dónde vino eso. Sin embargo, es interesante que no sea equivalente, aunque debería serlo. Aparentemente es una peculiaridad de cómo PowerShell (entre otros lenguajes) implementa la función de módulo, que es diferente de lo que esperaba I (siendo un estudiante de matemáticas) o Wolfram-Alpha. Aparentemente, tendrás que seguir con la versión más larga. Prueba de referencia ->((y-x%y)%y) ==> ((y%y)-(x%y%y))%y ==> ((0)-(x%y))%y ==> (-x%y)%y ==> (-x)%y
Clojure, 83 bytes,
87 bytes,79 bytesvarias correcciones después de los comentarios a continuación, gracias Ørjan .
Pruébalo en línea!
Clojure parece a menudo tristemente ausente de las respuestas de golf de código. Ciertamente no puede competir en longitud de bytes con los idiomas de golf, pero creo que la ausencia total es algo injustificada.
Explicación:
s
en una secuencia de listas de caracteres donde las listas tienen longitudn
. El último fragmento se rellenará con espacios a la longitudn
utilizando la "colección de almohadillas" devuelta por(repeat " ")
cual se devuelve una secuencia infinita de espacios perezosos.#(..)
)#(or %)
que funciona como la función de identidad e inversa (es decir,[#(or %) reverse #(or %) reverse ...]
como se devuelve por ciclo) .#(apply ...)
:identity
oreverse
alternativamente en un trozo. Esto se realiza mediante la(% %2)
expresión que llama a la función enviada como primer argumento a la función anónima [es decir,identity
oreverse
] usando el segundo argumento [es decir, el fragmento] a la función anónima como argumento a la llamada.(apply str ...)
para convertir la lista de caracteres en una cadenaUn truco que usamos aquí es que muchas funciones de clojure, como
map
tomar un número arbitrario de colecciones como argumentos, es decir,(map f coll1 coll2 coll3 ...)
donde la función f solo necesita aceptar tantos argumentos como colecciones. En este caso, enviamos dos colecciones, una colección de referencias de funciones alternas y la cadena fragmentada.fuente
ld!
.fn
odefn
está bien). Por otro lado, su función solo puede devolver el resultado en lugar de imprimirlo.APL (Dyalog Unicode) , 19 bytes
Pruébalo en línea!
Tomó el
⊢∘⌽\
truco de la brillante respuesta de ngn al desafío de la boustrofedonía .Después de darme cuenta de que mi envío se rompe para las líneas con nuevas líneas principales, he agregado dos bytes más. A continuación se muestra la presentación anterior.
APL (Dyalog Unicode) , 17 bytes
Pruébalo en línea!
fuente
Python 3,
110108107103 bytes(mirando otras respuestas), con
rjust
:95939290 bytesfuente
PHP, 135 bytes
Toma dos argumentos de línea de comandos como se muestra con
$argv
.fuente
CoffeeScript, 131 bytes
Esto parece demasiado largo.
fuente
Julia, 104 bytes
Sin golf:
fuente
Python 3, 101 bytes
Pruébalo aquí
fuente
q, 46
.
fuente
{-1@[l;(&)(til(#)l:y cut x)mod 2;'[neg[y]$;|:]];}
(49 bytes). ¡Gracias por la inspiración! :)Q,
6456 bytes{}
es una función que debería llamarse como{}[x;y]
.x
Será la cadena.y
será la longitud de las líneas resultantes.Prueba:
editar : Utiliza funciones más cortas inspiradas en la otra respuesta q de @tmartin
fuente
Python 2,
8275 bytesNo pude comentar sobre @willem pero reduje su código.
Prueba aquíPrueba aquífuente
Perl, 72 bytes
70 bytes, más 2 bytes para
-p0
.Manifestación:
Tenga en cuenta que la entrada leída de STDIN no puede terminar con una nueva línea (que costaría 2 bytes adicionales).
Explicación:
fuente
JavaScript ES6, 123 bytes
Llamar con
t(input_string, twist_length)
, que devuelve la cadena de salida.fuente
Perl 5 , 51 bytes
Pruébalo en línea!
fuente
Rubí, 80
Demostración en línea: http://ideone.com/w6o8PI
fuente
Coffeescript, 151 bytes
Demasiado = (
fuente
Bash,
8374Esto alterna entre
cat
yrev
para las subcadenas del primer argumento con una longitud del segundo argumento.Las variables especiales utilizadas incluyen
${#1}
(la longitud de la cuerda$1
)((i/$2%2))
(una expresión aritmética que divide el incrementador$i
entre$2
y luego toma su módulo para determinar pares e impares, que dictaminó si usarlos o norev
)${1:i:$2}
(subcadena de$1
inicio en la posición$i
con una longitud de$2
).fuente
bash
respuesta, que acabo de ver ahora. Tenemos efectivamente la misma lógica. ... en realidad, la respuesta de viktorahlström simplemente me permitió depilar otros 9 caracteres.JavaScript ES6, 113 bytes
Solo mi propio crack ante mi propia pregunta. Agregará espacios para que sea divisible por
n
, de esa manera simplemente se divide y se invierte.fuente