Dada uma lista ordenada de números (possivelmente com zeros à esquerda), organize os números verticalmente e deixe todos os zeros caírem até o fundo e todas as saliências caírem no slot mais aberto. Produza os números inteiros resultantes, removendo os zeros à esquerda.
Exemplo Trabalhado
Digamos que recebemos o seguinte como entrada:
['0000312941295', '239124000124581598', '32852353800451258', '10235923505185190', '1491359102149']
Primeiro, organizamos verticalmente:
0000312941295
239124000124581598
32852353800451258
10235923505185190
1491359102149
Em seguida, coluna a coluna, solte os zeros "através" dos outros números para que eles fiquem embaixo e "empurre" os outros números para cima. Isso resultaria nos dois primeiros passos da seguinte maneira:
2000312941295
339124000124581598
12852353800451258
10235923505185190
0491359102149
^
2300312941295
329124000124581598
14852353800451258
10235923505185190
0091359102149
^
2390312941295
328124000124581598
14252353800451258
10935923505185190
0001359102149
^
...
2391312941295
328524538124581598
14232323525451258
10915991001185190
0000350000049
^
Em seguida, solte todas as saliências como se a gravidade as estivesse puxando para baixo como areia.
2391312941295
3285245381245 1598
14232323525458258
10915991001181190
00003500000495
^
2391312941295
3285245381245 598
14232323525458158
10915991001181290
000035000004951
^
...
2391312941295
3285245381245
14232323525458159
10915991001181258
000035000004951908
^
Finalmente, produza esses números, removendo os zeros à esquerda. Para o nosso exemplo trabalhado, output:
[2391312941295, 3285245381245, 14232323525458159, 10915991001181258, 35000004951908]
Para outro exemplo, suponha a entrada de [1234000,12345678,1234,12340608,12341234]
.
1234000
12345678
1234
12340608
12341234
Solte os zeros:
1234
12345678
1234163
12340208
12340004
Solte os demais dígitos pendentes:
1234
1234567
12341638
12340208
12340004
Saída é [1234, 1234567, 12341638, 12340208, 12340004]
.
Regras
- A entrada pode conter zeros à esquerda. A saída não deve conter zeros à esquerda.
- Se aplicável, você pode supor que a entrada / saída caiba no tipo Inteiro nativo do seu idioma.
- A entrada e saída podem ser fornecidas por qualquer método conveniente .
- Um programa completo ou uma função são aceitáveis. Se uma função, você pode retornar a saída em vez de imprimi-la.
- As brechas padrão são proibidas.
- Isso é código-golfe, portanto todas as regras usuais de golfe se aplicam e o código mais curto (em bytes) vence.
fonte
14232323525458159
para14232323525458160
)and all overhangs drop to the bottom-most open slot
foi uma boa solução para o meu desafio quebrado :).. 1234
é muito diferente da saída1234
.Respostas:
Gelatina , 8 bytes
Experimente online!
Como funciona
fonte
Sort each row of the transpose by logical NOT, pushing 0's to the end.
Isso é garantido para ser um tipo estável?sorted
, que é garantido como estável.ṚZẸÞ€ZṚḌ
:)05AB1E , 11 bytes
Experimente online!
fonte
†
antes, bom.Casca , 12 bytes
Experimente online!
Explicação
fonte
Python 2 , 118 bytes
Experimente online!
Versão ungolfed
As duas primeiras linhas são equivalentes a
map(lambda*a...)
, o comportamento padrão se formap
preencher comNone
s se uma lista for mais curta que a outra.e>'0'
é equivalente acell != '0' and cell != None
, porque se for qualquer dígito (1 a 9), ele terá um ponto de código mais alto e a string (qualquer) será maior queNone
.fonte
Pitão , 11 bytes
Experimente online!
fonte
Retina 0.8.2 ,
9592 bytesExperimente online! Explicação: O primeiro estágio elimina os dígitos pendentes, pois isso facilita (editar: ainda mais fácil para economizar 3 bytes) que o segundo estágio elimine os zeros. O terceiro estágio remove os zeros à esquerda.
fonte
Ruby , 104 bytes
Experimente online!
Explicação
fonte
APL (Dyalog Unicode) , SBCS de 26 bytes
Função de prefixo tácito anônimo, tomando uma matriz de caracteres como argumento e retornando uma lista de números.
Experimente online!
⍉
transponha a entrada (como precisamos trabalhar nas colunas)' 0'(
...)⍤1⍨
aplicar a seguinte função tácito para cada linha (sub-conjunto de tensor rank 1) com' 0'
como direito argumento (⍨
swaps os argumentos):∩
intersecção da linha e∘
e⊃
o primeiro de' 0'
(ou seja
row∩' '
, todos os espaços de cada linha),
Seguido por…~
a diferença definida(ou seja
row~' 0'
, a linha, mas sem espaços e zeros),
Seguido por…∩
intersecção da linha e∘
e⊃
o primeiro∘
de⌽
ser revertidas' 0'
(ou seja
row∩'0'
, todos os zeros de cada linha)⍎⍤1
avaliar cada linha (sub-matriz do tensor rank 1)∘
da⍉
transposição (ou seja, cada coluna; as linhas de entrada agora modificadas)fonte
⍎⍤1∘⍉{⍵[⍋3|2×' 0'⍳⍵]}⍤1∘⍉
(⎕io←0
) Pode ser golfable mais, por exemplo, eu não explorar dyadic⍋
⍎⍤1⍉{⍵[⍋3|2×' 0'⍳⍵]}⍤1⍉⎕
Perl 5 , -p0 77 bytes
Contagem de estilos antigos: 79 bytes (
+2
parap0
)Forneça entrada como linhas no STDIN sem nova linha final (caso contrário, tudo será visto como saliência e a nova linha final aumentará para o topo conforme a cadeia de entrada trava). Por exemplo:
Foi um pouco complicado fazer com que o excesso caísse e o
0
caísse em uma regexExperimente online!
fonte
Ruby , 203 bytes
Experimente online!
Um lambda aceitando uma matriz de seqüências de caracteres e retornando uma matriz de ints. Sinto como se estivesse perdendo alguma coisa; isso parece enorme: /
fonte
APL (Dyalog Classic) ,
242322 bytesExperimente online!
com base na solução de Adam
fonte