Tâche
Écrivez un programme qui lit trois entiers m , n à partir de STDIN ou comme arguments de ligne de commande, imprime tous les pavages possibles d'un rectangle de dimensions m × n par des dominos 2 × 1 et 1 × 2 et enfin le nombre de pavages valides.
Les dominos d'un pavage individuel doivent être représentés par deux tirets ( -
) pour les dominos 2 × 1 et deux barres verticales ( |
) pour les dominos 1 × 2 . Chaque pavage (y compris le dernier) doit être suivi d'un saut de ligne.
À des fins d'évaluation, vous devez également accepter un indicateur de STDIN ou comme argument de ligne de commande qui fait que votre programme imprime uniquement le nombre de pavages valides, mais pas les pavages lui-même.
Votre programme ne doit pas dépasser 1 024 octets. Il doit fonctionner pour toutes les entrées telles que m × n ≤ 64 .
(Inspiré par Imprimer tous les pavages domino de rectangle 4x6 .)
Exemple
$ sdt 4 2
----
----
||--
||--
|--|
|--|
--||
--||
||||
||||
5
$ sdt 4 2 scoring
5
Notation
Votre score est déterminé par le temps d'exécution de votre programme pour l'entrée 8 8 avec le drapeau défini.
Pour en faire un code plus rapide qu'un défi informatique plus rapide , je vais exécuter toutes les soumissions sur mon propre ordinateur (Intel Core i7-3770, 16 Go de RAM PC3-12800) pour déterminer le score officiel.
Veuillez laisser des instructions détaillées sur la façon de compiler et / ou d'exécuter votre code. Si vous avez besoin d'une version spécifique du compilateur / interprète de votre langue, faites une déclaration à cet effet.
Je me réserve le droit de laisser les soumissions non notées si:
Il n'y a pas de compilateur / interprète gratuit (comme dans la bière) pour mon système d'exploitation (Fedora 21, 64 bits).
Malgré nos efforts, votre code ne fonctionne pas et / ou produit une sortie incorrecte sur mon ordinateur.
La compilation ou l'exécution prennent plus d'une heure.
Votre code ou le seul compilateur / interprète disponible contient un appel système
rm -rf ~
ou quelque chose de tout aussi louche.
Classement
J'ai réévalué toutes les soumissions, en exécutant les compilations et les exécutions en boucle avec 10000 itérations pour la compilation et entre 100 et 10000 itérations pour l'exécution (en fonction de la vitesse du code) et en calculant la moyenne.
Voici les résultats:
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.
--
. Si c'est vertical, c'est deux |
, l'un en dessous de l'autre.