Sie müssen ein Spiel zu niedrig machen --- zu hoch (TLTH) in kürzestem Code (in Bytes)
Spielregeln:
- Der Computer wählt eine Zufallszahl aus dem ganzzahligen Bereich (-32768..32767).
- Nun werden Sie sich eine Zahl überlegen und diese eingeben.
- Der Computer erkennt, ob Ihre Nummer niedriger (
TOO LOW
) oder höher (TOO HIGH
) als die ausgewählte Nummer ist. - Wenn Sie die Nummer erraten haben, sollte der Computer anzeigen
Congrats! You found the number!
.
Code-Regeln:
Verwenden Sie die Zeichen nicht
T
,O
,L
,W
,H
,I
undG
(weder Klein noch Großbuchstaben) in String oder Zeichenliterale.
Zum Beispiel:tolower(T); // Acceptable cout<<"T"; // Unacceptable char ch='T'; // Unacceptable
Entfernen Sie 300 Bytes, wenn Ihr Code die Spielregeln anzeigen kann, bevor Sie das Spiel starten.
Entferne 50 Bytes, wenn dein Code die Anzahl der Runden zählen kann und die Anzahl der Runden am Ende des Spiels wie folgt anzeigt:
"Congrats! You found the number in n turns!"
Dabei ist n die Anzahl der durchgeführten Umdrehungen anstelle von
"Congrats! You found the number!"
Entfernen Sie 25 Bytes aus Ihrer Punktzahl, wenn Ihr Code dem Benutzer mitteilen kann, dass die eingegebene Zahl außerhalb des ganzzahligen Bereichs liegt.
Beispielsweise:Enter the number: 40000 Sorry! This number is out of range Please Enter the number again:
25 Bytes entfernen Wenn Ihr Code die Zufallszahl nicht von einer eingebauten Zufallsfunktion übernimmt.
10 Bytes entfernen Wenn Ihr Code "Glückwunsch" in Farbe anzeigt (wählen Sie eine andere Farbe als die Standardfarbe Weiß).
Einreichungsregeln:
Fügen Sie eine Überschrift mit Ihrem Sprachnamen hinzu und bewerten Sie alle Kopfgeldberechnungen und deren Erklärung.
Veröffentlichen Sie Ihren Code mit und ohne Golf.
Gewinner
- Die Antwort mit den wenigsten Bytes gewinnt.
- Bei Stimmengleichheit gewinnt die Antwort mit den mehr Stimmen.
- Der Gewinner wird nach 5 Tagen ermittelt.
EDIT : Bitte zeigen Sie die Ausgabe Ihres Codes.
EDIT-2 : Sie können Regel-1 für Regeln-2,3 und 4 in Code Rules ignorieren
Viel Glück :]
WhileURong(USayNumbr;ISayBigrOrSmalr)
Antworten:
JavaScript (-210 Punkte (
190
Bytes -300
(für die Regeln) -50
(für die Anzahl der Vermutungen) -25
(für die Nichtverwendung einer eingebauten Zufallszahlenquelle) -25
(um Ihnen mitzuteilen, ob die Eingabe außerhalb des Bereichs eines Vorzeichens liegt16
-bit Ganzzahl) ):Golf gespielt:
Vollständiger Code (gut formatiert):
Ausgabe:
quelle
0
. :-( Sollte inTOO LOW
/TOO HIGH
? Auch kein Leerzeichen sein ?Perl 5.10+:
159144 Bytes - 350 = -206 PunkteBearbeiten 2: Mit der letzten Regeländerung, die es mir ermöglicht, ein beliebiges Zeichenfolgenliteral für die "Glückwunsch" -Nachricht zu verwenden, kann ich 15 Bytes von meiner ursprünglichen 159-Byte-Lösung einsparen. Der obige neue Code ist im Vergleich zum alten Code nicht besonders neuartig oder interessant (ich habe gerade die
p
Funktion entfernt und rufesay
stattdessen direkt auf). Der Rest dieses Beitrags beschreibt daher den unten gezeigten Originalcode:Ja, ich missbrauche die Hölle aus Regel 1. Wer braucht Saiten, wenn Sie Barewörter haben können ? ;-)
Führen Sie mit aus
perl -M5.010
, um die Perl 5.10+say
-Funktion zu aktivieren (oder ersetzen Sie denp
Funktionskörperprint join$",@_,$/
gegen einen Aufpreis von 5 Byte).Bonuspunkte:
Der Code enthält streng genommen keine String-Literale. Ich würde also sagen, dass Regel 1 technisch gesehen nicht verletzt wird. Der Trick ist, dass in Perl
use strict
jeder Bezeichner, der keinem bekannten Sprachschlüsselwort oder Unterprogramm entspricht, einfach zu seinem eigenen Namen ausgewertet wird. Die Funktion nimmtp
dann einfach eine Liste von Wörtern und druckt sie durch Leerzeichen getrennt aus.Beispiel für ein Durchspielen:
Bearbeiten: Oh, richtig, die Regeln besagen, dass ich auch eine nicht-Golf-Version des Codes posten muss, also geht es los. Technisch gesehen ist es "de-golfed", da ich meine Code-Golfprogramme in der Regel von Anfang an in mehr oder weniger vollständiger Form zusammenstelle. Manchmal kann es schwierig sein, alle "golfy" -Optimierungen zu entfernen, ohne dabei grundlegend zu ändern, wie einige Teile der Software funktionieren Programm arbeiten. Trotzdem habe ich zumindest versucht, Leerzeichen, Kommentare und aussagekräftigere Funktions- / Variablennamen hinzuzufügen:
Ps. Als Alternative, wenn Sie nur Barewords anstelle von Strings verwenden, ist dies eine 182-Byte-Lösung, bei der die Buchstaben nicht
TOLWHIG
einmal in Barewords verwendet werden (sondern in einem Transliterationsoperator). Es erhält immer noch die gleichen Boni für eine Gesamtpunktzahl von 182 - 350 = −168 Punkte :Die Ausgabe sieht genauso aus wie oben. Gemäß den (Original-) Regeln verwende ich die Buchstaben
t
undi
drucke die Regeln, da dies erlaubt ist. Das Eliminieren dieser Verwendungen würde jedoch nur zwei zusätzliche Bytes kosten. Wenn ich dagegen die gesamte Ausgabe in Großbuchstaben schreibe (was nach den obigen Kommentaren zulässig zu sein scheint), kann ich drei Bytes einsparen.quelle
def method_missing *args;args.join' ';end
.Python 2: -80 Punkte (270-300-50)
Die Punktzahl beträgt 270 Zeichen, minus 300 für das Anzeigen der Anweisungen, minus 50 für das Anzeigen der Anzahl der Vermutungen in den "Glückwünschen!" Zeichenfolge für insgesamt negative 80 Punkte.
Ungolfed-Version des Loops mit ungeschliffenen Saiten:
Die integrierte
cmp
Funktion gibt 0 zurück, wenn die Werte gleich sind, -1, wenn der erste kleiner und 1, wenn der erste größer ist. Ich benutze den Wert, um ein Tupel von Strings zu indizieren und dann wieder als Ausgangsbedingung der Schleife. Die Indizierung einer Sequenz mit einem negativen Index (wie -1) beginnt am Ende der Sequenz und nicht am Anfang.Ich war sehr versucht, die Importe zu überspringen und nur
4
meine Zufallszahl gemäß XKCD 221 zu verwenden (würde sich das für den Bonus von -25 Zeichen qualifizieren?).Beispiellauf (komplett mit einem Fehler, bei dem ich keine negativen Berechnungen durchführen kann):
quelle
g
ist er Null und diewhile
Schleife endet.You can ignore Rule-1 for Rules-2,3 & 4 in Code Rules
JavaScript 293, -300 (Regeln) - 50 (Abbiegeanzeige) - 25 (Bereichswarnung) - 25 (keine Zufallsfunktion) = -107 (neue Punktzahl)
r=new Date%65536+~(z=32767);n=x="";for((A=alert)("\107uess my number, \111 \147\151ve feedback");(x=prompt())!=r;A(0>(x-~z^x-z)?"\164\157\157 "+(x>r?"\150\151\147\150":"\154\157\167"):"Ran\147e: "+~z+" - "+z))n++;A("C\157n\147ra\164s! Y\157u f\157und \164\150e number \151n "+ ++n+"\164urns!")
Ich würde behaupten, dass nach RGB-Konventionen Schwarz eine Farbe ist, aber das wäre ein bisschen Betrug ...
Oh, und darf ich hinzufügen, auch keine Regel # 1 zu brechen!
Ausgabe in einer Reihe von Warnungen und Eingabeaufforderungen
Ungolfed-Code:
quelle
A=alert;
und alle die Ersetzungalert
mitA
. Und noch eine, wenn Sie den AlarmA(0>(x...
nach dem Semikolon verschiebenprompt())!=r;)n++1
.feedback if too high/low
die derzeit 84 Zeichen verwendeti give feedback
(was nur\151 \147\151ve feedback
24 Zeichen erfordern würde , um 60 Zeichen zu speichern .n++
die for-Schleife in die for-Schleife verschiebenx=prompt(n++)
, um zu sparen, was Sie+ ++n+
in der letzten Warnung tun müssen . Es würde 3 sparen.Javascript, 324 Bytes, Score -76
[Aufgrund von Regeländerungen aktualisiert]
Gesamtpunktzahl: -76
Golf gespielt:
Lass uns dieses Chaos ungolf machen.
Erstens, richtig identifiziert (aber das ist mit verschleiertem Code immer noch nicht sehr gut):
Zweitens Umbenennen von Bezeichnern:
Die Funktion zum Entschlüsseln ruft alle Zeichen zwischen ASCII 33 (
!
) und ASCII 58 (:
) ab und addiert 32, wobei sie in Zeichen im Bereich konvertiert werdenA-Z
.Lässt den Code durch Entschlüsseln aller Zeichenfolgen weiter entschlüsseln:
Und schließlich können Sie einige Anweisungen an andere Stellen verschieben, die lange ternäre Kette durch ifs und elses ersetzen, verkettete Zeichenfolgen verbinden und die Mathematik vereinfachen, um die Lesbarkeit zu verbessern:
Probe:
quelle
C - 272 Zeichen - 300 - 50 - 25 = -103
Golf Code:
Ungolfed:
Ausgabe:
quelle
C: 237 - 300 - 50 - 25 - 25 - 10: -173 Punkte
-300 für die Regeln, -50 für die Anzeige der Anzahl der Vermutungen, -25 für die Nichtverwendung eines eingebauten Zufallszahlengenerators, -25 für die Außer-Reichweite-Nachricht und -10 für das Ausmalen der Glückwunsch-Nachricht.
Ungolfed:
Beispiellauf:
Die letzte Zeile wird rot angezeigt.
quelle
Bash, -137
Ergebnis
273 (Bytes) - 300 (Regeln) - 50 (Zählversuche) - 25 (OOF-Warnung) - 25 (benutzerdefiniertes PRNG) - 10 (Farbe)
Golf Version
Beachten Sie, dass die letzte Zeile ein Kommentar ist und daher keine Zeichenfolgen- oder Zeichenliterale enthält.
Ungolfed-Version
Beispielausgabe
Die letzte Zeile wird grün gedruckt.
quelle
C #: -30 Punkte
Golf gespielt :
Um es auszuführen, setzen Sie es in einer Datei (code.cs) und mit laufen scriptcs auf der Kommandozeile:
scriptcs code.cs
.Ungolfed : Variablennamen wurden zu leicht verständlichen Buchstaben erweitert und Hexadezimalbuchstaben in echte Buchstaben umgewandelt.
Beispielausgabe hier verfügbar .
quelle
T
,O
,L
,W
,H
,I
undG
(weder Klein noch Großbuchstaben) in String oder Zeichenliterale. “T
,O
,L
... mit\x54
,\x4F
,\x4C
... und du bist in Ordnung.C ++ 505 + (-300-50-25-25) = 105
-300: Anweisungen
-50: Anzahl der Umdrehungen
anzeigen -25: Keine Zufallsfunktion verwenden
-25: Benutzer wird vor Eingaben außerhalb des zulässigen Bereichs gewarnt
GOLFED
UNGOLFED
AUSGABE
quelle
C 183-300-25 = -142
183 Bytes -300 für die Regeln -25 für die Nichtverwendung einer zufälligen Bibliothek
ungolfed version:
Probelauf:
quelle
"TOO HIGH"
und"TOO LOW"
beide enthalten unzulässige ZeichenTOLWHIGtolwhig
.TOO LOW
erlaubt ?J - 190 Zeichen -300 -50 = -160 Punkte
Erklärung (daran erinnern, dass J von rechts nach links gelesen wird):
'WhileURong(USayNumbr;ISayBigrOrSmalr)'1!:2]2
- Drucken Sie die Regeln.32767-?2^16[
- Werfen Sie den Rückgabewert und generieren Sie eine Zufallszahl zwischen 0 und einschließlich 2 ^ 16-1. Stellen Sie es dann auf den Bereich -32768..32767 ein, indem Sie es von 32767 subtrahieren.1>:@]^:(...)^:_~
- Dasx u^:v^:_ y
Muster ähnelt einer while-Schleife.x
bleibt konstant undy
wird bei jeder Ausführung von mutiertu
. Dies wird fortgesetzt, bis entwederx v y
0 zurückgegeben wird oderx u y
keine Änderung an erfolgty
. Das~
vertauscht die beiden Argumente, so dassx
dies die Zufallszahl ist undy
bei 1 beginnt. Unseru
Ist>:@]
, das diese 1 inkrementiert und sie zurückgibt, fungiert also als Zähler und dasx u y
Beendigungsbedingung niemals auftreten kann.[:".1!:1@1:
- Nehmen Sie den Zähler und ignorieren Sie seinen Wert, indem Sie stattdessen die Zahl 1 verwenden (1:
). Lesen Sie eine Eingabezeile (1!:1
) von der Tastatur ein (Dateizugriff 1) und führen Sie sie aus (".
). Dadurch kann J, dessen negatives Vorzeichen normalerweise_
ist, Zahlen in der Form annehmen-n
(wird als auf die Zahl angewendete Negation ausgewertet)n
).]`(...)@.*@-
- Nimm den Unterschied zwischen der Zufallszahl von vorher und der Vermutung (-
). Nun wählen wir die nächste Aktion aus, abhängig davon, ob diese Differenz Null ist (@.*
). Wenn dies der Fall ist, geben Sie (]`
) 0 als Ergebnis für zurückx v y
, sodass die Ausführung beendet wird und die gesamte while-Schleife den Zähler zurückgibt. Sonst...71+13 8 8 _39,(5 8 16;1 2 0 1){::~0&>
- Geben Sie das Array zurück,5 8 16
wenn die Zahl negativ und1 2 0 1
positiv ist. Dann voranstellen13 8 8 _39
und 71 zu allem addieren, so dass wir entweder84 79 79 32 76 79 87
oder haben84 79 79 32 72 73 71 72
.1[2:1!:2~a.{~
- Wandeln Sie diese Zahlen in ASCII-Zeichen um, indem Sie das Alphabet damit indizierena.
. Dann drucken Sie sie mit1!:2
(mit dem Dateizugriffspunkt 2) aus und geben 1 als Ergebnis von zurückx v y
.'Congrats, you found the number in ',' turns!',~":
- Wenn die Schleife beendet ist, wird der Zähler zurückgegeben. Konvertiere es in einen String mit":
und setze es zwischen die Strings'Congrats, you found the number in '
und' turns!'
.Beispielausgabe:
quelle
JavaScript -40
335 - 300 (Regeln) - 50 (Zählrunden) - 25 (außerhalb des Bereichs)
Ich werde nicht gewinnen, aber es macht Spaß, an die Buchstaben zu kommen, denke ich.
Golf gespielt
Ungolfed
Beispielausgabe
quelle
APL (Dyalog) (157 - 300 - 50 = -193)
(Ja, diese zählen als Byte, der APL-Zeichensatz passt in ein Byte.)
Ich habe behauptet, "Spielregeln anzeigen" und "Anzahl der Runden zählen".
Beispiellauf:
Ungolfed:
quelle
Pogo: -95 (255 - 300 - 50)
Wenn die Zahl 10 ist:
Die Zeichenanzahl basiert auf dem Code, bei dem alle Leerzeichen entfernt wurden.
Beachten Sie, dass Pogo keine gefälschte Sprache ist. Ich habe es erstellt und hier einen Compiler und eine IDE dafür geschrieben: https://github.com/nrubin29/Pogo
quelle