Boş Scrabble Kurulu çizin


28

Standart bir Scrabble tahtası, harf karoları yerleştirmek için 15 × 15 boşluk ızgarasıdır. Boşlukların çoğu boştur, ancak bazıları çift kelime puanları (pembe), üçlü kelime puanları (kırmızı), çift mektup puanları (açık mavi) ve üçlü harf puanları (mavi). Genellikle merkezde bir yıldız vardır (çift kelimeli puan olarak sayılır).

Karalama tahtası

ASCII formunda standart, boş bir Scrabble kartı çıktısı alan bir program veya işlev yazın;

  • . boş bir alanı temsil eder

  • D bir çift kelime puanı temsil eder

  • T üçlü kelime puanı temsil eder

  • d çift ​​harfli bir skoru gösterir

  • t üçlü harf puanını gösterir

  • X merkez yıldızı temsil eder

Yani, tam çıktınız olmalı

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

isteğe bağlı olarak takip eden bir yeni hat izler.

Bayt cinsinden en kısa kod kazanır.


Yıldızı neden temsil Xetmiyoruz *? : o
Eylül’de

6
*çok yüksek ve güçlü.
Calvin'in Hobileri

Neden olmasın ? : D
mbomb007

5
@ mbomb007 Bir ASCII-art mücadelesinde ASCII olmayan karakter? Sapkınlık !
Luis Mendo

Yanıtlar:


16

MATL , 59 54 52 bayt

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

Çevrimiçi deneyin!

açıklama

Kod üç ana adımı izler:

  1. 8x8 matrisini oluşturun

    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'lik matrise genişlet

    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.'İstenen sonucu elde etmek için dizgiyi bu matris ile indeksleyin.

Aşama 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

Şimdi sıfır olmayan çapraz girişleri doldurmamız gerekiyor. Sadece köşegen altındakileri doldurup, diğerlerini doldurmak için simetriyi kullanacağız.

Her bir değeri doldurmak için doğrusal indeksleme kullanıyoruz ( bu cevaba bakınız , uzunluk-12 pasajı). Bu, tek bir boyuta sahipmiş gibi matrise erişmek demektir. 8 × 8'lik bir matris için, doğrusal dizinin her değeri aşağıdaki gibi bir girişi ifade eder:

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

Bu nedenle, aşağıdaki 4, sol alt girişe 4 değerini atar:

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

3 değerinin kodu benzerdir. Bu durumda, dizin bir vektördür, çünkü birkaç girişi doldurmamız gerekiyor:

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

Ve 2 için:

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

Şimdi matrisimiz var

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

Üst yarıyı doldurmak için simetriden yararlanırız:

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

Adım 2

Yığın şimdi adım 1'den kaynaklanan 8 × 8 matrisi içeriyor. Bu matrisi genişletmek için bu sefer iki boyutta indeksleme kullanıyoruz.

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

Aşama 3

Yığın şimdi adım 2'den kaynaklanan 15 × 15 matrisini içeriyor.

'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

Bu gerçekten, gerçekten, harika.
AdmBorkBork

Bu cevabı genel olarak beğeniyorum, ancak uzunluğu 8 olan bir vektör oluşturmak için 8 karakter kullanırken biraz kaşınıyor. Henüz tatlı bir şey bulamadım, ancak özellikle son 7 şovda çok hoş bir desen. Mesela tavan ((1: 7) ^
4/500

@DennisJ Teşekkürler! Evet, çok fazla hissettiriyor. Bunu daha sonra deneyeceğim, şimdi telefonda
Luis Mendo

8

Ruby, 103 97 bayt

Mitch Schwartz'a yinelemelerde 6 baytlık bir gelişme sağladığı için teşekkürler.

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]:?.}*''}

Aşağıdaki asıl cevaba benzer ama önemli ölçüde farklı bir yaklaşım. Daha önce olduğu gibi, i%7-j%70 veya 4'e eşitse bir harfin basılması gerektiği gerçeğini kullanırız . Fakat burada bu farkı depolarız dve i+j+d*d/3bu renkli kareye özgü (simetriye kadar) bir tam sayı vermek için formülü kullanırız . O zaman sihir dizisine bakarız.

Sadece eğlence için: Bu yaklaşımın C versiyonu, 120 bayt

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);}

Ruby, 115 113 bayt

Value Ink sayesinde 2 bayt kaydedildi.

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

açıklama

Menşei, yönetim kurulunun merkezi olarak kabul edilir.

Karenin x ve y koordinatlarının 4 ile aynı veya farklı büyüklükleri varsa, bir harf yazdırılmalıdır. Tek istisnalar, tahtanın dış kenarındadır, ancak bunlar, ana satırın / sütununun aynı satırını izler. pano, bu yüzden eğer x ve y modulo 7 koordinatlarını alırsak aynı koşulu kullanabiliriz.

