架桥


10

您的任务是建立一座桥梁,以连接两个峭壁d(在一定距离的情况下输入)。d将永远是偶数

但是,桥需要列来支撑它。每列每侧最多可容纳6个空格。

对于此示例:

________                        ________
        |                      |
   A    |                      |   B

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

的桥d = 20应该看起来像这样,有两列。列不计入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

@isaacg不,输出中不需要它们。它们就在那里,所以你们不必在我的示例中数行。
约什克,2013年

我认为您的规格有缺陷吗?是什么防止1 | 2 | 3 | 4 | 5 ... | d解决方案?是一束。
Vlo

@Vlo规则之一是使用尽可能少的列数。因此,使用列的每个空间都不是最小的。
2013年

您说d总是会是偶数,但在最后一个示例中,d = 21。
停止解雇好人

Answers:


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`

其中\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,最优解都不是对称的。
停止解雇好人

@Hohmannfan它返回最小的次优对称解,在这种情况下为|____________|___________|____________|等等。–
Neil

我想那是最好的解释。
停止解雇好人

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}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.