Inspiración. * No puedo creer que no hayamos tenido este desafío antes:
Tarea
Dadas una o más cadenas ASCII imprimibles, intercalarlas tomando un carácter de cada cadena, cíclicamente hasta que se agoten los caracteres. Si una cadena se queda sin caracteres antes que los demás, simplemente omita esa de ahora en adelante.
Ejemplos
SIMPLE
da SIMPLE
POLLS
y EPEES
daPEOPLELESS
LYES
y APRONS
daLAYPERSONS
ABCDE
y a c
y 123 567
daAa1B 2Cc3D E567
"\n$?*
y
(cadena vacía) y ,(.)"
(espacio final) da ",\(n.$)?"*
(espacio final)
* Hay soluciones APL más cortas.
Respuestas:
Gelatina , 1 byte
Pruébalo en línea!
El "incorporado" incorporado hará exactamente esto a una lista de cadenas.
fuente
z⁶
.z
es "transponer a la izquierda, relleno con la derecha";⁶
Es un espacio.;"
(concatenación de elementos) resolvería la tarea sin una función incorporada.Python 2,
101898669 bytesEspero poder incluir esto en una lambda de alguna manera, acortándolo al hacerlo recursivo.No es ideal porque esperarías que la transposición sea más corta, desafortunadamente no lo es (por lo que he logrado hasta ahora).Viejas soluciones:
lambda s:''.join(''.join([c,''][c<' ']for c in x)for x in map(None,*[list(y)for y in s]))
gracias a mathmandan por hacerme sentir tonto;) me ahorró un montón de bytes! (en una solución antigua)
fuente
while any(w):
? Las cadenas vacías son falsey en Python.f=
.[]
llamada recursiva y abandonarlaf(x[1:] for x in s)
, lo que la convierte en una comprensión generadora, que en este contexto actúa igual que una lista.Perl 6 ,
3432 bytesUna lambda que toma una matriz de cadenas como argumento y devuelve una cadena.
( Pruébelo en línea )
fuente
@_
lugar de$_
CJam , 4 bytes
Pruébalo en línea!
También podemos escribir una función sin nombre para 4 bytes, que espera una lista de cadenas en la parte superior de la pila:
Pruébalo en línea!
fuente
Pyth - 3 bytes
Muy simple, agregará expansión más tarde, en dispositivos móviles.
Banco de pruebas
fuente
JavaScript (ES6),
5246 bytesToma la entrada como una matriz de cadenas y las salidas como una sola cadena.
Fragmento de prueba
fuente
f=([[c,...s],...a])=>c?c+f([...a,s]):a+a&&f(a)
Haskell, 33 bytes
Pruébalo en Ideone. Uso:
Sin usar un incorporado: (
3834 bytes)Pruébalo en Ideone. ¡4 bytes de descuento gracias a Zgarb! Uso:
fuente
f a=a
para guardar un byte porque ambos[]
tienen un tipo diferente ... muy cerca.C,
11484 bytes-20 bytes para no calcular la longitud.
Acepta una matriz de punteros de caracteres y requiere que el último elemento sea un puntero nulo (ver uso).
Sin golf y uso:
fuente
malloc
yreturn
antes y esto fue más largo que solo imprimirPHP,
6867 bytesRecorre los argumentos de la línea de comandos. Corre con
-r
.Después del bucle interno,
$f
es1
cuando todas las cadenas están terminadas, de lo0
contrario (bits se&
convierte""==$c
en int).Próxima iteración del bucle externo: copiar
$f
en$k
(guarda un byte de$k=0
) y alternar$f
:cuando todas las cadenas están listas,
$f
ahora estáfalse
y el bucle se rompe.fuente
Retina , 13 bytes
El recuento de bytes asume la codificación ISO 8859-1.
Pruébalo en línea!
Explicación
Esto se basa en la técnica de transposición estándar en retina. Ordenamos (
O
) todos los caracteres sin salto de línea (.
), por ($#
) el número de caracteres que se encuentran delante de ellos en la misma línea ($.%`
), es decir, su posición horizontal.La segunda etapa simplemente elimina los avances de línea de la entrada.
fuente
Java,
19 + 155 = 174160Sin golf:
Salida:
Primera modificación: declaración de cadena combinada para guardar algunos bytes. Eliminado
import
, fue utilizado por elmain()
método (no mostrado aquí) que también necesitabaLinkedList
. Hay menos bytes para hacer referenciaQueue
directamente.fuente
String f(java.util.Queue<String>q){String s,r="";for(;!q.isEmpty();r+=s.isEmpty()?"":s.charAt(0))if((s=q.poll()).length()>1)q.add(s.substring(1));return r;}
PHP, 77 bytes
Golfed
Función anónima que toma una serie de cadenas.
Estoy seguro de que esto se podría jugar más, pero es temprano. En cada iteración, tomamos la letra i-ésima de cada cadena dada y la agregamos a nuestra cadena final, una a la vez. PHP solo lanza advertencias si accedemos a fragmentos de cadenas que no existen, así que está bien. Solo nos detenemos cuando no se han realizado cambios después de recorrer todas las cadenas una vez.
Siento que el uso de
$d
se puede jugar más al golf, pero es temprano. :PAGSfuente
En realidad ,
76 bytesSugerencias de golf bienvenidas! Pruébalo en línea!
Editar: -1 byte gracias a Teal pelican.
Ungolfing
fuente
Z♂#Σ
aZ♂Σ
en todos ellos. Gracias por el consejo: DJavaScript (ES6), 46 bytes
fuente
Python 2 , 58 bytes
Pruébalo en línea!
fuente
lambda *m
?J , 13 bytes
Pruébalo en línea!
Basado en la inspiración para esta pregunta.
Otra forma de hacerlo toma 27 bytes pero funciona usando transposición. La mayoría de los bytes son para manejar los ceros agregados automáticamente del relleno.
Explicación
fuente
Bash + utilidades GNU, 55
E / S a través de STDIN (línea separada) y STDOUT.
Los
sed
formatos de cada línea a una sustitución de proceso bash . Estos seeval
editanpaste
para hacer el entrelazado real.tr
luego elimina las nuevas líneas y pestañas innecesarias.Ideona
fuente
PHP, 63 bytes
Nota: utiliza la codificación IBM-850
Corre así:
Explicación
fuente
~■
(binario negado 254) en lugar de"\x1"
(binario 1).$$
!Python 3, 75 bytes
Sé que el otro Python es más corto, pero esta es la primera vez que lo uso
map
en mi vida, así que estoy muy orgulloso de ello.fuente
C,
7571 bytesLa única limitación es la longitud de salida. Actualmente es 99, pero se puede extender fácilmente a 999 (+1 byte).
Sin golf:
fuente
Oracle SQL, 195 bytes
Toma su entrada de una tabla nombrada
i
con columnasa
(que contiene la cadena) yo
(orden de la cadena):Explicación:
Estamos explotando
CONNECT BY
para dividir las cuerdas en cada uno de los personajes que las componen.PRIOR SYS_GUID()
siendoNOT NULL
asegura que no terminemos atrapados en un bucle.Luego concatenamos los caracteres individuales con
LISTAGG
pero los barajamos con unORDER BY
cláusula, ordenándolos primero por su posición en la cadena original y solo luego por la cadena de la que provienen.No es tan breve como las otras respuestas, pero SQL no se entiende realmente como un lenguaje de manipulación de cadenas :)
fuente
Python 2,
12896Esperaba no tener que usar itertools
Sin golf
fuente
Perl 5 , 28 bytes
26 bytes código + 2 para
-0n
.Pruébalo en línea!
fuente
R , 73 bytes
Pruébalo en línea!
Explicación: muy simple (pero detallada), simplemente repita la impresión del
i
carácter de laj
cadena. Afortunadamente,substr
devuelve una cadena vacía si se le da una entrada fuera de rango.fuente
Python, 112 bytes
fuente
x
yy
de?Perl 5 , 53 bytes
Pruébalo en línea!
Método
Crea una matriz bidimensional donde el número de filas es igual a la longitud de la cadena más larga y el número máximo de columnas es igual al número de cadenas. Luego, envíe cada fila de la matriz sin espaciado.
fuente
TXR Lisp , 20 bytes
Correr:
La
weave
función es perezosa, por lo que devuelve una lista, por lo que debemos forzar el resultado a una cadena. Al ser perezoso, puede tejer secuencias infinitas. Por ejemplo, podemos tejer los números naturales pares e impares, que son en sí mismos listas perezosas infinitas:fuente
K (oK) ,
3529 bytesSolución:
Pruébalo en línea!
Ejemplo:
Explicación:
Use la indexación de segundo nivel para extraer índices de 0 a máximo (longitud de la lista aplanada) en todas las listas de entrada. Cualquier indexación más allá del límite de la sublista devolverá un valor nulo. Voltear (gira 90), aplanar y luego extraer los resultados no nulos.
Notas:
i$
) para que obtengamos nulos útiles, como espacio () se considera nulo para una lista de caracteres, lo que significa que no puede distinguir nulos de espacios válidos.
fuente
Jq 1.5 , 49 bytes
Explicación
Ejecución de muestra
Pruébalo en línea
fuente