Dada uma lista de dois ou mais números de série detalhados de igual comprimento maior que dois, por exemplo,
[[ "three" , "one" , "four" ],
[ "one" , "five" , "nine" ],
[ "two" , "six" , "five" ],
[ "three" , "five" , "eight" ]]
classifique a lista pelos números que as palavras representam:
[[ "one" , "five" , "nine" ],
[ "two" , "six" , "five" ],
[ "three" , "one" , "four" ],
[ "three" , "five" , "eight" ]]
Você pode exigir que os números sejam escritos em letras maiúsculas ou minúsculas, mas não mistos.
Casos de teste
[["three","one","four"],["one","five","nine"],["two","six","five"],["three","five","eight"]]
dá[["one","five","nine"],["two","six","five"],["three","one","four"],["three","five","eight"]]
[["two","seven"],["one","eight"],["two","eight"],["one","eight"],["two","eight"],["four","five"]]
dá[["one","eight"],["one","eight"],["two","seven"],["two","eight"],["two","eight"],["four","five"]]
[["one","four","one","four","two"],["one","three","five","six","two"],["three","seven","three","zero","nine"]]
dá[["one","three","five","six","two"],["one","four","one","four","two"],["three","seven","three","zero","nine"]]
[["zero","six","one"],["eight","zero","three"],["three","nine","eight"],["eight","seven","four"],["nine","eight","nine"],["four","eight","four"]]
dá[["zero","six","one"],["three","nine","eight"],["four","eight","four"],["eight","zero","three"],["eight","seven","four"],["nine","eight","nine"]]
["three","one","four"] === 314
?[314,159,265,358]
→[159,265,314,358]
.You may require the numbers to be spelled in lower or upper, but not mixed, case.
Respostas:
Casca ,
98 bytesExperimente online!
Algoritmo "inspirado" pela resposta Stax da recursiva (acabei de alterar um pouco a string de pesquisa), faça um voto positivo!
O truque é mapear cada letra para sua posição na string
tfsen
(compactada no final deste programa). As listas de cascas são baseadas em 1 e os itens ausentes retornam 0, então obtemos esse mapeamento:Como você pode ver, as listas estão perfeitamente ordenadas.
Para ficar claro, veja como a comparação de lista funciona no Husk (e em muitos outros idiomas):
fonte
tfrsen
, mas eu estou supondo que têm palavras comowith
esen
lá ajuda compressão.[1,0,0]
é considerado menor do que[1,0,0,0]
(mas para este programa não faria uma diferença)Stax ,
2422171614 bytesExecute e depure
Este programa utiliza matrizes de dígitos escritos em minúsculas para entrada. A saída é separada por nova linha assim.
Este programa classifica as entradas usando a ordem obtida em uma transformação específica. Cada caractere em cada palavra é substituído por seu índice na string
"wo thif sen"
. As matrizes originais são classificadas por essa ordem. Em seguida, os resultados são impressos após a união com um espaço.Os espaços não servem para nada, mas na verdade permitem maior compactação na cadeia literal.
fonte
Gelatina , 12 bytes
Um link monádico.
Experimente online! ... ou veja a suíte de testes
Quão?
Converter os dígitos em ordinais e, em seguida, da base 10 e, em seguida, tomar os módulos por 4752 e 147, fornece uma ordem crescente:
Isso pode ser usado como uma função principal pela qual classificar:
fonte
Python , 62 bytes
Experimente online! ... ou veja a suíte de testes
Nota:
que funciona no Python 2 (mas não 3) tem mais dois bytes.
fonte
APL (Dyalog Classic) , 12 bytes
Experimente online!
Foi assim que encontrei um argumento à esquerda adequado para diádico
⍒
(tentei⍋
e compri 6 primeiro):fonte
Perl 6 , 37 bytes
Tente
Expandido:
O bloco de código pega um valor do formulário
("three","one","four")
e o converte para("3","1","4")
um valor que.sort
pode ser usado facilmente.fonte
APL (Dyalog) , 38 bytes
Experimente online!
Baseado na incrível solução de Jonathan Allan .
fonte
⊂⌷¨⍨∘⍋(531⊥531|6779|36⊥9+⎕A⍳⊢)¨
mas você pode fazer isso de maneira muito mais simples em menos da metade da contagem atual de bytes.Ruby, 48 bytes
Abusa do fato de que
"zero".to_i(35)
é 0 (já que 'z' não é um dígito válido na base 35), por isso é muito mais fácil aplicar uma fórmula de força bruta para os outros nove dígitos.fonte
K (ngn / k) , 14 bytes
Experimente online!
fonte
JavaScript (Node.js) , 70 bytes
Experimente online!
fonte
Ruby , 47 bytes
Experimente online!
Utiliza o fato de que o uso de uma base menor que o dígito máximo gera um resultado zero (conforme apontado pelo histocrata na resposta )
fonte
Python 2 ,
858180 bytesSimplesmente usa as duas primeiras letras de cada palavra para determinar o número e classifica cada lista usando essa função de indexação como chave.
Experimente online!
Guardado 4 bytes, graças a Jonathan Allan
fonte
Ruby , 49 bytes
Experimente online!
fonte
05AB1E , 27 bytes
Experimente online!
fonte
Haskell ,
133122109107106 bytesUngolfed:
fonte
Python 2 , 59 bytes
Experimente online!
Riffing na solução Python 3 de Jonathan Allan ...
fonte
Java (JDK 10) , 132 bytes
Experimente online!
fonte
Ruby , 64 bytes
Experimente online!
Um lambda que aceita uma matriz 2D de cadeias e retorna uma matriz 2D de cadeias.
Pegando carona na resposta Python 2 do mbomb007 para -26 bytes do que eu estava prestes a postar.
fonte
Perl 5 , 103 bytes
Experimente online!
fonte
Retina 0.8.2 , 38 bytes
Experimente online! O link inclui o conjunto de testes. Funciona substituindo temporariamente as letras
zowithfsen
com sua posição nessa sequência, o que permite que os números sejam classificados lexicamente.fonte
Geléia ,
302827 bytesExperimente online!
-1 graças a Jonathan Allan.
Localiza o índice de cada dígito na string 'onetwo ... nine' e classifica usando-o como uma função-chave com
Þ
. Não é necessário incluir'zero'
no início, porque a pesquisa pelos dois primeiros caracteres de'zero'
falhará e0
será retornada em vez de um índice, tornando'zero'
lexicograficamente "precoce".fonte
'zeontw...ni'
acabou sendo mais longa.Python 3, 141 bytes
Experimente online!
fonte
C (clang) , 229 bytes
Experimente online!
Não existe uma maneira direta de enviar matriz de matriz de caracteres para funções C, portanto, no espírito do código-golfe, tomei uma pequena liberdade no formato de entrada.
f()
aceita uma matriz de ponteiros para seqüências de caracteres, onde cada sequência é um número, representado por dígitos ortográficos separados por vírgula em minúsculas. Além disso, ele precisa do número de seqüências de caracteres na matriz no segundo parâmetro. Espero que isso seja aceitável.f()
substitui os ponteiros no lugar na ordem classificada usandoqsort()
.r()
lê o número de entrada da sequência numérica separada por vírgula. Ele compara apenas os dois primeiros caracteres para identificar o número.c()
é função de comparaçãofonte
strstr("i"-19,t)-"zeontwthfofisiseeini"
? É específico ou padrão do compilador?.rodata
que se parecem0x69 0x00
e o compilador colocar o endereço"i"
no final"zeo..."