Inspirado por este post StackOverflow.
Introdução
O trabalho de Bob é criar planilhas e organizá-las. A maneira como ele os organiza é conhecida por muito poucos, exceto por Bob, mas ele cria uma lista de cada uma das planilhas que se enquadram no mesmo grupo. Há um monte de dados na planilha que ele cria, mas há apenas um dado que estamos vendo agora: o número de dias entre o dia em que ele iniciou esse trabalho e o dia em que ele fez a planilha. No primeiro dia, ele criou duas planilhas, anotou as duas 0
e as classificou nos locais apropriados.
Agora, o chefe dele está pedindo uma revisão de quais tipos de planilhas acontecem todos os dias, e é seu trabalho escrever um código que descubra isso para Bob; ele tem muitas planilhas para fazer isso manualmente.
Entrada
As informações de Bob que ele fornece vêm na forma de um array irregular (indexado com 0 ou 1), em que cada dado é do formulário x = a[i][j]
. a
é o que estou chamando de matriz irregular, i
é o tipo de planilha e x
a data em que a matriz foi criada. j
não é importante.
A tarefa
Dada uma matriz irregular de dias de criação de planilhas organizada por seu tipo, retorne uma matriz irregular de tipos de planilhas organizada pelo dia de criação da planilha.
Exemplos
Bob não vai deixar você com esses dados abstratos. Ele me deu um subconjunto de algumas de suas planilhas para ajudá-lo a descobrir o que tudo deveria ser.
Exemplo de entrada (indexado 0):
a = [
[3,2,5,0], # Bob doesn't necessarily sort his lists
[1,3],
[2,1,0,4],
[4,5,3],
[6,6]
]
Exemplo de saída (com comentário, o que obviamente não é necessário):
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
]
Observe que Bob nem sempre cria duas planilhas todos os dias e, portanto, a saída também pode ser irregular. Mas ele sempre cria pelo menos uma planilha todos os dias, portanto, a saída nunca precisará conter matrizes vazias - embora se sua saída tiver matrizes vazias no final, você não precisará removê-las.
Mais casos de teste:
[[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]]
As listas internas da saída não precisam ser classificadas.
Como sempre, não há brechas padrão e, claro, o código mais curto vence.
(Como esta é minha primeira pergunta, informe-me sobre qualquer coisa que eu possa fazer para melhorá-la.)
fonte
[[0 0]]
dar saída[[0 0] []]
?Respostas:
Gelatina ,
1110 bytesEntrada e saída são baseadas em 1.
Experimente online! ou verifique todos os casos de teste (com base em 0 para facilitar a comparação).
fonte
Pitão, 13 bytes
Experimente online
fonte
Pitão , 14 bytes
Suíte de teste.
fonte
Braquilog , 28 bytes
Explicação
Predicado principal, Input (
?
) = uma lista de listasPredicado 1:
Predicado 2:
fonte
Lua, 114 bytes
Ideone it!
Inspirado pela resposta de Dennis em Python 2 .
fonte
JavaScript (ES6), 58 bytes
fonte
CJam (
3029 bytes)Demonstração online
Curiosamente, é mais curto mexer no
W
que usaree
, principalmente porque eu quero que o índice termine em uma variável de qualquer maneira.e]
economizou dois bytes ao encontrar primeiro o elemento máximom
e inicializar uma matriz dem+1
matrizes vazias.Agradecemos a Martin por economizar um byte, armazenando um valor em
X
vez de manipulá-lo pela pilha.NB Se forem permitidas matrizes vazias à direita, existe uma abordagem alternativa de 29 bytes ao inicializar a matriz de tantos dias vazios quanto planilhas:
fonte
CJam, 20 bytes
Agradeço a Peter Taylor por me deixar basear esse código em sua solução e economizar 3 bytes.
Um bloco sem nome que espera a entrada no topo da pilha e a substitui pela saída.
Teste aqui.
Explicação
fonte
Python 2, 82 bytes
Teste em Ideone .
fonte
Mathematica, 35 bytes
Uma função sem nome que aceita e retorna uma lista irregular. Usa índices baseados em 1.
Felizmente,
Max
nivela automaticamente todas as suas entradas, o que nos leva ao índice do último dia, mesmo que a entrada seja uma lista irregular. Em seguida, simplesmente calculamos uma lista de#&@@@#~Position~i
índices diáriosi
. Essa expressão em si encontra a posição dei
dentro da lista irregular (retorne como uma matriz de índices em profundidades sucessivas); portanto, os valores que queremos são os primeiros valores de cada uma dessas listas.#&@@@
é um truque de golfe padrão para recuperar o primeiro elemento de cada sublist, aplicando#&
a cada uma dessas sublistas, que é uma função sem nome que retorna seu primeiro argumento.Como alternativa, podemos definir um operador unário para a mesma contagem de bytes (assumindo um arquivo de origem codificado ISO 8859-1):
fonte
Java, 314 bytes
Detalhado
fonte
Map
?Perl 5, 48 bytes
Uma sub-rotina:
Veja-o em ação como esta:
fonte