免責事項:この質問の中で語られたストーリーは完全に架空のものであり、イントロを提供する目的でのみ発明されました。
私には建築家の友人がいて、コードゴルフの概念とこのサイトを彼に説明した後、彼は実際に変更に役立つものをコーディングすべきだと言った。私は彼に何が役に立つと思うかを尋ねました、そして、建築家である彼は、彼が特定のサイズの家の中で特定のサイズの部屋のためのすべての可能な配置を彼に与えたフロアプランナーを持つことを楽しむと答えました。code-golfは結局役に立たないということを証明し、このプログラムを可能な限り最小のバイト数で提供すると思った。
あなたのタスク:
家全体の大きさを含む配列Dと、室内の部屋の大きさを含む2番目の配列Rが与えられたときに、ASCIIアートとして、家の中の部屋のすべての可能な構成を出力するプログラムまたは関数を記述します。
すべての部屋と家の外壁は、標準のASCIIボックスとして形成する必要があります。垂直壁の場合はシンボル、水平壁の場合は-シンボル、角の場合は+シンボル。たとえば、寸法が[4,4]の家は次のようになります。
+----+
| |
| |
| |
| |
+----+
ご覧のとおり、角は一連の寸法の一部としてカウントされません。-または|の数 辺を形成する文字は、寸法で指定された数と等しくなければなりません。部屋は壁を共有したり、家と壁を共有したりできます。部屋には小さな部屋を含めることはできません。
たとえば、構成
+--+---+-+
| | | |
| | | |
+--+---+ |
| |
| |
+--------+
D = [5,8]およびR = [[2,2]、[2,3]]に有効です。
入力:
2つの配列。1つには家の寸法である2つの整数が含まれ、もう1つには部屋の寸法を含む一連の配列が含まれます。
出力:
文字列として可能なすべての家の配列、または一貫した方法で区切られたすべての可能な家を含む文字列。まったく同じ構成のローテーションは1回しかカウントされないことに注意してください。
テストケース:
D R -> Output
[4,3] [[2,1],[4,1]] -> +-+-+ +-+-+ +-+-+ Note that though there is an option to switch which side the [2,1] room and the [4,1] room are on, doing so would merely be rotating the house by 180 degrees, and therefore these possibilities do not count.
| | | +-+ | | | |
+-+ | | | | | | |
| | | | | | +-+ |
| | | +-+ | | | |
+-+-+ +-+-+ +-+-+
[4,7] [[3,1],[4,2],[2,2] -> +----+--+ +----+--+ +----+--+ +----+--+ There are some more possiblities I didn't feel like adding, but it's the same four again, just with the [4,2] and the [2,2] room switched.
| | | | | | | | | | | |
| | | | | | | | | | | |
+---++--+ +--+-+-++ +-+--++-+ ++---+--+
| | | | | || | | | | || | |
+---+---+ +--+---++ +-+---+-+ ++---+--+
得点:
これはcode-golfで、バイト単位の最低スコアが勝ちです!
D = [4,2]でもあなたの家は[4,3]そうでしょう?