Compito
Scrivere un programma che legge tre numeri interi m , n da STDIN o come argomenti della riga di comando, stampa tutti i possibili tasselli di un rettangolo di dimensioni m × n con domini 2 × 1 e 1 × 2 e infine il numero di massimali validi.
I domini di una singola piastrellatura devono essere rappresentati da due trattini ( -
) per 2 × 1 e due barre verticali ( |
) per domini 1 × 2 . Ogni piastrellatura (compresa l'ultima) deve essere seguita da un avanzamento riga.
Ai fini del punteggio, è inoltre necessario accettare un flag da STDIN o come argomento della riga di comando che consente al programma di stampare solo il numero di tasselli validi, ma non i tasselli stessi.
Il programma non può superare i 1024 byte. Deve funzionare per tutti gli ingressi in modo tale che m × n ≤ 64 .
(Ispirato da Stampa tutti i soffitti domino del rettangolo 4x6 .)
Esempio
$ sdt 4 2
----
----
||--
||--
|--|
|--|
--||
--||
||||
||||
5
$ sdt 4 2 scoring
5
punteggio
Il tuo punteggio è determinato dal tempo di esecuzione del tuo programma per l'ingresso 8 8 con il flag impostato.
Per rendere questo un codice più veloce piuttosto che una sfida al computer più veloce , eseguirò tutti gli invii sul mio computer (Intel Core i7-3770, 16 GiB PC3-12800 RAM) per determinare il punteggio ufficiale.
Si prega di lasciare istruzioni dettagliate su come compilare e / o eseguire il codice. Se hai bisogno di una versione specifica del compilatore / interprete della tua lingua, fai una dichiarazione in tal senso.
Mi riservo il diritto di lasciare le iscrizioni senza punteggio se:
Non esiste un compilatore / interprete gratuito (come nella birra) per il mio sistema operativo (Fedora 21, 64 bit).
Nonostante i nostri sforzi, il tuo codice non funziona e / o produce un output errato sul mio computer.
La compilazione o l'esecuzione richiede più di un'ora.
Il tuo codice o il solo compilatore / interprete disponibile contiene una chiamata di sistema
rm -rf ~
o qualcosa di altrettanto complicato.
Classifica
Ho riclassificato tutti gli invii, eseguendo sia compilazioni che esecuzioni in un ciclo con 10.000 iterazioni per la compilazione e tra 100 e 10.000 iterazioni per l'esecuzione (a seconda della velocità del codice) e calcolando la media.
Questi erano i risultati:
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 è verticale, è due |
, uno sotto l'altro.