六角形のブロックボックス?


11

6桁の16進数の入力/引数を取る任意のプログラミング言語でプログラムまたは関数を記述します。入力/引数には、6つの値または6文字の文字列を指定できます。

プログラムは、指定された16進数のみをスペースと組み合わせて含む、正確に8文字幅の長方形のブロックを出力する必要があります(+改行)。長方形のブロックは、指定された6つの値ごとに1つずつ、より小さなブロック形状の組み合わせです。

次に、2つのデモ用サンプル入力とサンプル有効出力を示します。

サンプル入力:

"464fa6" or [4, 6, 4, 15, 10, 6]

1つの有効なソリューション出力:

44 66 ff
44 66 ff
   66 ff
aa     f
aaa ffff
aa  ffff
aaa     
    6 44
66666 44

サンプル入力:

"35bf12"

1つの有効なソリューション出力:

55555 22

bbbbbbbb
b b b   
      33
fffff  3
ff  ff  
ffffff 1

ルール:

  1. 出力は長方形である必要があります

  2. 出力の縦の高さは任意ですが、幅は正確に8文字でなければなりません

  3. 「ブロック形状」と呼ばれる「内部ブロック」は、他のブロック形状に接続できません。ブロック形状は、水平、垂直、斜めに1文字幅の空白の壁で区切る必要があります。

  4. 空白の壁は外縁に平行に走ることができず、出力縁に存在できるのは1文字幅の壁縁だけです。出力の最も外側の長方形の端には、リンクされたスペースが存在しないようにします。

  5. 空白の壁の幅は、どの点でも1文字を超えてはなりません。

  6. 内部ブロックの形状は、x文字の領域で均一である必要があります。ここで、xは指定された16進値であり、形状は文字xで構成されている必要があります。

  7. 内部ブロック形状は、すべての形状文字が垂直または水平に接続し、空白の壁の規則を無効にしない限り、どのような形でもかまいません。

  8. 6つのブロック形状は、出力された長方形内の任意の内部「順序」に配置できます。

  9. 有効な入力範囲:各形状に対して1 ... 15( "1" ... "f")。プログラムへの入力には、6桁の16進数以外の情報を含めることはできません。また、入力は、プログラム/関数に提供される前のサンプル以外の方法でソートしないでください。ソリューションが使用する入力形式を教えてください(入力には16進値以外の情報を含めることはできません)。

  10. 内側のブロック形状は、中空にすることができます。穴は、空白スペースの壁としてカウントされる空白スペース文字である必要があります。つまり、中空の内部ブロック形状の穴は、1文字を超えてはいけません。

有効な中空形状の3つの例:

aaa
a aaa
aaa

999
9 9
999
9

ffffff
f   ff
ffffff

無効な中空形状の一例:

ffffff
f   f
f   f
fffff

上記の規則に従ってすべての入力の組み合わせを「解決」することはできないと想定しているため、プログラムが「解決」できるはずの10個のサンプル入力をリストします(すべてが解決可能と検証されています)。

 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

プログラムは、10個のサンプル入力のいずれかを妥当な時間で解決できるはずです。標準的なデスクトップコンピューターで妥当な時間を1時間以内に変換します。たとえば、3 Ghzデュアルコア、4 GBのメモリを参考にしてください。

これはコードゴルフで、最短のソリューションが勝ちです。ソリューションは、完全に機能するプログラムまたは機能です


「接続」についてのルール7の意味 これは、(私の言い方をすれば)2x2の空白の正方形の存在を禁止する規則5の制約を修正したものですか?
— ピーターテイラー

一部の修正については申し訳ありませんが、規則7は規則6の修正であり、形状は均一である必要があると記載されています。言い換えれば、ルール7は、単一の形状を2つの別々の小さな形状に分割することはできないと述べています。
— プラーセン

6
私は意地悪をするつもりはありませんが、この問題は決して興味をそそる、面白くない、または審美的に楽しい特性を示しています。それは単なる抽象的な挑戦であり、誰もがすべてのルールを読むことさえ必要な忍耐を持っている理由はわかりません。あなたの次のもので幸運を!
— ボグダンアレクサンドル

1
明確化:空白は、ブロックを分離し、外縁に2x2ブロックと2つの連続した空白ブロックを含まない限り、任意の形状を形成できますか?
— ジョン・ドヴォルザーク

2
この質問は本当にトリッキーです(または、私は貧弱な問題解決者かもしれません)... Plarsen自身で解決策を持っていますか?とにかく、空白の要件を削除して、スコアが文字数とブロックの高さの両方に依存するコードチャレンジにすることは、もっと面白かったと思います(したがって、それは厳しい要件です)。
— ホタル14年

回答:


1

ハスケル、156

さて、これは少しルールを引き伸ばします。改行を除いて空白の壁はありません。したがって、壁の長さはすべて1です。

import Data.List
r=replicate
main=getLine>>=putStrLn.concatMap(\b->unlines$s(head$elemIndices b"0123456789abcdef")b)
s n c|n<9=[r n c,""]|True=r 8 c:s(n-8)c

464fa6の出力:

4444

666666

4444

ffffffff
fffffff

aaaaaaaa
aa

666666

非常に非常に近い:)が、ルール4が満たされていないため、出力の仮想長方形が作成され、右端の行に1つ以上の空白が並んでいます。
— プラーセン14年

1

BrainF * ck-134(改行intr

>>+[++++++++++>,----------]>++++++[<+++++>-]<++[<]<++++++[>+++++<-]>++>-
>..<<.>>>..<<<.>>>>..<<<.<........>.>>>>..>>>.<<..>>.<..[<]>>.

これは単純な答えだと思う

6個の16進文字を介してstdinに入力され、その後に送信する改行が続きます。

編集:これはルール6のために失敗しましたが、今まで完全に理解していませんでした:/

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.