Tarefa
Escreva um programa que leia três números inteiros m , n de STDIN ou como argumentos da linha de comando, imprima todas as inclinações possíveis de um retângulo de dimensões m × n pelos dominós 2 × 1 e 1 × 2 e, finalmente, o número de inclinações válidas.
Os dominós de uma peça individual devem ser representados por dois traços ( -
) para 2 × 1 e duas barras verticais ( |
) para 1 × 2 dominós. Cada lado a lado (incluindo o último) deve ser seguido por um avanço de linha.
Para fins de pontuação, você também deve aceitar um sinalizador do STDIN ou como argumento da linha de comando que faz com que o programa imprima apenas o número de inclinações válidas, mas não as inclinações em si.
Seu programa não pode ter mais de 1024 bytes. Ele deve funcionar para todas as entradas, de modo que m × n ≤ 64 .
(Inspirado em Imprimir todas as inclinações de dominó do retângulo 4x6 .)
Exemplo
$ sdt 4 2
----
----
||--
||--
|--|
|--|
--||
--||
||||
||||
5
$ sdt 4 2 scoring
5
Pontuação
Sua pontuação é determinada pelo tempo de execução do seu programa para a entrada 8 8 com o sinalizador definido.
Para tornar esse código mais rápido do que um desafio mais rápido para o computador , executarei todos os envios em meu próprio computador (Intel Core i7-3770, 16 GiB PC3-12800 RAM) para determinar a pontuação oficial.
Deixe instruções detalhadas sobre como compilar e / ou executar seu código. Se você precisar de uma versão específica do compilador / intérprete do seu idioma, faça uma declaração nesse sentido.
Reservo-me o direito de deixar os envios sem pontuação se:
Não há compilador / intérprete gratuito (como na cerveja) para o meu sistema operacional (Fedora 21, 64 bits).
Apesar dos nossos esforços, seu código não funciona e / ou produz resultados incorretos no meu computador.
A compilação ou execução leva mais de uma hora.
Seu código ou o único compilador / intérprete disponível contém uma chamada do sistema
rm -rf ~
ou algo igualmente suspeito.
Entre os melhores
Marquei todas as submissões, executando as compilações e as execuções em um loop com 10.000 iterações para compilação e entre 100 e 10.000 iterações para execução (dependendo da velocidade do código) e calculando a média.
Estes foram os 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.
--
. Se for vertical, são dois |
, um abaixo do outro.