Mash Up Zeit!
Dies ist Teil 5 sowohl meiner Zufallsgolf- Serie als auch der ASCII- Serie Art of the Day des Optimizers . Ihre Einsendungen in dieser Challenge werden für beide Bestenlisten gezählt (die verknüpften Posts finden Sie). Natürlich können Sie dies wie jede andere Code-Golf-Herausforderung behandeln und beantworten, ohne sich Gedanken über eine der beiden Serien zu machen.
Loch 5: Diamantkacheln
Ein normales Sechseck kann immer mit Diamanten wie folgt gekachelt werden:
Wir werden eine ASCII-Kunstdarstellung dieser Fliesen verwenden. Für ein Sechseck der Seitenlänge 2 gibt es 20 solcher Fliesen:
____ ____ ____ ____ ____ ____ ____ ____ ____ ____
/\_\_\ /\_\_\ /\_\_\ /\_\_\ /_/\_\ /_/\_\ /\_\_\ /_/\_\ /_/\_\ /_/\_\
/\/\_\_\ /\/_/\_\ /\/_/_/\ /\/_/\_\ /\_\/\_\ /\_\/_/\ /\/_/_/\ /\_\/\_\ /\_\/_/\ /_/\/\_\
\/\/_/_/ \/\_\/_/ \/\_\_\/ \/_/\/_/ \/\_\/_/ \/\_\_\/ \/_/\_\/ \/_/\/_/ \/_/\_\/ \_\/\/_/
\/_/_/ \/_/_/ \/_/_/ \_\/_/ \/_/_/ \/_/_/ \_\/_/ \_\/_/ \_\/_/ \_\/_/
____ ____ ____ ____ ____ ____ ____ ____ ____ ____
/_/_/\ /\_\_\ /_/\_\ /_/_/\ /_/\_\ /_/\_\ /_/_/\ /_/_/\ /_/_/\ /_/_/\
/\_\_\/\ /\/_/_/\ /_/\/_/\ /\_\_\/\ /\_\/_/\ /_/\/_/\ /_/\_\/\ /\_\_\/\ /_/\_\/\ /_/_/\/\
\/\_\_\/ \/_/_/\/ \_\/\_\/ \/_/\_\/ \/_/_/\/ \_\/_/\/ \_\/\_\/ \/_/_/\/ \_\/_/\/ \_\_\/\/
\/_/_/ \_\_\/ \_\/_/ \_\/_/ \_\_\/ \_\_\/ \_\/_/ \_\_\/ \_\_\/ \_\_\/
Bei gegebener Seitenlänge N
sollten Sie eine solche Kachelung für ein Sechseck N
mit zufälliger Seitenlänge generieren . Die genaue Verteilung spielt keine Rolle, aber jede Kachel muss mit einer Wahrscheinlichkeit ungleich Null zurückgegeben werden.
Denn N ≤ 4
Ihre Einreichung muss innerhalb von 1 Minute mindestens 80% der Zeit eine Kachel erzeugen und mindestens 80% der Kacheln müssen möglicherweise innerhalb von 1 Minute erzeugt werden. Die meisten Ansätze müssen sich nicht um diese Regel kümmern (sie ist sehr nachgiebig) - dies ist nur, um sehr naive abweisungsbasierte Algorithmen auszuschließen, die beliebige Zeichenfolgen generieren, bis zufällig eine Kachelung vorliegt.
Vielleicht möchten Sie wissen, dass die Gesamtzahl der möglichen Kacheln für gegebenes N in OEIS A008793 zu finden ist .
Sie können ein vollständiges Programm oder eine Funktion schreiben und Eingaben über STDIN (oder die nächstgelegene Alternative), ein Befehlszeilenargument oder ein Funktionsargument vornehmen und Ausgaben über STDOUT (oder die nächstgelegene Alternative), einen Funktionsrückgabewert oder einen Funktionsparameter (out) erzeugen.
Sie dürfen nicht mehr führende Leerzeichen als erforderlich ausgeben, um das Sechseck auszurichten (dh die linke Ecke des Sechsecks sollte keine Leerzeichen vor sich haben). Jede Zeile kann bis zu N
abschließende Leerzeichen enthalten (nicht unbedingt konsistent, sodass Sie z. B. eine rechteckige Ausgabe haben können, in der der Begrenzungsrahmen des Sechsecks gedruckt wird).
Dies ist Codegolf, daher gewinnt die kürzeste Übermittlung (in Bytes). Und natürlich wird die kürzeste Einsendung pro Benutzer auch in die Gesamt-Bestenliste der Serie aufgenommen.
Bestenlisten
Der erste Beitrag jeder Serie generiert eine Rangliste.
Um sicherzustellen, dass Ihre Antworten angezeigt werden, beginnen Sie jede Antwort mit einer Überschrift. Verwenden Sie dazu die folgende Markdown-Vorlage:
# Language Name, N bytes
Wo N
ist die Größe Ihres Beitrags? Wenn Sie Ihren Score zu verbessern, Sie können alte Rechnungen in der Überschrift halten, indem man sich durch das Anschlagen. Zum Beispiel:
# Ruby, <s>104</s> <s>101</s> 96 bytes
(Die Sprache wird derzeit nicht angezeigt, das Snippet erfordert sie jedoch und analysiert sie. Ich füge möglicherweise in Zukunft eine Bestenliste nach Sprachen hinzu.)
For N ≤ 4, your submission must produce a tiling within 1 minute at least 80% of the time.
zu einfach: 80% der Zeit die gleichen, grundlegende Kacheln, sonst finde ich eine andere Kacheln in der Zeit, die ich willAntworten:
CJam, 105 Bytes
Neue Zeile hinzugefügt, um das Scrollen zu vermeiden. Probieren Sie es online aus
Erläuterung:
Diese Lösung startet jede Zeile als Zickzack und setzt dann N Unterstriche darauf, basierend auf ihrer Position in der vorherigen Zeile und einigen Regeln. Dies ergab sich aus einer Reihe von Beobachtungen, als ich die Ausgabe als einfache 2D-Matrix von Zeichen betrachtete:
/\
in der oberen Hälfte,\/
in der unteren Hälfte)./_/
kann sich nur um -1 oder 0 und\_\
nur um 0 oder 1 ändern"_ "
Muster oder ein" _"
Muster verwenden, beide sind in OrdnungAlso habe ich beschlossen, es zu implementieren, indem ich die vorherigen Unterstrichpositionen beibehalten, sie mit einem Zufallsfaktor (2 Auswahlmöglichkeiten für jeden Unterstrich) modifiziert und wiederholt habe, bis die Regeln erfüllt sind. Während des Optimierungsvorgangs habe ich auf Unterstriche relativ zur linken Seite des Sechsecks umgestellt (ohne Leerzeichen).
Alte "3D" Version, 189 Bytes:
Probieren Sie es online aus
quelle
Python 2,
337335324318311300296 BytesDie Idee ist, zuerst ein Sechseck aus Diamanten zu erzeugen:
Und füllen Sie es dann mit nach unten gerichteten Pfaden von Unterstrichen wie folgt:
Das Endergebnis mit allen hinzugefügten Pfaden würde dann ungefähr so aussehen:
Es wird einiges an Code verwendet, um sicherzustellen, dass diese Pfade nicht über die Grenzen hinausgehen oder sich gegenseitig kreuzen.
Der ungolfed Code:
quelle
randint(0,1)*(p<n*3+i*2-j)
zurandint(0,p<n*3+i*2-j)
.Perl,
174, 168, 166,161Versuch es mit mir .
quelle
JavaScript ( ES6 ), 376
416 494Einfach da sein ...
Dadurch werden alle Kacheln erstellt, und dann wird eine zufällige ausgewählt. Die Zeit für die 232848 Kacheln für N = 4 beträgt ~ 45 Sekunden auf meinem Laptop. Ich habe N = 5 nicht ausprobiert.
Als EcmaScript 6 läuft es nur unter Firefox.
quelle
dom.max_script_run_time
. Es ist eine globale Einstellung in about: config, mine ist auf 30 gesetzt.SmileBASIC, 241 Bytes
Schwer basiert auf Mattys Antwort
quelle