Graças à comunidade PPCG, o Papai Noel conseguiu remanufaturar todos os seus presentes e, após a linha de montagem, os presentes estão prontos para serem transportados para as docas de transporte!
Cada uma das docas de transporte do Papai Noel tem apenas uma variedade de tamanhos atuais, porque os trenós de transporte são especializados para um tamanho específico (mais leve e seria um desperdício, mais pesado e o trenó não seria capaz de lidar com a carga). Assim, ele precisa de você para ajudá-lo a pegar seus presentes e classificá-los nas docas de transporte corretas.
Desafio
Dada uma lista e os intervalos da doca de transporte, organize os presentes de maneira estável na ordem correta.
Vamos tomar isso por exemplo: os presentes são [5, 3, 8, 6, 2, 7]
e os intervalos de encaixe são [[1, 5] and [6, 10]]
.
Os presentes 5
, 3
e 2
ir para a primeira doca e os presentes 8
, 6
e 7
ir para o segundo dock. Isso pode ser mostrado como [[5, 3, 2], [8, 6, 7]]
. Essa lista estará mais próxima de ser classificada do que a entrada, mas stably
significa que dentro de cada estação, a ordem dos presentes deve ser a mesma da ordem da entrada (caso contrário, você pode classificar a lista inteira).
Sua saída final para este caso seria [5, 3, 2, 8, 6, 7]
(como uma lista simples).
Especificações de formatação
Irá ser dada entrada como uma lista de números inteiros plana e uma lista dos intervalos em qualquer formato razoável (por exemplo, o intervalo para o processo acima pode ser dada como [[1, 5], [6, 10]]
, [1, 5, 6, 10]
ou [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]
). Sua saída deve ser uma lista simples de números inteiros em qualquer formato razoável.
A entrada pode conter valores duplicados; Nesse caso, você precisa retornar todas as instâncias delas. Todos os tamanhos atuais estarão exatamente em um intervalo de tamanho e você pode assumir que os intervalos nunca se sobrepõem. Pode haver falhas nos intervalos, desde que todos os tamanhos atuais sejam cobertos.
Regras
- As brechas padrão se aplicam
- Isso é código-golfe , então a resposta mais curta em bytes vence
- Nenhuma resposta será aceita
- Você pode assumir que não haverá intervalos vazios (
[7, 4]
seria inválido porque os intervalos aumentam)
Casos de teste
[1, 2, 3, 4, 5, 6, 7] ; [[1, 3], [4, 7]] => [1, 2, 3, 4, 5, 6, 7]
[1, 2, 3, 4, 5, 6, 7] ; [[4, 7], [1, 3]] => [4, 5, 6, 7, 1, 2, 3]
[7, 3, 5, 4, 6, 1, 2] ; [[1, 3], [4, 5], [6, 7]] => [3, 1, 2, 5, 4, 7, 6]
[4, 7, 6, 3, 5, 2, 1] ; [[1, 4], [5, 7]] => [4, 3, 2, 1, 7, 6, 5]
[1, 1, 3, 3, 6, 4, 7] ; [[1, 4], [6, 7]] => [1, 1, 3, 3, 4, 6, 7]
Nota: Eu me inspirei para esta série de desafios da Advent Of Code . Não tenho afiliação com este site
Você pode ver uma lista de todos os desafios da série consultando a seção 'Vinculado' do primeiro desafio aqui .
fonte
Respostas:
Haskell , 26 bytes
Experimente online! Exemplo de uso:
[1,2,3,4,5,6,7] # [[1,2,3],[4,5,6,7]]
rendimentos[1,2,3,4,5,6,7]
.fonte
Gelatina , 4 bytes
Experimente online!
Leva como entrada a lista atual, faixas completas.
fonte
fþF
funciona no Jelly, por 3 bytes . O crédito vai para Adnan .Mathematica, 39 bytes
-22 bytes de JungHwan Min
-4 bytes de Martin
Experimente online!
fonte
Range
tudo, apenas usando os intervalos expandidos como entrada.Pitão , 5 bytes
Experimente aqui!
Pitão , 10 bytes
Experimente aqui!
Como eles trabalham
Toma as docas primeiro, com todos os números inteiros nos intervalos e depois os presentes em uma nova linha.
fonte
Python 2 ,
4946 bytesgraças a @HyperNeutrino por -3 bytes
Experimente online!
Ungolfed
Experimente online!
fonte
05AB1E , 3 bytes
Experimente online! (obrigado a Adnan por me informar que
δ
existe, -1 byte)Como funciona
fonte
€Ã˜
parece não funcionar.€Ã˜
falha é porqueÃ
leva dois argumentos e€
espera uma função com um argumento; portanto, ele retorna[[]]
(acho que isso é um bug), então˜
achatará, retornando[]
.ε
, porém, funciona de maneira diferente. Para cada elemento do item superior, ele cria uma nova pilha e, em seguida, retorna a parte superior de cada nova pilha; portanto, quando não há itens suficientes para uma função, recebe uma entrada implícita.δØ
que você está procurando?Retina ,
3736 bytesExperimente online! Recebe entrada como uma lista de presentes na primeira linha e uma lista de intervalos na segunda linha; o link inclui um cabeçalho para dividir os casos de teste no formato desejado. Editar: salvou 1 byte graças a @MartinEnder. Explicação: O primeiro estágio corresponde aos presentes e localiza o encaixe correspondente. Os presentes são classificados pela substring do início da linha até o
[
, agrupando os presentes por doca. O segundo estágio exclui as docas.fonte
Alistar , 3 bytes
Experimente online!
Como funciona
fonte
APL + WIN, 29 bytes
Solicita a entrada na tela para números inteiros e intervalos. Os números inteiros como uma lista simples e os intervalos como um vetor aninhado, por exemplo, caso 3:
Explicação:
fonte
C ++, 127 bytes
Aceite a entrada como duas matrizes representadas por pares de ponteiros
[start, end)
.Experimente online!
fonte
[&](int a)->int{a=a>=
vez de[&](int a){return a>=
não salva nenhum bytes. /#import<algorithm>
pode ser#import<regex>
, pelo menos no TIO. Descobri que após a pesquisa exaustiva ("pesquisa binária manual") todos os cabeçalhos listados nesta página e este é o mais curto. / Além disso, +1 de mim.J, 15 bytes
Aceita a entrada como argumento à esquerda e os intervalos como argumento à direita . Os intervalos são listas em caixa dos intervalos completos.
por exemplo, para o primeiro intervalo:
Experimente online!
Explicação
fonte
J ,
26bytes 242 bytes graças a cole
Como funciona:
O argumento esquerdo contém os intervalos.
-&1 0"1@[
diminui o limite inferior de cada intervalo em 1I."1]
verifica em que faixa se encaixa cada presente1=
está na faixa correta]<@#~
copia e caixas os presentes que estão no intervalo atual;
- raze (desembalagem)Experimente online!
fonte
(0 4,:_3 _1) f _2 _1 0 1 2
)R ,
113485541 bytesUma versão anterior não classificava corretamente os objetos quando as docas não estavam em ordem crescente.
Experimente online!
Toma
D
como uma lista de vetores de intervalos, ou seja,list(4:7,1:3)
seria[[4, 7], [1, 3]]
.Provavelmente a resposta ingênua que eu deveria ter chegado há séculos; imprime em stdout.
fonte
Japonês , 6 bytes
Tente
Explicação
Entrada implícita da matriz
U
(presentes) e 2d-matrizV
(faixas completas). Classifique (ñ
) os presentes passando-os por uma função (@
) que obtém o índice do primeiro elemento (b
) emV
que contém (ø
) o presente atual (X
).fonte
Python 2,
9785 bytes-11 bytes de ovs
-1 byte do Sr. Xcoder
Experimente online!
Classifica a lista usando uma lambda recursiva como chave. Explicação
em breve ™abaixo.Explicação:
fonte
Javascript ES6,
534745 bytesExperimente online!
fonte
PowerShell , 37 bytes
Experimente online!
Toma
$a
como uma matriz literal dos presentes e$b
como uma matriz de matrizes, cada uma das quais é o intervalo completo (por exemplo, em@(1,2,3,4,5)
vez de@(1,5)
). Em seguida, passamos um loop sobre cada item$b
com|%{...}
. Por dentro, precisamos definir um auxiliar$i
para ser o item atual e, em seguida, usar umaWhere-Object
cláusula$a
para extrair apenas os itens que são-in
a$b
matriz atual .Esses são deixados no pipeline e a saída está implícita. Como o comportamento padrão de
Write-Output
inserir uma nova linha entre os elementos da matriz, é isso que obtemos. Aqui está uma versão ligeiramente aprimorada que é-join
editada por vírgulas em vez de uma nova linha, apenas para mostrar diferenças.fonte
Vermelho , 73 bytes
Experimente online!
fonte
C # (.NET Core) , 50 + 18 bytes
+18 bytes de
É preciso uma coleção de presentes e uma coleção de matrizes para docas.
Experimente online!
fonte
Lote do Windows (CMD),
9079 bytesUse o formato de fim de linha LF. Cada caractere de fim de linha pode ser contado como 1 byte.
Nenhum TIO (porque o TIO usa Linux)
Pegue a lista nos argumentos da linha de comando e varia de
stdin
.Por exemplo, se o programa for executado (suponha que o arquivo seja nomeado
r1.cmd
)e com
stdin
entrada, o programa será enviado para
stderr
com o formato(corresponde à sequência de saída
3 1 2 5 4 7 6
)Explicação:
Código não-bloqueado (com interação ativada se
true
for passado como argumento 1; solicitar a lista destdin
, usegoto
para evitar o estouro de pilha - na verdade, eu apenas tentei executar um script que se chama mais de 70000 vezes sem ver nenhum problema, então acho que deve ser bastante seguro):fonte
(%*)
. Feito isso, é possível%0 %*
reiniciar o script após o processamento de cada intervalo. (Na verdade, eu acabei com uma contagem de bytes maior porque eu usei a sua versão interativa com os toques agradáveis&&
,exit/b
eecho
como ponto de partida.)%1
mas as aspas"
fazem o espaço não funcionar como separadores, então acabei usandoset /p
.$~1
...Limpo , 59 bytes
Experimente online!
Toma duas listas, retorna uma lista.
fonte
Wolfram Language (Mathematica) , 34 bytes
Experimente online!
é oFunction
operador.Esta é uma função ao curry sem nome que deve ser chamada primeiro com a lista de intervalos de encaixe (expandidos) e depois com a lista de presentes. Por exemplo, se você atribuir a função a
f
:A lista de presentes é simplesmente classificada pela posição de primeiro nível do valor na lista de intervalos de encaixe. Precisamos agrupar a
SortBy
função em uma lista para tornar a classificação estável.fonte
Julia 0.6 ,
3130 bytesExperimente online!
Redefine o
%
operador e mapeia a interseção do conjunto∩()
sobre as docas,d
mantendo a ordem e a multiplicidade da primeira entrada, a lista de presentesp
.vcat
com a entrada expandida para vários argumentos,...
nivela a matriz aninhada resultante.Editar, -1Byte: compreensão da lista em vez de
map()
.fonte