Implementiere die klassische Steinpapierschere.
Bedingungen:
- Benutzer gibt 'r', 'p' oder 's' ein
- Das Programm gibt 'r', 'p' oder 's' und das Ergebnis aus
- Programmauswahl ('r', 'p' oder 's') muss pseudozufällig sein ( ich sehe dich an Howard )
- Das Ergebnis kann mit jedem druckbaren Zeichen dargestellt werden. Es sollten immer drei mögliche Ergebnisse für die Eingaben des Benutzers vorliegen (der Benutzer gewinnt, verliert oder ist unentschieden).
- Was passiert, wenn der Benutzer nichts eingibt oder etwas anderes, das "r", "p" oder "s" ist, nicht wichtig sein sollte?
Du brauchst:
- Geben Sie den Golfcode an.
- Der Code ohne Golf
- Wie rufen Sie das Programm auf?
- Ein Probelauf
Ich werde die Antwort mit weniger Zeichen wählen, wenn ein Unentschieden vorliegt, wird die am häufigsten gewählte Antwort gewählt.
Gutes Golfen und viel Glück für Sie.
Ich werde selbst eine Antwort in Java veröffentlichen.
Für diejenigen, die in einem Berg unter einem Felsen leben:
r = rock
p = Papier
s = Schere
Rock: gewinnt mit der Schere, verliert mit dem Papier, ein Unentschieden mit Rock.
Papier: gewinnt zu rocken, verliert mit einer Schere, ein Unentschieden mit Papier.
Schere: gewinnt zu Papier, verliert mit Stein, ein Unentschieden mit der Schere.
Aktuelle Positionen:
- UN: Benutzername
- PL: Programmiersprache
- CC: Character Count
- UV: Mehr Stimmen
╔══════════════════╦════════════╦══════╦════╗ ║ 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 ║ ╚══════════════════╩════════════╩══════╩════╝
Ich kann Howards Antwort nicht auswählen, da es ein (erfolgreicher) Versuch war, die Regeln zu biegen, aber ich ändere sie, um sie besonders deutlich zu machen.
Die Antwort mit 27 Buchstaben kann nicht ausgewählt werden, da sie per se nicht pseudozufällig ist
primo -p antworte, ich gehe mit "-p würde als 3 Bytes gezählt: eins für das -, eins für das p und eins mehr für das notwendige Leerzeichen."
Vielen Dank an alle, die geantwortet haben, ich hoffe, Sie hatten eine gute Zeit!
HINWEIS: Ich werde versuchen, diese alle zwei Wochen zu bearbeiten, die Tabelle anzupassen und meine ausgewählte Antwort zu ändern, wenn jemand die aktuelle übertrifft. Wenn Sie gerade hier angekommen sind, posten Sie Ihre Antwort, wenn Sie möchten!
-p
werden 3 Bytes gezählt: eines für das-
, eines für dasp
und eines für das notwendige Leerzeichen. Viele andere Wettbewerbe auf CG.SE haben jedoch jede Option als einzelnes Byte gezählt. In der Regel entscheidet der Fragesteller, welches System zu ehren ist.Antworten:
APL, 31
x←'rps'
Weisen Sie Zeichenfolge'rps'
zux
(?3)⌷
Wähle zufällige ganze Zahlen von 1 bis 3 und wähle den Index vonx
⍞,
Voranstellen der Benutzereingabe für die Maschinenauswahl⎕←
Die resultierende Zeichenfolge ausgebenx⍳
Mit indexOf in ein numerisches Array konvertierenx
-/
Unterschied der beiden Zahlen1+|3
Modul 3 und plus 1'TWL'[...]
Indizierung von'TWL'
Probe
Benutzer wählen Rock, Programm wählen Papier: Verlieren
quelle
LOLCODE, 1397
Hinweis: Ich reichte dies ein, bevor ich bemerkte, dass die Gewinnanforderung von Popularität mit Golf-Tie-Break zu Golf mit Popularität-Tie-Break geändert wurde.
Es gibt eigentlich keine strikte Syntax, aber ich bin mir sicher, dass dies akzeptabel ist.
Wenn dies erfolgreich ausgeführt werden würde
RockPaperScissors.LOL
, könnten folgende zufällige Ergebnisse vorliegen:Rock
- Ausgabe:I GUESSED SCIZZORS U WONNED
Paper
- Ausgabe:I GUESSED PAPER NOWAI TIED
Scissors
- Ausgabe:I GUESSED ROCK LOL U LOZED
Tuna
- Ausgabe:WHAT U SAYZ? YOU BURNTED MAH TREAT!
quelle
GolfScript
Der obige Code implementiert die erforderliche Funktionalität. Darüber hinaus wird sichergestellt, dass der Spieler aufgrund einer (wahrgenommenen) Ungerechtigkeit der Computerstrategie niemals wütend wird.
Ungolfed-Version
So rufen Sie das Programm auf
Die Eingabe (ein einzelnes Zeichen von 'r', 'p', 's') muss in STDIN erfolgen, möglicherweise mit Zeilenumbruch abgeschlossen.
Ein Probelauf
Erklärung des Codes
Für alle, die nicht mit GolfScript vertraut sind, füge ich eine detaillierte Erklärung hinzu, wie dieser Code funktioniert. Der Code besteht im Wesentlichen aus drei Teilen.
Anmerkungen
Da dies kein Code-Golf sondern ein Beliebtheitswettbewerb ist, habe ich nicht die kürzeste Version gewählt. Im Falle eines Unentschieden könnte ein kürzerer Code meine Lösung zunichte machen. Für Golfliebhaber bieten sich jedoch folgende Möglichkeiten:
0
als Ausgabe für die Auslosung wählen . Das kürzeste gültige Programm ist daher der Ein-Zeichen-Code0
.quelle
n"d"
, da die Frage besagt, dass die Ausgabe ein beliebiges druckbares Zeichen sein muss, sagt sie nichts über die Verwendung vollständiger Wörter aus.Ruby:
6154 ZeichenIrgendwie erklärt:
Das gesamte Problem beschränkt sich auf die Berechnung der folgenden Ergebnisse:
Wo die Zahlen bedeuten:
Dafür habe ich die Formel verwendet: machine_choice - human_choice. Dies führt gelegentlich zu einem negativen Wert. Da er jedoch nur als Index verwendet wird und der negative Index rückwärts gezählt wird, wird das richtige Array-Element ausgewählt.
Verwendete Methoden (andere sind
Fixnum
naheliegend):inspect
gefolgt von einem Zeilenumbruch zur Standardausgabe des Programms. “max.to_i.abs == 0
rand ohne Argument aufgerufen wird oder wenn , gibt rand eine pseudozufällige Gleitkommazahl zwischen 0.0 und 1.0 zurück, einschließlich 0.0 und ausschließlich 1.0."Ungolfed:
Probelauf:
quelle
[(c-o.index($_)+3)%3]
kann durch[c.-o.index$_]
für 7 Bytes ersetzt werden. Außerdem sollten Sie-nl
mindestens zwei Punkte zu Ihrer Punktzahl hinzufügen .c.
Tipp..-
. Gepunktete Operatoren haben eine viel geringere Priorität als ihre nicht gepunkteten Gegenstücke. Beispielsweisea/(b+c)
kann durch ersetzt werdena./b+c
.C # (167 Zeichen)
Mein allererster Versuch beim Golfen.
Golf gespielt
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"));}}
Nicht golfen
Probenlauf Die App erfordert einzelne char Eingänge als Argument 1 zur Anwendung, entweder
r
,s
oderp
.Alle möglichen Ergebnisse
cmd > app.exe r
gibt Outputr T
(Rock, Tie)cmd > app.exe r
gibt eine Ausgabe ausp L
(Papier, verloren)cmd > app.exe r
gibt Outputs W
(Schere, Gewinn)cmd > app.exe p
gibt Outputr W
(Rock, Win)cmd > app.exe p
gibt Ausgabep T
(Papier, Krawatte)cmd > app.exe p
gibt Ausgabes L
(Schere, verloren)cmd > app.exe s
gibt ausgangr L
(rock, lost)cmd > app.exe s
gibt eine Ausgabe ausp W
(Papier, Gewinn)cmd > app.exe s
gibt Ausgangs T
(Schere, Krawatte)quelle
Perl 48 Bytes
Das Skript druckt das Ergebnis aus der Perspektive des Computers aus. Wenn beispielsweise der Spieler
r
und der Computer auswählens
, lautet das ErgebnisLose
.$%
(Seitenzahl formatieren) wird verwendet, um den Umzug des Computers zu speichern, da er möglicherweise nur einen ganzzahligen Wert enthält, der eine Ganzzahl-Umwandlung speichert.Ungolfed:
Beispielnutzung:
Das Skript kann auch interaktiv ausgeführt werden, indem Sie Ihren Zug eingeben, gefolgt von Enter:
Regel-Stretching
Perl 35 +3 Bytes
Erfordert die
-p
Befehlszeilenoption (3 Byte). Jedes der ErgebnisseWin
,Lose
undDraw
wurden abgebildetW
,L
,D
. Der Zeilenumbruch zwischen der Wahl des Computers und dem Ergebnis wurde ausgeschlossen.Beispielnutzung:
Perl 30 +3 Bytes
Nochmals benötigt
-p
. HierWin
,Lose
undDraw
wurde abgebildet2
,1
und0
jeweils. Dies ist technisch immer noch kompatibel, da es sich um druckbare Zeichen handelt.Beispielnutzung:
Perl 24 +3 Bytes
Erfordert
-p
, abgebildet WLD auf2
,1
,0
wie zuvor. Jedes^T
sollte durch ein buchstäbliches ASCII-Zeichen 20 ersetzt werden.$^T
Gibt die Anzahl der Sekunden seit dem Start des Skripts zurück. Alle Ergebnisse sind möglich, aber nicht ganz als pseudozufällig zu qualifizieren.Beispielnutzung:
quelle
APL (
3836)Ausgänge 'T', 'W' und 'L' für Gleichstand, Sieg und Niederlage.
Probelauf:
(Benutzer gibt 'p' für Papier ein. Computer wählt 'r' (rock), Benutzer gewinnt)
Erläuterung:
⌽↑⌽∘'TWL'¨⍳3
: generiert die folgende Matrix:⍞⍳⍨c←'rps'
:c
auf die Zeichenfolge setzen'rps'
, Benutzereingabe lesen und den Index der Benutzereingabe in der Zeichenfolge abrufen (dies ist ein Wert von 1 bis 3). Dieser Index wird als Y-Koordinate in der Matrix verwendet.i←?3
: Erhalte eine Zufallszahl von 1 bis 3 und speichere sie ini
, dies ist die Wahl des Computers. Dies wird als X-Koordinate in der Matrix verwendet.c[i]
: Verwenden Sie diese Optioni
als Index fürc
und zeigen Sie die Computerauswahl als 'r', 'p' oder 's' an.quelle
ferNANDo 1184 (259 golfen) Bytes
Ein in Python geschriebener Interpreter befindet sich unten auf der verlinkten Seite.
ferNANDo ist eine esoterische Sprache, die nur einen Variablentyp (Boolean) und nur eine Operation (NAND) unterstützt. Wie Sie sich vorstellen können, kann dies zu einer ziemlich langen Logik führen, um scheinbar einfache Aufgaben zu erledigen. Es unterstützt das Lesen von stdin (jeweils ein Byte), das Schreiben in stdout (jeweils ein Byte), bedingte Schleifen und einen Zufallsgenerator.
Es gibt überhaupt keine Schlüsselwörter. alles ist eine Variable. Die Funktion einer Anweisung wird ausschließlich durch die Anzahl der darin enthaltenen Variablen bestimmt. Es gibt auch keine Kommentare, deshalb habe ich mein Bestes getan, um den Code selbstkommentierend zu machen. Die letzten vier Zeilen mögen etwas verwirrend sein, aber es wird wahrscheinlich genügen zu sagen, dass es gedruckt
Win!
wirdLose
, oderDraw
abhängig vom Ergebnis.Das Skript kann interaktiv ausgeführt werden, indem Sie Ihren Zug gefolgt von eingeben Enter.
Beispielnutzung (vorausgesetzt, Sie haben den Interpreter benannt
nand.py
):Bearbeiten: Nur um zu beweisen, dass ferNANo mit Java konkurrieren kann, ist hier eine 'Golf'-Version mit 259 Bytes . Die Logik ist auf den ersten Blick anders. es prüft
not win
undnot tie
, was ein paar NAND-Gatter spart (weil ich dann nur dienot
Versionen der Züge des Spielers brauche und weilnot lose
sie für die Ausgabe nicht benötigt wurden). Nicht annähernd so interessant zu lesen.quelle
o_shi- o_shi- o_shi-
Das war komisch, sich selbst zu kommentieren.q
, aber er macht das Vernünftige und rerollt.Python 3.x: 74 Zeichen
Wie es funktioniert
Auf der Grundlage des Schicksals wird festgelegt, welche Auswahl anhand der Formel getroffen werden soll
Ungolf Version
Probelauf
quelle
Lua, 87
Verwendung:
Ungolfed:
quelle
GolfScript 62
Eine alternative GolfScript-Lösung, viel langweiliger als die von Howard :).
Das Programm wählt zufällig einen Zug aus und zeigt das Ergebnis aus Sicht des Benutzers an.
Der Code
Probelauf
Online-Test
Sie können das Programm ausführen und mit verschiedenen Eingaben experimentieren: http://golfscript.apphb.com/?c=OydzJwoKJ3Jzc3BwcicuWzZyYW5kPV0nJys6wqdAKy4uJiwoez8pwqdcJ0xvc2UnJ1dpbidpZn17EzF3Fcv
Beachten Sie jedoch, dass der Parameter (Benutzerumzug), der normalerweise in der Befehlszeile übergeben wird, jetzt im Code selbst zum Stapel hinzugefügt wird (es gibt keine Möglichkeit, in diesem Online-Tool "echte" Befehlszeilenparameter bereitzustellen).
"Ungolfed" Version
Ich habe keine Ahnung, was ungolfed bedeutet, wenn es um GolfScript geht, also habe ich versucht, Kommentare hinzuzufügen. Hoffentlich wird dadurch die Funktionsweise des Codes verdeutlicht und die Lesbarkeit verbessert:
quelle
C
9286 ZeichenDruckt die Wahl des Computers und das Ergebnis aus Sicht des Benutzers - W = Sie gewinnen, L = Sie verlieren, T = Unentschieden.
Die einfache Formel ergibt
x-y
unter Berücksichtigung der ASCII-Werte der Auswahl (offensichtlich) 0 beim Zeichnen und in jedem anderen Fall einen eindeutigen Wert.quelle
Python 2 (
86848078), Python 3 - 76 Zeichen0 - Unentschieden, 1 - Niederlage, 2 - Sieg
Ungolfed
Wie läuft man:
python file_name_here.py
Probleme:
Computer AI: 35 Zeichen
quelle
A
und du kannst einen anderen Char mit rettenfrom random import*
.from random
, weil ich dachte, es hat sich nicht geändert ...Versuchen Sie es zunächst, ohne andere zu überprüfen.
gespielt:
10785 BytesAusgabe ist [NPC-Wahl] [1: Gewinn, 2: Verlust, 3: Unentschieden]
ungolfed:
quelle
PowerShell:
1441331171119273Golf Code:
Kann direkt von der Konsole ausgeführt werden.
Ungolfed, mit Kommentaren:
Einige Beispiele laufen an der Konsole:
quelle
JAVA 259 :(
Hochgradig ungolfter Code:
Probeläufe:
quelle
Befunge: 107 Zeichen
Etwas klobig. Es ist schrumpfbar, die Frage ist, um wie viel.
quelle
JavaScript (87)
Golf gespielt:
Ungolfed:
Sie können den Code einfach in die Javascript-Konsole Ihres Browsers einfügen, um ihn auszuführen.
Wenn ich das Ergebnis ausdrucken darf, bevor ich die Auswahl des Computers drucke (83) :
quelle
K, 67
Druckt W, L, D für Gewinn / Verlust / Unentschieden.
Ungolfed:
Oder in Q, was besser lesbar ist:
Probelauf:
quelle
Javascript, 117 Zeichen
Hier ist ein datengesteuerter Ansatz für das Problem. Dies kann wahrscheinlich optimiert werden, indem die Gewinn- / Verlust- / Zeichnungsdaten generiert werden, anstatt sie manuell abzubilden, aber es ist ein Anfang :)
Golf gespielt:
Ungolfed:
Schließlich ist hier eine Geige mit beiden.
quelle
Javascript: 256
Golf gespielt:
ungolfed:
quelle
Clojure:
Mini-Version (129 Code-Zeichen):
quelle
JAVA (387) erster Code Golf!
Ungolfed
Golf (Abstand / Einrückung)
Nicht der kürzeste Code, aber mein erster Versuch
quelle
import java.util.*
2)HashMap l
->Map l
3) Wirken auf(int)
anstatt(Integer)
4)new Random().nextInt(3)
5) Weglassennew int[][]
6)(Character)
Wirken auf 7) Verwenden Sie Ints anstelle von Zeichen.Los (169)
Golf gespielt:
Ungolfed (wie formatiert von
go fmt
):Lauf :
quelle
Pyth , 23
Die Ausgabe erfolgt in der Form:
Gleichstand: 0 Sieg: 1 Niederlage: 2
Erläuterung:
Gehen Sie wie folgt vor:
Für nur 4 weitere Zeichen können wir T für Gleichstand, W für Gewinn und L für Verlust verwenden:
Bis auf den Unterschied der Indizes ist alles gleich. An diesem Punkt verwenden wir den Unterschied als Index für den String
"TWL"
.Hinweis: Während ich diese Sprache entwickelt habe, nachdem die Herausforderung veröffentlicht wurde, hatte ich sie bis heute nicht gesehen. Die Herausforderung hat keinen Aspekt der Sprache beeinflusst.
quelle
Groovy, 89
Übernimmt die Benutzerauswahl als Argument. Beispiel:
quelle
C # & LinqPad 133
Golf gespielt:
ungolfed:
Beispielausgabe (Eingabe war s): r> L // Computer wählt rock (r) -> also haben wir verloren
quelle
JavaScript (79)
Ich stoße auf einen alten, aber jetzt geht's los ...
Mit dem zusätzlichen Bonus, dass Sie jedes Gestein verwenden können, das Sie mögen: Pegnatit, Pyroxenit, Scoria, Sovit, Kimberlit, Trondjemit, Tuff oder jedes andere. Einzige Einschränkung ist, dass man nicht
p
oder verwenden kanns
;-)Golf Code:
Die wichtigsten Tricks sind:
1. u = ~~{}[prompt()]
Objekt verwenden
{}
und Wert durch Benutzereingabe von abrufenprompt()
. So weit, ist es gut. Dannr : 0
können wir stattdessen die Konvertierung erzwingen, indem wir0
den~~
NOT-Operator verwenden. Es wird häufig für Stockwerksnummern verwendet, hat aber auch den (Vorteil), dass es nicht zurückgegeben wird,NaN
wenn andere Betreiber dies wünschen, z+{a:1, b:2}['c']
.2. c = new Date%3
Das Datum wird häufig ausgetrickst, indem zB verwendet wird
+new Date
, um es direkt in einen Zeitstempel umzuwandeln, andernfalls würde man eine Zeichenfolgendarstellung erhalten. Hier erreicht man mit Mod den gleichen Effekt.3. 'rps'[c]
Indizierter Zugriff auf Zeichenfolgen, bei denen der Computer die Wahl
0 = r
hat1 = p
oder2 = s
.4. (u==c ? 2 : !u&c>1 | u&!c | u>1&c )
Der ungolfed Code kann ungefähr so aussehen:
quelle
Golfscript - 29
Dies ist eine tatsächliche Antwort dieses Mal (dich ansehend,:
n"Draw"
P).Ungolfed:
Sie können es mit ausführen
ruby golfscript.rb MyCode.txt
, woMyCode.txt
ist der Programmcode.Beispielläufe (alle mit Eingabe "r", aber es funktioniert mit allem) (Gleichstand ist 0, Gewinn ist 2, Verlust ist 1):
Wenn Sie eine Erklärung für eine der Versionen wünschen und / oder eine mögliche Verbesserung sehen möchten, sagen Sie es mir.
quelle
Javascript,
657170Ohne Computerausgabe: 65
Nur um diese Lösung zu testen, ist es richtig:
Bei Computerausgabe: 71
70
und der Test:
quelle