Dans le jeu Pickomino , il y a plusieurs tuiles au milieu de la table, chacune avec un entier positif différent sur elles. Chaque tour, les joueurs lancent les dés d'une certaine manière et obtiennent un score, qui est un entier non négatif.
Maintenant, le joueur prend la tuile avec le nombre le plus élevé qui est toujours inférieur ou égal à son score, retirant la tuile du milieu et l'ajoutant à sa pile. Si cela n'est pas possible car tous les nombres au milieu sont supérieurs au score du joueur, le joueur perd la tuile la plus haute de sa pile (qui a été ajoutée en dernier), qui est retournée au milieu. Si le joueur n'a plus de tuiles, rien ne se passe.
Le défi
Simulez un joueur qui joue contre lui-même. Vous obtenez une liste des tuiles au milieu et une liste des scores obtenus par le joueur. Retourne une liste des tuiles du joueur après que tous les tours ont été évalués.
Règles du challenge
- Vous pouvez supposer que la liste avec les tuiles est ordonnée et ne contient aucun entier deux fois.
- Vous pouvez prendre les deux listes d'entrées dans l'ordre que vous souhaitez
- La sortie doit conserver l'ordre des tuiles sur la pile, mais vous pouvez décider si la liste est triée de haut en bas ou de bas en haut.
Règles générales
- C'est le code-golf , donc la réponse la plus courte en octets l'emporte.
Ne laissez pas les langues de golf de code vous décourager de publier des réponses avec des langues non-golfeur de code. Essayez de trouver une réponse aussi courte que possible pour «n'importe quel» langage de programmation. - Des règles standard s'appliquent à votre réponse avec des règles d'E / S par défaut , vous êtes donc autorisé à utiliser STDIN / STDOUT, des fonctions / méthodes avec les paramètres appropriés et des programmes complets de type retour.
- Les failles par défaut sont interdites.
- Si possible, veuillez ajouter un lien avec un test pour votre code (par exemple TIO ).
- Il est recommandé d'ajouter une explication pour votre réponse.
Exemple
(extrait du 6ème cas d'essai)
Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [22, 22, 22, 23, 21, 24, 0, 22]
Le premier score est 22, alors prenez la tuile la plus haute au milieu <= 22, qui est 22 lui-même.
Middle: [21, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Stack: [22]
Remaining scores: [22, 22, 23, 21, 24, 0, 22]
Le score suivant est de 22, alors prenez la tuile la plus haute au milieu <= 22. Parce que 22 est déjà pris, le joueur doit prendre 21.
Middle: [23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Stack: [22, 21]
Remaining scores: [22, 23, 21, 24, 0, 22]
Le score suivant est 22, mais tous les nombres <= 22 sont déjà pris. Par conséquent, le joueur perd la tuile la plus haute de la pile (21), qui est retournée au milieu.
Middle: [21, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Stack: [22]
Remaining scores: [23, 21, 24, 0, 22]
Les scores suivants sont 23, 21 et 24, donc le joueur prend ces tuiles du milieu.
Middle: [25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Stack: [22, 23, 21, 24]
Remaining scores: [0, 22]
Le joueur casse et marque zéro. Par conséquent, la tuile avec le numéro 24 (le plus haut sur la pile) est retournée au milieu.
Middle: [24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Stack: [22, 23, 21]
Remaining scores: [22]
Le dernier score est de 22, mais toutes les tuiles <= 22 sont déjà prises, donc le joueur perd la tuile la plus haute de la pile (21).
Middle: [21, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Final Stack and Output: [22, 23]
Cas de test
(avec la tuile la plus haute en dernier dans la liste de sortie)
Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [26, 30, 21]
Output: [26, 30, 21]
Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [35, 35, 36, 36]
Output: [35, 34, 36, 33]
Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [22, 17, 23, 19, 23]
Output: [23]
Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: []
Output: []
Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [22, 17, 23, 19, 23, 0]
Output: []
Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [22, 22, 22, 23, 21, 24, 0, 22]
Output: [22, 23]
Tiles: [1, 5, 9, 13, 17, 21, 26]
Scores: [6, 10, 23, 23, 23, 1, 0, 15]
Output: [5, 9, 21, 17, 13, 1]
Tiles: []
Scores: [4, 6, 1, 6]
Output: []
Réponses:
Haskell ,
119111104103 103 octets1 octet économisé grâce à Ørjan Johansen
Essayez-le en ligne!
Suppose que les tuiles sont triées par ordre décroissant.
Pas beaucoup de fantaisie ici. Le premier argument est la pile des joueurs, le second leurs scores et le troisième est la pile au milieu.
la source
sort
croissant. Cependant, le cas de test TIO ne touche jamais cette branche. Je recommande fortement de tester tous les cas à chaque fois lors d'une itération comme celle-ci.(#)=span.(<)
.Japt, 24 octets
Oof! Cela n'a pas fonctionné aussi bien que je le pensais!
Prend la saisie dans l'ordre inverse.
Essayez-le ou exécutez tous les cas de test sur TIO
la source
Perl 6 , 89 octets
Essayez-le en ligne!
Je pense qu'il y a encore quelques octets à jouer sur ce ...
la source
C # (Visual C # compilateur interactif) ,
159158154 octetsAppelé comme
f(tiles)(scores)
Si seulement
System.Void
est en fait un type de retour et pas seulement un espace réservé à la réflexion. Je serais en mesure de remplacerif(a<1)m.Add(s.Count<1?0:s.Pop());else s.Push(a);
parvar t=a>1?m.Add(s.Count<1?0:s.Pop()):s.Push(a);
, en économisant deux octets.Essayez-le en ligne!
la source
Rubis , 77 octets
Essayez-le en ligne!
la source
JavaScript (Node.js) , 80 octets
Même logique que la version ES6, mais prend les tuiles comme un masque de bits BigInt et les scores comme un tableau de BigInts.
Essayez-le en ligne!
JavaScript (ES6),
100 98 9487 octetsPrend l'entrée comme
(tiles)(scores)
. Les tuiles peuvent être passées dans n'importe quel ordre.Essayez-le en ligne!
Commenté
la source
Fusain , 35 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
Faites une boucle sur les scores.
Recherchez la tuile la plus haute disponible.
S'il existe, alors ...
... retirez la tuile du milieu ...
... et ajoutez-le à la pile.
Sinon, si la pile n'est pas vide ...
Retirez la dernière tuile de la pile et remettez-la au milieu.
Imprimez la pile résultante du plus ancien au plus récent.
la source
Python 2 , 120 octets
Essayez-le en ligne!
la source
05AB1E ,
2722 octetsEssayez-le en ligne ou vérifiez tous les cas de test .
Explication:
la source
Pyth, 32 octets
Essayez-le en ligne ici ou vérifiez tous les cas de test en même temps ici .
Il doit y avoir place à amélioration quelque part - toutes les suggestions seraient très appréciées!
la source
Perl 5
-apl -MList:Util=max
, 97 octetsTIO
lit les partitions et les tuiles sur la ligne suivante et imprime la sortie.
Comment
-apl
:-p
pour boucler sur les lignes et imprimer,-a
autosplit,-l
pour couper à partir de l'entrée et ajouter un caractère de nouvelle ligne à la sortie$_=$".<>
: pour lire la ligne suivante (tuiles) et ajouter un espace dans la var par défaut$_
for$i(@F){
...}
boucle$i
sur les@F
champs de la ligne courante (scores)(
..?
..:
..).=$&
ajouter la correspondance précédente à la valeur l ternaire($m=max grep$_<=$i,/\d+/g)&&s/ $m\b//?$s
dans le cas où la valeur maximale trouvée et supprimée des tuiles ($_
) la valeur l est les scores ($s
)$s=~s/ \d+$//?$_
sinon, si le dernier numéro peut être retiré des scores, ce sont des tuiles:$G
enfin c'est des ordures parce que ça ne peut pas arriver$_=$s;s/ //
pour définir les scores sur var par défaut et supprimer l'espace de têtela source