画一个空的拼字板


28

标准拼字游戏板是15×15的空格网格,用于放置字母图块。大多数空格为空白,但有些空格为双字得分(粉红色),三字得分(红色),双字母得分(浅蓝色)和三字母得分(蓝色)。通常在中心位置有一个星星(算作双字得分)。

拼字板

编写一个程序或函数,以ASCII格式输出标准的空拼字板,其中:

  • . 代表一个空白

  • D 代表双字得分

  • T 代表三字分数

  • d 代表双字母得分

  • t 代表三字母得分

  • X 代表中心星

也就是说,您的确切输出必须是

T..d...T...d..T
.D...t...t...D.
..D...d.d...D..
d..D...d...D..d
....D.....D....
.t...t...t...t.
..d...d.d...d..
T..d...X...d..T
..d...d.d...d..
.t...t...t...t.
....D.....D....
d..D...d...D..d
..D...d.d...D..
.D...t...t...D.
T..d...T...d..T

(可选)后跟换行符。

以字节为单位的最短代码获胜。


为什么X*来代表的明星?:o
Fatalize

6
*太高太强大了。
加尔文的爱好

为什么不呢?:D
mbomb007'9

5
@ mbomb007在ASCII艺术挑战中使用非ASCII字符?异端
路易斯·门多

Answers:


16

MATL59 54 52字节

