Eine Standard- Scrabble- Tafel besteht aus einem 15 × 15-Raster, auf dem Buchstabenkacheln platziert werden können. Die meisten Leerzeichen sind leer, aber einige sind doppelte Wortbewertungen (pink), dreifache Wortbewertungen (rot), doppelte Buchstabenbewertungen (hellblau) und dreifache Buchstabenbewertungen (blau). In der Mitte befindet sich normalerweise ein Stern (was als doppelte Wortzahl gilt).
Schreiben Sie ein Programm oder eine Funktion, die eine leere Standard-Scrabble-Karte in ASCII-Form ausgibt.
.
steht für einen leeren RaumD
steht für eine doppelte WortzahlT
repräsentiert eine dreifache Wortzahld
steht für einen Doppelbuchstabent
repräsentiert einen dreifachen BuchstabenwertX
repräsentiert den Mittelstern
Das heißt, Ihre genaue Ausgabe muss sein
T..d...T...d..T
.D...t...t...D.
..D...d.d...D..
d..D...d...D..d
....D.....D....
.t...t...t...t.
..d...d.d...d..
T..d...X...d..T
..d...d.d...d..
.t...t...t...t.
....D.....D....
d..D...d...D..d
..D...d.d...D..
.D...t...t...D.
T..d...T...d..T
optional gefolgt von einem nachgestellten Zeilenumbruch.
Der kürzeste Code in Bytes gewinnt.
quelle
X
und nicht*
, um den Stern darzustellen? : o*
ist zu hoch und mächtig.★
? : DAntworten:
MATL ,
595452 BytesProbieren Sie es online!
Erläuterung
Der Code folgt drei Hauptschritten:
Generieren Sie die 8x8-Matrix
Erweitern Sie es auf die 15x15-Matrix
Indizieren Sie die Zeichenfolge
'DtdTX.'
mit dieser Matrix, um das gewünschte Ergebnis zu erzielen.Schritt 1
Jetzt müssen wir die nicht diagonalen Einträge ungleich Null ausfüllen. Wir werden nur die unterhalb der Diagonale füllen und dann Symmetrie verwenden, um die anderen zu füllen.
Um jeden Wert zu füllen, verwenden wir die lineare Indizierung (siehe diese Antwort , Länge-12-Snippet). Das bedeutet, auf die Matrix zuzugreifen, als ob sie nur eine Dimension hätte. Bei einer 8 × 8-Matrix bezieht sich jeder Wert des linearen Index wie folgt auf einen Eintrag:
Das Folgende weist also dem Eintrag unten links den Wert 4 zu:
Der Code für den Wert 3 ist ähnlich. In diesem Fall ist der Index ein Vektor, da wir mehrere Einträge füllen müssen:
Und für 2:
Wir haben jetzt die Matrix
Um die obere Hälfte zu füllen, nutzen wir die Symmetrie:
Schritt 2
Der Stapel enthält nun die aus Schritt 1 resultierende 8 × 8-Matrix. Um diese Matrix zu erweitern, verwenden wir die Indizierung, diesmal in den beiden Dimensionen.
Schritt 3
Der Stapel enthält jetzt die aus Schritt 2 resultierende 15 × 15-Matrix.
quelle
Ruby,
10397 BytesVielen Dank an Mitch Schwartz für die 6-Byte-Verbesserung der Iterationen.
Eine ähnliche, aber deutlich andere Herangehensweise an meine ursprüngliche Antwort weiter unten. Wie zuvor verwenden wir die Tatsache, dass ein Buchstabe gedruckt werden muss, wenn er
i%7-j%7
gleich 0 oder 4 ist. Aber hier speichern wir diesen Unterschiedd
und verwenden die Formeli+j+d*d/3
, um eine ganze Zahl zu erhalten, die für dieses bestimmte farbige Quadrat eindeutig (bis zur Symmetrie) ist. Dann schauen wir einfach in der Zauberkette nach.Nur zum Spaß: C-Version dieses Ansatzes, 120 Bytes
Rubin,
115113 Bytes2 Bytes gespart dank Value Ink.
Erläuterung
Der Ursprung wird als Mittelpunkt der Tafel betrachtet.
Ein Buchstabe muss gedruckt werden, wenn die x - und y - Koordinaten des Quadrats identische oder um 4 verschiedene Größen haben. Die einzigen Ausnahmen befinden sich am äußeren Rand der Tafel, aber diese folgen demselben Muster wie die mittlere Zeile / Spalte der board, so können wir die gleiche Bedingung verwenden, wenn wir die x- und y-Koordinaten modulo 7 nehmen.
Die Auswahl des angezeigten Buchstabens basiert auf der Koordinate der minimalen Größe. Auf diese Weise folgen die Doppel- und Dreifachzahlen bei (1,5) und (2,6) der gleichen Regel wie bei (1,1) und (2,2) und werden aus der 7-stelligen Zeichenfolge erhalten.
"#{formula}dtDDDD"
Dies deckt nicht alle Variationen ab Für die Kanten- und Mittellinienquadrate wird also das erste Zeichen der Zeichenfolge aus der Formel berechnet'XdTdT'[(i+j)/3]
.quelle
(k=-7..7).map{|y|k.map{...
ist 2 Bytes kürzer als Ihre Double--7.upto(7)
Technik.a=(-7..7).map &:abs;a.map{|i|puts a.map{|j|(d=i%7-j%7)%4<1?'X d t DTDdDdDtT d'[i+j+d*d/3]:?.}*''}
Brainfuck ,
598596590 BytesGolftipps willkommen.
Erläuterung
Initialisieren Sie das Band mit [10 116 68 46 100 84 92], dh [nl t D. d T \]
>-[++++[<]>->+]<[>++++>+++++>+++>++<<<<-]>[>>>>+>+>+<<<<<<-]<++++++++++[>+>>>>+>-<<<<<<-]>>+>->>-->++
Jede Zeile hier druckt dann eine Zeile der Tafel.
Die Mittellinie nimmt ebenfalls ab
92 to 88 i.e. \ to X
Probieren Sie es online!
quelle
PowerShell v2 +, 147 Byte
Nutzt den Vorteil, wie der Standard
Write-Output
am Ende der Programmausführung Arrays behandelt (dh es wird eine neue Zeile zwischen Elementen eingefügt). Könnte ein besserer Weg sein, um die Mitte des Boards zu generieren - ich arbeite immer noch daran.Die erste Zeile gibt die oberste Zeile der Karte aus und speichert sie
$x
zur späteren Verwendung.Die nächste Zeile generiert alle Doppelwortzeilen, indem die linke "Hälfte" jeder Zeile genommen, gespiegelt (die
-join$_[6..0]
Anweisung) und als Elemente in einem Array gespeichert wird$y
.Die nächste Zeile ist die mittlere Zeile, mit einem
X
in der Mitte, danke an-replace
.Die nächste Zeile wird
$y
in umgekehrter Reihenfolge ausgegeben, sodass die untersten Doppelwortzeilen angezeigt werden.Die letzte Zeile ist nur noch
$x
einmal.quelle
> <> (Fisch), 153 Bytes
Eine schrecklich, schrecklich, ineffiziente Art, Dinge zu tun. Derzeit wird nach einer Möglichkeit gesucht, diese zu verkürzen, indem sowohl horizontal als auch vertikal richtig gespiegelt wird.
Probieren Sie es online! (Wenn Sie nicht den ganzen Tag anwesend sein möchten, stellen Sie sicher, dass Sie entweder die maximale Ausführungsgeschwindigkeit festlegen oder ohne Animation ausführen.)
quelle
C
146,145,142,138 BytesProbieren Sie es online!
1 Byte5 Byte gespart dank Level River StDies nutzt das diagonale Muster der Karte zum Codieren aus. Insbesondere wenn wir den oberen linken Quadranten der Tafel nehmen und die Diagonale ausrichten, erhalten wir:
... viele der Spalten stehen jetzt in einer Reihe. Wenn wir Spalten in einer Zeile folgendermaßen kodieren:
... dann kann das Brettmuster zu einer 15-stelligen Zeichenfolge zusammengefasst werden
T..12..0..12..0
:; und wir brauchen einfach die richtigen Zuordnungen für jede Zeile.In diesem Sinne ist hier eine erweiterte Version mit Kommentaren:
quelle
i,r,c;f()
ist in Ordnung. 2.(i%16-7)%8
->i%16-7&7
3. Ich denkec-48
->c%4
funktioniert, nicht wahr?f()
wäre ein zusätzliches Elementi=0
in der Funktion erforderlich , damit nichts gespeichert wird .%8
verwendet die negativen Module der Implementierung, um% 16-Werte von 0..15 bis -7..7 abzubilden;&7
würde dies auf 0..7.0..7 abbilden). Aber, ja, 3 wird absolut funktionieren ... wird aktualisiert, wenn ich eine Chance bekomme.05AB1E ,
5753 BytesCode
Verwendet die CP-1252- Codierung. Probieren Sie es online!
Erklärung (veraltet)
Das
•4ç“–šã&$W§ñçvßÖŠ_æá_VFÛÞýi~7¾¬ÏXôc•5B
dekomprimiert auf diese Nummer:Mit
4ÝJ".TdtD"‡
transliterieren wir in dieser großen Zahl:Wir teilen die gesamte Zeichenkette auf, lassen die Zeichenkette und die Zeichenkette auf dem Stapel vertauscht und verbinden sie
"X"
mitý
. Wir teilen die gesamte Saite mit th in 15er-Stücke15ô
Code und fügen das gesamte Array mit den Zeilenumbrüchen hinzu»
.quelle
û€û
sollte ein eingebautes sein;).Python 3, 138 Bytes
quelle
list(map(A))
zu[*map(A)]
, spart 3 Bytes (erfordert Python 3.5+).05AB1E ,
4944 BytesProbieren Sie es online!
Erklärt:
Drücken:
1003000104000200004000303004000300004000020002000030003010030005
In 8er-Stücke teilen, jeweils palindromisieren.
Wieder palindromieren.
Ersetzen Sie Zahlen durch Zeichen.
Andere Idee (Jemand versucht dies in MATL)
Sehen, wie ALLES gewollt ist, um eine Periode dazwischen zu haben ...
Zählen Sie die Anzahl der Nullen zwischen jedem Stück:
131424334342233135 => w\F6ß¿
Das Zählen von Nullen läuft:
23134312344343123 => ì:¼˜¾
Dann würden Sie sie entschlüsseln und zusammen transponieren.
Verwendung in 05AB1E (führt zu einer Erhöhung um +5 Byte):
05AB1E , 27 Bytes
Versuch es...
Meta-Golf Eintrag:
05AB1E , 104 Bytes
Versuch es!
Meta-golfed meines Meta-Golfer für ASCII - Art mit: https://tio.run/nexus/05ab1e#JY9NSgNBEIWvUo4/qAQxyfi30yAioiAiuBM6M9U9DT3doao7ccBFrhI3ooss3QguJniRXCR2x01RfK9479Xqtf2@XHy2H78/tw/L6aydq8VXr5sPsuX0LeP1jCwbJD3r54v3dp5mFGbZzWp1wXBPyLpE6@GRQj0C1spiCQJ4gjjSVgG@YBG8HiM4KpHAWbgiXYqmA1wF79ONrxCGa5nBOyCUQSEyCFuCi2LEklwNjGO0YAQpNA3cBTa6hsIF60kjd9Y@jAWhF9SAk1C5Gk1yiTSQ9g1MBKcKAp4q7RGuXWCMFlYioS3iKowBhf@9Kh2DNbEHGSIexhSZeDRIUcq4oTDxDS09aAsjZ3TRHGycb25tP@/s7@51e/386Pjk9OzwDw
quelle
Javascript (ES6), 150 Byte
Wie es funktioniert
Die Zeichenfolge
"T2d3T3d2T.D3t3t3D3D3d.d3D2d2D3d3D2d4D5D5t3t3t3t3d3d.d3d2T2d3"
beschreibt die Tafel von der oberen linken Ecke bis zum Quadrat kurz vor dem 'X', wobei aufeinanderfolgende leere Quadrate als Ziffern codiert sind. Diereplace()
Funktion entpackt sowohl die leeren Felder als auch die Spiegelzeichenfolger
für die Unterseite des Boards. Dann werden beide Teile zusammengefügt und alle 15 Zeichen ein Wagenrücklauf eingefügt.Demo
quelle
JavaScript (ES6), 221 Byte
Da ich mir die Mühe gemacht habe, dies zu erstellen, dachte ich, ich würde es trotzdem posten, obwohl es eine eindeutig überlegene Lösung gibt.
quelle
C 234 Bytes
Hier ist die Ausgabe:
quelle
Holzkohle , 33 Bytes (nicht konkurrierend)
Der gesamte Kredit für diese Antwort geht an @ DLosc .
Probieren Sie es online!
Ausführlich
Probieren Sie es online!
quelle
Haskell, 114 Bytes
g
in einer nicht pointfree version istg x = x ++ (reverse (init x))
. Es wird einmal pro (Halb-) Zeile und erneut auf das Ergebnis angewendet.quelle
sh + coreutils, 119 Bytes
Dies ist eine Binärdatei. Dargestellt als Hexdump:
Hier ist das base64-Formular, damit Sie es kopieren und einfügen können:
quelle
C
230228 Bytesprobier es auf ideone aus
Dies ist ein Versuch, die ursprüngliche C-Version zu verbessern, bei der ein Viertel der Platine in einem C-Array gespeichert war. Nicht so kurz, wie ich es mir erhofft hatte. In dieser Version ist nur ein Achtel der Karte gespeichert.
Ungolfed:
quelle
GNU sed,
219205 BytesUnter Ausnutzung der Spiegelsymmetrie der Platine ist die zweite Hälfte die erste, die in umgekehrter Reihenfolge im Laderaum abgelegt wurde.
quelle