Mettez en œuvre les ciseaux classiques en papier de roche.
Conditions:
- l'utilisateur saisira «r», «p» ou «s»
- programme affichera «r», «p» ou «s» et le résultat
- le choix du programme ('r', 'p' ou 's') doit être pseudo aléatoire ( je vous regarde Howard )
- Le résultat peut être représenté avec n'importe quel caractère imprimable, il devrait toujours y avoir trois résultats possibles pour ce que l'utilisateur a entré (l'utilisateur gagne, perd ou est une égalité).
- que se passe-t-il si l'utilisateur ne saisit rien, ou quelque chose de différent que «r», «p» ou «s» ne devrait pas être important.
Tu dois:
- Fournissez le code du golf.
- Le code non golfé
- Comment invoquez-vous le programme
- Un échantillon
Je choisirai la réponse avec moins de caractères, si une égalité présente la réponse la plus votée sera choisie.
Bon golf et que la chance soit toujours en votre faveur.
Je publierai une réponse moi-même, en Java.
Pour ceux qui vivent dans une montagne sous un rocher:
r = roche
p = papier
s = ciseaux
rock: gagne aux ciseaux, perd avec du papier, une cravate avec du rock.
papier: gagne à basculer, perd avec des ciseaux, une cravate avec du papier.
ciseaux: gagne au papier, perd avec la roche, une cravate avec des ciseaux.
Positions actuelles:
- UN: Nom d'utilisateur
- PL: langage de programmation
- CC: nombre de caractères
- UV: Up votes
╔══════════════════╦════════════╦══════╦════╗ ║ UN ║ PL ║ CC ║ UV ║ ╠══════════════════╬════════════╬══════╬════╣ ║ Howard ║ GolfScript ║ 6 ║ 15 ║ ║ primo ║ Perl ║ 27 ║ 7 ║ ║ TwiNight ║ APL ║ 31 ║ 4 ║ ║ primo ║ Perl ║ 33 ║ 7 ║ ║ marinus ║ APL ║ 36 ║ 5 ║ ║ primo ║ Perl ║ 38 ║ 7 ║ ║ primo ║ Perl ║ 48 ║ 7 ║ ║ manatwork ║ Ruby ║ 54 ║ 13 ║ ║ w0lf ║ GolfScript ║ 62 ║ 4 ║ ║ tmartin ║ K ║ 67 ║ 2 ║ ║ Abhijit ║ Python 3 ║ 74 ║ 5 ║ ║ beary605 ║ Python 3 ║ 76 ║ 4 ║ ║ rlemon ║ javascript ║ 85 ║ 4 ║ ║ ugoren ║ C ║ 86 ║ 3 ║ ║ Egor Skriptunoff ║ LUA ║ 87 ║ 4 ║ ║ Shmiddty ║ javascript ║ 87 ║ 3 ║ ║ Fors ║ Befunge ║ 107 ║ 3 ║ ║ Briguy37 ║ javascript ║ 117 ║ 2 ║ ║ Vi. ║ Clojure ║ 129 ║ 1 ║ ║ Henrik ║ C# ║ 167 ║ 4 ║ ║ dystroy ║ Go ║ 169 ║ 1 ║ ║ Praveen ║ javascript ║ 250 ║ 0 ║ ║ ryan ║ javascript ║ 256 ║ 1 ║ ║ primo ║ ferNANDo ║ 259 ║ 5 ║ ║ anakata ║ Java ║ 259 ║ 1 ║ ║ epoch ║ Java ║ 387 ║ 1 ║ ║ jdstankosky ║ LOLCODE ║ 1397 ║ 15 ║ ╚══════════════════╩════════════╩══════╩════╝
Je ne peux pas sélectionner la réponse de Howards, car c'était une tentative (réussie) de contourner les règles, mais je les change, pour les rendre plus explicites.
la réponse à 27 caractères primo ne peut pas être sélectionnée car elle n'est pas pseudo aléatoire en soi
primo -p réponse, je vais aller avec "-p serait compté comme 3 octets: un pour le -, un pour le p, et un de plus les espaces nécessaires."
Merci à tous ceux qui ont répondu, j'espère que vous avez passé un bon moment!
REMARQUE: j'essaierai de modifier cela toutes les deux semaines, d'ajuster le tableau et de modifier ma réponse sélectionnée si quelqu'un bat la réponse actuelle, donc si vous venez d'arriver ici, postez votre réponse si vous le souhaitez!
-p
seraient comptées comme 3 octets: un pour le-
, un pour lep
, et un de plus les espaces nécessaires. Cependant, de nombreuses autres compétitions sur CG.SE ont compté chaque option comme un seul octet. C'est généralement à l'auteur de la question de décider quel système honorer.Réponses:
APL, 31
x←'rps'
Attribuer une chaîne'rps'
àx
(?3)⌷
Choisissez un entier aléatoire 1 ~ 3, choisissez cet indice dex
⍞,
Ajout d'une entrée utilisateur au choix de la machine⎕←
Sortie de la chaîne résultantex⍳
Convertir en tableau numérique par indexOf inx
-/
Différence des deux nombres1+|3
Module 3 et plus 1'TWL'[...]
indexation à partir de'TWL'
Échantillon
L'utilisateur choisit la roche, le programme choisit le papier: perdre
la source
LOLCODE, 1397
Remarque: J'ai soumis ceci avant de remarquer que l'exigence de gagner était passée de la popularité avec le tie-break de golf au golf avec le tie-break de popularité.
Il n'y a pas vraiment de syntaxe stricte, mais je suis sûr que c'est acceptable.
Si cela devait être exécuté avec succès
RockPaperScissors.LOL
, voici ce que pourraient être des résultats aléatoires possibles:Rock
- Sortie:I GUESSED SCIZZORS U WONNED
Paper
- Sortie:I GUESSED PAPER NOWAI TIED
Scissors
- Sortie:I GUESSED ROCK LOL U LOZED
Tuna
- Sortie:WHAT U SAYZ? YOU BURNTED MAH TREAT!
la source
GolfScript
Le code ci-dessus implémente les fonctionnalités requises. De plus, cela garantit que le joueur ne sera jamais en colère à cause d'une injustice (perçue) de la stratégie de l'ordinateur.
Version non golfée
Comment appeler le programme
L'entrée (un seul caractère de 'r', 'p', 's') doit être fournie sur STDIN, éventuellement terminée par une nouvelle ligne.
Un échantillon
Explication du code
Pour tous ceux qui ne connaissent pas GolfScript, j'ajouterai une explication détaillée du fonctionnement de ce code. Le code se compose essentiellement de trois parties.
Remarques
Comme ce n'est pas du golf de code mais un concours de popularité, je n'ai pas choisi la version la plus courte. Peut-être qu'en cas d'égalité, un code plus court éliminera ma solution. Néanmoins, pour ceux qui s'intéressent au golf, les possibilités suivantes sont offertes:
0
comme sortie pour le tirage. Ainsi, le programme valide le plus court est le code à un caractère0
.la source
n"d"
, comme la question disait que la sortie doit être n'importe quel caractère imprimable, cela ne dit rien sur l'utilisation de mots entiers.Rubis:
6154 caractèresEn quelque sorte expliqué:
L'ensemble du problème est réduit au calcul des résultats suivants:
Où les chiffres signifient:
Pour cela, j'ai utilisé la formule: machine_choice - human_choice. Il en résulte parfois une valeur négative, mais comme il n'est utilisé que comme index et que l'index négatif est compté en arrière, il choisira l'élément de tableau correct.
Méthodes utilisées (d'autres alors
Fixnum
évidentes):inspect
suivi d'un retour à la sortie standard du programme. "max.to_i.abs == 0
, rand renvoie un nombre à virgule flottante pseudo-aléatoire entre 0.0 et 1.0, incluant 0.0 et excluant 1.0."Non golfé:
Exemple d'exécution:
la source
[(c-o.index($_)+3)%3]
peut être remplacé par[c.-o.index$_]
pour 7 octets. En outre, vous devez ajouter au moins deux à votre score-nl
.c.
astuce..-
. Les opérateurs pointillés ont une priorité beaucoup plus faible que leurs homologues non pointillés. Par exemple,a/(b+c)
peut être remplacé para./b+c
.C # (167 caractères)
Mon tout premier essai de golf.
Golfé
using System;class P{static void Main(string[] i){var m="rspr";var a=m[Environment.TickCount%3];Console.WriteLine(a+" "+(i[0][0]==a?"T":m.Contains(i[0]+a)?"W":"L"));}}
Non golfé
Exemple d'exécution L'application nécessite des entrées de caractère unique comme argument 1 de l'application, soit
r
,s
soitp
.Tous les résultats possibles
cmd > app.exe r
donne une sortier T
(rock, tie)cmd > app.exe r
donne une sortiep L
(papier, perdu)cmd > app.exe r
donne une sorties W
(ciseaux, victoire)cmd > app.exe p
donne une sortier W
(rock, win)cmd > app.exe p
donne la sortiep T
(papier, cravate)cmd > app.exe p
donne une sorties L
(ciseaux, perdu)cmd > app.exe s
donne une sortier L
(rock, perdu)cmd > app.exe s
donne une sortiep W
(papier, gagner)cmd > app.exe s
donne la sorties T
(ciseaux, cravate)la source
Perl 48 octets
Le script imprime le résultat du point de vue de l'ordinateur, par exemple si le joueur choisit
r
et l'ordinateur choisits
, le résultat estLose
.$%
(format de numéro de page) est utilisé pour stocker le déplacement de l'ordinateur, car il ne peut contenir qu'une valeur entière, ce qui enregistre une conversion int.Non golfé:
Exemple d'utilisation:
Le script peut également être exécuté de manière interactive, en tapant votre mouvement suivi de Enter:
Étirement des règles
Perl 35 +3 octets
Nécessite le
-p
commutateur de ligne de commande (compté comme 3 octets). Chacun des résultatsWin
,Lose
etDraw
ont été mis en correspondanceW
,L
,D
. La nouvelle ligne entre le choix de l'ordinateur et le résultat a été exclue.Exemple d'utilisation:
Perl 30 +3 octets
Encore une fois, il faut
-p
. IciWin
,Lose
etDraw
ont été mappés à2
,1
et0
respectivement. C'est toujours techniquement conforme, car ce sont des caractères imprimables.Exemple d'utilisation:
Perl 24 +3 octets
Nécessite
-p
, WLD mis en correspondance2
,1
,0
comme avant. Chacun^T
doit être remplacé par un caractère ascii littéral 20. Celui-ci est certes un peu étiré;$^T
renvoie le nombre de secondes écoulées depuis l'époque du démarrage du script. Tous les résultats sont possibles, mais ce n'est pas tout à fait qualifié de pseudo-aléatoire.Exemple d'utilisation:
la source
APL (
3836)Sorties 'T', 'W' et 'L' pour égalité, victoire et perte.
Exemple d'exécution:
(L'utilisateur tape 'p' pour le papier. L'ordinateur choisit 'r' (rock), l'utilisateur gagne)
Explication:
⌽↑⌽∘'TWL'¨⍳3
: génère la matrice suivante:⍞⍳⍨c←'rps'
: définissezc
la chaîne'rps'
, lisez l'entrée utilisateur et obtenez l'index de l'entrée utilisateur dans la chaîne (ce sera une valeur de 1 à 3). Cet indice est utilisé comme coordonnée Y dans la matrice.i←?3
: obtenir un nombre aléatoire de 1 à 3 et le stockeri
, c'est le choix de l'ordinateur. Ceci est utilisé comme coordonnée X dans la matrice.c[i]
: utiliseri
comme index dansc
, affichant le choix de l'ordinateur sous la forme «r», «p» ou «s».la source
ferNANDo 1184 (259 golfés) octets
Un interpréteur écrit en Python se trouve au bas de la page liée.
ferNANDo est un langage ésotérique qui prend en charge un seul type de variable, booléen, et une seule opération, NAND. Comme vous pouvez l'imaginer, cela peut conduire à une logique assez longue pour accomplir des tâches apparemment simples. Il prend en charge la lecture depuis stdin (un octet à la fois), l'écriture vers stdout (également un octet à la fois), les boucles conditionnelles et également un générateur booléen aléatoire.
Il n'y a aucun mot-clé; tout est une variable. La fonction d'une instruction est déterminée uniquement par le nombre de variables qu'elle contient. Il n'y a également aucun commentaire, j'ai donc fait de mon mieux pour que le code soit auto-commenté. Les quatre dernières lignes pourraient être un peu déroutant, mais il suffira probablement dire qu'il imprime
Win!
,Lose
ou enDraw
fonction des résultats.Le script peut être exécuté de manière interactive, en tapant votre mouvement suivi de Enter.
Exemple d'utilisation (en supposant que vous avez nommé l'interprète
nand.py
):Edit: Juste pour prouver que ferNANDo peut rivaliser avec Java, voici une version «golfée» à 259 octets . La logique est visiblement différente; il vérifie
not win
etnot tie
, ce qui enregistre quelques portes NAND (car alors je n'ai besoin que desnot
versions des mouvements du joueur, et parce qu'ilnot lose
n'était pas requis pour la sortie). Mais pas aussi intéressant à lire.la source
o_shi- o_shi- o_shi-
C'était un commentaire hilarant.q
, mais il fait la chose sensée et relance.Python 3.x: 74 caractères
Comment ça marche
En fonction du destin, il détermine ce que son choix doit être basé sur la formule
Version sans golf
Exemple d'exécution
la source
Lua, 87
Usage:
Non golfé:
la source
GolfScript 62
Une solution GolfScript alternative, beaucoup plus ennuyeuse que Howard :).
Le programme choisit un mouvement au hasard et affiche le résultat du point de vue de l'utilisateur.
Le code
Exemple d'exécution
Test en ligne
Vous pouvez exécuter le programme et expérimenter avec différentes entrées ici: http://golfscript.apphb.com/?c=OydzJwoKJ3Jzc3BwcicuWzZyYW5kPV0nJys6wqdAKy4uJiwoez8pwqdcJ0xvc2UnJ1dpbidpZnpZZCJ3
Notez, cependant, que le paramètre (déplacement de l'utilisateur) qui est généralement passé dans la ligne de commande est maintenant ajouté à la pile dans le code lui-même (il n'y a aucun moyen de fournir de "vrais" paramètres de ligne de commande dans cet outil en ligne).
Version "non golfée"
Je n'ai aucune idée de ce que signifie non golfé en ce qui concerne GolfScript, j'ai donc essayé d'ajouter des commentaires. J'espère que cela clarifiera le fonctionnement du code et le rendra un peu plus lisible:
la source
C,
9286 caractèresImprime le choix de l'ordinateur et le résultat du point de vue de l'utilisateur - W = vous gagnez, L = vous perdez, T = égalité.
La formule simple
x-y
, étant donné les valeurs ASCII des choix, donne 0 au tirage (évidemment) et une valeur unique dans chaque cas.la source
Python 2 (
86848078), Python 3-76 caractères0 - égalité, 1 - défaite, 2 - victoire
Non golfé
Comment exécuter:
python file_name_here.py
Problèmes:
Computer AI: 35 caractères
la source
A
, et vous pouvez enregistrer un autre caractère avecfrom random import*
.from random
, car je pensais que ça ne changeait rien ...Essayez d'abord sans revoir les autres.
golfé:
10785 octetsla sortie est [npc-choice] [1: victoire, 2: perte, 3: égalité]
non golfé:
la source
PowerShell:
1441331171119273Code golf:
Peut être exécuté directement à partir de la console.
Non golfé, avec commentaires:
Quelques exemples d'exécutions sur la console:
la source
JAVA 259 :(
Code très non golfé:
Exemples de cycles:
la source
Befunge: 107 personnages
Légèrement maladroit. Il est rétractable, la question est de savoir combien.
la source
JavaScript (87)
Golfé:
Non golfé:
Vous pouvez simplement coller le code dans la console javascript de votre navigateur pour l'exécuter.
Si je suis autorisé à imprimer le résultat avant d'imprimer la sélection de l'ordinateur (83) :
la source
K, 67
Imprime W, L, D pour gagner / perdre / match nul.
Non golfé:
Ou en Q, qui est plus lisible:
Exemple d'exécution:
la source
Javascript, 117 caractères
Voici une approche du problème basée sur les données. Cela peut probablement être optimisé en générant les données gagnant / perdant / tirant au lieu de les mapper manuellement, mais c'est un début :)
Golfé:
Non golfé:
Enfin, voici un violon avec les deux.
la source
Javascript: 256
golfé:
non golfé:
la source
Clojure:
Version mini (129 caractères de code):
la source
JAVA (387) premier code golf!
Non golfé
Golfé (espacement / indentation)
Pas le code le plus court, mais mon premier essai
la source
import java.util.*
2)HashMap l
->Map l
3) transtyper au(int)
lieu de(Integer)
4)new Random().nextInt(3)
5) omettrenew int[][]
6) supprimer le transtypage en(Character)
7) utiliser des caractères au lieu de caractères.Aller (169)
Golfé:
Non golfé (tel que formaté par
go fmt
):Courir :
la source
Pyth , 23
La sortie est sous la forme:
Égalité: 0 Victoire: 1 Défaite: 2
Explication:
Exécutez comme suit:
Pour seulement 4 caractères supplémentaires, nous pouvons utiliser T pour égalité, W pour victoire et L pour perte:
Tout est le même jusqu'à la différence d'index, auquel point nous utilisons la différence comme index dans la chaîne
"TWL"
.Remarque: bien que j'aie développé ce langage après la publication du défi, je n'avais pas vu le défi jusqu'à aujourd'hui. Le défi n'a influencé aucun aspect de la langue.
la source
Groovy, 89
Prend le choix de l'utilisateur comme argument. Exemple:
la source
C # et LinqPad 133
golfé:
non golfé:
exemple de sortie (entrée était s): r> L // L'ordinateur choisit rock (r) -> donc nous avons perdu
la source
JavaScript (79)
Se cogner un vieux, mais c'est parti ...
Avec le bonus supplémentaire que vous pouvez utiliser n'importe quelle roche que vous aimez, pegnatite, pyroxénite, scorie, sovite, kimberlite, trondjemite, tuf ou tout autre. La seule limitation est que vous ne pouvez pas utiliser
p
ous
;-)Code golf:
Les principales astuces utilisées sont:
1. u = ~~{}[prompt()]
Utilisation de l'objet
{}
et récupération de la valeur par entrée utilisateur à partir deprompt()
. Jusqu'ici tout va bien. Ensuite, au lieu de l'avoir,r : 0
nous pouvons le forcer à être converti0
en utilisant l'~~
opérateur NOT. Il est souvent utilisé pour les numéros de sol, mais a aussi (avantage) de ne pas revenirNaN
alors que d' autres opérateurs serait, comme par exemple:+{a:1, b:2}['c']
.2. c = new Date%3
La date est fréquemment trompée en utilisant par exemple la
+new Date
conversion directe en horodatage, sinon on obtiendrait une représentation sous forme de chaîne. Ici, en utilisant le mod one, on obtient le même effet.3. 'rps'[c]
Accès indexé sur chaîne donnant le choix aux ordinateurs
0 = r
,1 = p
ou2 = s
.4. (u==c ? 2 : !u&c>1 | u&!c | u>1&c )
Le code non golfé peut ressembler à ceci:
la source
Golfscript - 29
C'est une vraie réponse cette fois (en vous regardant,:
n"Draw"
P).Non golfé:
Vous pouvez l'exécuter avec
ruby golfscript.rb MyCode.txt
, oùMyCode.txt
est le code du programme.Échantillons exécutés (tous avec entrée "r", mais cela fonctionne avec tout) (égalité 0, victoire 2, perte 1):
Si vous voulez une explication de l'une ou l'autre version et / ou voyez une amélioration potentielle, dites-le-moi.
la source
Javascript,
657170Sans sortie choix ordinateur: 65
Juste pour tester cette solution est correcte:
Avec sortie choix ordinateur: 71
70
et le test:
la source