Sie sehen so aus:
Das Ziel ist es, eine Musikbeats-Illustration wie die folgende zu zeichnen:
= = =
= = = = =
== = == = == = ====
== ==== == === = = =======
======== == ==== = ========= =
=================================
Die Regeln sind:
- Die Breite der Abbildung beträgt 33 Symbole. Falls erforderlich, sind Leerzeichen zulässig, die diese Breite überschreiten.
- Jede Spalte besteht aus Gleichheitszeichen (
=
). - Jede Spalte hat eine zufällige Höhe (die Höhe der nächsten Spalte sollte in keiner Weise von der Höhe der vorherigen Spalte abhängen), die von 1 bis 6 variiert. Es ist auch in Ordnung, wenn es zumindest möglich ist , Eingaben ohne strikte zu erhalten mathematische Wahrscheinlichkeit (dh einige Eingaben könnten seltener erscheinen als andere).
- Eine Spalte kann nicht über dem Boden schweben und Lücken aufweisen.
- Da jede Spalte die minimale Höhe von 1 hat, darf die letzte Zeile auch keine Lücken aufweisen - sie besteht immer aus 33 Gleichheitszeichen.
- Da es möglich ist, keine Spalten mit der Höhe 6 zu haben (es ist immerhin alles zufällig): In diesem Fall muss keine obere Zeile aus Leerzeichen bestehen. Gilt für Kantenfälle dieser Art: Wenn Ihr Code plötzlich keine Spalten mit einer Höhe von mehr als 1 bereitgestellt hat, müssen Sie keine zusätzlichen Zeilen mit Leerzeichen über der untersten Zeile einfügen.
- Sie nehmen keine Eingabe .
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
)Math.random()
direkt aus ihrem vorherigen Aufruf berechnet werden, wenn die Parameter des linearen Kongruenzgenerators bekannt sind. Dies bedeutet, dass Sie die meisten integrierten Zufallsfunktionen ändern müssen, um diese Kriterien zu erfüllen. Ich schlage vor, dass dies besser formuliert ist.Antworten:
Pyth , 13 Bytes
Und ich habe Jelly überholt .
Probieren Sie es online!
quelle
Dyalog APL , 14 Bytes
Erläuterung
33⍴6
33 Wiederholungen von 6?
zufällige ganze Zahl im Bereich [1, n ] für jede der 33 6s'='⍴¨⍨
Das Gleichheitszeichen wurde jeweils so oft wiederholt↑
Liste der Listen in Zeilentabelle konvertieren⍉
transponiere Zeilen in Spalten, Spalten in Zeilen⊖
umdrehenBeispiel läuft
Die Eingabe wird um sechs Leerzeichen eingerückt:
quelle
Jelly, 14 Bytes
Probieren Sie es hier aus.
quelle
6ṗ33X
funktioniert aber auch.JavaScript (ES6), 116 Byte
Schauen Sie sich das untenstehende animierte Snippet an:
quelle
C 87 Bytes
Anrufen als
f();
. Diese Antwort beruht auf der Tatsache, dass sechs aufeinanderfolgende Aufrufetime(0)
dasselbe Ergebnis (in Sekunden) zurückgeben. Dies ist praktisch immer wahr, aber wahrscheinlich erwähnenswert.quelle
x
undy
vermeiden, sie als zu deklarierenint
. Ist dies zulässig, da keine Eingabe erfolgt? Wenn ja, ist es eine schöne Idee!f();
Thats nice ausführen ! Ich wusste nicht, dass C das kann.Cheddar,
6865 Bytes (nicht konkurrierend)O_O Cheddar geht es eigentlich gut! Verwendet
sprintf
undturn
erledigt einen Großteil der Arbeit.vfuse
ist eine vertikale Sicherung, was bedeutet, dass sie sich dem Array aber vertikal anschließt. Das ist sehr golfig aber auch ziemlich schnell. Die Version ist die Vorabversion 1.0.0-Beta.10 , die die Herausforderung nachbearbeitet .Erläuterung
Einige Beispielläufe:
quelle
05AB1E , 22 Bytes
Kein automatisches Zusammenfügen, kein automatisches Füllen beim Transponieren, osabie ist in diesem Fall zum Scheitern verurteilt. Code:
Verwendet die CP-1252- Codierung. Probieren Sie es online! .
quelle
Python 2, 95 Bytes
quelle
Python 3, 115 Bytes
Python hatte noch nie eine Chance ...
Wie es funktioniert
Probieren Sie es auf Ideone
quelle
MATL,
20191817 Bytes1 Byte gespart dank @Luis
Probieren Sie es online
quelle
SpecaBAS - 76 Bytes
Druckt ein Gleichheitszeichen an der entsprechenden Bildschirmkoordinate.
mit einem farbfleck und einer
GOTO
schleife wird esquelle
K4, 18 Bytes
Im Wesentlichen ein Port der APL-Lösung (nicht überraschend).
quelle
C #,
200117 BytesIch gehe zum @Lynn- Algorithmus und spare 83 Bytes!
C # Lambda ohne Eingabe und wobei Ausgabe eine Zeichenfolge ist. Probieren Sie es online aus .
Code:
quelle
Haskell, 164 Bytes
Als rein funktionale Sprache war Haskell von Anfang an zum Scheitern verurteilt. Ich habe es trotzdem gemacht und es stellt sich heraus, dass der notwendige Aufwand eigentlich nicht so groß ist.
Verwendung:
Erläuterung:
verwenden können
newStdGen
undrandoms
verwenden können
transpose
definiert eine Funktion, die ein Leerzeichen ausgibt, wenn das erste Argument größer als das zweite ist, und ein
=
anderes. Es wird mitmap (f m) [0..5]
einer bestimmten Nummerm
und der Liste angerufen[0,1,2,3,4,5]
. (Siehe unten)Erstellt einen neuen Standard-Zufallsgenerator
dauert 33 zufällige ganze Zahlen.
Berechnet
m = n % 6
und ordnet(f m)
der Liste zu[0,1,2,3,4,5]
, was zu einem von führt"======", " =====", ..., " ="
. Diese Zeilen werden der Liste der 33 Zufallszahlen zugeordnet, die zu einer Tabelle führen. (Eine Tabelle in Haskell ist eine Liste von Listen.)wechselt Spalten und Zeilen der Tabelle
druckt jede Zeile in der Tabelle
quelle
CJam, 19 Bytes
Probieren Sie es online!
Erläuterung
quelle
Mathematica, 78 Bytes
Anonyme Funktion. Nimmt keine Eingabe an und gibt eine Zeichenfolge als Ausgabe zurück. Das Unicode-Zeichen ist U + F3C7 und steht für
\[Transpose]
.quelle
R, 102 Bytes
Erläuterung
m=rep(" ",33)
Initialisiere einen leeren Vektor für die kommende Schleifen=ifelse(m=="=",m,sample(c(" ","="),33,T,c(6-i,i)))
Wenn sich=
in der Zeile darüber ein befindet, stellen Sie sicher, dass die Stelle darunter auch ein hat=
. ansonsten zufällig auswählen. Zufällige Picks werden gewichtet, um sicherzustellen, dass a) die unterste Reihe alles ist=
und b) Sie eine ordentliche Form für das Ganze erhalten.cat(n,"\n",sep="")
Gib diese Zeile mit einem Zeilenumbruch am Ende und ohne Leerzeichen zwischen den Elementen auf der Konsole aus!quelle
PHP,
959289 BytesEigentlich ziemlich glücklich mit diesem. Für eine Weile hatte ich eine Version, die theoretisch jede Eingabe erzeugen konnte, aber in der Praxis nur feste Blöcke von = erzeugen würde, aber dies ist sowohl kürzer als auch gleichmäßig verteilt!
Generiert 7 undefinierte Benachrichtigungen, wenn Sie es ausführen, aber das ist in Ordnung.
edit: naja ich habe gerade gelernt, dass join ein alias von implode ist, das ist also nett.
quelle
J, 18 Bytes
Sehr einfaches Zeug. Mit einem Bugfix von Meilen!
quelle
>:?33#6
, um zufällige Ganzzahlen im Bereich [1, 6] zu erhalten. Außerdem wäre eine Kopie mit Rang 0 kürzer'='#~"0
. Dies führt|.|:'='#~"0>:?33#6
leider dazu, dass die 2-Byte-Einsparungen durch die Einbeziehung des Inkrement-Operators gemindert werden.Perl, 64 Bytes
Verwendung
Perl, 68 Bytes
Alternative Version, die sich auf ANSI-Escape-Codes stützt, um den Cursor zu bewegen, zuerst 6 Zeilen nach unten zu bewegen, dann die ursprüngliche Zeile (alle
=
s) zu schreiben , eine Zeile nach oben zu verschieben und die ersetzte Zeichenfolge (s/=/rand>.4?$&:$"/ge
) wiederholt zu drucken, bis keine Substitutionen mehr vorgenommen werden. Dies kann dazu führen, dass mehr als sechs Zeilen geschrieben werden, wird aber schließlich durch eine leere Zeile ersetzt.Hinweis:
\x1b
s ist eigentlich das ASCII- EscZeichen.quelle
Rubin,
102998483 BytesNeuer und deutlich kürzerer Ansatz, bei dem ich mit einer Zeichenfolge voller Zeilenumbrüche beginne.
Ältere Version...
... gab eine Ausgabe mit führender neuer Zeile aus. Meine erste Einreichung in Ruby, mit einem ähnlichen Ansatz wie bei @ Barbarossa, aber in einer einzigen Schleife.
Was mir in Ruby bei der Arbeit an diesem Programm gefallen hat:
.times
Schleiferand()
das ist ziemlich kurzIch mochte nicht (hauptsächlich in Bezug auf das Golfen):
obligatorischnicht so obligatorisch in der$
für globale Variablen.times
Schleifedie durch einzeiligen Block ersetzt werden kanndo
undend
Schlüsselwörter0
ist nicht falschquelle
JavaScript, 179 Bytes
Ich arbeite immer noch ein bisschen am Golfen. Ich mag das, weil es einfach ist.
Verwendung:
quelle
.map(n=>{return Math.floor(Math.random() * 6)+1})
mit zu ersetzen.map(n=>Math.floor(Math.random()*6)+1)
. Lambda sind ganz groß :)if (n<=m+1){r[m]+="="}else
kann seinif(n<=m+1)r[m]+="=" else
Viertens 190 Bytes
Ich musste mein eigenes PRNG erstellen , eine Xor-Shift von hier . Das Wort
f
ist das Wort, das Sie mehrmals aufrufen würden, um die Ausgabe zu sehen.Online ausprobieren - Beachten Sie, dass die Systemzeit einer von zwei Werten ist, die davon abhängen, auf welchem Server (oder auf welchem Server) der Code ausgeführt wird. Ansonsten ändern sie sich in der Online-IDE aus irgendeinem Grund nicht. Sie sehen also nur zwei mögliche Ausgaben. Sie können den Startwert manuell festlegen, indem Sie ihn
utime
in eine Ganzzahländern.Ungolfed
Ungolfed online
quelle
JavaScript, 165 Bytes
Die Zeilenumbrüche sind nicht erforderlich, machen es jedoch einfacher zu sehen, was los ist. Nicht die optimalste Lösung, aber es macht zumindest für mich Sinn.
quelle