Görüntülenen harf seçimi, minimum büyüklüğün koordinatına dayanır. Bu şekilde (1,5) ve (2,6) 'daki çiftler ve üçlüler, (1,1) ve (2,2)' deki aynı kuralı izler ve 7 karakterli dizgeden elde edilir. "#{formula}dtDDDD"Bu, tüm varyasyonları kapsamaz. kenar ve merkez çizgisi kareler için, dizenin ilk karakteri formülden hesaplanır '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{...çift -7.upto(7)tekniğinizden 2 bayt daha kısadır .
Değer Mürekkep

6 bayttan tasarruf etmek için birkaç değişiklik: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

brainfuck , 598 596 590 bayt

Golf ipuçları hoş geldiniz.

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

açıklama

Bandı [10 116 68 46 100 84 92] olarak başlatınız, yani [nd D. dT \]

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

Buradaki her satır daha sonra tahtanın bir satırını yazdırır.
Orta çizgi de azalır92 to 88 i.e. \ to X

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

Çevrimiçi deneyin!


1
BF için ipuçları: BF'de golf oynamayın; Yine de güzel bir strateji.
Magic Octopus Urn,

5

PowerShell v2 +, 147 bayt

($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-OutputProgram yürütmesinin sonunda varsayılanın dizileri nasıl ele aldığından faydalanır (yani, öğeler arasında yeni bir satır ekler). Tahtanın ortasını oluşturmak için daha iyi bir yol olabilir - Ben hala üzerinde çalışıyorum.

İlk satır, $xdaha sonra kullanılmak üzere depoda tutularak tahtanın üst satırını verir .

Bir sonraki satır, tüm Çift Kelimeli satırları, her birinin sol "yarısını" alarak, onları ( -join$_[6..0]ifadeyi) yansıtarak ve dizide elemanlar olarak saklayarak oluşturur $y.

Bir sonraki satır, orta satırda, Xortada, teşekkürler -replace.

Bir sonraki satır $yters sırayla çıkar ve bize alt Double-Word satırlarını verir.

Son satır $xyine geldi.

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

> <> (Balık), 153 Bayt

\!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

Bir şeyleri yapmanın korkunç, korkunç bir şekilde verimsiz yolu. Şu anda hem yatay hem de dikey olarak doğru şekilde aynalayarak kısaltmanın bir yolunu arıyorum.

Çevrimiçi deneyin! (Bütün gün orada olmak istemiyorsanız, yürütme hızını maksimuma ayarladığınızdan veya animasyon olmadan çalıştırdığınızdan emin olun.)


4

C, 146 145 142 138 bayt

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);}

Çevrimiçi deneyin!

Level River St sayesinde 1 byte 5 byte kurtarıldı

Bu kodlama için tahtanın köşegen düzenini kullanır. Özellikle, tahtanın sol üst kadranını alır ve köşegeni hizalarsak, şunları yaparız:

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

... sütunların çoğu şimdi sıraya giriyor. Sütunları bir satırda şu şekilde kodlarsak:

       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./

... sonra tahta deseni 15 karakterlik bir dizgeye bölünebilir T..12..0..12..0:; ve her satır için doğru haritalara ihtiyacımız var.

Bunu akılda tutarak, yorumlarla genişletilmiş bir sürüm:

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
   );
}

Çok hoş. 1. bir program yerine bir işlev gönderebilirsiniz, bu yüzden i,r,c;f()iyi. 2. (i%16-7)%8-> i%16-7&73. Bence c-48-> c%4işe yarıyor, değil mi?
Level River St

Hata! Üzgünüz, işlevler yeniden kullanılabilir olmalı, bu nedenle işlev içinde f()bir eklenti gerektirecek i=0ve böylece hiçbir şey kaydetmeyecek.
Seviye River St

Yorumlarınız için teşekkürler! 2 de işe yaramayacak ( %8uygulamanın negatif modüllerini% 16, 0..15 ila -7.7 değerlerini eşlemek için kullanır; &7bunu 0..7.0..7 olarak eşler). Ama, evet, 3 kesinlikle işe yarayacak ... bir şans aldığımda güncellenecek.
H Walters

@ SevelRiverSt Mea culpa; 2 hala kesinlikle çalışmayacak, ama yine de buna ihtiyacım yoktu.
H Walters

3

05AB1E , 57 53 bayt

kod

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

CP-1252 kodlamasını kullanır . Çevrimiçi deneyin!


Açıklama (eski)

•4ç“–šã&$W§ñçvßÖŠ_æá_VFÛÞýi~7¾¬ÏXôc•5BBu sayıya açar:

1002000100020010400030003000400040002020004002004000200040020000400000400000300030003000300020002020002001002000

Bununla birlikte 4ÝJ".TdtD"‡, şu büyük sayıdakileri çeviririz:

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

