Je pense que tout le monde connaît les fléchettes, certaines personnes ne comprennent pas les scores, donc pour ces personnes, voici un lien utile à ce sujet.
Le tableau
Un jeu de fléchettes peut être comparé à une tarte coupée en 20 morceaux. Chaque pièce est divisée en 4 sections.
- un petit anneau extérieur appelé double (points x2)
- un gros anneau appelé single (points x1)
- un autre petit anneau appelé triple (points x3)
- un autre grand anneau appelé single (points x1)
Au milieu du plateau se trouvent 2 autres anneaux, un vert et un rouge (plateau classique)
- L'anneau rouge, au centre du plateau appelé bullseye ou double bull et est bon pour 50 points. Celui-ci compte comme un double et à cause de cela, il est autorisé à payer avec lui.
- Anneau vert, appelé taureau, taureau simple ou simplement 25 et compte comme un seul.
Défi
Trouvez toutes les possibilités de paiement avec 3 fléchettes ou moins.
L'utilisateur peut entrer un entier et vous devrez vérifier s'il est possible d'obtenir le score à 0 avec 3 fléchettes (ou moins).
Exemples
Exemple 1:
Input: 170
Output: T20, T20, Bullseye
Exemple 2:
Input: 6
Output: D3;
S3,S1,D1;
S2,D2;
S2,S2,D1;
D2,D1;
S4,D1;
D1,D1,D1;
S1,S1,D2;
T1,S1,D1;
Exemple 3:
Input: 169
Output: No possible checkout!
Règles
- Règle de base de la fléchette, vous devez terminer par un double (anneau extérieur du plateau ou oeil de boeuf)
- Pas d'utilisation de ressources externes.
- Le codage en dur des extractions possibles est autorisé mais rappelez-vous que c'est codegolf, il ne raccourcira pas votre code;)
- Les cellules à frapper seront affichées au format C + N où C = T pour Triple, D pour double et S pour simple.
- bullseye peut être appelé bullseye ou DB, DBull ou quelque chose de simulaire.
Paiements possibles
Pour commencer, le paiement le plus élevé possible est de 170.
169.168.166.165.163.162.159 ne sont pas possibles en 3 fléchettes.
Le paiement le plus bas possible est de 2.
en plus
Ce n'est pas une exigence, ajoutez une possibilité d'afficher toutes les caisses possibles pour tous les scores. Fondamentalement parce que je me demande combien de combinaisons sont possibles: P
Le gagnant sera celui avec le code le plus court.
Codage heureux.
Réponses:
C ++
248/228230/214 car.Rév 0:
Rev 1. Sauvegarde de certains caractères en déclarant toutes les variables à la fois et en éliminant les crochets inutiles. Il s'avère qu'en C ++ toute logique et bit à bit et / ou ont une priorité inférieure à celle des comparaisons.
J'ai fait une fonction plutôt qu'un programme, comme d'autres l'ont fait. Il renvoie le nombre total de possibilités trouvées. Il peut être réduit de 230 à 214 caractères en éliminant la fonction de totalisation.
Exemple de sortie, score 6:
Je compte différentes première et deuxième fléchettes comme la même combinaison, comme l'OP l'a fait (exemple:
T1 S1 D1 = S1 T1 D1) même si cela coûte 7 caractères supplémentaires. Je liste toujours le score le plus élevé en premier (en ignorant les doublons et les triples) car je pense que cela est plus pertinent pour le joueur (qui peut changer sa stratégie s'il manque avec la première fléchette.) Pour la même raison, je liste les fléchettes dans l'ordre selon la deuxième fléchette. Je considère que la 3e fléchette est complètement différente des deux autres, donc je considère D1 D2 et D2 D1 comme des cas différents alors que l'OP les a listés comme les mêmes.
Avec ce système de comptage, j'obtiens 42336 possibilités totales , les mêmes que mmumboss. En comptant différentes première et deuxième fléchettes comme différentes combinaisons, cela monte à 83349.
Je n'ai pas utilisé de boucle for avec des ensembles comme d'autres l'ont fait (je suis assez nouveau en C ++ et je ne sais même pas si c'est possible.) Au lieu de cela, j'abuse un conditionnel dans l'incrément de boucle pour passer de 20 à 25 J'utilise la variable d'une seule boucle pour encoder tous les scores possibles pour une seule fléchette, comme ceci: S1 D1 T1 S2 D2 T2 etc. avec module et division à décoder. Cela permet d'économiser sur la verbosité de déclarer plus pour les boucles, bien que cela rend les expressions plus compliquées.
Le résultat de cela est qu'une fléchette inutilisée est représentée par T0, mais je pense que ce que cela signifie est clair, d'autant plus que (en considérant différentes première et deuxième fléchettes comme la même combinaison), j'ai pu les regrouper toutes au début de ma sortie.
Version non golfée ici. Quelques autres fonctionnalités sont l'utilisation sélective des opérateurs & et && avec | de manière à donner l'ordre de priorité que je veux sans crochets.
la source
MATLAB (
299249241 caractères)C'est mon premier golf sérieux. Ma première tentative (136 caractères) donne le résultat correct, mais pas avec le formatage correct. Il donne toutes les possibilités en regardant le nombre de points pour chaque fléchette. Cela signifie que le simple 20 et le double 10 ont une entrée distincte, cependant, ils sont tous deux affichés comme 20. Bien sûr, la dernière fléchette est toujours un double.
Dans la deuxième tentative, le formatage est amélioré, ce qui a bien sûr augmenté le nombre de caractères:
Amélioré de 299 à 249 caractères, tout en améliorant en même temps le formatage de sortie. Pour cette version améliorée, la sortie des exemples de cas est:
f (170):
f (6):
f (169):
Additionnel:
Selon mes compétences en calcul, il y a un grand total de 42336 possibilités pour terminer le jeu de fléchettes.
la source
60 60 50
devrait l'êtreT20 T20 Bullseye
. Je vais préciser cela dans la question. Bien joué, presque là :)Rubis (260 caractères)
"Le dernier devrait être un double" était la pièce manquante - ne pouvait pas comprendre pourquoi 168 ne devraient pas avoir de résultats ...:
c. (170)
c. (6)
la source
Python 2.7 (270 caractères)
Pas sûr que le python permettra un one-liner, mais il est en trois.
Ou 278+ caractères avec un bon message "Pas de paiement" (par exemple 290 ici):
Et c'est parti:
f (170)
f (6)
f (169)
Choses dont je ne suis pas satisfait:
Cela représente plus de 10% du total. Existe-t-il un moyen plus compact sans itertools, etc.?
Ceci est utilisé pour éviter les doublons dans le cas d'une finition à deux fléchettes (par exemple ['', 'S1', 'D1'] et ['S1', '', 'D1']). Je considère que l'ordre est important (hé - la dernière fléchette doit être un double, donc clairement l'ordre importe), mais le non-lancer est un cas spécial.
la source
05AB1E , 43 octets
Assez lent. Sorties sous forme de liste de listes, ou une liste vide si aucune finition n'est possible. Mes taureaux sont
S25
etD25
; si ce n'est pas permis, je peux le changer.Essayez-le en ligne ou vérifiez quelques cas de test à la fois .
Explication:
Il y a deux étapes:
1) Créez une liste de toutes les fléchettes simples, doubles et triples possibles:
2) Obtenez tous les finisseurs possibles (se terminant par un double) jusqu'à 3 fléchettes:
3) Ne conservez que ceux dont le score total est égal à l'entier en entrée:
4) Convertissez les données en une jolie liste de résultats (c'est-à-dire
[[20,3],[5,1],[1,2]]
devient["T20","S5","D2"]
):la source
Kotlin , 254 octets
Remarque: algorythm est basé sur la réponse C ++ de Level River St.
Essayez-le en ligne!
la source