空のスクラブルボードを描く


28

標準的なスクラブルボードは、レタータイルを配置するための15×15グリッドのスペースです。ほとんどのスペースは空白ですが、一部は二重単語スコア(ピンク)、三重単語スコア(赤)、二重文字スコア(水色)、三重文字スコア(青)です。通常、真ん中に星があります(ダブルワードスコアとしてカウントされます)。

スクラブルボード

標準の空のスクラブルボードをASCII形式で出力するプログラムまたは関数を記述します。

  • . 空のスペースを表します

  • D ダブルワードスコアを表します

  • T トリプルワードスコアを表します

  • d 二重文字のスコアを表します

  • t 3文字のスコアを表します

  • 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
16

6
*高すぎて強力です。
カルビンの趣味

どうして?:D
mbomb007

5
@ mbomb007 ASCIIアートチャレンジの非ASCII文字?異端
ルイスメンドー

回答:


16

MATL59 54 52バイト

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

オンラインでお試しください!

説明

コードは3つの主要な手順に従います。

  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のスニペットを参照)。つまり、1つの次元しかないかのようにマトリックスにアクセスします。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マトリックスが含まれています。このマトリックスを拡張するには、今回は2次元のインデックスを使用します。

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

ステップ3

スタックには、ステップ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ありがとう!はい、感じすぎます。後で電話で試してみます
ルイスメンドー

8

ルビー、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%70または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異なる場合、文字を印刷する必要があります。唯一の例外はボードの外縁にありますが、これらは中央の行/列と同じパターンに従いますボードなので、7を法とするx座標とy座標を取得すると、同じ条件を使用できます。

表示される文字の選択は、最小の大きさの座標に基づきます。このようにして(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{...ダブル-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]:?.}*''}
ミッチシュワルツ

7

brainfuck598 596 590バイト

ゴルフのヒントを歓迎します。

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

説明

テープを[10 116 68 46 100 84 92]、つまり[nl t D ]に初期化します。d T \]

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

ここの各行は、ボードの1行を印刷します。
中間線も減少します92 to 88 i.e. \ to X

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

オンラインでお試しください!


1
BFのヒント:BFでゴルフをアスキーしないでください。しかし、素晴らしい戦略。
魔法のタコ

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]ステートメント)、配列として要素として格納することによって、すべてのダブルワード行を生成します$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ウォルターズ

@LevelRiverSt Mea culpa; 2はまだ厳密には機能しませんが、とにかくそのようなものは必要ありませんでした。
Hウォルターズ

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"を使用して結合しますý15ôコードを使用して文字列全体を15個に分割し、を使用して配列全体を改行で結合し»ます。


û€û組み込みである必要があります;)。
魔法のタコUr

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

2

05AB1E49 44バイト

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

オンラインでお試しください!

説明:

押す: 1003000104000200004000303004000300004000020002000030003010030005

8のチャンクに分割し、それぞれを回文化します。

もう一度回文します。

数字を文字に置き換えます。


その他のアイデア(誰かが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(また、ASCIIのようなバックグラウンドメソッドを見るとクールです)
ケビンクルーッセン

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非ポイントフリーバージョンではg x = x ++ (reverse (init x))です。(半)行ごとに1回適用され、結果に再度適用されます。


0

sh + coreutils、119バイト

これはバイナリファイルです。hexdumpとして表示:

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

C 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}}

イデオンで試してみてください

これは、ボードの4分の1がCアレイに格納されていたオリジナルのCバージョンを改善する試みです。私が望んでいたほど短くはありません。このバージョンには、ボードの8分の1しか保存されていません。

ゴルフをしていない:

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

ボードのミラー対称性を利用して、後半はホールドスペースに逆順で格納された最初の半分です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.