Tüm dizgiyi çatallaştırır, dizeyi ve dizeyi yığında ters çevirir ve bunları "X"kullanarak birleştiririz ý. Bu dizeyi kullanarak tüm dizgiyi 15 parçaya 15ôböldük ve tüm diziyi kullanarak yeni satırları birleştirdik ».


û€ûbir yerleşik olmalıdır;).
Magic Octopus Urn,

2

Python 3, 138 bayt

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')

Değişim list(map(A))için [*map(A)], 3 bayt (Python gerektirir 3.5+) kaydeder.
shooqie

2

05AB1E , 49 44 bayt

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

Çevrimiçi deneyin!

Açıklaması:

İt: 1003000104000200004000303004000300004000020002000030003010030005

8 parçaya bölün, her birini palindromize edin.

Palindromize tekrar.

Sayıları karakterlerle değiştirin.


Diğer Fikir (Birisi bunu MATL'da deneyin)

HER ŞEY olarak görmek, aralarında bir süre kalması için garanti edilir ...

Her bir parça arasındaki sıfır sayısını sayın:

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

131424334342233135 => w\F6ß¿

Sıfır sayısının düşmesi koşular:

23134312344343123 => ì:¼˜¾

O zaman şifrelerini çözer ve birlikte transpoze ederdin.

Bunları 05AB1E'de kullanma (+5 baytlık bir artışla sonuçlanır):

05AB1E , 27 bayt

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

Dene...


Meta golf girişi:

05AB1E , 104 bayt

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

Dene!

Meta-golfed ASCII sanat için benim meta golfçü kullanarak: https://tio.run/nexus/05ab1e#JY9NSgNBEIWvUo4/qAQxyfi30yAioiAiuBM6M9U9DT3doao7ccBFrhI3ooss3QguJniRXCR2x01RfK9479Xqtf2@XHy2H78/tw/L6aydq8VXr5sPsuX0LeP1jCwbJD3r54v3dp5mFGbZzWp1wXBPyLpE6@GRQj0C1spiCQJ4gjjSVgG@YBG8HiM4KpHAWbgiXYqmA1wF79ONrxCGa5nBOyCUQSEyCFuCi2LEklwNjGO0YAQpNA3cBTa6hsIF60kjd9Y@jAWhF9SAk1C5Gk1yiTSQ9g1MBKcKAp4q7RGuXWCMFlYioS3iKowBhf@9Kh2DNbEHGSIexhSZeDRIUcq4oTDxDS09aAsjZ3TRHGycb25tP@/s7@51e/386Pjk9OzwDw


1

Javascript (ES6), 150 bayt

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

Nasıl çalışır

Dize "T2d3T3d2T.D3t3t3D3D3d.d3D2d2D3d3D2d4D5D5t3t3t3t3d3d.d3d2T2d3"onun üstünden tahta basamak olarak kodlanmış ardışık boş kareler ile, sadece 'X' önce kareye sol köşesinde açıklar. Bu replace()işlev hem boş kareleri açar hem rde tahtanın tabanı için ayna dizesini oluşturur . Sonra her iki parça bir araya getirilir ve her 15 karakterden bir satır başı verilir.

gösteri

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 bayt

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>

Bunu yaratma sorununa gittiğimden beri, net bir şekilde üstün bir çözüm olsa da onu zaten göndereceğimi düşündüm.


1

C 234 Bayt

#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);}

İşte çıktı:

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

Kömür , 33 bayt (rekabetçi olmayan)

Bu cevap için tüm kredi @DLosc'a gider .

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

Çevrimiçi deneyin!

gereksiz sözlerle dolu

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(".")

Çevrimiçi deneyin!


Çapraz baskı yetenekleri ile bu zorluk için mükemmel bir araçtır. +1 (ve ASCII için böyle bir arka plan yöntemi görmek de harika)
Kevin Cruijssen

0

Haskell, 114 bayt

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"

gnon-pointfree bir versiyonunda g x = x ++ (reverse (init x)). Her bir (yarım) satırda bir kez ve sonuçta tekrar uygulanır.


0

sh + coreutils, 119 bayt

Bu bir ikili dosyadır. Hexdump olarak gösterilir:

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

İşte base64 formu. Böylece kopyalayıp yapıştırabilirsiniz:

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

0

C 230 228 Bayt

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 denemek

Bu, bir C dizisinde depolanan çeyrek kartı bulunan, yayınlanan orijinal C versiyonunu geliştirme girişimidir. Umduğum kadar kısa değil. Bu sürüm sadece kurulu olan sekizde birine sahiptir.

Ungolfed:

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, 219 205 bayt

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

Tahtanın ayna simetrisinden faydalanan ikinci yarı, tutma alanında geriye doğru sıralanan ilk yarısıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.