วาดกระดาน Scrabble เปล่า


28

บอร์ดScrabbleมาตรฐานคือ 15 × 15 ตารางช่องว่างเพื่อวางแผ่นตัวอักษร ช่องว่างส่วนใหญ่จะว่างเปล่า แต่บางพื้นที่เป็นคะแนนคำสองคำ (สีชมพู) คะแนนสามคำ (สีแดง) คะแนนตัวอักษรคู่ (สีฟ้าอ่อน) และคะแนนตัวอักษรสามตัว (สีน้ำเงิน) โดยปกติแล้วจะมีดาวอยู่ตรงกลาง (ซึ่งนับเป็นคะแนนคำคู่)

บอร์ดข่วน

เขียนโปรแกรมหรือฟังก์ชั่นที่ส่งออกบอร์ด Scrabble แบบมาตรฐานเปล่าในรูปแบบ 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
ทำให้เสียชีวิต

6
*สูงเกินไปและยิ่งใหญ่
งานอดิเรกของ Calvin

ทำไมไม่? : D
mbomb007

5
@ mbomb007 ไม่ใช่ ASCII อักขระในความท้าทายศิลปะ ASCII? นอกรีต !
Luis Mendo

คำตอบ:


16

MATL , 59 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

สแต็กตอนนี้มีเมทริกซ์ 8 × 8 ซึ่งเป็นผลมาจากขั้นตอนที่ 1 ในการขยายเมทริกซ์นี้เราใช้การจัดทำดัชนีคราวนี้เป็นสองมิติ

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

สแต็กตอนนี้มีเมทริกซ์ 15 × 15 ที่เกิดจากขั้นตอนที่ 2

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

Ruby, 115 113 ไบต์

บันทึกได้ 2 ไบต์ด้วย Value Ink

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

ตัวเลือกของตัวอักษรที่ปรากฏขึ้นอยู่กับพิกัดของขนาดต่ำสุด ด้วยวิธีนี้ double และ triples ที่ (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]:?.}*''}
Mitch Schwartz

7

brainfuck , 598 596 590 ไบต์

ยินดีต้อนรับเคล็ดลับการเล่นกอล์ฟ

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

คำอธิบาย

เริ่มต้นเทปไปที่[10 116 68 46 100 84 92]เช่น[nl t D d T \]

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

แต่ละบรรทัดที่นี่จากนั้นพิมพ์หนึ่งบรรทัดของบอร์ด
เส้นกลางก็ลดลงเช่นกัน92 to 88 i.e. \ to X

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

ลองออนไลน์!


1
เคล็ดลับสำหรับ BF: อย่าเล่นกอล์ฟ ascii ใน BF; กลยุทธ์ที่ดีแม้ว่า
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เพื่อใช้ในภายหลัง

บรรทัดถัดไปสร้างทุกสายดับเบิล Word โดยการซ้าย "ครึ่งหนึ่ง" ของแต่ละสะท้อนให้พวกเขา ( -join$_[6..0]คำสั่ง) $yและเก็บไว้เป็นองค์ประกอบในอาร์เรย์

บรรทัดถัดไปเป็นแถวกลางมีที่อยู่ตรงกลางขอบคุณX-replace

บรรทัดถัดไปแสดงผล$yในลำดับกลับกันทำให้เราได้บรรทัด Double-Word ที่ด้านล่าง

บรรทัดสุดท้ายเป็นเพียง$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);}

ลองออนไลน์!

บันทึก 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

05AB1E , 57 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 TH ใช้รหัสและเข้าร่วมมากมายทั้งการขึ้นบรรทัดใหม่โดยใช้15ô»


û€ûควรเป็น built-in;)
Magic Octopus Urn

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

05AB1E , 49 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

ลองมัน...


รายการ Meta-golfed:

05AB1E , 104 ไบต์

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

ลองมัน!

Meta-แข็งแรงเล่นกอล์ฟโดยใช้เมตานักกอล์ฟของฉันสำหรับศิลปะ 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()ฟังก์ชั่นทั้ง unpacks สี่เหลี่ยมที่ว่างเปล่าและสร้างสตริงกระจก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)
Kevin Cruijssen

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 ไบต์

นี่คือไฟล์ไบนารี แสดงเป็น 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}}

ลองในอุดมคติ

นี่คือความพยายามในการปรับปรุงเวอร์ชัน C ดั้งเดิมที่โพสต์ซึ่งมีจำนวนหนึ่งในสี่ของบอร์ดเก็บอยู่ในอาร์เรย์ C ไม่สั้นอย่างที่ฉันหวังไว้ รุ่นนี้มีหนึ่งในแปดของคณะกรรมการที่เก็บไว้

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 ไบต์

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.