Dado um número inteiro positivo, podemos formar um novo número descrito por seus dígitos tomados em pares (com um 0 inicial adicionado para números com número ímpar de dígitos).
Por exemplo:
1234 pode ser lido como um 2, três 4s - portanto, a saída para 1234 é 2444.
643 tem um número ímpar de dígitos, portanto, um zero à esquerda é adicionado para torná-lo uniforme. Então, 0643 pode ser lido como: zero 6s, quatro 3s; portanto, a saída seria 3333.
(Este é o OEIS A056967 ).
Tarefa: Dada uma matriz de números inteiros positivos, classifique-os pelo valor descrito pelo par de dígitos, em ordem crescente. A ordem não importa entre os números de entrada que levam ao mesmo valor.
Entrada : uma matriz / lista / conjunto de números inteiros positivos. Zeros à esquerda na entrada não são permitidos e são inseridos como strings / listas de dígitos / etc. não são permitidos - as entradas devem ser tão próximas a um tipo inteiro / numérico quanto o seu idioma é capaz de usar.
Resultado : a matriz classificada da maneira mencionada acima, retornada de qualquer uma das formas usuais (função retorna valor / STDOUT / grita no vazio / etc.) Você pode imprimi-las individualmente, retorná-las como números, seqüências de caracteres ou listas de dígitos.
Casos de teste
Input
Output
[19, 91, 2345, 2023]
[19, 2023, 2345, 91]
[25257, 725, 91, 5219, 146125, 14620512]
[725, 5219, 14620512, 91, 146125, 25257]
[123130415 3335 91 111111111 528 88]
[528, 111111111, 123130415, 3335, 88, 91]
[1 21 33 4 5]
[1 4 5 21 33]
[3725, 10, 2537, 1, 1225, 2512]
[10, 1, 1225, 2512, 2537, 3725]
[125, 26, 1115, 1024]
[1115, 1024, 125, 26]
(No quarto caso de teste, 1, 4 e 5 são avaliados como 0 e, portanto, podem ser classificados entre si em qualquer ordem. Da mesma forma, no quinto caso de teste, 10 e 1 avaliam como 0s e, portanto, podem ser classificados em qualquer pedido.)
(Relacionado: Diga o que vê , Um 1, Dois 1, Um 2 Um 1
Agradecemos a Kevin Cruijssen pela ajuda para esclarecer a pergunta na Sandbox.
strtoi
retorna um número inteiro - correto? Se assim for, tudo bem, é legal como é.Respostas:
APL (Dyalog) , 26 bytes
Obrigado ngn por salvar 1 byte :)
Experimente online!
Inspiração de dzaima & ngn
fonte
100⊥⍣¯1⊢⍵
->⍵⊤⍨⍵/100
trabalha para 26.100⊥⍣¯1⊢⍵
->⍵⊤⍨⍴⍨100
{⍵[⍋⌽↑,⍨⌿⍴⌿⊃⊥⍣¯1/10 100⍵]}
R , 141 bytes
Experimente online!
Resposta bastante trabalhosa - mas funciona em todos os casos de teste. Constrói a saída do par de dígitos e classifica a entrada de acordo com isso.
fonte
v
da variável nas suas outras respostas - nunca useiv
antes. E bom uso deintToUtf8
!R , 120 bytes
Experimente online!
Código ungolfed com explicação:
fonte
[!1:0]
truque é muito bom - nunca o vi antes.[!1:0]
caras estavam escondendo algo legal. Eu estava brincando com isso e as pontas em R golfe, tentando obter o número dos dígitos aritmeticamente (semas.double
), mas apenas veio com uma versão 132 byte: TIOPitão , 14 bytes
Experimente aqui! | Suíte de teste! | 12 bytes com lista de E / S de dígitos
Como funciona?
fonte
Gelatina , 10 bytes
Experimente online!
Confira uma suíte de testes!
Como funciona
fonte
2537
e3725
não representa o mesmo número.[2537, 3725]
,. Eu nunca duvidei que isso é uma coincidência, portanto, que incluiu essa nota para a respostaPerl 6 , 53 bytes
Experimente online!
Anônimo Qualquer que seja a lambda que pega uma lista de valores e a classifica de acordo com o que os pares de números descrevem.
Nesse caso, estou revertendo o número e depois
rotor
a lista por dois para obter cada par de números. Isso excluirá o primeiro dígito para números de comprimento ímpar, mas como isso se traduz em0
multiplicar esse número, tudo bem. Além disso, alinha os valores para usar[x]
corretamente.fonte
Python 2 ,
8074 bytesExperimente online!
fonte
Haskell ,
8988 bytesGuardou um byte graças a ovs
A última linha define uma função anônima que pode ser usada assim:
A funcionalidade principal é fornecida pelo operador infix,
(?)
que monitora um multiplicadorm
e a entrada RLE restanten
.(?)
subtrai continuamente 10 den
enquanto há um dígito de dezenas para subtrair e, ao fazê-lo, empurra outra cópia do dígito final para a frente da saída (via multiplicadorm
, que é aumentado em 10 a cada vez). Quando o valor das dezenas termina, os dois dígitos finais são descartados e o processo se repete até que o número seja reduzido a 0. Finalmente, usamos o operador (com um multiplicador inicial de 1) como uma chave de classificação.fonte
m?n|n<1=0|n%100<10=m?div n 100|w<-n-10=m*10?w+m*n%10
é um byte mais curto.Casca , 10 bytes
Experimente online!
Explicação
fonte
Dyalog APL,
41393635313029 bytesExperimente online!
-2 graças a Vacas charlatão
-4 (mais -4 para a idéia de conversão de base) graças a ngn
-2 obrigado, então H.PWiz
fonte
⊃,/
pode se tornar∊
{⍺⍴⍨⍎⍵}
->⍴⍨∘⍎
{⍵[⍋F ⍵]}
como⊂⌷¨⍨∘⍋F
C (gcc) (sistemas de 32 bits),
188177176 bytesExperimente online!
em
amd64
adicionar sinalizador-m32
para compilação.Uso :
s(x,n);
ondex
aponta para uma matriz de números inteiros para classificar en
é o comprimento dessa matriz.O segundo caso de teste fornece um resultado errado, porque a conversão
25257
fornece2222277777
um número inteiro de 32 bits que ultrapassa o limite - foi adicionado um quinto caso de teste sem esse número.Explicação:
fonte
d()
é longa por causa de strings e funções relacionadas a elas; você pode salvar muitos bytes apenas lendo os últimos 2 dígitos e construindo a saída da seguinte maneira:o;u;i;d(x){for(u=1,o=0;x;x/=100)for(i=0;i++<x%100/10;o+=x%10*u,u*=10);x=o;}m(int*a,int*b){u=d(*a)-d(*b);}s(l,c){qsort(l,c,4,m);}
você também salvará bytes evitando declarar e inicializarchar
s.b-~sprintf(b+1,"%d",x)%2
vez deb+!(sprintf(b+1,"%d",x)&1)
x/10%10
vez dex%100/10
Python 2 ,
10210197101 bytesExperimente online!
fonte
Braquilog , 18 bytes
Experimente online!
Explicação
Cargas de pequenas coisas necessárias para explicar os três casos diferentes: número ímpar de dígitos, par de 0 vezes o número e pares normais.
fonte
|Ȯt
é desnecessário e, na verdade, o classifica errado: equivale a preencher com 1 em vez de 0, então, dado [125, 26, 1], classifica-o como [1, 26, 125] em vez de [1 125, 26].Perl 5 , 76 bytes
Uma função em vez de uma linha por uma vez.
Para a frente:
g
classifica as entradas numericamente, usandoh
para converter os números.h
faz isso usando o regexs/(.)(.)/$2x$1/gre
(que provavelmente é legível o suficiente). E o0
preenchimento esquerdo é feito com0 x("@_"=~y///c%2)."@_"
(ondey///c
há uma maneira abreviada de escreverlength
,x
é o operador de repetição e.
a concatenação).Experimente online!
Estou esperando ver algumas respostas mais curtas de Perl!
fonte
Retina , 44 bytes
Experimente online! Gerar a chave de classificação no início da linha é mais difícil, mas o estágio de classificação curta resulta em uma economia geral de 3 bytes. Explicação:
Aplique os dois primeiros estágios em cada linha individualmente.
Combine e copie um número par de dígitos à direita.
Substitua cada par de dígitos pelo valor descrito. Isso
\G\d
faz com que a partida pare no espaço.Classifique numericamente.
Exclua as chaves de classificação.
fonte
05AB1E ,
2019 bytesCorreção de bug para +1 byte e, em seguida, alterou para -2 bytes graças a @sundar .
Experimente online ou verifique todos os casos de teste .
Definitivamente pode ser jogado golfe .. Não estou muito feliz com isso tbh ..
Explicação:
fonte
Anexo , 50 bytes
Experimente online!
Explicação
fonte
JavaScript (ES8),
7270 bytesExperimente online!
fonte
Japonês, 13 bytes
Experimente ou execute todos os casos de teste
Explicação
fonte
Gelatina , 14 bytes
Experimente online!
fonte
Ruby , 71 bytes
Experimente online!
fonte
Java 11,
204189 bytesToma uma lista de longos como parâmetro e classifica essa lista de entrada (sem retornar uma nova lista).
Experimente on-line (NOTA:
String.repeat(int)
é emuladorepeat(String,int)
porque o Java 11 ainda não está no TIO. A contagem de bytes permanece a mesma.)Explicação:
fonte
+""
para converter o número em String. Deve ser corrigido agora. :)