Aufgabe
Schreiben Sie ein Programm, das drei Ganzzahlen m , n entweder aus STDIN oder als Befehlszeilenargumente liest , alle möglichen Kacheln eines Rechtecks der Dimensionen m × n mit 2 × 1 und 1 × 2 Dominos und schließlich die Anzahl der gültigen Kacheln druckt.
Dominos einer einzelnen Kachelung müssen durch zwei Striche ( -
) für 2 × 1 und zwei vertikale Balken ( |
) für 1 × 2 Dominos dargestellt werden. Auf jede Kachelung (einschließlich der letzten) muss ein Zeilenvorschub folgen.
Für Bewertungszwecke müssen Sie auch ein Flag von STDIN oder als Befehlszeilenargument akzeptieren, mit dem Ihr Programm nur die Anzahl der gültigen Kacheln druckt, nicht jedoch die Kacheln selbst.
Ihr Programm darf nicht länger als 1024 Byte sein. Es muss für alle Eingänge so funktionieren, dass m × n ≤ 64 ist .
(Inspiriert von Alle Domino-Kacheln des 4x6-Rechtecks drucken .)
Beispiel
$ sdt 4 2
----
----
||--
||--
|--|
|--|
--||
--||
||||
||||
5
$ sdt 4 2 scoring
5
Wertung
Ihre Punktzahl wird durch die Ausführungszeit Ihres Programms für die Eingabe 8 8 mit gesetztem Flag bestimmt.
Um dies zu einem schnellsten Code und nicht zu einer schnellsten Computerherausforderung zu machen , führe ich alle Einsendungen auf meinem eigenen Computer (Intel Core i7-3770, 16 GiB PC3-12800 RAM) aus, um die offizielle Punktzahl zu ermitteln.
Bitte hinterlassen Sie detaillierte Anweisungen zum Kompilieren und / oder Ausführen Ihres Codes. Wenn Sie eine bestimmte Version des Compilers / Interpreters Ihrer Sprache benötigen, geben Sie eine entsprechende Erklärung ab.
Ich behalte mir das Recht vor, Einsendungen unbewertet zu lassen, wenn:
Für mein Betriebssystem (Fedora 21, 64 Bit) gibt es keinen kostenlosen Compiler / Interpreter (wie bei Bier).
Trotz unserer Bemühungen funktioniert Ihr Code nicht und / oder erzeugt auf meinem Computer eine falsche Ausgabe.
Das Kompilieren oder Ausführen dauert länger als eine Stunde.
Ihr Code oder der einzige verfügbare Compiler / Interpreter enthält einen Systemaufruf
rm -rf ~
oder etwas ähnlich fauliges.
Bestenliste
Ich habe alle Einsendungen neu bewertet, sowohl Kompilierungen als auch Ausführungen in einer Schleife mit 10.000 Iterationen für die Kompilierung und zwischen 100 und 10.000 Iterationen für die Ausführung (abhängig von der Geschwindigkeit des Codes) ausgeführt und den Mittelwert berechnet.
Dies waren die Ergebnisse:
User Compiler Score Approach
jimmy23013 GCC (-O0) 46.11 ms = 1.46 ms + 44.65 ms O(m*n*2^n) algorithm.
steveverrill GCC (-O0) 51.76 ms = 5.09 ms + 46.67 ms Enumeration over 8 x 4.
jimmy23013 GCC (-O1) 208.99 ms = 150.18 ms + 58.81 ms Enumeration over 8 x 8.
Reto Koradi GCC (-O2) 271.38 ms = 214.85 ms + 56.53 ms Enumeration over 8 x 8.
--
. Wenn es vertikal ist, sind es zwei |
untereinander.