Votre tâche consiste à trier un tableau contenant les chaînes "quarter", "dime", "nickel" et "penny" un certain nombre de fois sans ordre spécifique et à les trier de manière à ce qu'elles soient dans cet ordre: quarter dime nickel penny
(en d'autres termes, valeur monétaire la plus élevée à la moins élevée).
Règles
- Votre programme doit prendre un tableau en entrée contenant les noms des pièces américaines et les trier du plus grand au moins par valeur monétaire.
- Pour ceux qui ne sont pas des États-Unis ou n'utilisent pas de monnaie, les valeurs des pièces américaines, du plus grand au moins, sont:
- Trimestre: 25 cents
- Dime: 10 cents
- Nickel: 5 cents
- Penny: 1 cent
- Pour ceux qui ne sont pas des États-Unis ou n'utilisent pas de monnaie, les valeurs des pièces américaines, du plus grand au moins, sont:
- Vous pouvez trier ce tableau comme vous le souhaitez, tant que la sortie est ordonnée par les valeurs monétaires indiquées ci-dessus.
- L'entrée peut être prise de n'importe quelle manière, que ce soit des arguments de ligne de commande ou STDIN.
- Un tableau d'entrée serait composé de toutes les chaînes en minuscules, quelque chose comme ceci:
quarter dime nickel nickel quarter dime penny penny
- Le format réel de l'entrée et de la sortie dépend de vous.
Cas de test
"penny nickel dime quarter"
-> "quarter dime nickel penny"
"nickel penny penny quarter quarter quarter dime dime dime dime"
-> "quarter quarter quarter dime dime dime dime nickel penny penny"
"quarter dime nickel nickel quarter dime penny penny"
-> "quarter quarter dime dime nickel nickel penny penny"
Il s'agit de code-golf , donc les règles et lacunes standard s'appliquent.
code-golf
string
array-manipulation
sorting
ckjbgames
la source
la source
Réponses:
Japt ,
53 octetsTestez-le en ligne!
Explication
Moi aussi, j'ai ajouté une fonction de tri à ma langue au cours des dernières semaines :-)
ñ
prend un tableau et une fonction et trie le tableau comme si chaque élément avait été mappé via cette fonction.La
g
fonction sur une chaîne prend un nombren
et retourne len
th caractère dans la chaîne, encapsulant sin
est négatif ou passé la fin de la chaîne. Les chaînes peuvent ainsi être alignées comme suit:Le 9ème caractère (indexé 0) de chaque chaîne a été mis en évidence en gras. Ce sont dans le bon ordre, donc tout ce que nous avons à faire est
ñg9
. (Bien que maintenant que j'y repense,ñg5
cela fonctionnerait aussi ...)la source
V , 7 octets
Essayez-le en ligne!
Cela utilise la nouvelle commande de tri que j'ai ajoutée à V il y a environ une semaine (
ú
). Bon timing!La façon dont cela fonctionne est en triant chaque ligne par tri par défaut (valeurs ASCII) mais en ignorant la première correspondance d'une certaine expression régulière. Dans ce cas, l'expression rationnelle l'est
(qu)?
, bien qu'elle contienne des éléments bruts non ASCII pour éviter d'utiliser des barres obliques inverses. Si vous ignorez les deux premières lettres de «quart», il commence par «a», puis toutes les pièces sont déjà dans l'ordre alphabétique.Version non concurrente, 4 octets
Cette fonctionnalité était déjà implémentée, mais je ne l'avais pas encore testée de manière approfondie, donc elle contenait un bogue que je n'ai réalisé qu'à cause de ce défi. Il n'y a pas de lien TIO car TIO est légèrement en retard.
Cela fonctionne en inversant le tri de chaque ligne mais en ignorant le premier caractère de chaque ligne.
la source
Python, 36 octets
Fonction sans nom qui trie la liste sur place en fonction de la fonction clé indiquée.
Les tranches de chaque nom de pièce sont alors,
arter
,dime
,ickel
etpenny
- qui sont dans l' ordre alphabétique (ou plus important encore , ordinale) commande.la source
el
trompe pas, je manque lec
: pBash + coreutils, 18
Essayez-le en ligne .
la source
Python 3 ,
424138 octetsUne fonction lambda sans nom qui prend l'entrée comme une liste de chaînes, trie en place.
(Outgolfé par Jonathan Allan)
Essayez-le en ligne!
Autres solutions avec lesquelles je me suis amusé:
la source
PowerShell , 21 octets
Essayez-le en ligne!
Explication
Sans vergogne a volé l'algorithme dans la réponse d'ETHproductions (essentiellement). Je multiplie chaque chaîne par 3, puis je trie en fonction du 9e caractère de la chaîne résultante.
la source
$_
contient PowerShell?1,2,3,4 | ForEach-Object { $_*2 }
sortira chaque nombre 2 fois; le bloc de script est exécuté une fois par élément d'entrée.Gelée , 4 octets
Essayez-le en ligne! (le pied de page,,
ÇY
rejoint la liste résultante avec des sauts de ligne pour une impression plus jolie.)Comment?
Le Nème index d'une liste dans Jelly est le Nème élément commençant à gauche, en comptant à partir de 1, et rebouclant au début si nécessaire. (Le 0ème est à droite, le -1ème à gauche et ainsi de suite).
Donc, le sixième caractère de
['d','i','m','e']
est'i'
puisque six est congru à deux modulo quatre.Le sixième caractère des quatre pièces dans l'ordre est quart
e
r, di
me, nickel
,p
enny. Ceux-ci sont classés par ordre alphabétique (ou, plus important, ordinal).Une autre façon de réaliser la même chose serait de trier par les chaînes en rotation avec
ṙ5µÞ
, oùṙ
tourne vers la droite, ce qui rend les cordeserquart
,imed
,lnicke
, etpenny
.la source
Python , 32 octets
Essayez-le en ligne! Trie la liste en place.
L'idée est d'utiliser une fonction de touche de tri sans
lambda
. Un bon candidat étaitx.strip
, qui prend la chaînex
et supprime ses bords gauche et droit de tous les caractères de l'entrée. Par exemple"abcdef".strip("faces") == "bcd"
,.La méthode
"npr".strip
prend:qui sont triés lexicographiquement. J'ai trouvé la chaîne
npr
par force brute.npu
etnpt
aussi travailler, et il n'y en a pas plus court.la source
Bash (+ coreutils) 11 octets
Golfé
Comment ça marche
Tri inversé, avec la "clé de tri" du deuxième caractère du premier champ (mot) jusqu'à la fin de la ligne, soit:
Tester
Essayez-le en ligne!
la source
CJam , 8 octets
Essayez-le en ligne!
Explication
la source
Pyke,
975 octetsEssayez-le ici!
la source
Rétine, 10
610 octets enregistrés grâce à @ETHproductionsq
parb
b
retour àq
Essayez-le en ligne .
la source
V ,
87 octets1 octet enregistré grâce à @DJMcMayhem
[Essayez-le en ligne!]
Voir la réponse de @ DJMcMayhem en V (
10 octets plus court que le mien)Essayez-le en ligne!
Voici une solution plus ancienne à 1 octet de plus, mais je l'aime vraiment.
V , 8 octets
[Essayez-le en ligne!]
Essayez-le en ligne!
Explication
Maintenant, le tampon sera dans ce format:
Il ne reste plus qu'à déplacer les trimestres vers le haut.
la source
:m0
sur votre solution alternative pour enregistrer un octet (etÚçq/:m0
:move
Japt , 3 octets
Essayez-le en ligne!
Quelques autres solutions à 3 octets:
Essayez-le en ligne!
Essayez-le en ligne!
la source
T-SQL,
413634 octetsExplication
Supposons que l'entrée est préchargée dans une variable de table nommée
@
, avec une seule colonne nomméea
, où chaque valeur est une pièce à trier.La
select * from @
pièce est une plaque de chaudière «obtenir toutes les valeurs à retourner». La vraie magie opère dans laorder by
clause.En utilisant la même stratégie que Johnathan Allan , je sorte par les cinq derniers caractères (SQL renverra la chaîne entière si elle est trop courte):
arter
,dime
,ickel
,penny
.la source
q
est la lettre suivante aprèsp
, donc pour qu'un mod simple donneq
moins quep
la valeur doit être un facteur deq
, qui est premier. Vous pouvez soustraire 1 d'abord, puis un module de 7 fonctionnerait, mais cela prendrait probablement au moins autant d'octets que 113.JavaScript (ES6),
3533 octetsCas de test
Afficher l'extrait de code
la source
Befunge, 158 octets
Essayez-le en ligne!
Le traitement et le tri des chaînes ne sont pas le genre de choses que vous voudriez généralement essayer dans Befunge, mais cette solution tire parti de l' observation de John Kasunich selon laquelle nous n'avons en fait pas besoin de trier quoi que ce soit. Nous comptons simplement le nombre d'occurrences de chaque pièce (qui peut facilement être déterminé à partir du premier caractère), puis nous sortons ce nombre de chaque nom de pièce dans l'ordre approprié.
Ce n'est toujours pas du tout compétitif avec les autres langues en termes de taille, mais cette approche est au moins meilleure qu'elle ne l'aurait été si nous avions essayé de gérer le défi comme un exercice de tri des chaînes.
la source
Pyth, 3 octets
Manifestation
Sur la base de ETHproductions réponse de l » en Japt.
Explication:
la source
APL (Dyalog APL) , 11 octets
Prend et retourne la liste des chaînes.
Essayez-le en ligne!
{
fonction anonyme:⍵[
…]
L'argument indexé par⍋
les indices ascendants de↑
la matrice dont les rangées sont le rembourré5⌽
rotation en cinq étapes¨⍵
éléments de l'argument}
la source
Brachylog , 3 octets
Essayez-le en ligne!
Approche dérobée à la réponse Japt d'ETHproductions.
la source
Husk , 3 octets
Essayez-le en ligne!
Porté de ma réponse Brachylog, qui arrache la réponse Japt d'ETHproductions mais n'est pas une traduction exacte car elle utilise la rotation au lieu d'un simple accès au-nième élément. Là, je l'ai fait car
∋
ne vous permet pas d'indexer après la fin de l'entrée (ce qui est probablement très utile dans de nombreuses circonstances en raison de la nature déclarative du langage). En Husk,!
ne vous laissez indice après la fin de l'entrée, avec le même emballage modulaire autour de cette Japtñg9
utilisations, mais il est de 1 pour ce programme en particulier finirait par être un octet plus:Ö!10
.la source
Lot, 82 octets
Prend les entrées comme arguments de ligne de commande et les sorties vers STDOUT. Fonctionne en concaténant les listes résultant du filtrage de la liste d'origine sur chaque pièce.
la source
Rubis, 34 octets
entrée et sortie sous forme de tableau de chaînes
la source
Rubis, 31 octets
la source
Rubis, 30 octets
Des nombres magiques trouvés par essais et erreurs. Un peu maladroit, mais plus court que l'utilisation
.reverse
.la source
Perl 6 ,
40 3634 octetsEssayez-le
Essayez-le
Essayez-le
Étendu:
la source
Mathematica, 50 octets
la source
RProgN , 18 octets
Expliqué
Essayez-le en ligne!
la source
java 8,
128112 octetsCeci est une expression lambda pour un
java.util.function.Function<String[],String[]>
Explantion: Pour chacune des 4 pièces dans l'ordre, passez par l'entrée et ajoutez le nom de la pièce au résultat chaque fois qu'il y a une correspondance pour le caractère unique de cette pièce. Divisez le résultat en un tableau et retournez-le.
la source
Rubis, 27 octets
la source