Inspirado en esta publicación de StackOverflow.
Introducción
El trabajo de Bob es crear hojas de cálculo y organizarlas. Muy pocos conocen la forma en que los organiza, excepto Bob, pero crea una lista de cada una de las hojas de cálculo que pertenecen al mismo grupo. Hay una gran cantidad de datos en la hoja de cálculo que crea, pero solo estamos viendo un dato en este momento: el número de días entre el día en que comenzó este trabajo y el día en que hizo la hoja de cálculo. El primer día creó dos hojas de cálculo, las anotó a ambas 0
y las ordenó en sus ubicaciones adecuadas.
Ahora, su jefe está pidiendo una revisión de qué tipo de hoja de cálculo ocurre cada día, y es su trabajo escribir un código que lo resuelva para Bob; tiene demasiadas hojas de cálculo para hacerlo a mano.
Entrada
La información de Bob que te da viene en forma de una matriz dentada (indexada 0-o-1) donde cada dato es de la forma x = a[i][j]
. a
es lo que yo llamo la matriz irregular, i
el tipo de hoja de cálculo y x
la fecha en que se creó la matriz. j
no es importante
La tarea
Dado un conjunto irregular de días de creación de hoja de cálculo organizados por su tipo, devuelve un conjunto irregular de tipos de hoja de cálculo organizados por día de creación de hoja de cálculo.
Ejemplos
Bob no te dejará con estos datos abstractos. Me ha dado un subconjunto de algunas de sus hojas de cálculo para ayudarlo a descubrir qué se supone que es todo.
Entrada de ejemplo (indexada a 0):
a = [
[3,2,5,0], # Bob doesn't necessarily sort his lists
[1,3],
[2,1,0,4],
[4,5,3],
[6,6]
]
Ejemplo de salida (con comentario, que por supuesto no es obligatorio):
output = [
[0,2] # On day 0, Bob made one type 0 and one type 2 spreadsheet
[1,2] # On day 1, Bob made one type 1 and one type 2 spreadsheet
[0,2] # On day 2, Bob made one type 0 and one type 2 spreadsheet
[0,1,3] # On day 3, Bob made one type 0, one type 1, and one type 3 spreadsheet
[2,3] # On day 4, Bob made one type 2 and one type 3 spreadsheet
[0,3] # On day 5, Bob made one type 0 and one type 3 spreadsheet
[4,4] # On day 6, Bob made two type 4 spreadsheets
]
Tenga en cuenta que Bob no siempre hace dos hojas de cálculo todos los días, por lo que la salida también puede ser irregular. Pero siempre hace al menos una hoja de cálculo todos los días, por lo que la salida nunca tendrá que contener matrices vacías, aunque si su salida tiene matrices vacías al final, no necesita eliminarlas.
Más casos de prueba:
[[3,5,6,2],[0,0,0],[1,0,3,4]] -> [[1,1,1,2],[2],[0],[0,2],[2],[0],[0]]
[[-1]] -> Undefined behavior, as all input numbers will be non-negative integers.
[[0],[0],[],[0]] -> [[0,1,3]]
No es necesario ordenar las listas internas de la salida.
Como siempre, no hay lagunas estándar y, por supuesto, gana el código más corto.
(Como esta es mi primera pregunta, hágame saber cualquier cosa que pueda hacer para mejorarla).
fuente
[[0 0]]
dar salida[[0 0] []]
?Respuestas:
Jalea ,
1110 bytesLa entrada y la salida están basadas en 1.
Pruébalo en línea!o verificar todos los casos de prueba (basados en 0 para facilitar la comparación).
fuente
Pyth, 13 bytes
Pruébalo en línea
fuente
Pyth , 14 bytes
Banco de pruebas.
fuente
Brachylog , 28 bytes
Explicación
Predicado principal, Input (
?
) = una lista de listasPredicado 1:
Predicado 2:
fuente
Lua, 114 bytes
Ideone it!
Inspirado por la respuesta de Dennis en Python 2 .
fuente
JavaScript (ES6), 58 bytes
fuente
CJam (
3029 bytes)Demostración en línea
Curiosamente, es más corto piratear
W
que usaree
, principalmente porque quiero que el índice termine en una variable de todos modos.e]
ahorró dos bytes al encontrar primero el elemento máximom
e inicializar una matriz dem+1
matrices vacías.Gracias a Martin por un ahorro de un byte al almacenar un valor en
X
lugar de hacer malabares alrededor de la pila.Nota: si se permiten arrays de matrices vacías, existe un enfoque alternativo de 29 bytes al inicializar la matriz de tantos días vacíos como hojas de cálculo:
fuente
CJam, 20 bytes
Gracias a Peter Taylor por permitirme basar este código en su solución y guardar 3 bytes.
Un bloque sin nombre que espera la entrada en la parte superior de la pila y lo reemplaza con la salida.
Pruébalo aquí.
Explicación
fuente
Python 2, 82 bytes
Pruébelo en Ideone .
fuente
Mathematica, 35 bytes
Una función sin nombre que acepta y devuelve una lista irregular. Utiliza índices basados en 1.
Afortunadamente
Max
, aplana automáticamente todas sus entradas, por lo que esto nos da el índice del último día a pesar de que la entrada es una lista irregular. Luego simplemente calculamos una lista de#&@@@#~Position~i
todos los índices del díai
. Esta expresión en sí misma encuentra la posicióni
dentro de la lista irregular (se devuelve como una matriz de índices a profundidades sucesivas), por lo que los valores que queremos son los primeros valores de cada una de esas listas.#&@@@
es un truco de golf estándar para recuperar el primer elemento de cada sublista, aplicando#&
a cada una de esas sublistas, que es una función sin nombre que devuelve su primer argumento.Alternativamente, podemos definir un operador unario para el mismo conteo de bytes (suponiendo un archivo fuente codificado ISO 8859-1):
fuente
Java, 314 bytes
Detallado
fuente
Map
?Perl 5, 48 bytes
Una subrutina:
Véalo en acción así:
fuente