4t:g2I5vXdK8(3K23h32h(H14(t!XR+8: 7:Pht3$)'DtdTX.'w)

在线尝试!

说明

该代码遵循三个主要步骤:

  1. 生成8x8矩阵

    4 0 0 3 0 0 0 4
    0 1 0 0 0 2 0 0
    0 0 1 0 0 0 3 0
    3 0 0 1 0 0 0 3
    0 0 0 0 1 0 0 0
    0 2 0 0 0 2 0 0
    0 0 3 0 0 0 3 0
    4 0 0 3 0 0 0 5
    
  2. 将其扩展到15x15矩阵

    4 0 0 3 0 0 0 4 0 0 0 3 0 0 4
    0 1 0 0 0 2 0 0 0 2 0 0 0 1 0
    0 0 1 0 0 0 3 0 3 0 0 0 1 0 0
    3 0 0 1 0 0 0 3 0 0 0 1 0 0 3
    0 0 0 0 1 0 0 0 0 0 1 0 0 0 0
    0 2 0 0 0 2 0 0 0 2 0 0 0 2 0
    0 0 3 0 0 0 3 0 3 0 0 0 3 0 0
    4 0 0 3 0 0 0 5 0 0 0 3 0 0 4
    0 0 3 0 0 0 3 0 3 0 0 0 3 0 0
    0 2 0 0 0 2 0 0 0 2 0 0 0 2 0
    0 0 0 0 1 0 0 0 0 0 1 0 0 0 0
    3 0 0 1 0 0 0 3 0 0 0 1 0 0 3
    0 0 1 0 0 0 3 0 3 0 0 0 1 0 0
    0 1 0 0 0 2 0 0 0 2 0 0 0 1 0
    4 0 0 3 0 0 0 4 0 0 0 3 0 0 4
    
  3. 'DtdTX.'用该矩阵索引字符串以产生所需的结果。

步骤1

4        % Push 4
t:       % Duplicate, range: pushes [1 2 3 4]
g        % Logical: convert to [1 1 1 1]
2I5      % Push 2, then 3, then 5
v        % Concatenate all stack vertically into vector [4 1 1 1 1 2 3 5]
Xd       % Generate diagonal matrix from that vector

现在我们需要填充非零非对角线条目。我们将只填充对角线以下的内容,然后利用对称性填充其他内容。

为了填充每个值,我们使用线性索引(请参阅此答案,长度为12的代码段)。这意味着访问矩阵就好像它只有一个维度一样。对于8×8矩阵,线性索引的每个值都引用一个条目,如下所示:

1   9         57
2  10         58
3  11
4  
5  ...       ...
6  
7             63
8  16 ... ... 64

因此,以下将值4分配给左下方的条目:

K        % Push 4
8        % Push 8
(        % Assign 4 to the entry with linear index 8

值3的代码与此类似。在这种情况下,索引是一个向量,因为我们需要填写几个条目:

3        % Push 3
K        % Push 4
23h      % Push 23 and concatenate horizontally: [4 23]
32h      % Push 32 and concatenate horizontally: [4 23 32]
(        % Assign 4 to the entries specified by that vector

对于2:

H        % Push 2
14       % Push 14
(        % Assign 2 to that entry

现在我们有了矩阵

4 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0
0 0 1 0 0 0 0 0
3 0 0 1 0 0 0 0
0 0 0 0 1 0 0 0
0 2 0 0 0 2 0 0
0 0 3 0 0 0 3 0
4 0 0 3 0 0 0 5

为了填充上半部分,我们利用对称性:

t!       % Duplicate and transpose
XR       % Keep the upper triangular part without the diagonal
+        % Add element-wise

第2步

现在,堆栈包含第1步得出的8×8矩阵。要扩展此矩阵,我们这次在二维中使用索引。

8:       % Push vector [1 2 ... 7 8]
7:P      % Push vector [7 6 ... 1]
h        % Concatenate horizontally: [1 2 ... 7 8 7 ... 2 1]. This will be the row index
t        % Duplicate. This will be the column index
3$       % Specify that the next function will take 3 inputs
)        % Index the 8×8 matrix with the two vectors. Gives a 15×15 matrix

第三步

堆栈现在包含第2步得出的15×15矩阵。

'DtdTX.' % Push this string
w        % Swap the two elements in the stack. This brings the matrix to the top
)        % Index the string with the matrix

这真的非常非常酷。
AdmBorkBork

我通常喜欢这个答案,尽管当您使用8个字符来创建长度为8的矢量时,它有点“痒”。您是否考虑过通过数学序列获得数字?尚未发现任何甜蜜的东西,但尤其是最后7个显示出如此漂亮的图案。例如ceil((1:7)^
4/500

@DennisJ谢谢!是的,感觉太过分了。我会稍后再尝试,现在通过电话
Luis Mendo

8

Ruby,103 97字节

感谢Mitch Schwartz在迭代方面改进了6个字节。

a=(-7..7).map &:abs
a.map{|i|puts a.map{|j|(d=i%7-j%7)%4<1?'X d t DTDdDdDtT d'[i+j+d*d/3]:?.}*''}

以下是我原始答案的类似但明显不同的方法。与以前一样,我们使用一个事实,i%7-j%7即等于0或4的情况下必须打印一个字母。但是在这里,我们存储了该差异,d并使用公式i+j+d*d/3给出了该特定彩色正方形唯一(最大对称)的整数。然后,我们只是在魔术字符串中查找它。

只是为了好玩:这种方法的C版本,120字节

z,i,j,d;f(){for(z=240;z--;)i=abs(z%16-8),j=abs(z/16-7),putchar(i-8?(d=i%7-j%7)%4?46:"X d t DTDdDdDtT d"[i+j+d*d/3]:10);}

红宝石,115个 113字节

借助Value Ink,节省了2个字节。

(k=-7..7).map{|y|k.map{|x|i=x.abs;j=y.abs
$><<=(i%7-j%7)%4<1?"#{'XdTdT'[(i+j)/3]}dtDDDD"[[i%7,j%7].min]:?.}
puts}

说明

原点被认为是木板的中心。

如果正方形的x和y坐标的大小相同或相差4,则必须打印字母。唯一的例外是在板的外边缘,但它们遵循与图板中心行/列相同的样式板,因此如果我们将x和y坐标取模7,则可以使用相同的条件。

显示字母的选择基于最小幅度的坐标。以这种方式,在(1,5)和(2,6)的一倍和三倍遵循相同的规则如在(1,1)和(2,2),并从7字符串获得"#{formula}dtDDDD"这并不包括所有的变化对于边线和中心线正方形,因此字符串的第一个字符是根据公式计算的'XdTdT'[(i+j)/3]

(k=-7..7).map{|y|
  k.map{|x|
    i=x.abs;j=y.abs
    print (i%7-j%7)%4<1?      #IF this expression is true print a letter 
    "#{'XdTdT'[(i+j)/3]       #select 1st character of magic string where [i%7,j%7].min==0 
     }dtDDDD"[[i%7,j%7].min]: #remaining 6 characters of magic string for diagonal
    ?.                        #ELSE print .
  }
  puts                        #at the end of the row print a newline
}

(k=-7..7).map{|y|k.map{...比double -7.upto(7)技术短2个字节。
价值墨水

进行了一些修改,以节省6个字节:a=(-7..7).map &:abs;a.map{|i|puts a.map{|j|(d=i%7-j%7)%4<1?'X d t DTDdDdDtT d'[i+j+d*d/3]:?.}*''}
Mitch Schwartz

7

brainfuck598个 596 590字节

欢迎打高尔夫球。

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

说明

将磁带初始化为[10 116 68 46 100 84 92],[nl D D]。d T \]

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

然后,此处的每一行都打印电路板的一行。
中线也减少92 to 88 i.e. \ to X

.<<..>.<...>>.<<...>.<..>>.<<<<<.
>>>.<.>...<<.>>...<<.>>...<.>.<<<.
>>>..<.>...>.<.>.<...<.>..<<<.
>>>>.<..<.>...>.<...<.>..>.<<<<.
>>>....<.>.....<.>....<<<.
>>>.<<.>>...<<.>>...<<.>>...<<.>>.<<<.
>>>..>.<...>.<.>.<...>.<..<<<.
>>>>>.<<..>.<...>>>----.<<<...>.<..>>.<<<<<.
>>>..>.<...>.<.>.<...>.<..<<<.
>>>.<<.>>...<<.>>...<<.>>...<<.>>.<<<.
>>>....<.>.....<.>....<<<.
>>>>.<..<.>...>.<...<.>..>.<<<<.
>>>..<.>...>.<.>.<...<.>..<<<.
>>>.<.>...<<.>>...<<.>>...<.>.<<<.
>>>>>.<<..>.<...>>.<<...>.<..>>.

在线尝试!


1
高炉的秘诀:不要在高炉上高尔夫。不错的策略。
Magic Octopus Urn

5

PowerShell v2 +,147字节

($x='T..d...T...d..T')
($y='.D...t..','..D...d.','d..D...d','....D...','.t...t..','..d...d.'|%{$_+-join$_[6..0]})
$x-replace'.T.','.X.'
$y[5..0]
$x

利用默认 Write-Output程序执行结束时处理数组的方式(即,它在元素之间插入换行符)。可能是产生董事会中间部分的更好方法-我仍在努力。

第一行输出电路板的顶行,也将其存储在 $x备后用。

下一行通过将每条双词行的左半部分作为镜像来生成所有双字行( -join$_[6..0]语句)并将它们存储为array中的元素$y

下一行是中间行,中间有一行X,这要感谢-replace

下一行输出 $y以相反的顺序,为我们提供了底部的双字行。

最后一行$x再次出现。

PS C:\Tools\Scripts\golfing> .\draw-empty-scrabble-board.ps1
T..d...T...d..T
.D...t...t...D.
..D...d.d...D..
d..D...d...D..d
....D.....D....
.t...t...t...t.
..d...d.d...d..
T..d...X...d..T
..d...d.d...d..
.t...t...t...t.
....D.....D....
d..D...d...D..d
..D...d.d...D..
.D...t...t...D.
T..d...T...d..T

5

> <>(鱼),153字节

\!o;!?l
\'T..d...T...d..T'a'.D...t...t...D.'a'..D...d.d...D..'a'd..D...d...D..d'a'....D.....D....'a'.t...t...t...t.'a'..d...d.d...d..'a'T..d...'
\'X/'02p

一种可怕的,糟糕的,低效的做事方式。当前正在研究通过适当地水平和垂直镜像来缩短它的方法。

在线尝试!(如果您不想一整天都在那儿,请确保将执行速度设置为“最大”或在没有动画的情况下运行。)


4

C,146个 145 142 138字节

i,r,c;main(){for(;i<240;)r=abs(i/16-7),c="T..12..0..12..0"[r+7-abs(i%16-7)],putchar(++i%16?c&4?c:"Xd.dd.tt.D..D.dD.dD.tTd."[c%4+r*3]:10);}

在线尝试!

Level River St节省了1个字节 5个字节

这利用了板的对角线图案进行编码。特别是,如果我们沿木板左上象限对齐对角线,则会得到:

       T..d...T
      .D...t..
     ..D...d.
    d..D...d
   ....D...
  .t...t..
 ..d...d.
T..d...X

...许多专栏现在排成一行。如果我们以这种方式对列进行编码:

       0..12..0 y/012/Td./
      .0..12..  y/012/D.t/
     ..0..12.   y/012/D.d/
    2..0..12    y/012/D.d/
   12..0..1     y/012/D../
  .12..0..      y/012/tt./
 ..12..0.       y/012/dd./
T..12..0        y/012/Xd./

...然后木板样式可以折叠成15个字符串: T..12..0..12..0 ; 我们只需要为每行设置正确的映射。

考虑到这一点,这是带有注释的扩展版本:

i,r,c;
main() {
   for(;i<240;)  // one char per output including new line
   r=abs(i/16-7) // row; goes from 7 to 0 and back to 7.
   , c="T..12..0..12..0"[r+7-abs(i%16-7)] // pattern char
   , putchar(++i%16 // if this is 0 we need a new line
   ? c&4 // hash to distinguish 'T' and '.' from '0', '1', '2'
     ? c // print 'T' and '.' literally
     : "Xd.dd.tt.D..D.dD.dD.tTd."[c%4+r*3] // otherwise look up replacement char
   : 10 // print the new line
   );
}

非常好。1.您可以提交函数而不是程序,所以i,r,c;f()很好。2 (i%16-7)%8.-> i%16-7&73.我认为c-48-> c%4有效,不是吗?
水平河圣

糟糕,功能必须是可重用的,因此在功能内部f()需要附加的i=0内容,因此不会保存任何内容。
水平河圣

感谢您的评论!2也不起作用(%8使用实现的负模将%16值0..15 &7映射到-7..7;将其映射到0..7,0..7)。但是,是的,3绝对可行...如果有机会,我会更新。
H Walters

@LevelRiverSt Mea culpa; 2仍然不能严格起作用,但是无论如何我都不需要这些东西。
H Walters

3

05AB1E57 53字节

•jd]31‚ŽÔc¦Ïïì¹Ep.Üì8Ìa;“•6B4ÝJ".TdDt"‡5'.3×:Â'Xý15ô»

使用CP-1252编码。在线尝试!


说明(过时)

•4ç“–šã&$W§ñçvßÖŠ_æá_VFÛÞýi~7¾¬ÏXôc•5B解压缩到这个号码:

1002000100020010400030003000400040002020004002004000200040020000400000400000300030003000300020002020002001002000

使用4ÝJ".TdtD"‡,我们将大量翻译以下内容:

0 -> .
1 -> T
2 -> d
3 -> t
4 -> D

我们将整个字符串分为两部分,将字符串和相反的字符串留在堆栈上,并"X"使用进行连接ý。我们使用th 15ô代码将整个字符串分成15个部分,并使用换行符连接整个数组»


û€û应该是内置的;)。
Magic Octopus Urn'Mar

2

Python 3,138个字节

d=lambda s:s+s[-2::-1]
print(*d(list(map(d,'T..d...T .D...t.. ..D...d. d..D...d ....D... .t...t.. ..d...d. T..d...X '.split()))),sep='\n')

更改list(map(A))[*map(A)],保存3个字节(需要Python 3.5+)。
shooqie's

2

05AB1E49 44字节

•1nÑ=}íge/Þ9,ÑT‰yo¬iNˆå•6B8ôû€û»5ÝJ".TtdDX"‡

