Vous avez décidé d'organiser un championnat rock-paper-ciseaux pour découvrir qui est le meilleur. Vous ne voulez pas laisser la chance décider du vainqueur, donc tout le monde doit vous donner sa tactique par écrit avant la compétition. Vous aimez aussi les choses simples, donc un mouvement d'un compétiteur (montrant de la roche, du papier ou des ciseaux) doit être basé uniquement sur le tour précédent (RvR, RvP, RvS, PvR, PvP, PvS, SvR, SvP ou SvS). Au premier tour, un joueur doit montrer un signe fixe.
Vous avez décidé d'écrire un programme (ou une fonction) pour simuler le championnat.
Détails du concours
- Il y aura au moins 2 candidats.
- Chaque joueur joue exactement un match avec tout le monde.
- Un match dure 7 tours.
- À chaque tour, le gagnant obtient 2 points, le perdant n'en obtient aucun. En cas d'égalité, les deux joueurs marquent 1 point.
- Un joueur marque dans un match est la somme de ses points sur les tours du match.
- Le score final d'un joueur au championnat est la somme de ses points sur tous les matchs.
Détails de l'entrée:
- votre programme ou fonction reçoit
N
10 chaînes de caractères longues chacune correspondant à une stratégie de joueurs. Tous les personnages sont en minusculesr
p
ous
signifient que dans la situation donnée, le joueur montrera du papier de roche ou des ciseaux. - La première lettre code le premier tour (dans chaque match pour ce compétiteur). La seconde montre ce qui se passe si le dernier tour était rock vs rock. Les suivants sont RvP, RvS, PvR, PvP, PvS, SvR, SvP et SvS où la première lettre est le signe du joueur et la seconde celle de l'adversaire. Par exemple
rrpsrpsrps
, le joueur commence par le rock puis copie le dernier coup de l'adversaire. - Vous pouvez saisir la liste des chaînes sous forme de liste / tableau ou de données similaires de votre langue ou sous forme d'une seule chaîne. Dans ce dernier cas, une sorte de caractère séparateur est indispensable.
Détails de la sortie:
- Votre programme ou fonction doit produire les scores finaux de chaque joueur dans le même ordre que l'entrée a été fournie.
- Les partitions doivent être séparées par des espaces ou des retours à la ligne. L'espace de fin ou la nouvelle ligne est autorisé.
Exemples:
Contribution:
['rrpsrpsrps', 'rpppsprrpr']
Sortie:
5 9
(les tours sont rvr rvp pvs svp pvr rvp pvs
)
Contribution:
['rrpsrpsrps', 'rpppsprrpr', 'ssssssssss']
Sortie:
13 17 12
(les matchs sont 5-9
(1er vs 2ème), 8-6
(1er vs 3ème) et 8-6
(2ème vs 3ème))
Il s'agit de code-golf, donc l'entrée la plus courte gagne.
la source
6-8
et le second perd contre le troisième avec6-8
.Réponses:
Python 2:
201188 caractèresLa logique du programme: je convertir les lettres au numéro (
r=0
,p=1
,s=2
).m
est le numéro de la première,n
le numéro de la deuxième personne. Parce que le jeu est cyclique,(m-n)%3
détermine déjà le résultat. Et bien sûr, je peux décaler le résultat d'unf=(m+1-n)%3
. Désormais,f=0
signifie que le deuxième joueurq
gagne,f=1
signifie une égalité et que lef=2
premier joueurp
gagne. C'est aussi déjà le score du joueur 1. Par conséquent, je n'ai qu'à ajouter toutes les valeurs(p!=q)*(m+1-n)%3
pour chaque joueur.Testez-le avec
print f(['rrpsrpsrps', 'rpppsprrpr', 'ssssssssss'])
la source