让我成为字母树


14

介绍

在大多数字体中,除大写字母之外,所有大写字母字符BDO都有单行,大约接触到字符边界矩形的四个角中的一些:ACEFGHIJKLMNPQRSTUVWXYZ

例如,两条腿A“触摸”角色的左下角和右下角。同样,C触摸其右上角和右下角(虽然有点弯曲但足够靠近)。L仅用单行触摸它的左上角和右下角。的左下角L是一个顶点,而不是单条线的末端。

这是一张表格,根据我(希望您)看到的Stack Exchange字体,字符触摸了哪些角落。1用于左上,2用于右上,3左下,4右下。

A: 3 4
C: 2 4
E: 2 4
F: 2 3
G: 2
H: 1 2 3 4
I: 1 2 3 4
J: 1 3
K: 1 2 3 4
L: 1 4
M: 3 4
N: 2 3
P: 3
Q: 4
R: 3 4
S: 2 3
T: 1 2
U: 1 2
V: 1 2
W: 1 2
X: 1 2 3 4
Y: 1 2
Z: 1 4

设定

像这些角接触线一样,假装在它们接触的角方向上延伸,以便可以“连接”网格上这些字符的排列。

例如,其中的所有字符

 A
C X

连接因为左下方的A和右上C连接,和右下方A左和顶部X连接。

然而,

CAX

没有连接,因为连接仅从一个字符到下一个对角线发生

挑战

ACEFGHIJKLMNPQRSTUVWXYZ根据上述规则,编写可能的最短程序(以字节为单位),以一棵完全连接的大树输出所有字符。每个字符必须出现一次。使用空格表示空白。

这23个字母的树中的所有内容都可以通过上面定义的对角线连接从其他任何地方访问:

  Q
 A J   R
C U   S Y
 I M N
E H X
 F L T
G   Z K P
     V W

笔记

  • 您可以对解决方案进行硬编码。
  • 您的输出应仅包含ACEFGHIJKLMNPQRSTUVWXYZ,空格和换行符。BDO将不会被使用。
  • 只要所有连接位置正确,引导/尾部空间都可以。
  • 输出网格不应大于30 x 30个字符(包括换行符和空格)。
  • 仅考虑角连接。的底部Y不连接任何东西。您必须使用上表中的角连接。
  • 并非所有可连接的角都需要连接到某物。可连接和不可连接的角可能彼此相邻。
  • 输出到标准输出。没有输入。
  • 包括彼得·泰勒Peter Taylor)所做的以斜线表示的连通性图很有帮助,但并非必需。

更新:
githubhagocyte 在Github上进行了字母树有效性检查。


您可以对解决方案进行硬编码吗?
edc65 2014年

2
@ edc65您可以对解决方案进行硬编码。
卡尔文的爱好

7
有趣的是,那两个短语只有1个不同的字符:P
Teun Pronk

1
@githubphagocyte,作为问题的附录比作为答案要好,因为它不是答案。
彼得·泰勒

1
尼斯高尔夫,@ Calvin'sHobbies。看到答案很有趣。
乔丹

Answers:


1

珀斯 32

jd"QAPMFRLZ\nUINKSHXJ\n\0GTCVEWY

输出:

Q A P M F R L Z 
 U I N K S H X J 
  G T C V E W Y

连接,感谢@githubphagocyte的检查器:

Q   A   P   M   F   R   L   Z   
 \ / \ /   / \ /   / \   \   \  
  U   I   N   K   S   H   X   J   
     / \ /   / \ /   / \ / \ /    
    G   T   C   V   E   W   Y 

结合了@grc的空字节技巧和Pyth的极短语法。自己为自己做网格。

说明:

j是python的字符串连接。d是空间。\0是空字节的转义序列。打印时是NOP,因此第三行正好在前面有两个空格。另外,请注意,字符串可以在Pyth中以EOL终止,也可以以引号终止。


12

GolfScript(41个字符)

'QZENRPMALHIFKSXJTUVWYGC'8/{' '*n' '+:n}/

在线演示

连接图:

Q   Z   E   N   R   P   M   A
 \   \   \ /   / \ /   / \ / \
  L   H   I   F   K   S   X   J
   \ / \ / \ /   / \ /   /   /
    T   U   V   W   Y   G   C

11

Python,49岁

print' '.join('  MQRCNAF\n XZHLKSIP\n\0GJWVUYET')

例:

>>> print' '.join('  MQRCNAF\n XZHLKSIP\n\0GJWVUYET')
    M Q R C N A F 
   X Z H L K S I P 
  G J W V U Y E T

我认为现在连接正确,但是我可能又错过了一些东西。


F4看起来与相连G1,这是无效的
Tymric

@Timmy但是F2连接到A3。一切似乎都与我联系在一起。
卡尔文的爱好

@ Calvin'sHobbies我想我误解了要求。是否允许相邻的角未连接?
蒂姆里克2014年