在线尝试!

解释:

推: 1003000104000200004000303004000300004000020002000030003010030005

分成8个块,分别进行Palindromize。

再次Palindromize。

用字符替换数字。


其他想法(有人可以在MATL中尝试一下)

看到一切都被认为在两者之间有一段时期...

计算每片之间的零个数:

1003000104000200004000303004000300004000020002000030003010030005
^  ^   ^ ^   ^    ^   ^ ^  ^   ^    ^    ^   ^    ^   ^ ^  ^   ^

131424334342233135 => w\F6ß¿

以零计数运行:

23134312344343123 => ì:¼˜¾

然后,您将它们解密并转置在一起。

在05AB1E中使用它们(导致+5字节增加):

05AB1E,27个字节

•w\F6ß¿•6BS•ì:¼˜¾•5BS0ׂøJJ

试试吧...


元高尔夫条目:

05AB1E,104个字节

•G¨J´JÏÍ?»"”Ö3úoÙƒ¢y”vf%¯‚6À°IÕNO’Å2Õ=ÙŠxn®žÑŸ¶¼t¨š,Ä]ÓŽÉéȺÂ/ø‡ŸÖ|e³J—Ë'~!hj«igċ΂wî’©•7BžLR"
.DTXdt"‡

试试吧!

元golfed用我的荟萃高尔夫球手ASCII艺术: https://tio.run/nexus/05ab1e#JY9NSgNBEIWvUo4/qAQxyfi30yAioiAiuBM6M9U9DT3doao7ccBFrhI3ooss3QguJniRXCR2x01RfK9479Xqtf2@XHy2H78/tw/L6aydq8VXr5sPsuX0LeP1jCwbJD3r54v3dp5mFGbZzWp1wXBPyLpE6@GRQj0C1spiCQJ4gjjSVgG@YBG8HiM4KpHAWbgiXYqmA1wF79ONrxCGa5nBOyCUQSEyCFuCi2LEklwNjGO0YAQpNA3cBTa6hsIF60kjd9Y@jAWhF9SAk1C5Gk1yiTSQ9g1MBKcKAp4q7RGuXWCMFlYioS3iKowBhf@9Kh2DNbEHGSIexhSZeDRIUcq4oTDxDS09aAsjZ3TRHGycb25tP@/s7@51e/386Pjk9OzwDw


