Hatte gerade ein "temperamentvolles" Gespräch mit einem Kollegen über die Prägnanz der folgenden BASIC-Anweisung:
10 PRINT CHR$(205.5+RND(1)); : GOTO 10
Es ist der Titel dieses Buches , und es wird einfach eine Folge von /
und \
Zeichen gedruckt , die sich nach dem Zufallsprinzip abwechseln und zu einem ähnlichen Muster führen:
(Bild von http://www.flickr.com/photos/rndmcnlly/5058442151/sizes/o/in/photostream/ ausgeliehen )
Wir waren von PHP-Neigung und fragten uns, wie man das gleiche in PHP am kompaktesten schreiben könnte.
while(1) { echo chr(47 + 45 * rand(0,1)); }
chr(47)
ist ein /
Zeichen und chr (92) ist a \
. Die Aussage echo chr(47 + 45 * rand(0,1));
wird also nach dem Zufallsprinzip ad nauseum zwischen den beiden Alternativen wechseln.
Schreiben Sie in einer Sprache Ihrer Wahl das kürzeste Programm oder die kürzeste Funktion, um eine unendliche Zufallsfolge von \
und /
Zeichen auszugeben , wobei jedes Zeichen die gleiche Wahrscheinlichkeit hat, ausgewählt zu werden.
{}
Zahnspange verlieren , aber das ist ungefähr so kurz, wie Sie es schaffen können.Antworten:
Der
goto
Operator wurde PHP ab Version 5.3.0 hinzugefügt, sodass Sie dieselbe Methode wie in BASIC verwenden können:quelle
Da dies zu Codegolf migriert wurde ...
PHP 30 Bytes
Das
Ð
ist das Zeichen 208 und das£
ist das Zeichen 163.Anwendungsbeispiel (auf einer Windows-Box):
Erzeugt etwas Ähnliches wie:
Es funktioniert am besten mit einer Monospace-Schriftart, die genau quadratisch ist (hier habe ich die Standardsystemschrift 8x8 gewählt). Um zu Ihrer Standardfarbe zurückzukehren, können Sie
color
erneut ohne Parameter eingeben.quelle
rand()%2
(niemand hat angegeben, wie pseudozufällig es sein muss) - Funktioniert auch nicht auf Unicode-Terminals (wie OSX)rand()%2
zwischen null und eins.mt_rand()%2
würde aber funktionieren.Mathematica 157 Bytes
Ohne PETSCII habe ich meine eigenen "\" und "/" gerollt.
Keine Zigarre zur Abkürzung hier.
quelle
Brainfuck - 534
Mein prng (von hier ) ist groß und extrem langsam. Vielleicht würde ein einfacheres LFSR oder ähnliches ausreichen, aber das funktioniert:
quelle
C, 39 Zeichen (38 bei MSVC)
Sehen Sie es laufen.
Auf MSVC, können wir ersetzen
putchar()
mit_putch()
und speichern ein Byte, aber es funktioniert nicht in IDEOne.quelle
Gemeiner Lisp, 33
quelle
print
hat einen Rückgabewert von 1. Wenn Sie also diesen Wert verwenden, können Sie den gesamten Ausdruck in Folgendes einschließenwhile
:while(print chr(47 + 45 * rand(0,1));
Sie können wahrscheinlich auch weiter Golf spielen.
quelle
Rubin,
2723 Zeichen$><<
ist 'nach stdout drucken'.quelle
"/\\"
mit zu ersetzen'\/'
. In Ruby 1.8 muss[rand(2),1]
das Zeichen anstelle des ASCII-Codes erzeugt werden.C ++, 45 Zeichen
Ich werde keine Preise für Kurzentschlossenheit gewinnen, aber ich hatte dies bereits geschrieben, als ich von dem erwähnten Buch hörte, also habe ich einfach Golf gespielt.
Der Putchar-Trick funktioniert auch in C ++ und bringt Sie auf 43 zurück, aber Sie können es nicht vermeiden, den Rückgabetyp für main zu deklarieren.
quelle
Ich versuche, mit CSS-Stil zu erstellen, und es funktioniert
dieser PHP-Code:
quelle
font-family: courier; line-height: 0.75em; letter-spacing: -0.25em;
Verwendung-0.25em
für die Buchstaben-Abstand scheint besser zusammenpassen als-3px
, die Artefakte aufgrund eines ungenauen hatpt
zupx
Konvertierung.Common Lisp - 68
quelle
do
.05AB1E , 7 Bytes
Probieren Sie es online!
quelle
Befunge-98 (PyFunge) , 7 Bytes
Probieren Sie es online!
Der
?
sendet die IP entweder links oder rechts, also entweder/
oder\
wird vor dem Drucken mit gedrückt,
. Wenn das'/
oder\'
nach dem Drucken in der falschen Reihenfolge ausgeführt wird, werden nur die Vorgänge im Stapel ausgeführt (geteilt oder vertauscht), und vor dem Wiederholen wird ein irrelevantes Zeichen verschoben.quelle
Befunge,
12987 BytesBearbeiten: James Holderness fand eine verrückte Lösung, die stattdessen drei Anführungszeichen verwendet.
Überläuft der Stapel mit vielen überschüssigen Zeichen für jedes Symbol, aber wen interessiert es, wann Sie dieses 1 Byte Golf spielen können?
Alte Version
(Beachten Sie das nachgestellte Leerzeichen)Nachgestelltes Leerzeichen wird anscheinend nicht benötigt (danke Mistah Figgins)Probieren Sie es online
Dies füllt den Stapel mit einem zusätzlichen Symbol für jedes gedruckte Symbol.
quelle
#
sich am Ende einer Zeile befindet. Es ist kein konsistentes Verhalten, aber der von Ihnen verwendete Interpreter erlaubt es: tio.run/##S0pNK81LT/3/X0k/RsneTkf5/38A"
, aber meine Versuche waren erfolglos. Da Sie eine/
auf der einen Seite benötigen"
, müssen Sie die Hälfte der Zeit aufteilen.<
nach dem ,#
damit es funktioniert.'
stattdessen verwenden. Probieren Sie es online!?\","/"
Nur, dass es den Stapel viel schneller überläuft, denke ich.Nicht viel besser. Benötigt PHP 5.5+ für die Array-Dereferenzierung.
quelle
while(1)echo'/\\'[rand(0,1)];
.Python, 68
In der Kategorie "Meine Sprache ist scheiße" haben wir Python!
Danke an Ivo für ein paar Zeichen bei Import und
choice
.quelle
> <> , 14 Bytes
Ich hatte gehofft, ich könnte es auf ein 3 * 3-Quadrat beschränken, aber es gelang mir nicht.
Sie können es hier ausprobieren .
quelle
Cubix , 12 Bytes
Im Online-Dolmetscher ansehen!
Dies wird dem folgenden Würfelnetz zugeordnet:
Erläuterung
Installieren:
Die IP beginnt am ersten Tag in östlicher Richtung
!
. Dies ist der Befehl "Skip If Truthy", der "False" ist, wenn sich nichts auf dem Stapel befindet, sodass keine Befehle übersprungen werden."/\"
Ruft den String-Modus auf und hängt diese beiden Zeichencodes an den Stack an.B!o
ist hier meistens ein No-Op, nur das Umkehren des Stapels.Die IP kehrt nun zur ersten zurück
!
. Es sind jedoch jetzt positive ganze Zahlen auf dem Stapel, sodass die erste"
übersprungen wird. Das heißt, es/
ist kein Charakter mehr, sondern ein Spiegel, der die IP nach Norden in die Hauptschleife sendet.Hauptschleife:
Das
D
Befehl ist die einzige Zufallsquelle in Cubix. Es sendet die IP in eine zufällige Richtung. Indem wir Süd und Ost mit Pfeilen blockieren, stellen wir sicher, dass die IP eine 50% ige Chance hat, nach Norden und eine 50% ige Chance, nach Westen zu fahren.Wenn es nach Westen geht, wird der Stapel umgekehrt. Wenn es nach Norden zeigt, wird das oberste Zeichen gedruckt.
Dadurch wird die gewünschte zufällige Folge von Schrägstrichen erstellt.
quelle
PHP,
2631 Bytesachtdrei Bytes kürzer als deine (ohne Leerzeichen oder geschweifte Klammern),.zwei Bytes kürzer als die Lösung von primo (ohne das Tag)
PHP 5.4.9 war die aktuelle Version im Dezember 1012, also ...
erfordert PHP 5.5 oder höher für die Indexierung von Literalstrings.Laufen Sie mit
-r
oder versuchen Sie es online .quelle
rand()&1
einen PHP-Build für Windows aus. Sie könnten überrascht sein.SmileBASIC, 20 Bytes
quelle
PowerShell ,
108908654533736 ByteProbieren Sie es online!
quelle
for
macht auchwhile
ein bisschen kürzerJava 8,
60595453 Bytes-1 Byte dank @BenjaminUrquhart durch Ersetzen
print
durchwrite
, so'/'
kann es sein47
.Erläuterung:
Probieren Sie es online aus (Timeout nach 60 Sekunden).
quelle
c->{for(;;)System.out.print(Math.random()<.5?'/':92);}
( 54 Bytes ) oder meintest du Java 7 ist länger als Java 8? In diesem Fall sind Sie in der Tat richtig.System.out.write
und Ersetzen'/'
durch47
JavaScript (Node.js) ,
595554 ByteUrsprüngliche Antwort
-4 Bytes dank Handarbeit
-1 Byte danke an Conor O'Brien
quelle
while(1)process.stdout.write(Math.random()<.5?"/":"\\")
.for(;;)
anstelle vonwhile(1)
Ich denke, Sie können die Rekursion verwenden.
Ich denke, Sie können die Rekursion verwenden.
quelle
ein Zeichen abgeschnitten:
dann entfernen Sie die geschweiften Klammern:
Ein weiterer Trick mit der gleichen Länge:
quelle
rand()%2
führt dies zu einem Wechsel von0
s und1
s. Nicht unglaublich zufällig. Sie müsstenrand(0,1)
odermt_rand()%2
stattdessen verwenden.Perl
Dieser sieht lustig für mich aus:
(Es tut mir leid, dass ich hier kein Thema habe. Ich weiß, dass dies kein PHP ist.)
quelle
Powershell, 37 Bytes
Leider scheint es keine kürzeren Aliase für Write-Host zu geben, die nicht nach jedem Zeichen eine neue Zeile verursachen.
quelle
16-Bit-x86-Assemblycode, 10 Byte
Ich erinnere mich nicht, ob dieser in dem Buch gelandet ist.
quelle
Spaltung , 12 Bytes
Probieren Sie es online!
quelle
Perl 6 , 23 Bytes
loop
Schleifen für immer.<\ />
ist eine Liste der Zeichenfolgen\
und/
..pick
wählt zufällig eine der beiden Saiten..print
druckt diese zufällige Zeichenfolge.quelle
xx*