Schreiben Sie ein Programm oder eine Funktion in einer beliebigen Programmiersprache, die eine 6-stellige hexadezimale Eingabe / Argumentation verwendet. Die Eingabe / das Argument kann 6 Werte oder eine 6-stellige Zeichenfolge sein.
Ihr Programm sollte einen genau 8 Zeichen breiten rechteckigen Zeichenblock ausgeben, der nur die mitgelieferten Hexadezimalzahlen in Kombination mit Leerzeichen enthält (+ Zeilenvorschub). Der rechteckige Block ist eine Kombination kleinerer Blockformen, eine für jeden der 6 angegebenen Werte.
Hier folgen 2 demostrative Stichprobeneingaben und Stichproben gültige Ausgaben:
Probeneingang :
"464fa6" or [4, 6, 4, 15, 10, 6]
Eine gültige Lösung Ausgabe :
44 66 ff
44 66 ff
66 ff
aa f
aaa ffff
aa ffff
aaa
6 44
66666 44
Probeneingang :
"35bf12"
Eine gültige Lösung Ausgabe :
55555 22
bbbbbbbb
b b b
33
fffff 3
ff ff
ffffff 1
Regeln:
Die Ausgabe muss eine rechteckige Form haben
Die Ausgabe kann eine beliebige vertikale Höhe haben, muss jedoch genau 8 Zeichen breit sein
Die "inneren Blöcke", die als "Blockformen" bezeichnet werden, können keine Verbindung zu einer anderen Blockform herstellen. Die Blockformen müssen durch eine Wand aus Leerzeichen mit genau 1 Zeichen Breite horizontal, vertikal und diagonal getrennt sein.
Die Wand von Leerzeichen kann nicht parallel zu den Außenkanten verlaufen, an den Ausgabekanten können nur 1 Zeichen breite Wandkanten vorhanden sein. An der äußersten Rechteckkante der Ausgabe sollten keine verknüpften Leerzeichen vorhanden sein.
Die Breite der Wand von Leerzeichen sollte zu keinem Zeitpunkt 1 Zeichen überschreiten.
Die inneren Blockformen sollten mit der Fläche von x Zeichen einheitlich sein, wobei x der angegebene Hexadezimalwert ist, und die Form sollte aus dem Zeichen x bestehen, wobei x das Hexadezimalzeichen ist, das repräsentativ ist.
Die inneren Blockformen können eine beliebige Form haben, solange alle Formzeichen vertikal oder horizontal verbunden sind und die Regeln für die Wand von Leerzeichen nicht bewertet werden.
Die 6 Blockformen können in einer beliebigen internen "Reihenfolge" innerhalb des ausgegebenen Rechtecks platziert werden.
Gültiger Eingabebereich: 1 ... 15 ("1" ... "f") für jede Form. Die Eingabe in Ihr Programm sollte keine anderen Informationen als die 6 Hexadezimalzahlen enthalten, und die Eingabe sollte nicht anders als in den Beispielen sortiert werden, bevor sie Ihrem Programm / Ihrer Funktion zugeführt wird. Teilen Sie uns mit, welches Eingabeformat Ihre Lösung verwendet (die Eingabe darf keine anderen Informationen als die Hexadezimalwerte enthalten).
Eine innere Blockform kann hohl sein. Das Loch sollte aus Leerzeichen bestehen, die als Wand aus Leerzeichen gelten. Dies bedeutet, dass das Loch in einer hohlen Innenblockform nicht breiter als 1 Zeichen sein darf.
Drei Beispiele für gültige Hohlformen:
aaa
a aaa
aaa
999
9 9
999
9
ffffff
f ff
ffffff
Ein Beispiel für eine ungültige Hohlform:
ffffff
f f
f f
fffff
Ich gehe davon aus, dass es nicht möglich ist, alle Eingabekombinationen gemäß den obigen Regeln zu "lösen". Daher liste ich 10 Beispieleingaben auf, die Ihr Programm "lösen" sollte (alles ist nachweislich lösbar):
1. 464fa6 (same as the first sample)
2. 35bf12 (second example input seen above)
3. 111126
4. ff7fff
5. 565656
6. abcdef
7. 1357bd
8. 8c6a42
9. ab7845
10. 349a67
Ihr Programm sollte in der Lage sein, alle 10 Sameneingänge in vernünftiger Zeit zu lösen. Übersetzen Sie die vernünftige Zeit auf einem Standard-Desktop-Computer auf 1 Stunde. Sagen Sie wie: 3 GHz Dual Core, 4 GB Speicher als Referenz.
Dies ist Code Golf, die kürzeste Lösung gewinnt. Die Lösung kann ein voll funktionsfähiges Programm oder eine Funktion sein
Antworten:
Haskell, 156
Nun, dieser streckt die Regeln ein bisschen. Ich habe keine Leerraumwände außer den Zeilenumbrüchen, daher haben alle meine Wände eine Länge von 1.
Ausgabe für 464fa6:
quelle
BrainF * ck - 134 (Newline intr
Ich denke, dass dies die einfachste Antwort ist
Die Eingabe erfolgt über 6 hexadezimale Zeichen in stdin, gefolgt von einer neuen Zeile zum Senden.
EDIT: Dies schlägt aufgrund von Regel 6 fehl, die ich bis jetzt nicht vollständig erkannt habe: /
quelle