2
@Timmy当然。这些角对算不算是连通的,但是两个字母可能以另一种方式连接。
卡尔文的爱好

9

Marbelous 164 158 143

使用bmarks的树是因为它几乎对Marbelous进行了优化。在这种情况下,代码只是从左到右的所有字符(包括空格和换行符)的升序代码,由空格分隔。

43 20 46 20 50 20 4D 20 51 20 52 20 45 20 41 14 20 58 20 48 20 4e 20 4C 20 4B 20 5A 20 49 20 53 14 47 20 59 20 56 20 20 20 55 20 4A 20 54 20 57

输出:

 C F P M Q R E A 
  X H N L K Z I S 
 G Y V   U J T W

一个更好的做法Marbelous 135 129

该输出在同一行树上,每行前后都有一个额外的空格,它通过将文字输入到在打印文字之前先打印一个空格的子例程中来工作。如果文字是空格,则仅打印空格(20十六进制)

57
54
4A
55
20
56
59
47
14
53
49
5A
4B
4C
4E
48
58
20
14
41
45
52
51
4D
50
46
43
Sp
Sp:
20 I0
.. =V

当Marbelous源代码不再需要单元格之间的空格时,该答案将降至96,今天晚些时候就是这种情况。
overactor 2014年

1
使用问题之后的语言或语言功能被认为是作弊行为。
彼得·泰勒

4
@PeterTaylor现在,此答案仅使用在提出问题时实施的功能。
演员

7

脑子* ck 669

做这个咯咯笑。输出与示例完全相同。
稍后将提供另一个解决方案。 想不到在Lua中执行此操作的聪明方法,因此我将坚持使用这一方法:)

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

输出量

  Q
 A J   R
C U   S Y
 I M N
E H X
 F L T
G   Z K P
     V W

2
不管代码高尔夫挑战多么疯狂,几乎总是有一个愚蠢的答案。一定要爱+1
法老(Pharap)2014年

@AndoDaan不,不是。我没有用。我一如既往地尽了全力。我确实使用了很多东西,并且学到了我在编写BF时经常使用的大多数技巧,所以如果它看起来很类似,我不会感到惊讶。
Teun Pronk

不相似,相同。两者均为669字节长。两者都使用相同的字符(完全没有优化),并且都与所有加号,小号和其他杂物符号一起使用。
AndoDaan 2014年

2
那一定是巧合。我参加挑战赛很有趣,但看不到产生BF的乐趣。甚至可能有点有趣的唯一方法是您自己编写生成器。
Teun Pronk 2014年

6

PHP 46

这更像是解谜而不是编程,所以我的答案更像是解谜而不是代码。但是,这是一个有效的PHP程序,所以我正在提交它。

C A Q S R P M J
 X Z I F K N H
G T U V W Y E L

在Perl中更新相同的内容。长度仍然保持46:

print"CAQSRPMJ
 XZIFKNH
GTUVWYEL"=~s/\S/$& /rg

4

HTML,55

<pre>C F P M Q R E A
 X H N L K Z I S
G Y V   U J T W

输出:

C F P M Q R E A
 X H N L K Z I S
G Y V   U J T W

3

Bash + coreutils,46岁

sed 's/\S/ &/g'<<<"CAQSRPMJ
 XZIFKNH
GTUVWYEL"

现在无耻地借用@ core1024最佳树

输出:

$ ./alphatree.sh
 C A Q S R P M J
  X Z I F K N H
 G T U V W Y E L
$

2

STATA 63

编辑:现在我自己的解决方案。应该是所有字母。

di 'C F P M Q R E A' di ' X H N L K Z I S' di 'G Y V   U J T W'

 C F P M Q R E A 
  X H N L K Z I S 
 G Y V   U J T W

1

Javascript 83

我将从对您的解决方案进行硬编码开始

console.log('  Q\n A J   R\nC U   S Y\n I M N\nE H X\n F L T\nG   Z K P\n     V W')

将其缩短,alert而不是console.log
马克·加布里埃尔

2
@MarkGabriel我想以一种更聪明的方式使其更短。Alert没有正确的字体来显示ascii艺术。
edc65 2014年

1
我知道了。忘记了警报的格式不同。:)
Mark Gabriel

1

PHP,69岁

<?php echo preg_replace("/(\w)/",'\1 ',"CAQSRPMJ
 XZIFKNH
GTUVWYEL");

C A Q S R P M J 
 X Z I F K N H 
G T U V W Y E L

您的输出中根本没有对角线连接
edc65,2014年

@MartinBüttner-谢谢,修复它花了我一个字节。
2014年

此(以及许多其他)响应的问题是输出比代码短(请参见core1024 php)
edc65

您可以通过将正则表达式替换为来剃除两个字节 "/\w/",'\0 '
ATaco,2016年
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.