var QUESTION_ID=106496,OVERRIDE_USER=20260;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/106496/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>
RockPaper
.Réponses:
Groovy,
675650 octetsEssayez-le en ligne!
Il se trouve que le jeu de la pierre, du papier et des ciseaux a une propriété plutôt cool.
Étant donné les chaînes a et b, prenez la première lettre de chacune, cela donne deux des éléments suivants:
R,P,S
La liste exhaustive des valeurs possibles est (Lorsque 2 choix sont combinés):
Réorganiser la liste pour:
Nous donne une séquence qui semble inversement sinusoïdale, et vous pouvez en fait représenter cette formule comme approximativement (et par approximativement, je veux dire à peine assez pour fonctionner, vous pourriez obtenir une équation sans faille mais qui coûte plus d'octets):
La simplification de 4 / pi à 1,3 a d'abord été suggérée par @flawr , puis testée par @titus pour une économie totale de 6 octets.
En utilisant les propriétés de double arrondi de groovy, il en résulte une sortie correcte pour les ciseaux à papier rock.
05AB1E , 10 octets (non-concurrence)
Essayez-le en ligne!
Même réponse portée à 05AB1E à l'aide des nouvelles commandes ajoutées le 26/10/2017.
la source
-sin(x) = sin(-x)
, cela signifie simplement inverser l'ordrea
etb
déposer le premier-
? Autre que cela, coder en dur une approximation de4/Pi
semblable1.273
pourrait être suffisant, ou1.3
ou9/7
ou5/4
.sin(b-a)
au lieu de-sin(a-b)
. Super trouvaille!1.3
au lieu de4/Math.PI
; c'est suffisamment exact.XX=ASCII=Y=Wanted output RR=82-82=0=0 PP=83-83=0=0 SS=80-80=0=0
C,
5035 octetsAppelez
f
avec une chaîne contenant les deux joueurs, sans séparateur, et il retournera si le premier gagne.Explication:
En regardant les neuf chaînes possibles, il s’avère que les paires de lettres des colonnes 7 et 8 sont uniques:
La distribution offset et sauvage permet de
short*
récupérer ces paires de lettres et de les interpréter comme des nombres:Ensuite, il a fallu la force brute pour trouver le
51
et les4
restes, qui ont été appliqués successivement pour réduire ces nombres à:Ce qui est parfait pour ajouter encore un reste à la fin et compenser le résultat.
Voir en direct sur Coliru
la source
-f(i)
pour calculer le score de l'autre joueur - une sortie inattendue en résultera!-(f(i))
devrait bien fonctionner. Les macros sont amusantes!MATLAB / Octave ,
63 5452 octetsIl est très pratique que les codes ASCII des premières lettres
Rock,Paper,Scissors
soientR=82,P=80,S=83
. Si nous soustrayons79
nous obtenons commodément3,1,4
, ce que nous utiliserons maintenant comme indices matriciels: Ici, une matrice 4x4 est codée en dur, où l'i,j
entrée -th correspond au résultat si vous insérez les valeurs juste avant:Essayez-le en ligne!
la source
Pure Bash, 31 ans
Emprunter @ la formule de Dennis :
Essayez-le en ligne .
Réponse précédente:
Pure Bash,
43354
,5
,8
respectivement pour Roche, papier, ciseaux)XOR chacun avec 3 à envoyer
7
,6
,11
(qui, pris mod 3 donnent1
,0
,2
)Ensuite, soustrayez et modifiez le mod 3 pour obtenir le résultat souhaité.
Essayez-le en ligne .
la source
Python ,
40 à30 octetsEssayez-le en ligne!
Contexte
J'ai commencé avec le modèle de fonction
et a lancé une recherche brute-force pour les paramètres appropriés en utilisant le programme suivant, puis en a choisi un avec une implémentation de longueur minimale.
Essayez-le en ligne!
la source
Mathematica, 32 octets
Fonction sans nom prenant une paire ordonnée de listes de caractères, telles que
{{"R","o","c","k"},{"P","a","p","e","r"}}
, et retournant-1|0|1
.Je voulais que le code évite non seulement les trois mots d'entrée, mais également le nom de la fonction trop longue
ToCharacterCode
; J'ai donc4,5,8
plutôt travaillé avec la longueur des mots d'entrée et cherché une fonction courte de ces longueurs donnant des réponses distinctes modulo 3. (La division entière par 2 est mathématiquement prometteuse, mais ces fonctions ont des noms trop longs dans Mathematica.)Il se trouve que prendre la factorielle de (la longueur - 3) donne les réponses
1,2,120
, qui sont1,-1,0
modulo 3. Ensuite, nous calculons simplement, modulo 3, la différence des deux valeurs (via le produit scalaire{1,-1}.{x,y} = x-y
, ce qui est un bon moyen lorsque le deux valeurs sont dans une liste).la source
Ruby,
363530 octetsEssayez-le sur ideone.com
Test de sortie:
Tirant parti du fait que 7 des 9 résultats corrects sont générés simplement en effectuant une comparaison lexicographique à l’aide de l’opérateur de vaisseau spatial
<=>
. Le(a+b)[12]
simple inverse les entrées à la comparaison si les entrées sontPaper
etScissors
(et aussiScissors
Scissors
- mais c'est l'0
inverse).Merci à Horváth Dávid de m'avoir sauvé un personnage et à GB de m'avoir sauvé 5 autres personnages.
la source
Python ,
39363433 octetsEssayez-le en ligne!
Comment ça fonctionne
Jetons un coup d'œil à quelques valeurs de la longueur de six copies de x et d'une copie de y modulo 7 .
Nous pouvons coder les résultats ( {-1, 0, 1} ) en les mappant dans l'ensemble {0, 1, 2, 3} . Par exemple, la cartographie t ↦ 2 - t y parvient et constitue son propre inverse.
Notons le résultat de x et y par o (x, y) . Ensuite:
Heureusement, les bits des dernières colonnes sont tous en accord, nous pouvons donc OU former un seul entier n et récupérer o (x, y) sous la forme 2 - ((n ≫ o (x, y))% 4) . La valeur de n est 94 .
la source
Retina ,
35 à31 octetsEssayez-le en ligne!
Explication
Cela fonctionne en deux étapes. Tout d'abord, nous imprimons les signes moins pour les entrées correspondantes. Ensuite, nous imprimons un
0
pour les cravates et un1
autre.Ceci est deux étapes. Dans
)
la deuxième étape, ils sont regroupés,*
ils sont traités à sec (ce qui signifie que la chaîne d'entrée sera restaurée après leur traitement, mais le résultat sera imprimé) et\
supprimera l'impression d'un saut de ligne suivi. Les deux étapes ensemble imprimeront un-
si applicable.La première étape est une
G
étape de représentant qui ne garde que la ligne si elle contient soitk P
,r S
ous R
. Celles-ci correspondent aux cas où nous devons sortir-1
. Si ce n'est pas le cas, l'entrée sera remplacée par une chaîne vide.La deuxième étape remplace
.+
(la chaîne entière, mais seulement si elle contient au moins un caractère) par-
. Donc, cela affiche un-
pour ces trois cas et rien autrement.Ceci est deux autres étapes. La première étape est une
D
éduplication. Il correspond aux mots et supprime les doublons. Donc, si et seulement si l'entrée est une égalité, le deuxième mot est supprimé.La deuxième étape compte le nombre de correspondances de
.
, qui est un espace suivi de tout caractère. Si la saisie était à égalité et que le deuxième mot a été supprimé, cela se traduit par0
. Sinon, le deuxième mot est toujours en place et il y a une correspondance. Il est donc imprimé1
.la source
05AB1E ,
181715109 octets6 octets enregistrés avec l' astuce de longueur d'entrée de Digital Trauma
Prend en tant que
[SecondPlayersChoice,FirstPlayersChoice]
Essayez-le en ligne! ou valider tous les cas de test
Solution alternative à 9 octets:
íø¬ÇÆ>3%<
Explication
Solution précédente de 15 octets
Essayez-le en ligne! ou valider tous les cas de test
Explication
la source
Ç¥13T/*.½ò
POURQUOI CELA FONCTIONNE-T-IL? PERSONNE NE SAIT.['R','P']
: P C'est un port de ça.Gelée , 8 octets
Essayez-le en ligne! (suite de tests, convertit en entier pour plus de clarté)
Comment ça fonctionne
la source
Python 2 ,
4640 octetsEssayez-le en ligne!
Un grand merci à @Dennis de m'avoir permis d'emprunter son code d'essai Try it en ligne et de m'avoir sauvé 6 octets.
Modifier
@ hashcode55 - à peu près comme vous le décrivez. (x! = y, -1) est une séquence de deux éléments et [x [0] + y [0] in'RPSR '] calcule quel élément prendre. Si la première lettre de x + la première lettre de y figure dans la liste des caractères, elle sera évaluée à True ou à 1, si bien que (x! = Y, -1) [1] sera renvoyé. Si ce n'est pas alors (x! = Y, -1) [0]. C'est là que ça devient un peu délicat. Le premier élément est en soi un autre si. Si x! = Y, le premier élément sera True, sinon ce sera False. Par conséquent, si x [0] + y [0] in'RPSR 'est false, alors True ou False sera renvoyé selon que x == y. Le + est un peu sournois et merci encore à @Dennis pour celui-ci. Le x! = Y retournera un littéral vrai ou faux. Nous avons besoin d'un 1 ou d'un 0. Je ne sais toujours pas comment mais le + effectue cette conversion. Je ne peux que supposer que l'utilisation d'un opérateur mathématique sur True / False l'oblige à être considéré comme l'équivalent entier. Evidemment, le + devant le -1 retournera toujours -1.
J'espère que cela t'aides!
la source
(x!=y,-1)
cela fonctionne comme si, si la liste générait un vrai, alors -1 sinonx!=y
. Quelle est l'utilisation de ce+
signe? Une source documentant ce type de syntaxe serait vraiment utile!+
- dans ce cas, il s’agit d’un avantage unaire+10
, et constitue essentiellement un moyen rapide de convertir en entier.JavaScript (ES6),
4638 octetsExploite le fait que Rock-Paper-Scissors est cyclique. JavaScript n'a ni vaisseau spatial ni opérateurs ternaires équilibrés, sinon la réponse serait
(a,b)=>((b<=>'Rock')-(a<=>'Rock'))%%3
.Edit: 8 octets sauvegardés grâce à @WashingtonGuedes.
la source
MATL ,
14 à13 octetsEssayez-le en ligne! Ou vérifiez tous les cas de test .
Explication
Si le code ASCII de la lettre initiale de la première chaîne est soustrait de celui de la deuxième chaîne, nous obtenons la valeur dans la colonne D ci-dessous. La prise modulo 5 donne la valeur M . La valeur finale entre parenthèses est le résultat souhaité, R .
Ainsi, si nous calculons D , puis M , pour obtenir R, il suffit de mapper 0 à 0; 1 et 2 à 1; 3 et 4 à −1. Cela peut être fait en indexant dans un tableau de cinq entrées égales à 0, 1 ou -1. Comme l'indexation dans MATL est basée sur 1 et modulaire, le tableau doit être
[1, 1, −1, −1, 0]
(la première entrée a l'index 1, la dernière a l'index 5 ou l'équivalent 0). Enfin, l'opération modulo 5 peut heureusement être évitée, car elle est implicitement réalisée par l'indexation modulaire.la source
CJam , 12 octets
Les deux entrées sont séparées par des espaces. Leur ordre est inversé par rapport à celui du texte de contestation.
Essayez-le en ligne! Ou vérifiez tous les cas de test .
Explication
Traduction de ma réponse MATL . Cela exploite le fait que dans CJam
c
(conversion en caractère) appliqué sur une chaîne prend son premier caractère. En outre, le tableau pour le mappage est différent car l'indexation dans CJam est basée sur 0.la source
CJam,
151412 octetsPrenez le code ascii du dernier caractère de chaque chaîne, puis retourne:
(a1 - a2 + 19) % 3 - 1
Testez-le ici !
la source
Python 3, 54 octets
Essayez-le en ligne!
la source
Java 7, 82 octets
Ungolfed:
Explication:
o
,a
etc
, avec les décimales ASCII111
,97
et99
.0
(Rock, Rock)14
(Rock, Papier)12
(Papier, ciseaux)-14
(Papier, rock)0
(Papier, papier)-2
(Papier, ciseaux)-2
(Ciseaux, Rock)2
(Ciseaux, papier)0
(Ciseaux, ciseaux)4
,2
,-4
,-2
,-2
,2
.x
est maintenant le suivant pour les cas de test:2
et-2
sont incorrects, et auraient dû être-1
et à la1
place. Donc, six%2 != x
(tout ce qui est au1
- dessus ou au -dessous-1
), nous divisons par-2
pour résoudre ces deux «cas extrêmes».Code de test:
Essayez ici.
Sortie:
la source
c
,p
,i
) avec les valeurs ASCII99
,112
et105
, comme ils semblaient les plus utiles, et a remarqué qu'il deviendrait 4, 2, 0 si je ne modulo 5. Alors seulement, je me suis dit que je devais soustraire les deux, donc les 4, 2 et 0 ne sont pas d'une grande utilité. Après quelques tâtonnements / essais et erreurs, j'ai essayé la deuxième lettre et obtenais des résultats plus utiles avec le même modulo 5 toujours présent. Puis je suis rapidement venu à la solution que j'ai présentée ci-dessus. :)dc, 18
Essayez-le en ligne .
Notez que les deux arguments sont passés (séparés par des espaces) sur une ligne à STDIN. Les arguments sont entre crochets
[ ]
car c'est ainsidc
que ses chaînes sont appréciées.dc
La manipulation des cordes est très limitée, mais il s'avère qu'une des choses que vous pouvez faire est d'utiliser laZ
commande pour obtenir une longueur de chaîne, qui heureusement est distincte pour "Rock", "Paper" et "Scissors", et peut être assez simplement arithmétiquement. manipulé pour donner le résultat souhaité.la source
PHP, 34 octets
la source
Pyth, 16
Probablement pourrait être plus court.
En ligne .
la source
C #,
8584 octetsEnregistré 1 octet, grâce à TheLethalCoder
Il accepte deux chaînes en entrée et génère un entier. Il y a égalité, si les deux chaînes sont égales, sinon, le premier caractère des chaînes est vérifié, afin de déterminer quel joueur gagne.
la source
a=>b=>...
JavaScript,
37,32, 31 octetsSi a est égal à b, affiche le zéro.
Sinon, xou le résultat de la vérification si la longueur n’est pas supérieure à 12 (comparaison des ciseaux et du papier) avec la comparaison d’un nombre supérieur à b.
Si cela retourne 1, retournez-le.
S'il renvoie 0, utilisez l'opérateur OR pour le remplacer par -1.
la source
a=>b=>
au curry pour sauvegarder un octet?Lot, 116 octets
la source
Perl, 33 octets
32 octets de code +
-p
drapeau.Pour l'exécuter:
Sauvegardé de 3 octets en utilisant l'expression régulière de la réponse Retina de Martin Ender . (mon regex précédent était
/R.*P|P.*S|S.*R/
)Explication:
Tout d’abord,
/(.+) \1/
vérifie si l’entrée contient deux fois le même mot. Le cas échéant, le résultat est0
. Sinon,/k P|r S|s R/
traite du cas où la réponse est-1
. Si cette dernière expression rationnelle est fausse, alors elle-/k P|r S|s R/
est fausse, alors nous revenons1
.la source
Gelée , 9 octets
Ceci utilise l'algorithme de la réponse Bash de @ DigitalTrauma .
Essayez-le en ligne!
Comment ça fonctionne
la source
Japt , 19 octets
Essayez-le ici!
Inspiré par la solution de carusocomputing
Ancienne solution à 53 octets
Essayez-le en ligne!
Merci encore, ETHproductions!
la source
©
place de&&
, changer leUg0 c
enUg c
(même avecV
) et le remplacer-1
parJ
. C'est encore un peu plus long que la réponse du JS , vous pouvez peut-être en tirer quelques idées©
W=Uc
. Je ne sais pas pourquoi j'oublie constamment que çac
marche sur n'importe quelle corde: PPHP,
5553 octetsversion sinusoïdale,
4946 octetsLa réponse de carusocomputing au port de golf :
3 octets enregistrés par @ user59178
la source
round(x)
par2*x^0
Perl, 25 octets
Code 24 octets +1 octet pour l'
-p
option.L'entrée doit être sur stdin sans séparateurs, par exemple:
La première expression rationnelle cherche le premier joueur à gagner, la seconde sa perte. La différence est imprimée.
la source
Scala, 148 octets
Heureusement, étant donné que les points-virgules sont nécessaires pour séparer plusieurs commandes sur la même ligne, Scala bénéficie d'un code de golf formatable!
Dans cette tentative de golf, j'ai appris que vous pouvez remplacer
avec
parce que Scala vous permet de traiter les chaînes comme des tableaux dans le but d’obtenir des caractères.
la source