Tarea
Escriba un programa que lea tres enteros m , n desde STDIN o como argumentos de línea de comandos, imprima todas las posibles inclinaciones de un rectángulo de dimensiones m × n por dominó 2 × 1 y 1 × 2 y finalmente el número de inclinaciones válidas.
Las fichas de dominó de un mosaico individual se deben representar con dos guiones ( -
) para 2 × 1 y dos barras verticales ( |
) para fichas de 1 × 2 . Cada mosaico (incluido el último) debe ir seguido de un salto de línea.
Para fines de puntuación, también debe aceptar un indicador de STDIN o como argumento de línea de comando que haga que su programa imprima solo el número de inclinaciones válidas, pero no las inclinaciones en sí.
Su programa no puede tener más de 1024 bytes. Tiene que funcionar para todas las entradas de modo que m × n ≤ 64 .
(Inspirado en Imprimir todas las inclinaciones de dominó del rectángulo 4x6 ).
Ejemplo
$ sdt 4 2
----
----
||--
||--
|--|
|--|
--||
--||
||||
||||
5
$ sdt 4 2 scoring
5
Puntuación
Su puntaje está determinado por el tiempo de ejecución de su programa para la entrada 8 8 con el indicador establecido.
Para hacer de este un código más rápido en lugar de un desafío informático más rápido , ejecutaré todas las presentaciones en mi propia computadora (Intel Core i7-3770, 16 GiB PC3-12800 RAM) para determinar el puntaje oficial.
Deje instrucciones detalladas sobre cómo compilar y / o ejecutar su código. Si necesita una versión específica del compilador / intérprete de su idioma, haga una declaración al respecto.
Me reservo el derecho de dejar las presentaciones sin puntaje si:
No hay un compilador / intérprete gratuito (como en cerveza) para mi sistema operativo (Fedora 21, 64 bits).
A pesar de nuestros esfuerzos, su código no funciona y / o produce resultados incorrectos en mi computadora.
La compilación o ejecución lleva más de una hora.
Su código o el único compilador / intérprete disponible contiene una llamada al sistema
rm -rf ~
o algo igualmente sospechoso.
Tabla de clasificación
He vuelto a calificar todas las presentaciones, ejecutando compilaciones y ejecuciones en un bucle con 10,000 iteraciones para la compilación y entre 100 y 10,000 iteraciones para la ejecución (dependiendo de la velocidad del código) y calculando la media.
Estos fueron los resultados:
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 es vertical, son dos |
, uno debajo del otro.