橋を架ける


10

あなたの仕事は、入力を与えられた2つの崖をd距離で離して接続するブリッジを構築することです。d常に均一になります

ただし、ブリッジにはそれを保持するための柱が必要です。各列は、両側に最大6つのスペースを保持できます。

この例では:

________                        ________
        |                      |
   A    |                      |   B

        |----------------------|
                d = 22

のブリッジはd = 20、2列のこのようになります。列はdにはカウントされません。

_____|__________|_____
12345|1234554321|12345
     |          |

ルール:

  1. 立ち上がるのに十分なカラムが必要です。

  2. 立ち上がるのに必要な最小数のカラムが必要です。

  3. 対称でなければならない

  4. 勝ったバイトの最小量

例:(#はスペースを数えるのに役立つだけです。出力には含めないでください)

d = 10

_____|_____
12345|12345
     |

d = 32

_____|___________|___________|_____
12345|12345654321|           |
     |           |           |

d = 8

____|____
1234|1234
    |

d = 4

__|__
12|34
  |

d = 22

_____|____________|_____
12345|123456654321|
     |            |

または

______|__________|______
123456|1234554321|123456
      |          |

明確にするために、出力の数値は必要ですか、それとも単なる例示ですか?
isaacg 2016年

@isaacgいいえ、出力には必要ありません。それらはちょうどそこにあるので、皆さんは私の例の行を数える必要はありません。
JoshK、2016年

あなたの仕様に欠陥があると思いますか?1 | 2 | 3 | 4 | 5 ... | dのソリューションを妨げる原因 ビームです。
Vlo、2016年

@Vloルールの1つは、可能な最小数の列を使用することです。したがって、列を使用するすべてのスペースは最小ではありません。
JoshK 2016年

dは常に偶数になると言いますが、最後の例ではd = 21です。
SE-2016年

回答:


4

JavaScript(ES6)、92バイト

d=>[..."_  "].map(c=>(s=c+c[r='repeat'](n%6))+'|'+(c[r](12)+'|')[r](n/6)+s,n=d-1>>1).join`\n`

Where \nはリテラルの改行文字を表します。d奇数の場合、128バイトかかります。

d=>[..."_  "].map(c=>[...Array(d+1)].map((_,i)=>(d&1?i&&d-i&&(i>m)+5+i-m:((d-1)%24>11)*6+i-m)%12?'':'|',m=d>>1).join(c)).join`\n`

奇数のソリューションはどのように機能しますか?d = 35の場合、最適解は対称的ではありません。
SE-

@Hohmannfanこれは、次のような最適ではない対称解を返します|____________|___________|____________|
Neil

それが一番の解釈だと思います。
SE-2016年

0

Ruby、108バイト

たぶんもっともっとゴルフをすることができます。貪欲なアルゴリズム。

->d{s='',k=6
(s+=?_*[d,k].min+(d>k/2??|:'');d-=k;k=12)while d>0
s=s.chomp(?|)+s.reverse+$/
s+s.tr(?_,' ')*2}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.