Introducción
Suponga que tiene una lista de listas de enteros (o cualquier objeto realmente, pero sigamos con los enteros por simplicidad). Las listas pueden tener diferentes longitudes y algunas de ellas pueden estar vacías. Escribamos las listas en formato tabular:
[[ 1, 2, 3, 4, 5],
[ 6, 7],
[ 8, 9, 10, 11],
[],
[12, 13, 14],
[15, 16, 17, 18]]
Esta tabla tiene 5 columnas verticales, que contiene los números 1, 6, 8, 12, 15
, 2, 7, 9, 13, 16
, 3, 10, 14, 17
, 4, 11, 18
, y 5
. Si invertimos cada columna, se obtienen las listas 15, 12, 8, 6, 1
, 16, 13, 9, 7, 2
, 17, 14, 10, 3
, 18, 11, 4
, y 5
. Vuelva a conectar esos números en las columnas de la tabla manteniendo las longitudes de las filas igual que antes:
[[15, 16, 17, 18, 5],
[12, 13],
[ 8, 9, 14, 11],
[],
[ 6, 7, 10],
[ 1, 2, 3, 4]]
Su tarea es implementar esta operación.
Entrada y salida
Su entrada es una lista de listas de enteros no negativos, que representan las filas. Las filas pueden tener diferentes longitudes, y algunas de ellas pueden estar vacías. Siempre habrá al menos una fila. Su salida es el resultado de invertir cada columna, como se detalla anteriormente. La entrada y salida pueden estar en cualquier formato razonable.
El conteo de bytes más bajo en cada idioma gana. Se aplican reglas estándar de código de golf .
Casos de prueba
[[]] -> [[]]
[[],[]] -> [[],[]]
[[8,5,1]] -> [[8,5,1]]
[[1,200],[0,3]] -> [[0,3],[1,200]]
[[],[3,9],[1],[]] -> [[],[1,9],[3],[]]
[[],[5,8,7],[0,6,5,7,1]] -> [[],[0,6,5],[5,8,7,7,1]]
[[1,8,5],[7,5,4],[],[1]] -> [[1,5,4],[7,8,5],[],[1]]
[[],[],[2],[],[31],[],[5],[],[],[],[7]] -> [[],[],[7],[],[5],[],[31],[],[],[],[2]]
[[1,10,100,1000],[2,20,200],[3,30],[4],[5,50,500],[6,60],[7]] -> [[7,60,500,1000],[6,50,200],[5,30],[4],[3,20,100],[2,10],[1]]
[[8,4],[3,0,4,8,1],[8],[0,8],[9,7,1,6],[3,8,1,9,5]] -> [[3,8],[9,7,1,9,5],[0],[8,8],[3,0,1,6],[8,4,4,8,1]]
[[3,9,3],[5],[1],[3,5],[9,0,6,2],[1,3],[4,9,2],[6,6,7,8,7]] -> [[6,6,7],[4],[1],[9,9],[3,3,2,8],[1,0],[5,5,6],[3,9,3,2,7]]
[[8,5,6],[3,5,2,4,9],[4,3,8,3,7],[6,1,1],[1,8,9,9],[9,1,2],[8,7]] -> [[8,7,2],[9,1,9,9,7],[1,8,1,3,9],[6,1,8],[4,3,2,4],[3,5,6],[8,5]]
[[2,4],[1,4],[0,8,7,3],[4,9,2,5],[2,8,0],[0,8,3],[7,3,1],[],[3,3,7,8]] -> [[3,3],[7,3],[0,8,7,8],[2,8,1,5],[4,9,3],[0,8,0],[1,4,2],[],[2,4,7,3]]
[[1,9],[3],[2,4,5]] -> [[2,4],[3,null],[1,9,5]]
. ej. )Respuestas:
Jalea , 16 bytes
Pruébalo en línea! o verificar todos los casos de prueba .
Cómo funciona
fuente
ṣ
línea superior es muy inteligente! (ḟṚṁṣj
¿⁸ḟ⁹Ṛṁ⁸ṣ⁹¤j⁹
verdad?) De lo contrario, tuve esto por un byte másJapt ,
1513 bytesahorró 2 bytes gracias a @Shaggy
¡Pruébelo en línea!
La segunda línea se puede eliminar si se nos permite rellenar las filas con valores nulos, ahorrando 4 bytes.
Explicación
fuente
l;
conÊ
ymf_Ä
con®fÄ
.mf
parece funcionar para la segunda línea.mf
sin embargo, desafortunadamente ...APL (Dyalog Unicode) ,
201916 bytes SBCS-4 gracias a ngn.
Programa completo Solicita la entrada de STDIN.
Pruébalo en línea!
Explicación con ejemplo de recorrido
⎕
solicitud de entrada evaluada[[1,8,5],[7,5,4],[],[1]]
*
elevar e al poder de eso ( e n que asegura que no habrá ceros)[[2.7,2981,148.4],[1096.6,148.4,54.6],[],[2.7]]
↑
Mezcle las listas en una única matriz, rellenando con ceros:┌ ┐
│2.7E0 3.0E3 1.5E2│
│1.1E3 1.5E2 5.5E1│
│0.0E0 0.0E0 0.0E0│
│2.7E0 0.0E0 0.0E0│
└ ┘
⍉
transponer┌ ┐
│2.7E0 1.1E3 0.0E0 2.7E0│
│3.0E3 1.5E2 0.0E0 0.0E0│
│1.5E2 5.5E1 0.0E0 0.0E0│
└ ┘
⌽@×⍤1
invertir los elementos positivos de cada fila┌ ┐
│2.7E0 1.1E3 0.0E0 2.7E0│
│1.5E2 3.0E3 0.0E0 0.0E0│
│5.5E1 1.5E2 0.0E0 0.0E0│
└ ┘
⍉
transponer┌ ┐
│2.7E0 1.5E2 5.5E1│
│1.1E3 3.0E3 1.5E2│
│0.0E0 0.0E0 0.0E0│
│2.7E0 0.0E0 0.0E0│
└ ┘
↓
dividir la matriz en una lista de listas[[2.7,148.4,54.6],[1096.6,2981,148.4],[0,0,0],[2.7,0,0]]
0~¨⍨
eliminar ceros de cada lista[[2.7,148.4,54.6],[1096.6,2981,148.4],[],[2.7]]
⍟
logaritmo natural[[1,5,4],[7,8,5],[],[1]]
fuente
K4 , 36 bytes
Solución:
Ejemplos:
Explicación:
Este ha sido un dolor, y todavía estoy trabajando para simplificar la indexación elidida.
En lugar de indexar en, por ejemplo,
x[0]
lo que devolvería la primera fila , queremos tomar la primera columna , que se puede hacer usandox[;0]
.Sin embargo, pasar la variable
y
ax[;]
trata lo trata como six[y]
nox[;y]
estuviera empujando::
allí:x[::;]
.Esto es equivalente a voltear la lista de listas, ¡pero voltear requiere que todas las listas tengan la misma longitud!
fuente
Haskell , 174 bytes
Pruébalo en línea!
Ungolfed / Explicación
La idea es envolver todos los elementos en
[]
y rellenar las filas con[]
(resultó ser más corto que el relleno con un entero negativo, esto también permite entradas negativas, lo cual es bueno), luego transponer, invertir todas las filas y transponer nuevamente y aplanar cada fila :* Esta función de transposición (
h
) simplemente devuelve la lista si no hay elementos en absoluto.La función inversa tiene que ignorar los
[]
elementos (por ejemplo,[[],[1],[],[3],[4]]
->[[],[4],[],[3],[1]]
), lo hace al recibir dos argumentos: el primero son los elementos en orden inverso (por ejemplo[4,3,1]
) y el segundo la fila original.fuente
Python 2 ,
11110592 bytesPruébalo en línea!
fuente
print
lugar dereturn
guardar un byte.JavaScript (ES6),
7976 bytesEditar: Guardado 3 bytes gracias a @ETHproductions.
fuente
APL (Dyalog Unicode) , SBCS de 27 bytes
Pruébalo en línea!
fuente
@
pero no lo tengo.Clojure, 123 bytes
Yo estaba esperando
(+ nil)
lanzar una excepción, pero se evalúa comonil
: oEsto funciona sin relleno, en cambio, cuenta cuántas de las filas anteriores son al menos tan largas como la fila actual
R
.fuente