任务
编写一个程序,从STDIN或作为命令行参数读取三个整数m,n,打印出所有可能的矩形为m×n且由2×1和1×2 Domino组成的平铺,最后打印有效平铺的数量。
单个平铺的多米诺骨牌必须用两个破折号(-
)表示2×1,用两个竖线(|
)表示1×2的多米诺骨牌。每个平铺(包括最后一个平铺)都必须紧跟换行符。
出于评分目的,您还必须接受来自STDIN的标志或作为命令行参数的标志,该标志使您的程序仅打印有效拼贴的数量,而不打印拼贴本身。
您的程序不得超过1024个字节。它必须适用于所有输入,使得m×n≤64。
(灵感来自于打印所有4x6矩形的多米诺骨牌。)
例
$ sdt 4 2
----
----
||--
||--
|--|
|--|
--||
--||
||||
||||
5
$ sdt 4 2 scoring
5
计分
您的分数取决于设置了标志的输入8 8的程序执行时间。
为了使此代码成为最快的代码,而不是最快的计算机挑战,我将在自己的计算机上运行所有提交的文件(英特尔酷睿i7-3770、16 GiB PC3-12800 RAM)以确定官方成绩。
请留下有关如何编译和/或执行代码的详细说明。如果您需要使用特定版本的语言的编译器/解释器,请对此声明。
如果发生以下情况,我保留不对提交内容进行评分的权利:
我的操作系统(Fedora 21,64位)没有免费的(如在啤酒中)编译器/解释器。
尽管我们竭尽全力,但是您的代码无法正常工作和/或在我的计算机上产生不正确的输出。
编译或执行需要一个多小时。
您的代码或唯一可用的编译器/解释器包含对的系统调用
rm -rf ~
或同样令人讨厌的东西。
排行榜
我对所有提交进行了重新评分,以10,000次迭代进行编译,并以100至10,000次迭代执行(取决于代码的速度),并在循环中运行编译和执行(取决于代码的速度)并计算平均值。
结果是:
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.
--
。如果是垂直的,则为两个|
,一个在另一个下方。