首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可视化Bit编织

可视化Bit编织
EN

Code Golf用户
提问于 2016-06-27 16:57:14
回答 4查看 3.4K关注 0票数 33

深奥的编程语言恶毒对字节值有一个有趣的操作,它称之为“编织”。它本质上是字节的八位的排列(不管我们从哪一端开始计数,因为模式是对称的):

  • 位0移到第2位。
  • 位1被移动到位0。
  • 第2位移至第4位。
  • 第3位移至第1位。
  • 第4位移至第6位。
  • 第5位移至第3位。
  • 第6位移至第7位。
  • 第7位移至第5位。

为了方便起见,下面是排列的另外两个表示。作为一个循环:

代码语言:javascript
复制
(02467531)

并作为映射对的列表:

代码语言:javascript
复制
[[0,2], [1,0], [2,4], [3,1], [4,6], [5,3], [6,7], [7,5]]

您的任务是使用 (Unicode代码点: U+2500、U+2502、U+250C、U+2510、U+2514、U+2518、U+253C)来可视化这个排列。这种形象化应满足以下限制:

第一行也是最后一行正好是:

代码语言:javascript
复制
0 1 2 3 4 5 6 7

在这两者之间,您可以使用最多15个字符的行数来满足您的方框绘图字符(您至少需要4行)。这些行应该垂直地开始于第一行中的一个数字下面,在最后一行的对应数字上方垂直结束。这八条线必须连接起来,并且只能通过 (它总是一个交叉,永远不会有两个接触的转弯线)。线路的确切路径取决于你(找到一个特别的金色布局是这一挑战的核心)。一个有效的产出是:

代码语言:javascript
复制
0 1 2 3 4 5 6 7
│ │ └─┼┐│ │ └┐│
└─┼─┐ ││└─┼─┐││
┌─┘ │ ││  │ │││
│ ┌─┼─┘│  │ │││
│ │ │ ┌┼──┘ │││
│ │ │ │└┐ ┌─┼┼┘
│ │ │ │ │ │ │└┐
0 1 2 3 4 5 6 7

但是,正确连接正确数字的任何其他布局也是可以的。请在你的答案中显示你选择的输出。

您可以编写程序或函数,并且不会接受任何输入。将图表输出到STDOUT (或最近的选项),或者作为函数返回字符串或字符串列表(每个字符串代表一行)。

适用标准的密码-高尔夫规则,因此最短的代码(以字节为单位)获胜。

EN

回答 4

Code Golf用户

回答已采纳

发布于 2016-06-28 03:26:30

实际上是69个字节的

代码语言:javascript
复制
"│ ┌┘│ │└┐ │└┐└┐""┌┘└┼┐└┼┐ └┼┐└┐""└┼┐│└┐┌┘└┐┌┘│""┌┼─┘"3*"│┌┘"+8r' j;)

在网上试试! (在线解释器中的对齐有点混乱)

实际上,这里有一个巨大的优势--所有的方框绘图字符都在CP437中,因此每个字符只有一个字节。虽然理论上每个需要的字符可以用4位编码(因为只有9个唯一的字符),但是压缩字符串所节省的31个字节会因为实际的字符串处理能力非常差而丢失。这也意味着任何8x4配置都会得到相同的分数。由于8x4似乎是(垂直)最短的可能配置,这是最优的。

感谢马丁3字节!

感谢TimmyD增加了4个字节!

解释:

代码语言:javascript
复制
"│ ┌┘│ │└┐ │└┐└┐""┌┘└┼┐└┼┐ └┼┐└┐""└┼┐│└┐┌┘└┐┌┘│""┌┼─┘"3*"│┌┘"+8r' j;)
"│ ┌┘│ │└┐ │└┐└┐""┌┘└┼┐└┼┐ └┼┐└┐""└┼┐│└┐┌┘└┐┌┘│""┌┼─┘"3*"│┌┘"+         push the individual lines, using string multiplication to shorten repeated sections
                                                              8r' j   push the string "0 1 2 3 4 5 6 7" (range(8), join on spaces)
                                                                   ;)  make a copy and move it to the bottom of the stack
票数 13
EN

Code Golf用户

发布于 2016-06-28 09:01:26

MS-DOS批处理,136个字节

代码语言:javascript
复制
@echo 0 1 2 3 4 5 6 7
@echo ³ÚÙ ³ÚÙ ³ÚÙ ³ÚÙ
@echo ÀÅÄ¿ÀÅÄ¿ÀÅÄ¿ÀÅ¿
@echo ÚÙÚÅÄÙÚÅÄÙÚÅÄÙ³
@echo ³ ³À¿ ³À¿ ³À¿ ³
@echo 0 1 2 3 4 5 6 7

使用@TimmyD的输出。这可能也适用于Windows,但我的代码页是CP850,而不是CP437。

票数 3
EN

Code Golf用户

发布于 2016-06-27 19:30:15

Python3,209个字节

代码语言:javascript
复制
lambda s="0 1 2 3 4 5 6 7\n":s+"│┌┘ │┌┘ │┌┘ │ │\n└┼─┐└┼─┐└┼─┐└┐│\n┌┘┌┼─┘ └┐│┌┼─┼┘\n│ │└┐ ┌─┼┘│└┐└┐\n"+s

返回一个字符串。

感谢@Mego为您节省了2个字节!

人物身体的学分转到@TimmyD!

票数 0
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/83899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档