Esse desafio já descreve o dropsort. No entanto, sou meio preguiçoso e realmente só preciso que minha matriz seja um pouco mais ordenada do que antes, não precisa ser ordenada completamente .
No Drop Sort, eliminamos cada elemento menos que qualquer elemento anterior a ele. No Lazy Drop Sort, eliminamos todos os elementos menos do que o estritamente anterior .
Aqui está um exemplo. Considere a seguinte matriz:
8 6 9 9 7 2 3 8 1 3
Vamos marcar cada elemento menor que o anterior.
8 6 9 9 7 2 3 8 1 3
^ ^ ^ ^
Observe como nem 3
foi marcado nem o último 8
. Eles são todos maiores que o elemento único à esquerda deles.
Completando o algoritmo, removendo os elementos marcados, obtemos:
8 9 9 3 8 3
Isso basicamente parece mais organizado. Meio. Sou preguiçosa.
Sua tarefa, como você já deve ter deduzido, é implementar esse algoritmo.
A entrada é uma matriz de pelo menos 1 número inteiro positivo entre 1 e 9, para que você também possa pegar uma sequência de dígitos.
Isso é código-golfe , o menor número de bytes vence!
Casos de teste adicionais:
1
1
1 2 3
1 2 3
5 3 1
5
1 2 3 2 1
1 2 3
1 1 1 9 9 9 1 1 1 9 9 9 1 1 1
1 1 1 9 9 9 1 1 9 9 9 1 1
9 9
9 9
5 2 4 2 3
5 4 3
Respostas:
Casca , 4 bytes
Experimente online!
Explicação
fonte
JavaScript (ES6),
2825 bytesGuardado 3 bytes graças a @Shaggy
Experimente online!
fonte
n=>p<=n
teria olhado ;-) incrível(n=p)=>p<=(p=n)
funciona bem;)p
pela primeira vez, quando ainda não está definido?a
é inicialmente definido como a matriz de entrada ea-1
resultaria emNaN
(a menos que contenha um único número inteiro; nesse caso, ele é coagido a esse número inteiro).R , 27 bytes
Experimente online!
fonte
MATL ,
98 bytesGuardou um byte graças a Giuseppe.
Experimente online!
Explicação:
fonte
Perl 5 .10.0 +
-nl
, 16 bytesExperimente online!
fonte
perl6 -ne '$/>$_||.say;$/=$_'
Haskell, 29 bytes
apenas uma simples compreensão da lista.
fonte
Japonês ,
87 bytesGuardado 1 byte graças a @Oliver
Teste online!
Alternativas:
fonte
Stax , 5 bytes
Execute e depure isso online
Ao descompactar, desfeitar e comentar o código, obtemos isso.
Execute este
A ordem das instruções é incômoda, mas há uma razão para isso. A embalagem do código fonte Stax nem sempre produz o mesmo tamanho de saída para a mesma entrada de tamanho. Basicamente, você tem a chance de salvar um byte se o último caractere da fonte tiver um código de caractere mais baixo. Bem,
!
tem um dos códigos mais baixos que você pode obter para um caractere imprimível. (33 especificamente) Muitos programas stax ASCII de 6 bytes não podem ser menores. Mas se eles terminam com a!
, podem. Portanto, o motivo dessa ordem específica de instruções é garantir que o lógico não termine no final do programa.fonte
J, 12 bytes
Explicação:
Exemplos:
Experimente online!
fonte
Gelatina , 6 bytes
A E / S está em cadeias.
Experimente online!
fonte
×
não deve funcionar para a repetição de caracteres, mas funciona.Java 8,
665548 bytes-11 bytes após uma dica de @ OlivierGrégoire .
-7 mais bytes graças a @ OlivierGrégoire .
Explicação:
Experimente online.
fonte
~0
quando é basicamente-1
. Pessoalmente, eu escolheria a solução mais intuitiva se a contagem de bytes tivesse o mesmo comprimento (excetowhile(...)
vsfor(;...;)
, nesse caso, eu prefiro ofor
. Obrigado por mais -7 bytes, no entanto. :) :)Integer.MIN_VALUE
(que é, em seguida1<<31
, eu acho ...) ;-)Oitava , 21 bytes
Experimente online!
Explicação:
Pegue um vetor
x
como entrada e crie um vetor[0, diff(x)<0]
, ondediff(x)
é um vetor com a diferença entre todos os elementos adjacentes. Mantenha apenas os negativos comparando-os a zero, fornecendo uma lista de todos os elementos que queremos eliminar.Em seguida, selecionamos os elementos do vetor de entrada que queremos manter.
fonte
V , 25 bytes
Experimente online!
Hexdump:
Pior idioma para o trabalho. Mas fiz isso por um desafio .
fonte
k$yl+@"òç-/d
espanhol?k$yl+@"òç-/d
pode ser traduzido liberalmente como Ouch, quem diabos deixou a porta do armário aberta?Triangularidade , 71 bytes
Experimente online!
Como funciona?
fonte
)IEL)rFD)2+)IE)w+h)2_stDO={M)IEm}
que seria expandido para sua resposta atual?)IEL)rFD)2+)IE)w+h)2_stDO={M)IEm}
seria seu código, ele seria expandido para o modelo atual e, em seguida, execute os comandos 2D nesse modelo expandido. EDIT:.....).....\n....IEL....\n...)rFD)...\n..2+)IE)w..\n.+h)2_stDO.\n={M)IEm}...
e.....).........IEL.......)rFD).....2+)IE)w...+h)2_stDO.={M)IEm}...
e)IEL)rFD)2+)IE)w+h)2_stDO={M)IEm}
todos os três seriam exatamente o mesmo programa.Python , 40 bytes
Experimente online!
Insira como tupla de caracteres.
Python 3 , 41 bytes
Experimente online!
Entrada de string.
Python 2 , 41 bytes
Experimente online!
Entrada de string, apenas porque as strings são maiores que,
id
mas os números são menores.fonte
Wolfram Language (Mathematica) , 33 bytes
Experimente online!
Como funciona
O código
# - {0}~Join~Most@#
transforma uma matriz{a,b,c,d,e,f}
em{a,b-a,c-b,d-c,e-d,f-e}
. A aplicaçãoArg
a isso define números negativos paraPi
e números não negativos para0
.Pick[#, ..., 0]&
seleciona as entradas de#
onde...
tem um0
: no nosso caso, exatamente os elementos que produzem um número não negativo quando você subtrai o elemento anterior. Em outras palavras, essas são exatamente as entradas que queremos manter ao preguiçoso.fonte
Maravilha , 27 bytes
Exemplo de uso:
Explicação
Versão não destruída:
Anexe previamente
0
, obtenha a lista de pares consecutivos, mantenha os itens da lista em que o primeiro número <= segundo número, obtenha o segundo número de cada par.fonte
Wolfram Language (Mathematica) , 20 bytes
Experimente online!
Explicação
Input = {8, 6, 9, 9, 7, 2, 3, 8, 1, 3}
Agrupe elementos consecutivos que estão estritamente diminuindo:
{{8, 6}, {9}, {9, 7, 2}, {3}, {8, 1}, {3}}
Tome o primeiro elemento de cada um:
{8, 9, 9, 3, 8, 3}
fonte
##>0
é chique e tudo mais, mas na verdade não salva nada por#>#2
aqui;) (o que faria seu programa funcionar com números inteiros arbitrários, embora não seja necessário).Python 2 ,
52464542 bytesExperimente online!
Salvou:
fonte
SWI-Prolog, 44 bytes
Uso: Chame " Lista -X" onde Lista é uma lista entre colchetes e separada por vírgula, por exemplo [1,4,5,1,11,6,7].
fonte
APL + WIN, 14 bytes
Solicita a entrada na tela de um vetor de números inteiros.
fonte
05AB1E , 6 bytes
Experimente online!
Explicação
fonte
Kotlin , 39 bytes
Experimente online!
Filtre os itens que são o primeiro item (índice == 0 ou ainda menor índice <1) OU o Valor atual é maior ou igual ao item anterior (a [i-1]).
fonte
APL (Dyalog Unicode) , 11 bytes
Experimente online!
Na verdade, isso é bastante semelhante à resposta de Graham, mas em Dyalog, e desenvolvida de forma independente. Além disso, mais simétrico.
fonte
K4 , 10 bytes
Solução:
Exemplo:
Explicação:
Encontre índices onde o elemento é menor que o anterior, remova esses índices da entrada
fonte
Anexo , 24 bytes
Experimente online!
Explicação
Mask
seleciona todos os elementos de seu segundo argumento que correspondem aos elementos de verdade em seu primeiro argumento.1'(Delta!_>=0)
calcula os índices que correspondem aos elementos que deveriam estar na matriz final.Outras tentativas
28 bytes (sem ponto):
~Mask#(1&`'##Delta#`>=#C[0])
32 bytes:
{Mask[1'(&`<= =>Slices[_,2]),_]}
fonte
C # (.NET Core) , 33 + 18 = 51 bytes
Experimente online!
basicamente, a instrução é onde x é o primeiro int na matriz ou é maior ou igual ao número anterior, mantenha-o. Caso contrário, solte-o.
fonte
IEnumerable
. Não éToArray()
necessário.System.Collections
, e isso negaria todos os bytes salvos para remover o arquivoToArray()
.IEnumerable
na resposta, apenas a use como o tipo de retorno.Swift 4 ,
5655 bytesExperimente online!
Explicação
fonte
Geléia , 9 bytes
Experimente online!
Isso parece bastante volumoso, não seria tão surpreendente se houver uma maneira melhor.
fonte
Flak cerebral ,
136, 120 bytesAqui está formatado e "legível" .
Experimente online!
fonte