1

Javascript(ES6),150个字节

_=>(r='',"T2d3T3d2T.D3t3t3D3D3d.d3D2d2D3d3D2d4D5D5t3t3t3t3d3d.d3d2T2d3".replace(/./g,c=>(c=+c?'.'.repeat(c):c,r=c+r,c))+'X'+r).match(/.{15}/g).join`
`

怎么运行的

该字符串"T2d3T3d2T.D3t3t3D3D3d.d3D2d2D3d3D2d4D5D5t3t3t3t3d3d.d3d2T2d3"从左上角到“ X”之前的正方形描述了木板,连续的空正方形编码为数字。该replace()功能既可以解开空的正方形,也可以r为板的底部构建镜像字符串。然后将两个部分放在一起,每15个字符插入回车符一次。

演示版

let f =
_=>(r='',"T2d3T3d2T.D3t3t3D3D3d.d3D2d2D3d3D2d4D5D5t3t3t3t3d3d.d3d2T2d3".replace(/./g,c=>(c=+c?'.'.repeat(c):c,r=c+r,c))+'X'+r).match(/.{15}/g).join`
`
console.log(f())


1

JavaScript(ES6),221字节

f=
_=>(a=[...Array(15)].map(_=>Array(15).fill`.`),r=([c,i,j])=>[a[i][j]=a[k=14-i][j]=a[i][j=14-j]=a[k][j]=c,j,i],[..."TDDDDtdX"].map((c,i)=>r([c,i,i])),"d30t51d62d73T70".replace(/.../g,s=>r(r(s))),a.map(a=>a.join``).join`
`)
;o.textContent=f()
<pre id=o>

