Défi
Étant donné une liste de noms de couleurs uniques en entrée, triez-les dans l'ordre dans lequel ils apparaissent pour la première fois dans Amazing Technicolor Dreamcoat de Joseph .
Exemple
Input: green, blue, red, brown
Output: red, green, brown, blue
La liste complète des couleurs, dans l'ordre, est la suivante:
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 comme un tableau de chaînes:
["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"]
Règles
- Vous pouvez prendre des entrées par tout moyen raisonnable et pratique (par exemple, un tableau de chaînes, une chaîne délimitée, des chaînes individuelles) tant que cela est autorisé par nos règles d'E / S standard , mais veuillez spécifier votre méthode d'entrée dans votre réponse.
- Vous pouvez faire de même pour votre sortie.
- L'entrée ne contiendra que les couleurs de la liste ci-dessus.
- Votre solution doit pouvoir gérer les entrées vides.
- Vous pouvez choisir si tous les mots de l'entrée sont toujours en majuscules, en minuscules ou en majuscules, mais la casse de votre sortie doit correspondre à celle de votre entrée.
- C'est le code-golf donc le nombre d'octets le plus bas dans chaque langue gagne.
- Comme toujours, les failles standard sont interdites.
Cas de test
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
Hirsute
la source
la source
Réponses:
PowerShell ,
26215515112712595 bytesEssayez-le en ligne!
Approche naïve.PowerShellsort-object
peut trier en fonction d'un bloc de script qui est exécuté pour chaque objet. Ici, nous obtenons simplement.IndexOf()
la couleur d'une chaîne, qui attribuera une valeur numérique à chaque couleur, puis trie en fonction de ces nombres. La chaîne est construite à partir des quatrième et première lettres de chaque couleur pour garantir l'unicité. La sortie est implicite.-4 octets grâce à Shaggy.
-2 octets grâce à mazzy.
Un énorme -30 octets grâce à KGlasier.
la source
green grey
qui est dans le bon ordre alphabétique..IndexOf()
retournera-1
si la chaîne n'est pas trouvée, ce qui triered
dans le bon ordre. Merci!JavaScript (SpiderMonkey) ,
106 105104 104 octets"En cas de doute, hachez juste l'entrée sanglante."
Essayez-le en ligne!
la source
%99%55
n'est pas mieux%123%55
qu'avec cette approche). C'est donc certainement sous-optimal. Je vais peut-être essayer quelque chose d'un peu plus sophistiqué plus tard.Gelée , 28 octets
Essayez-le en ligne!
Comment ça marche
µ
transforme tout à sa gauche en une chaîne monadique, quiÞ
mappe le tableau d'entrée et trie l'entrée en fonction des valeurs générées.“½Ṗ©cƘʂẒẹMMỤẓHP’
définit la valeur de retour sur 176073885534954276199526358143331.Œ?
“ðÑþQ’
donne 391695582;,
le ajoute à la permutation. Ensuite,ḥ
calculez la fonction de hachage 391695582 e de Jelly, en mappant les compartiments résultants aux entiers de la permutation.La constante magique 391695582 a été trouvée par les utils de Jelly .
la source
Python 3 , 93 octets
Essayez-le en ligne!
Lit chaque couleur en tant que base-36
int
. Brute-forcé les modules et a choisi un décalage arbitraire parmi les 19 qui ne nécessitent pas d'évasion.la source
Powershell,
124120124119 119118102 octetsEssayez-le en ligne!
Explication:
La chaîne de données contient les premières lettres significatives des étiquettes de couleur dans l'ordre décroissant. À l'exception de l'
Grey
étiquette -G*y
est plus courte.-csplit'(?=[A-Z])'
divise la chaîne de données dans le tableau(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"$_*"}
mappe le tableau de chaînes au tableau de booléens. OùTrue
signifie "une étiquette de couleur commence à partir de cette chaîne" (comme l'opérateur insensible à la casse, csplit - sensible à la casse. Voir la doc ).sort{}
trie les étiquettes de couleur par les tableaux de booléens dans l' ordre croissant .Le tri par tableau est une fonctionnalité très intéressante dans le Powershell. Dans ce script, tous les tableaux ont la même longueur et contiennent uniquement des valeurs booléennes. Ce tri est effectué dans l'ordre lexographique des tableaux booléens.
Par conséquent, la chaîne peut contenir des abréviations d'une lettre pour les dernières étiquettes. S'il existe une correspondance au début du tableau, les correspondances à la fin n'ont aucun effet.
Où
T
esttrue
et-
estfalse
.Script de test:
Sortie:
la source
This site can’t be reached
erreur. Désolé.Je vais améliorer la compression des cordes dans un moment
Japt ,
887871 octetsEssayez-le en ligne!
la source
Langue Wolfram
255 213199 octetsQuatorze octets enregistrés par Dennis, qui a évité les "marques", en utilisant des symboles au lieu de chaînes.
Essayez-le en ligne!
la source
Python 2 , 186 octets
Essayez-le en ligne!
Recherche toutes les correspondances pour les sous-chaînes de caractères progressives (Ex: "vert" vérifiera "g", "gr", "gre", "gree" et "vert") dans la chaîne d'identifiant et conserve l'index maximum. "rouge" est toujours le premier, anf find () renvoie -1 pour les correspondances manquantes, il n'y a donc pas d'identifiant spécifique pour le rouge.
Une fois les couleurs transformées en paires (index, couleur), trie le tableau sur le premier élément de la paire, puis supprime le premier élément de chaque paire.
la source
Python 3 , 130 octets
Essayez-le en ligne!
la source
ca
c'est une sous-chaîne decca
pour le chocolat.C # (Visual C # Compiler Interactive) ,
321219210161159138 octetsEssayez-le en ligne!
-3 octets grâce à Shaggy, -18 grâce à TheLethalCoder
Prend l'entrée comme un
List<string>
, renvoie unIOrderedEnumerable<string>
Comment cela fonctionne, c'est qu'il ordonne la liste par index de chaque chaîne dans la chaîne d'origine. La chaîne d'origine a toutes les couleurs sauf le gris transformé en ses trois premières lettres. Le gris n'est pas là, car le vert et le gris créeraient une ambiguïté. Le rouge n'est pas là non plus, car
IndexOf
renvoie -1 si la chaîne n'apparaît pas.Version plus courte prenant IOrderedEnumerable en entrée, 137 octets
Profite du fait qu'il
ThenBy
est 1 octet plus court queOrderBy
, maisThenBy
ne fonctionne que surIOrderedEnumerable
s.Essayez-le en ligne!
la source
red
de votre chaîne de recherche et remplacer68
par65
pour économiser 3 octets. Sur mon téléphone, je ne l'ai donc pas entièrement testé.n=>n.OrderBy(a=>a!="grey"?"redyelgrebroscablaochperuboliviofawlilgolchomaucrecrisilrosazulemruspurwhipinorablu".IndexOf(a.Substring(0,3)):68);
Cependant, vous devez inclure lesusing
s dans votre nombre d'octets car ils sont requis pour s'exécuter. Vous pouvez utiliser l' astuce namespace pour raccourcir le nombre requis.namespace System.Linq{}
ou tout ce que vous auriez choisi.Charbon de bois ,
69686356 octetsEssayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
Prenez la chaîne compressée
edyeeebrscckhrpeubivvifa99gohomaamrisiosazemuseypuwhpiorlu
et bouclez sur chaque sous-chaîne de longueur 2.Pour chaque sous-chaîne, imprimez les chaînes d'entrée qui contiennent cette sous-chaîne, sauf si la sous-chaîne l'est
99
, auquel cas recherchez-la à lalil
place. (lilac
est la seule couleur qui n'a pas de sous-chaîne unique à deux lettres;olive
inclutli
;silver
inclutil
etblack
inclutlac
.fawn
etazure
peut être détectée à l'aide d'une seule lettre, mais cela n'aide pas ici.)la source
Pyth, 66 octets
Essayez-le en ligne ici ou vérifiez tous les cas de test en même temps ici .
Les couleurs de la liste peuvent être identifiées de manière unique en prenant les caractères à l'index
0
et3
en supposant une indexation modulaire. Il en résulte le mappage suivant:Explication complète:
la source
05AB1E , 48 octets
Même solution que la plupart des autres réponses. J'essaierai de jouer au golf d'ici plus tard.
Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
Voir cette astuce 05AB1E (section Comment chaînes Compresser ne font pas partie du dictionnaire? ) Pour comprendre comment
.•Aå₂мÕh∊þèmvƶ\kΛ1YŠíJ>J#θ₁2©€,Ù{η¦ù-•
est"rrylgebwsrbcorpcryovvlfnlagdccmvcacmsvrearlorsgyppwtpkonbe"
.la source