Mir ist heute Morgen ein interessantes Rätsel aufgefallen, als ich auf die Aufzugsknöpfe sah.
Sie müssen eine Liste aller Braillemuster erstellen, die in ein 2x3-Raster passen. Verwenden Sie einen Hash#
, um eine Erhebung zu kennzeichnen, und einen Bindestrich -
, um eine flache Fläche zu kennzeichnen.
Erwartete Ausgabebeispiele:
#-
--
--
##
--
--
#-
#-
--
(and so on...)
Regeln:
- Ihr Programm muss jedes Muster durch mindestens ein Zeichen oder eine Zeile trennen.
- Die Muster können in beliebiger Reihenfolge erzeugt werden.
- Es sollten alle Muster erstellt werden, unabhängig davon, was das Braille-Alphabet tatsächlich verwendet. Das vollständig leere Muster ist optional.
- Es sollten nur eindeutige Reliefmuster generiert werden. Die folgenden Muster werden als gleichwertig angesehen, da sich die Unebenheiten in einer identischen Anordnung befinden. Verwenden Sie in diesen Fällen das Muster, das der linken oberen Ecke am nächsten liegt (dh die erste Option in diesem Beispiel).
#- -# -- --
#- -# #- -#
-- -- #- -#
Bonuspunkte , wenn Sie können es für jeden funktioniert x von y Größe Raster. ( BEARBEITEN: Innerhalb angemessener Grenzen. Bis zu 4x4 reicht für den Proof of Concept.)
Beim Lesen des Wiki-Artikels scheint es 45 Muster zu geben (einschließlich des Leerzeichens), die den Regeln dieses Puzzles entsprechen.
code-golf
combinatorics
Hand-E-Food
quelle
quelle
x
x-y
Gitter generieren Sie die ersten2^(xy)
Zahlen und filtern diejenigen heraus, die gegen2^x - 1
oder auf 0 maskieren(2^(xy+1) - 1)/(2^y - 1)
.Antworten:
GolfScript,
3432 ZeichenStellt sich heraus, dass es gibt kürzere Lösungen als nur alle 64 Muster zu erzeugen und die schlechten herausgefiltert werden. In der Tat ist es durch geeignetes Abbilden von Bits auf Gitterpositionen möglich, alle gültigen (nicht leeren) Muster auf einen fortlaufenden Zahlenbereich abzubilden, wie dies bei diesem Programm der Fall ist.
Im Einzelnen verwende ich folgende Zuordnung:
Dabei bezeichnen die Zahlen die Bitposition (beginnend mit dem niedrigstwertigen Bit
0
), die dieser Position im Raster zugeordnet ist. Bei dieser Zuordnung entsprechen die gültigen Gitter den Zahlen 20 bis einschließlich 63.Dies ist fast dasselbe wie die offensichtliche Abbildung, die durch Ausschreiben der 6-Bit-Zahl in Binärschrift und Hinzufügen von Zeilenumbrüchen zwischen jedem zweiten Bit erhalten wird. Ausnahme, dass die Bits
1
und2
vertauscht werden - und tatsächlich berechnet mein Programm dies genau so. (Ich füge auch 64 zu den Zahlen hinzu, bevor ich sie in Binärdaten umwandle, und entferne dann das extra hohe Bit. Das ist nur, um die Zahlen auf 6 Bits aufzufüllen, da GolfScriptsbase
sonst keine führenden Nullen zurückgeben würden.)Ps. Online Demo hier. (Der Server scheint in letzter Zeit überlastet zu sein. Wenn eine Zeitüberschreitung auftritt, versuchen Sie es erneut oder laden Sie den Interpreter herunter und testen Sie ihn lokal.)
Bearbeiten: Es konnten zwei Zeichen gespart werden, indem unnötiges Erstellen und Speichern von Arrays vermieden wurde. Puh!
quelle
Mathematica 97
Leer ist nicht enthalten:
NB! = Ist ein einzelnes Zeichen in Mathematica.
quelle
C # - 205
Lesbare Version:
quelle
Perl,
716765 charKonvertieren Sie int in binary, führen Sie die Transliteration durch und fügen Sie nach jeweils zwei Zeichen eine neue Zeile hinzu. Der
/^#/m
Test eliminiert zwei Muster (20 und 21), die in der äußersten linken Spalte keine Erhebung aufweisen.Allgemeine Lösung,
150106103100 charLesen Sie
x
undy
von Befehlszeilenargumenten. Zeilenumbrüche sind wichtigIterieren Sie wie zuvor über 0..2 xy , konvertieren Sie jedes int in binary, ersetzen Sie
-
und#
für0
und1
und fügen Sie nach jedem eine neue Zeile ein$x
Zeichen ./^#/m
prüft, ob in der linken Spalte/^.*#/
eine Erhebung vorhanden ist , und prüft, ob in der oberen Reihe eine Erhebung vorhanden ist. Es werden nur die Muster gedruckt, die beide Tests bestehen.quelle
Python,
12011811395118Bearbeiten: verwendet Winston Ewert Vorschlag und x von y Grid-Lösung hinzugefügt
Edit: Irgendwie habe ich die letzte Einschränkung bezüglich der Einzigartigkeit übersehen. Dieses Skript generiert alle möglichen Sequenzen, nicht nur die 45.
Bearbeiten: Sichern auf 118 aber jetzt korrekt
quelle
['#','-']
durch'#-'
J,
3533 ZeichenVerwendet den Ansatz, den Ilmari Karonen in ihrer Golfscript-Lösung vorstellte. Da das J-Verb
#:
(Antibase) jedoch die Bits (oder im allgemeinen Ziffern) in einer Liste speichert, müssen wir es von links statt von rechts indizieren (dh Index 0 ist das am weitesten links stehende, höchste Bit).Die Lösung ist ziemlich einfach:
20+i.44
gibt eine Liste der Zahlen20..63
einschließlich.#:
Nimmt die Antibase-2 von jedem Element in dieser Liste und erzeugt so eine Liste von Bitmustern für jede Zahl in diesem Bereich.{
Wählt die Bits in dem richtigen Muster aus (ordnet sie im Grunde neu an) und wird dann{
erneut verwendet, um die Ziffern als Indizes in der Zeichenfolge '- #' zu verwenden, um die Ausgabe vorzubereiten. Zuletzt ordnen wir jeden Eintrag in ein 2 x 3 Rechteck mit$
(Form).quelle
(0 2 3 ,. 1 4 5) { #: 44
optimiert werden kann, um mit einer Liste von Zahlen anstatt mit einer einzelnen Zahl zu arbeiten? Würde wahrscheinlich ein paar Zeichen mehr abschneiden.Python -
121112Leer ist nicht im Lieferumfang enthalten
quelle
'_#',repeat=6
->*['_#']*6
b
ist bereits ein Tupel, so dass keine Notwendigkeit , es zu konvertieren :)