自从我遇到麻烦创建此代码以来,我想我还是应该发布它,即使有明显可用的解决方案也是如此。


1

C 234字节

#define g(t) while(i++<8)putchar(*b++);b-=2;--i;while(--i>0)putchar(*b--);putchar('\n');b+=t;
char*r="T..d...T.D...t....D...d.d..D...d....D....t...t....d...d.T..d...X";i;f(){char*b=r;do{g(9);}while(*b);b-=16;do{g(-7);}while(b>=r);}

这是输出:

T..d...T...d..T
.D...t...t...D.
..D...d.d...D..
d..D...d...D..d
....D.....D....
.t...t...t...t.
..d...d.d...d..
T..d...X...d..T
..d...d.d...d..
.t...t...t...t.
....D.....D....
d..D...d...D..d
..D...d.d...D..
.D...t...t...D.
T..d...T...d..T

1

木炭,33字节(无​​竞争)

该答案的全部功劳归@DLosc

T↑↑↘tdd↗→→↖XdtDDDD↓T..d‖O⟦↗→↓⟧UB.

在线尝试!

详细

Print("T")
Move(:Up)
Move(:Up)
Print(:DownRight, "tdd")
Move(:UpRight)
Move(:Right)
Move(:Right)
Print(:UpLeft, "XdtDDDD")
Print(:Down, "T..d")
ReflectOverlap([:UpRight, :Right, :Down])
SetBackground(".")

