十六进制的Blockbox?


11

用任何需要6位十六进制输入/参数的编程语言编写程序或函数。输入/参数可以是6个值或6个字符串。

您的程序应输出一个正好8个字符的矩形矩形块,该块仅包含提供的十六进制数和空格(+换行符)。矩形块是较小的块形状的组合,分别对应6个提供的值。

以下是2个演示样本输入和样本有效输出:

样本输入

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

一个有效的解决方案输出

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

样本输入

"35bf12"

一个有效的解决方案输出

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是提供的十六进制值,并且形状应由字符x组成,其中x是代表十六进制字符的字符。

  7. 内部块形状可以是任何形式,只要所有形状字符都垂直或水平连接即可,并且不会破坏空白墙的规则。

  8. 可以将6个块形状放置在输出矩形内的任何内部“顺序”中。

  9. 有效输入范围:每个形状1 ... 15(“ 1” ...“ f”)。程序的输入不应包含6个十六进制数字以外的任何其他信息,并且在将输入提供给您的程序/函数之前,不应以示例方式对输入进行排序。告诉我们您的解决方案使用哪种输入格式(输入中不能包含十六进制值以外的任何其他信息)。

  10. 内部块形状可以是空心的。孔应为空白字符,该字符算作空白墙,这意味着空心内部块形状的孔的宽度不能超过1个字符。

有效空心形状的三个示例:

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双核,4GB内存作为参考。

这就是代码高尔夫,最短的解决方案获胜。解决方案可以是完全正常运行的程序或功能


规则7关于“连接”是什么意思?这是否只是对规则5约束的重述,即(我的措词)禁止存在2x2空白方块?
彼得·泰勒

对于某些重述,我感到很抱歉,但是规则7更像是重述了规则6,其中指出形状应统一。换句话说,规则7表示不能将单个形状分为2个单独的较小形状。
Plarsen 2011年

6
我无意刻薄,但这个问题绝不会引起人们的兴趣,兴趣或表现出任何美学上令人愉悦的特征。这只是一个抽象的挑战,我不明白为什么有人会拥有必要的耐心甚至阅读所有规则,而无需说任何解决问题的方法。祝你下一个好运!
Bogdan Alexandru

1
澄清:空格可以形成任何形状,只要它可以分隔块,并且在外边缘不包含2x2块且不包含两个连续的空格?
John Dvorak

2
这个问题确实很棘手(或者我可能是个问题解决能力不强的人)...您自己有解决方案吗,Plarsen?无论如何,我认为放下空白要求并使其成为代码挑战更为有趣,其中分数取决于字符数和块的高度(因此,将其打包很多而不用这是一项艰巨的要求)。
FireFly 2014年

Answers:


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,在输出中创建了一个虚构的矩形,在最右边的一行中有多个对齐的空白。
Plarsen 2014年

1

BrainF * ck-134(换行符

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

我认为这是简单的答案

通过6个十六进制字符输入到stdin,然后输入换行符以提交。

编辑:由于规则6,这失败了,直到现在我才完全意识到:/

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.