Les quilles sont des bonbons colorés comportant 5 saveurs distinctes; raisin, pomme verte, citron, orange et fraise représentés respectivement par (p), de g (g) reen, de (y) ellow, de (o) et de (r). J'avais l'habitude de manger des quilles en triant toutes les couleurs, puis en les mangeant en séquence. Après avoir eu quelques regards étranges dans le bureau, je fais maintenant semblant de les manger comme une personne normale. Votre tâche consiste à imiter ceci:
Votre code (programme complet ou fonction) recevra un tableau de quilles (10x10) en entrée (dans un format raisonnable). Ce tableau représentera une pile de quilles non triées. Votre tâche consiste à les "manger" de votre couleur préférée à celle que vous préférez le moins. Mon ordre préféré est le raisin, la pomme verte, le citron, l’orange, la fraise, mais vous êtes libre de choisir n’importe quel ordre tant qu’il est systématiquement appliqué (veuillez indiquer votre préférence dans votre mémoire afin que je puisse vous en juger). Après avoir mangé chaque bonbon, votre code sortira (dans le même format que vous le ferez) le tas restant avec le morceau mangé remplacé par un espace. Vous allez répéter jusqu'à ce qu'il ne reste que votre favori. Vous pouvez choisir n'importe quelle quille à manger (aléatoire ou déterministe). Les espaces de fuite doivent être conservés.
Par exemple, votre séquence de sortie pourrait ressembler à ceci (utiliser 5x5 pour être bref et afficher les espaces comme .
)
start 1 2 3 4 5 n
.org. .org. .org. .org. .or.. .or.. ..r..
prgrg .rgrg .rgrg .rgrg .rgrg .r.rg .r.r.
gggpr gggpr ggg.r ggg.r ggg.r ggg.r ....r
oyyor oyyor oyyor oyyor oyyor oyyor ....r
.r.p. .r.p. .r.p. .r... .r... .r... .r...
C'est le code-golf , donc le code le plus court en octets gagne
Règles TL; DR:
- La soumission peut être un programme complet ou une fonction
- L'entrée peut être prise dans n'importe quel format raisonnable (chaîne, liste, matrice, etc.) par n'importe quelle méthode raisonnable (STDIN, arguments de fonction, etc.). Cependant, il doit y avoir une certaine délimitation entre les rangées
- La sortie doit être produite dans le même format que l’entrée, quelle que soit la méthode choisie (STDOUT, retour de fonction, etc.). La sortie intermédiaire peut être délimitée ou non
- La première sortie doit être la première entrée
- Les espaces de fuite doivent être préservés
- N'importe quel ordre de couleur peut être utilisé (liste dans votre réponse)
- Toute quille de la couleur actuelle peut être mangée
- La dernière sortie sera uniquement votre couleur et vos espaces préférés
- Si possible, incluez un lien vers un compilateur en ligne pour tester votre soumission
Réponses:
Jelly ,
16 1413 bytesTryItOnline!
La plupart des moins favoris, comme pour toute personne sérieuse au sujet de leur TOC, est alphabétique!
Prend les entrées et les sorties sous forme de texte (les lignes sont délimitées par de nouvelles lignes).
3 octets enregistrés en inversant le sens et en utilisant une méthode différente: rétrogradez plutôt que de rechercher des caractères dans l'alphabet.
Comment?
la source
JavaScript (ES6),
747574 octetsLes arômes sont commandés comme décrit dans le défi: raisin, pomme verte, citron, orange, fraise.
Les sorties intermédiaires sont séparées par des nouvelles lignes.
Cas de test
Ce cas de test utilise l'exemple 5x5. Toute autre taille de grille devrait fonctionner comme prévu.
Afficher l'extrait de code
la source
Frapper,
48, 46 octetsMISE À JOUR:
Golfé
Prend l'entrée à stdin, imprime à stdout. Mange violet, vert, jaune puis orange.
Un programme sed équivalent serait:
Exemple de sortie (les délimiteurs sont pour plus de clarté)
Essayez-le en ligne!
la source
Python 2,
60 5756 octetsrepl.it
Fonction récursive qui mange dans l'ordre alphabétique inverse, laissant les verts pour la fin.
L'entrée
s
est une chaîne avec un séparateur de lignes avec un ordinal inférieur à celui d'un'g'
(par exemple une nouvelle ligne ou une virgule).La fonction imprime son entrée, puis récursive si cette entrée contient quelque chose de plus grand qu'un 'g', en passant l'entrée avec la première occurrence du caractère maximum remplacé par un espace.
(Presque un port de ma réponse de gelée .)
la source
Perl,
5346 + 2 = 48 octetsCourir avec
-0n
-10 octets grâce à @Dada
Edit: Merci également à @Dada pour l’avoir signalé, j’ai oublié d’imprimer l’entrée comme première sortie. Cela a été corrigé.
Cette réponse comporte quelques astuces, alors je vais expliquer ce qui se passe.
Tout d'abord, Perl n'aime pas que les paramètres multilignes soient transmis. La variable
$/
est le séparateur d'enregistrement d'entrée et, chaque fois qu'une entrée rencontre le caractère qui y est stocké, l'interpréteur termine cette entrée et commence une nouvelle entrée. Le contenu par défaut est le caractère de nouvelle ligne\n
, ce qui signifie qu'il est impossible de passer une chaîne de plusieurs lignes. Pour ce faire, nous devons sortir$/
de son contenu. C'est là que le-0
drapeau entre en jeu: setting-0
sera stockénull
dans la variable$/
, permettant à l'interprète de tout lire en une$_
fois dans la variable implicite .Le prochain truc est la
eval
déclaration. Qu'est-ce qu'on fait exactementeval
? Nous en sommeseval
au résultat de lasprintf
déclaration, qui se décompose comme suit:La première chose qui
sprintf
est passée est la chaîne"say while s/%s/./;"
répétée 4 fois, donc:Ensuite,
sprintf
quatre caractères nus sont passésp,o,g,r
, qui sont interpolés dans l’sprintf
instruction, en remplacement de chaque instance de%s
. Ce que nous obtenons alors est la chaîne suivante, qui est transmise à laeval
fonction:Chaque
while
boucle évalue l'expressions/[color]/./
, qui remplace la première instance de la couleur de la variable implicite$_
par un point. Si une substitution est faite, elle retourne1
, sinon elle ne renvoie rien. Depuiss///
a des effets secondaires, il modifie la variable d'origine$_
, dont le contenu est ensuite imprimé viasay
. Quatre versions de cette boucle sont effectuées, remplaçant les violets, les oranges, les verts, puis les rouges, ne laissant que les jaunes.La raison pour laquelle les jaunes sont laissés est parce que
y
ne peut pas être un mot simple, car il s’agit en fait d’une fonction, et avoir uney
lettre au lieu d’une de ces lettres jetterait une erreur. Je pourrais changer cela en mettant des guillemets (+2 octets), ou en utilisant un Y majuscule et en rendant la regex insensible à la casse (+1 octet), mais pour le code-golf , chaque octet compte, alors j'ai décidé d' aimer réellement citrons le plusTL; DR:
Grape, Orange, Green Apple, Strawberry, Lemon
la source
-0
drapeau devrait vous sauver environ 10 octetsFirst output shall be the first input
Perl,
303133 + 2 =323335 octetsCourez avec
-n0
(pénalité de 2 octets).Apparemment, j'aime bien manger des Skittles dans l'ordre alphabétique, car le programme s'avère plus court. Le programme n'a pas vraiment besoin de beaucoup d'explications:
-n0
lit l'entrée implicitement (-n
signifie "lit l'entrée implicitement",-0
signifie "ne coupe pas l'entrée sur les nouvelles lignes");for$x(g..r)
exécute une boucle avec un$x
ensemble de chaque lettre deg
àr
à tour;say;
imprime l’entrée courante, après toutes les mutations;s/$x/ /
remplace une copie de$x
(plus précisément la première) par un espace si possible; et&&redo
répète le code à l'intérieur des accolades (sans avancer le compteur de boucle) si le remplacement a réussi.Ce programme peut facilement être généralisé à plusieurs saveurs de Skittle sans en changer la longueur, et fonctionnera avec un tas de toute taille.
Voici un lien Ideone où vous pouvez le tester. (Ideone ne vous permet pas de spécifier des options de ligne de commande, je devais donc ajouter quelques lignes au début pour définir
-n0
et le-M5.010
obtenir gratuitement.)la source
say;for$x(g..r){say while s/$x/ /}
?for$x(p,o,g,r)
ce qui ne serait pas.say while
n’est plus qu’un octet de plus, et c’était quelque chose que j’avais considéré comme une alternative, je peux donc simplement changer pour cela.say;
parce que les règles disentFirst output shall be the first input
for$x(g,o,p,r)
version qui copie l’entrée en premier. (Cela prend un peu plus de temps de chercher s'il manque des couleurs, mais vous ne vous attendriez pas à une couleur manquante dans un paquet de quilles.) Pour mémoire, la version avec lasay;
première serait 37 octets.C #,
134148 octetsOrdre:
G -> O -> Y -> P -> R
Utilisé des éléments similaires de la réponse de @ Poke, actuellement un peu plus long, car je dois convertir le tableau de caractères en chaîne; (
la source
Java 7,
139 135 130 151 138135 octetsMange des quilles dans l'ordre: jaune, orange, vert, violet, rouge
Je suppose que cela vaut mieux que 2 déclarations d'impression>.>
la source
s.length
C 145 - 5 - 18 - 1 = 121 octets
ungolfed + jolie
Ici, cela
a[][11]
signifie prendre des n-chaînes de longueur 11 où 1 caractère est requis pour la terminaison, donc, techniquement, seuls 10 caractères sont visibles.ordre: alphabétique
cette fonction recherche
'g'
dans l'entrée donnée et l'élimine 1/1, puis incrémente la variable'g'
jusqu'à ce qu'elle trouve une correspondance suivante (probablement une lettre'o'
), puis élimine les caractères correspondants.L'inconvénient est que cette fonction est tout simplement trop prudente. Ainsi, si vos jeux de
26
couleurs étaient de couleurs différentes et portent le nom de code des lettres az, cette fonction gérera également cette entrée ...la source
#define
. Cela réduit 19 octetsOctave, 49 octets
Mange les quilles dans l'ordre alphabétique, en commençant par le code ASCII le plus élevé.
la source
ES6 (Javascript),
72, 71 octetsEDITS:
Une version non récursive en Javascript.
Golfé
L'entrée et la sortie sont des chaînes multilignes, mange des pilules dans l'ordre "violet => orange => vert => jaune".
Tester
la source
Python 3 -
1419975 octetsLe programme mange des quilles dans cet ordre -
Orange Red Green Yellow Purple
.Edit - Merci à Flp.Tkc qui a aidé à réduire de 24 octets!
Je pense qu’il est possible de jouer davantage au golf, car cela semble très simple.
la source
orgy
.Vim
5755 octetsEnregistrement de deux octets en supprimant mon délimiteur de ligne. Malheureusement, il est beaucoup plus difficile de lire et de vérifier l'exactitude :(.
Unprintables:
TryItOnline
Mange dans l'ordre oypg, laissant tous les r pour la fin :)
la source
Mathematica, 67 octets
Mange des rouges, puis des jaunes, puis des oranges, puis des violets.
la source
Java 7, 125 octets
Violet, Jaune, Vert, Rouge, Orange. J'apprécie de pouvoir choisir ma commande dans cette solution. :RÉ
Golfé
Ungolfed
Essayez-le ici!
Une approche différente de l'autre réponse Java par @Poke. Nous commençons par faire une copie de la chaîne originale. En parcourant chaque couleur, nous la remplaçons chaque fois qu'elle est trouvée par un espace, puis nous ajoutons la nouvelle mise en page à la chaîne de sortie et nous en revenons après avoir mangé tout sauf de l'orange.
Remarques
La séparation entre les étapes est effectuée avec une double ligne
\n\n
, mais si la grille d’entrée peut être définie avec une nouvelle ligne à la fin, elle peut être raccourcie\n
.la source
Haskell, 60 octets
L'entrée est une chaîne unique dans laquelle les lignes sont séparées
,
. La valeur de retour est une liste de chaînes avec toutes les étapes intermédiaires. L'ordre est alphabétique, le plus grand en premier, il reste donc des restes verts. Exemple d'utilisation:Récursion simple. Enregistrez la liste d'entrée dans la valeur de retour, remplacez le plus grand élément
g
par un espace et appelez à nouveau la fonction. Le cas de base est quand il n'y a plus aucun élément à supprimer.la source
MATL, 24 octets
Essayez-le en ligne! Je préfère manger mes quilles dans l'ordre alphabétique inverse: le vert est ma couleur préférée. Explication:
la source
QBasic, 125 octets
Règles créatives abuser!
Cette soumission suppose que beaucoup de choses vont bien:
GORPY
)J'ai aussi une version de 130 octets qui utilise des minuscules et ne commet pas d'erreur.
Voici un exemple d’exécution dans QB64 ,
109
modifié29
pour une grille 5x5:Explication
DATA 71,89,82,79
stocke les codes ASCIIG
,Y
,R
etO
.?INPUT$(109)
obtient 109 pressions de l'utilisateur et les imprime.Nous entrons ensuite dans une
DO ... LOOP
construction infinie . A chaque passage, nousREAD
introduisons le code ASCII de la Skittle actuelles
. Ensuite, nous parcourons les lignes et les colonnes de 1 à 10. Nous obtenonsSCREEN(r,c)
le code ASCII du caractère à l’écranr
, ligne , colonnec
. Si cela est égal à la Quille actuelles
, nousSLEEP
pour une seconde, puis imprimer un espace àr
,c
.La boucle principale est exécutée quatre fois, supprimant les quilles vertes, jaunes, rouges et oranges. À la cinquième itération,
READ
erreurs car nous manquons de données.la source