在线尝试!


它具有对角线打印功能,是应对这一挑战的理想工具。+1(也很
高兴

0

Haskell,114个字节

g=(++)<*>reverse.init
unlines$g$g<$>words"T..d...T .D...t.. ..D...d. d..D...d ....D... .t...t.. ..d...d. T..d...X"

g在非pointfree版本中是g x = x ++ (reverse (init x))。每(半)行应用一次,然后在结果上再次应用。


0

sh + coreutils,119个字节

这是一个二进制文件。显示为十六进制转储:

00000000  74 61 69 6c 20 2d 63 39  34 20 24 30 7c 67 75 6e  |tail -c94 $0|gun|
00000010  7a 69 70 0a 65 78 69 74  0a 1f 8b 08 00 2e ec ca  |zip.exit........|
00000020  57 00 03 65 4f c9 0d c0  30 08 fb 7b 18 4f 91 11  |W..eO...0..{.O..|
00000030  fc e8 00 1e a1 fb ab 08  68 a4 90 07 60 d9 98 43  |........h...`..C|
00000040  a4 49 8a 59 05 ae 40 6f  c7 22 98 84 b3 29 10 fc  |.I.Y..@o."...)..|
00000050  13 59 1d 7a 11 9d b1 bd  15 a8 56 77 26 54 c4 b3  |.Y.z......Vw&T..|
00000060  f7 0d fd f6 9f f3 ef fd  e7 7d f3 7e 8d ff 3e 05  |.........}.~..>.|
00000070  57 d9 a0 f0 00 00 00                              |W......|
00000077

这是base64表单,因此您可以复制/粘贴它:

begin-base64 755 test.sh
dGFpbCAtYzk0ICQwfGd1bnppcApleGl0Ch+LCAAu7MpXAANlT8kNwDAI+3sY
T5ER/OgAHqH7qwhopJAHYNmYQ6RJilkFrkBvxyKYhLMpEPwTWR16EZ2xvRWo
VncmVMSz9w399p/z7/3nffN+jf8+BVfZoPAAAAA=
====

0

Ç 230个 228字节

char *s="T.D..Dd..D....D.t...t..d...dT..d...X";
int x,y,a,b;
#define X(N) {putchar(s[a]);N y<=x?1:y;}
#define P for(y=1;y<8;y++)X(a+=)for(y--;y+1;y--)X(a-=)puts("");
main(){for(;x<8;x++){a=b+=x;P}for(x=6;x+1;x--){a=b-=(x+1);P}}

在ideone上尝试

这是为了改进原始的C版本,该版本在C阵列中存储了四分之一的电路板。不像我希望的那么短。此版本仅存储了八分之一的电路板。

取消高尔夫:

char *s="T.D..Dd..D....D.t...t..d...dT..d...X";
int x,y,a,b;
main(){
    for(x = 0; x < 8; x++){
        a=b+=x;
        for(y = 1; y < 8; y++){
            putchar(s[a]);
            a += y<=x ? 1 : y;
        }
        for(y--; y >= 0; y--){
            putchar(s[a]);
            a -= y<=x ? 1 : y;
        }
        puts("");
    }
    for(x=6; x >= 0; x--){
        a=b-=(x+1);
        for(y = 1; y < 8; y++){
            putchar(s[a]);
            a += y<=x ? 1 : y;
        }
        for(y--; y >= 0; y--){
            putchar(s[a]);
            a-= y<=x ? 1 : y;
        }
        puts("");
    }
}

0

GNU sed,219205字节

s/$/T..d...T...d..T/p;h
s/.*/.D...t...t...D./p;G;h
s/.*/..D...d.d...D../p;G;h
s/.*/d..D...d...D..d/p;G;h
s/.*/....D.....D..../p;G;h
s/.*/.t...t...t...t./p;G;h
s/.*/..d...d.d...d../p;G;h
s/.*\n//;s/T/X/2p;g

利用板的镜像对称性,后半部分是第一个以相反顺序存储在容纳空间中的半个。

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.