Relacionado pero muy diferente.
Un boustrophedon es un texto donde se invierte o invierte cualquier otra línea de escritura, con letras invertidas.
En este desafío, solo revertiremos cada línea, pero dejaremos los caracteres reales utilizados intactos. Puede elegir qué líneas invertir, siempre que sean todas las demás.
Puede tomar el texto en cualquier formato adecuado siempre que admita cero o más líneas de ASCII imprimibles, cada una con cero o más caracteres.
Ejemplos:
["Here are some lines","of text for you","to make a","boustrophedon"]:
["Here are some lines","uoy rof txet fo","to make a","nodehportsuob"] or ["senil emos era ereH","of text for you","a ekam ot","boustrophedon"]
["My boustrophedon"]:
["My boustrophedon"] or ["nodehportsuob yM"]
[]:
[]
["Some text","","More text","","","Last bit of text"]:
["Some text","","More text","","","txet fo tib tsaL"] or ["txet emoS","","txet eroM","","","Last bit of text"]
Respuestas:
APL (Dyalog Classic) , 4 bytes
La entrada es un vector de vectores de caracteres.
⌽
es una función que invierte un vector (cuando⌽
se aplica monádicamente).⊢
es " dex ", una función que devuelve su argumento correcto. Cuando compuesta (∘
) con otra funciónf
que obliga a este último a ser monádico comoA ⊢∘f B
es equivalente aA ⊢ (f B)
y por lo tantof B
.\
es el operador de escaneo .g\A B C ...
es el vectorA (A g B) (A g (B g C)) ...
dondeg
se aplica de forma diádica (notación infija). Sustituyendo⊢∘⌽
parag
que se simplifica a:Las reversiones en posiciones pares (o impares, dependiendo de cómo cuente) se cancelan.
Pruébalo en línea!
fuente
]&|.&.>/\
para aquellos que pueden leer J.Haskell , 26 bytes
Pruébalo en línea! Ejemplo de uso:
zipWith($)l ["abc","def","ghi"]
rendimientos["abc","fed","ghi"]
.Explicación:
l
es una lista infinita de funciones que alternan entre laid
función de entidad y lareverse
función.La función principal se comprime
l
y la lista de entrada con la aplicación de función$
, que es para una entrada["abc", "def", "ghi"]
que obtenemos[id$"abc", reverse$"def", id$"ghi"]
.fuente
Casco , 4 bytes
Toma y devuelve una lista de cadenas (el intérprete se une implícitamente al resultado mediante nuevas líneas antes de imprimir). La primera cadena se invierte. Pruébalo en línea!
Explicación
En Husk, multiplicar una cadena con un número lo repite muchas veces, y también lo invierte si el número es negativo.
fuente
JavaScript (ES6), Firefox, 43 bytes
Esta versión abusa del algoritmo de ordenación de Firefox . Genera basura en Chrome y no altera las cadenas en Edge.
Casos de prueba
Mostrar fragmento de código
O Pruébelo en línea! (Mono araña)
JavaScript (ES6), 45 bytes
Casos de prueba
Mostrar fragmento de código
fuente
APL (Dyalog Unicode) , 10 bytes
Funciona en ambos sentidos:
Pruébalo en línea! con
⎕IO←1
Pruébalo en línea! con
⎕IO←0
Cómo funciona:
fuente
Perl 5, 17 + 2 (-pl) = 19 bytes
líneas impares invertidas
líneas pares invertidas
Después del comentario de @ Martin: la entrada debe tener un salto de línea final.
pruébalo en línea
fuente
Haskell , 27 bytes
Pruébalo en línea!
Haskell , 30 bytes
Pruébalo en línea!
Recursion FTW.
fuente
05AB1E ,
54 bytesPruébalo en línea!
Explicación
fuente
K (oK) ,
1714 bytesSolución:
Pruébalo en línea!
Ejemplo:
Explicación:
Aplicar
reverse
en índices impares de la lista de entrada:Notas:
&(#x)#0 1
para&2!!#x
guardar 3 bytesfuente
APL (Dyalog) , 12 bytes
Pruébalo en línea!
fuente
Python 2 ,
4036 bytes-4 bytes gracias a @ Mr.Xcoder
Pruébalo en línea!
Salidas modificando la lista de entrada
Python 2 , 43 bytes
Pruébalo en línea!
fuente
Aluminio , 66 bytes.
Pruébalo en línea!
fuente
J , 9 bytes
Reduzca de derecha a izquierda, invirtiendo todas las cadenas en el resultado y anteponiendo la siguiente cadena como está.
Pruébalo en línea!
Podemos hacer 6 usando el enfoque de ngn , pero habrá espacios adicionales:
Pruébalo en línea!
fuente
R , 85 bytes
Pruébalo en línea!
Entrada de stdin y salida a stdout.
Cada línea debe terminar con un salto de línea / retorno de carro / CRLF, y se imprime con una nueva línea correspondiente. Por lo tanto, las entradas deben tener un salto de línea final.
fuente
Jalea ,
54 bytesPruébalo en línea!
Gracias HyperNeutrino por -1 bytes! (en realidad porque nunca supe cómo
ƭ
funciona debido a la falta de documentación, esta vez tuve suerte)fuente
¦
conm
(7 bytes).s2U2¦€;/
También es de 7 bytes.T-SQL, 65 bytes
Nuestras reglas de entrada estándar permiten que SQL ingrese valores de una tabla preexistente , y dado que SQL está inherentemente desordenado, la tabla debe tener números de fila para preservar el orden del texto original.
He definido la tabla con una columna de identidad para que simplemente podamos insertar líneas de texto secuencialmente (sin contar para el total de bytes):
Entonces, para seleccionar e invertir filas alternas:
Tenga en cuenta que puedo guardar 11 bytes excluyendo el
ORDER BY i
, y que es probable que devuelva la lista en el orden original para cualquier longitud razonable (ciertamente lo hace para el ejemplo de 4 líneas). Pero SQL solo lo garantiza si incluye elORDER BY
, por lo que si tuviéramos, digamos, 10,000 filas, definitivamente lo necesitaríamos.fuente
Perl 6 , 44 bytes
Intentalo
fuente
Separado por comas:
Stax , 12 bytes
Ejecutar y depurarlo
entrada: ABC, def, GHI, jkl, MNO, pqr, STU
Nueva línea delimitada:
Stax , 8 bytes
Ejecutar y depurarlo
entrada:
salida para ambos:
fuente
En realidad , 7 bytes
Explicación:
Pruébalo en línea!
fuente
Alice , 13 bytes
Pruébalo en línea!
Entrada a través de argumentos de línea de comandos separados. Invierte la primera línea (y todas las demás líneas después de eso).
Explicación
fuente
ML estándar (MLton) , 51 bytes
Pruébalo en línea! Ejemplo de uso:
$ ["abc","def","ghi"]
rendimientos["abc","fed","ghi"]
.Explicación:
$
es una función que se repite en una lista de cadenas. Toma dos cadenasa
yb
de la lista, mantiene la primera sin cambios e invierte la segunda transformando la cadena en una lista de caracteres (explode
), invirtiendo la lista (rev
) y volviéndola a una cadena (implode
).fuente
Retina , 18 bytes
Pruébalo en línea! Explicación: La primera etapa invierte la primera línea, luego la segunda etapa imprime las dos primeras líneas, después de lo cual la tercera etapa las elimina. Todo el programa se repite hasta que no quede nada. Una nueva línea final podría eliminarse a costa de un líder
;
.fuente
Wolfram Language (Mathematica) , 33 bytes
Pruébalo en línea!
Cómo funciona
StringReverse@*Append
, cuando se le da una lista de cadenas y otra cadena como entrada, agrega la cadena al final de la lista y luego invierte todas las cadenas.Fold
La entrada con respecto a lo anterior significa que nosotros:Cada línea se invierte una vez menos que la línea anterior, por lo que las líneas alternan la dirección.
fuente
CJam , 11 bytes
Pruébalo en línea!(Los literales de matriz CJam usan espacios para separar elementos)
Explicación:
Explicación de la parte de
Waf.%
"magia negra":W
es una variable preinicializada a-1
.a
envuelve un elemento en una matriz, por lo queWa
es[-1]
.%
muestra un númeron
y una matriza
y toma todosn
los elementos de la matriz. Cuandon
es negativo, también lo invierte, lo que significa queW%
invierte una matriz..
seguido de una operación binaria aplica esa operación a los elementos correspondientes de una matriz, por lo que[1 2 3] [4 5 6] .+
es[5 7 9]
. Si una matriz es más larga que la otra, los elementos se mantienen sin modificación, lo que significa queWa.%
invierte el primer elemento de una matriz.f
seguido de una operación binaria, tomará un elemento de la pila y luego actuará como{<that element> <that operation>}%
, es decir, pasará por cada elemento de la matriz, empujará su elemento, empujará el elemento que primero salió de la pila, ejecutará la operación y luego recopilará los resultados de nuevo en una matriz. Esto significa queWa.f%
invierte el primer elemento de cada elemento de la matriz.fuente
V , 4 bytes
Pruébalo en línea!
fuente
Swift ,
90858272 bytes-10 bytes gracias a @ Mr.Xcoder
fuente
print
y descartar la declaración de tipo de devolución:func f(a:[String]){print(a.reduce([]){$0.map{"\($0.reversed())"}+[$1]})}
Ruby , 19 + 2 = 21 bytes
+2 bytes para
-nl
banderas.Pruébalo en línea!
Explicación
Prácticamente idéntico a la respuesta de Perl 5 , aunque no la había visto cuando escribí esto.
Con espacios en blanco, el código se ve así:
La
-p
opción hace que Ruby efectivamente envuelva su script en un bucle como este:La variable especial
$_
contiene la última línea leída porgets
, y$.
contiene el número de línea.El
-l
permite que termina el procesamiento automático de línea, que llama automáticamentechop!
en cada línea de entrada, que elimina el del\n
antes revertirla.fuente
GNU sed , 31 + 1 = 32 bytes
+1 byte para
-r
bandera.Pruébalo en línea!
Explicación
fuente
Carbón de leña , 9 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Nota: el carbón vegetal no conoce la longitud de la lista, así que lo agregué como un elemento adicional. Explicación:
fuente
Befunge-93, 48 bytes
Pruébalo en línea
Imprime la primera línea al revés. Tiene una nueva línea final.
Básicamente, funciona alternando entre impresión a medida que ingresa y almacena la entrada en la pila. Cuando llega a una nueva línea o al final de la entrada, imprime la pila, imprime una nueva línea y modifica el carácter a 0,4 para que sea un # o un no-op para cambiar el modo. Si fue el final de la entrada, finalice el programa
fuente