задача
Напишите программу, которая читает три целых числа m , n либо из STDIN, либо в качестве аргументов командной строки, печатает все возможные наклоны прямоугольника с размерами m × n с помощью домино 2 × 1 и 1 × 2 и, наконец, количество допустимых значений.
Домино отдельных листов должны быть представлены двумя штрихами ( -
) для 2 × 1 и двумя вертикальными чертами ( |
) для 1 × 2 домино. После каждого тайлинга (включая последний) должен следовать перевод строки.
В целях оценки вы также должны принять флаг из STDIN или в качестве аргумента командной строки, который заставляет вашу программу печатать только количество допустимых значений, но не сами значения.
Ваша программа не может быть длиннее 1024 байта. Он должен работать для всех входов, таких что m × n ≤ 64 .
(Вдохновлено печатью всех элементов домино прямоугольника 4x6 .)
пример
$ sdt 4 2
----
----
||--
||--
|--|
|--|
--||
--||
||||
||||
5
$ sdt 4 2 scoring
5
счет
Ваша оценка определяется временем выполнения вашей программы для ввода 8 8 с установленным флагом.
Чтобы сделать этот код быстрейшим, а не самым быстрым компьютерным испытанием, я буду запускать все представления на своем собственном компьютере (Intel Core i7-3770, 16 ГБ ОЗУ PC3-12800), чтобы определить официальный результат.
Пожалуйста, оставьте подробные инструкции о том, как скомпилировать и / или выполнить ваш код. Если вам требуется конкретная версия компилятора / интерпретатора вашего языка, сделайте заявление об этом.
Я оставляю за собой право оставлять материалы без оценки, если:
Для моей операционной системы нет бесплатного (как в пиве) компилятора / интерпретатора (Fedora 21, 64 бита).
Несмотря на наши усилия, ваш код не работает и / или выдает неправильные результаты на моем компьютере.
Компиляция или выполнение занимает больше часа.
Ваш код или единственный доступный компилятор / интерпретатор содержат системный вызов
rm -rf ~
или что-то такое же подозрительное.
Leaderboard
Я переоценил все представления, выполняя как компиляции, так и выполнения в цикле с 10 000 итераций для компиляции и от 100 до 10000 итераций для выполнения (в зависимости от скорости кода) и вычисления среднего значения.
Это были результаты:
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.
--
. Если это вертикально, это два |
, один под другим.