Desafio
Dada uma lista de nomes de cores exclusivos como entrada, classifique-os na ordem em que aparecem pela primeira vez no Amazing Technicolor Dreamcoat de Joseph .
Exemplo
Input: green, blue, red, brown
Output: red, green, brown, blue
A lista completa de cores, em ordem, é:
1. red
2. yellow
3. green
4. brown
5. scarlet
6. black
7. ochre
8. peach
9. ruby
10. olive
11. violet
12. fawn
13. lilac
14. gold
15. chocolate
16. mauve
17. cream
18. crimson
19. silver
20. rose
21. azure
22. lemon
23. russet
24. grey
25. purple
26. white
27. pink
28. orange
29. blue
Ou como uma matriz de strings:
["red","yellow","green","brown","scarlet","black","ochre","peach","ruby","olive","violet","fawn","lilac","gold","chocolate","mauve","cream","crimson","silver","rose","azure","lemon","russet","grey","purple","white","pink","orange","blue"]
Regras
- Você pode receber informações por qualquer meio razoável e conveniente (por exemplo, uma matriz de cadeias, uma cadeia delimitada, cadeias individuais), desde que seja permitido por nossas regras de E / S padrão , mas especifique seu método de entrada em sua resposta.
- Você pode fazer o mesmo pela sua saída.
- A entrada sempre conterá cores da lista acima.
- Sua solução deve ser capaz de lidar com entradas vazias.
- Você pode escolher se todas as palavras da entrada são consistentemente maiúsculas, minúsculas ou maiúsculas, mas a caixa da saída deve corresponder à da entrada.
- Isso é código-golfe, e a contagem de bytes mais baixa em cada idioma vence.
- Como sempre, as brechas padrão são proibidas.
Casos de teste
Input: []
Output: []
Input: ["green", "blue", "red", "brown"]
Output: ["red", "green", "brown", "blue"]
Input: ["gold", "grey", "green"]
Output: ["green", "gold", "grey"]
Input: ["ruby","yellow","red","grey"]
Output: ["red", "yellow", "ruby", "grey"]
Input: ["gold", "green", "fawn", "white", "azure", "rose", "black", "purple", "orange", "silver", "ruby", "blue", "lilac", "crimson", "pink", "cream", "lemon", "russet", "grey", "olive", "violet", "mauve", "chocolate", "yellow", "peach", "brown", "ochre", "scarlet", "red"]
Output: ["red", "yellow", "green", "brown", "scarlet", "black", "ochre", "peach", "ruby", "olive", "violet", "fawn", "lilac", "gold", "chocolate", "mauve", "cream", "crimson", "silver", "rose", "azure", "lemon", "russet", "grey", "purple", "white", "pink", "orange", "blue"]
code-golf
array-manipulation
Shaggy
fonte
fonte
Respostas:
PowerShell ,
26215515112712595 bytesExperimente online!
Abordagem ingênua.O PowerShellsort-object
pode classificar com base em um bloco de script que é executado para cada objeto. Aqui, estamos simplesmente obtendo a.IndexOf()
cor de uma sequência, que atribuirá um valor numérico a cada cor e, em seguida, classifique com base nesses números. A sequência é construída a partir da quarta e primeira letras de cada cor para garantir a exclusividade. A saída está implícita.-4 bytes graças a Shaggy.
-2 bytes graças ao mazzy.
A -30 bytes graças ao KGlasier.
fonte
green grey
que está na ordem alfabética correta..IndexOf()
retornará-1
se a string não for encontrada, que seráred
ordenada corretamente. Obrigado!JavaScript (SpiderMonkey) ,
106 105104 bytes"Em caso de dúvida, basta digitar a entrada sangrenta."
Experimente online!
fonte
%99%55
não é melhor do que%123%55
com essa abordagem). Portanto, é certamente sub-ideal. Eu posso tentar algo um pouco mais sofisticado depois, no entanto.Gelatina , 28 bytes
Experimente online!
Como funciona
µ
transforma tudo à sua esquerda em uma cadeia monádica, queÞ
mapeia a matriz de entrada e classifica a entrada de acordo com os valores gerados.“½Ṗ©cƘʂẒẹMMỤẓHP’
define o valor de retorno para 176073885534954276199526358143331.Œ?
“ðÑþQ’
rendimento 391695582;,
o anexa à permutação. Em seguida,ḥ
elimine a função de hash 391695582 da Jelly , mapeando os buckets resultantes para os números inteiros da permutação.A constante mágica 391695582 foi encontrada pelos utilitários de Jelly .
fonte
Python 3 , 93 bytes
Experimente online!
Lê cada cor como uma base-36
int
. Brute forçou os módulos e escolheu uma compensação arbitrária entre os 19 que não exigiam escapadas.fonte
Powershell,
124120124119118102 bytesExperimente Online!
Explicação:
A sequência de dados contém as primeiras letras significativas dos rótulos das cores em ordem decrescente. Exceto pelo
Grey
rótulo -G*y
é mais curto.-csplit'(?=[A-Z])'
divide a sequência de dados na matriz(blu,Or,Pi,W,Pu,G*y,Rus,Le,A,Ro,Si,Cri,Cr,M,C,Go,L,F,V,Ol,Ru,P,O,Bl,S,B,G,Y,R)
|%{$c-like"$_*"}
mapeia a matriz de strings para a matriz de booleano. OndeTrue
significa "um rótulo colorido começa nessa sequência" (como o operador que não diferencia maiúsculas de minúsculas, csplit - diferencia maiúsculas de minúsculas. Consulte o documento ).sort{}
classifica uma etiqueta de cor pelas matrizes booleanas em ordem crescente .A classificação por matriz é um recurso muito interessante no Powershell. Nesse script, todas as matrizes têm o mesmo comprimento e contêm apenas valores booleanos. Essa classificação é realizada na ordem lexográfica de matrizes booleanas.
Portanto, a cadeia pode conter abreviações de uma letra para os últimos rótulos. Se houver uma correspondência no início da matriz, as correspondências no final não terão efeito.
Onde
T
estátrue
e-
estáfalse
.Script de teste:
Saída:
fonte
This site can’t be reached
erro Desculpe.Vou melhorar a compressão da string daqui a pouco
Japt ,
887871 bytesExperimente online!
fonte
Wolfram Language
255 213199 bytesQuatorze bytes salvos por Dennis, que evitou as marcas ", usando símbolos em vez de strings.
Experimente Online!
fonte
Python 2 , 186 bytes
Experimente online!
Localiza todas as correspondências para substrings de caracteres progressivos (Ex: "verde" verifica "g", "gr", "gre", "gree" e "green") na cadeia de caracteres do identificador e mantém o índice máximo. "red" é sempre o primeiro; anf find () retorna -1 para correspondências ausentes, portanto, não há identificador para vermelho especificamente.
Depois que as cores são transformadas em pares (índice, cor), classifica a matriz no primeiro item do par e descarta o primeiro item de cada par.
fonte
Python 3 , 130 bytes
Experimente online!
fonte
ca
é uma substringcca
para chocolate oof.C # (Compilador interativo do Visual C #) ,
321219210161159138 bytesExperimente online!
-3 bytes graças a Shaggy, -18 graças a TheLethalCoder
Pega a entrada como a
List<string>
, retorna umIOrderedEnumerable<string>
Como isso funciona é que ele ordena a lista pelo índice de cada string na string original. A sequência original tem todas as cores, exceto o cinza, que está nas três primeiras letras. O cinza não está lá, pois o verde e o cinza causariam ambiguidade. O vermelho também não está lá, pois
IndexOf
retorna -1 se a string não aparecer.Versão mais curta usando IOrderedEnumerable como entrada, 137 bytes
Aproveita o fato de que
ThenBy
é 1 byte menor queOrderBy
, masThenBy
só opera emIOrderedEnumerable
s.Experimente online!
fonte
red
da sua seqüência de pesquisa e substituí-lo68
por65
para salvar 3 bytes. No meu telefone, não o testei completamente.n=>n.OrderBy(a=>a!="grey"?"redyelgrebroscablaochperuboliviofawlilgolchomaucrecrisilrosazulemruspurwhipinorablu".IndexOf(a.Substring(0,3)):68);
No entanto, você precisa incluir osusing
s na sua contagem de bytes, pois eles são necessários para execução. Você pode usar o truque de espaço para nome para diminuir a contagem necessária.namespace System.Linq{}
ou o que você escolheria.Carvão ,
69686356 bytesExperimente online! Link é a versão detalhada do código. Explicação:
Pegue a corda compactada
edyeeebrscckhrpeubivvifa99gohomaamrisiosazemuseypuwhpiorlu
e faça um loop sobre cada substring de comprimento 2.Para cada substring, imprima as seqüências de entrada que contêm essa substring, a menos que a substring seja
99
, nesse caso, procurelil
. (lilac
é a única cor que não possui uma substring exclusiva de duas letras;olive
incluili
;silver
incluiil
eblack
incluilac
.fawn
eazure
pode ser detectada usando apenas uma única letra, mas isso não ajuda aqui.)fonte
Pitão, 66 bytes
Experimente online aqui ou verifique todos os casos de teste de uma vez aqui .
As cores da lista podem ser identificadas de forma exclusiva, pegando os caracteres no índice
0
e3
assumindo a indexação modular. Isso resulta no seguinte mapeamento:Explicação completa:
fonte
05AB1E , 48 bytes
Mesma solução que a maioria das outras respostas. Tentará jogar golfe daqui mais tarde.
Experimente online ou verifique todos os casos de teste .
Explicação:
Consulte esta dica 05AB1E (seção Como compactar seqüências de caracteres que não fazem parte do dicionário? ) Para entender como
.•Aå₂мÕh∊þèmvƶ\kΛ1YŠíJ>J#θ₁2©€,Ù{η¦ù-•
é"rrylgebwsrbcorpcryovvlfnlagdccmvcacmsvrearlorsgyppwtpkonbe"
.fonte