รูปหกเหลี่ยมที่เชื่อมต่อกับ ASCII


21

ภาพรวม

ให้รูปหกเหลี่ยมจำนวนหนึ่งจัดเรียงไว้ในรูปร่างที่เชื่อมต่อภายในขอบเขตของภาพศิลปะ 50 x 50 ASCII รูปร่างที่คุณเลือกนั้นสามารถเลือกได้ตามใจชอบไม่ว่าคุณจะชอบอะไรในการเล่นกอล์ฟตราบใดที่มันเชื่อมต่อกัน มันอาจจะมีรูหากพวกมันมีขนาดใหญ่กว่าหกเหลี่ยมหนึ่ง (มิฉะนั้นจำนวนของรูปหกเหลี่ยมจะไม่ชัดเจน)


แบบ

รูปหกเหลี่ยมทั้งหมดต้องอยู่ในรูปแบบต่อไปนี้ (ขนาดและการวางแนวนี้เท่านั้นที่ถูกต้อง):

 __
/  \
\__/    Note there are 2 underscores per horizontal edge.

รูปหกเหลี่ยมสองจุดเชื่อมต่อกันโดยตรงหากพวกเขาแบ่งปันขอบ:

 __               __
/  \__           /  \
\__/  \          \__/
   \__/    or    /  \
                 \__/

รูปหกเหลี่ยมสองอันไม่ได้เชื่อมต่อหากแบ่งปันเพียงจุดยอด:

 __  __
/  \/  \
\__/\__/

การแบ่งปันครึ่งหนึ่งของขอบยังไม่นับรวมเป็นสิ่งที่เชื่อมต่อ:

 __
/  \
\__/
 /  \
 \__/

คอลเลกชันของรูปหกเหลี่ยมจะถูกเชื่อมต่อหากมีเส้นทางจากรูปหกเหลี่ยมไปยังรูปอื่นใดโดยใช้รูปหกเหลี่ยมที่เชื่อมต่อโดยตรงเท่านั้น

หลุม

รูขนาดหกเหลี่ยมในคอลเล็กชั่นรูปหกเหลี่ยมที่เชื่อมต่อกันจะนับเป็นรูปหกเหลี่ยมดังนั้นชิ้นส่วนใด ๆ ของศิลปะ ASCII ที่ได้รับจะมีจำนวนรูปหกเหลี่ยมที่ชัดเจน

สิ่งนี้ไม่นับเป็นหลุมเนื่องจากหลุมที่คาดหวังเป็นรูปหกเหลี่ยมเดียว:

    __
 __/  \__
/  \__/  \
\__/  \__/
/  \__/  \
\__/  \__/
   \__/      7 hexagons (not 6 with a hole)

นี้ไม่นับเป็นหลุมเพราะมันไม่ตรงกับหกเหลี่ยมเดียว:

    __
 __/  \__
/  \__/  \__
\__/  \__/  \
/  \__   \__/
\__/  \__/  \
   \__/  \__/
      \__/      8 hexagons with a hole

อินพุตและเอาต์พุต

อินพุต

จำนวนเต็มตั้งแต่ 1 ถึง 255

เอาท์พุต

สตริงศิลปะ ASCII แสดงถึงจำนวนอินพุตของรูปหกเหลี่ยมที่เชื่อมต่อตามที่อธิบายไว้ข้างต้น

  • จำนวนแถว (สตริงย่อยที่คั่นด้วยบรรทัดใหม่) มีได้ไม่เกิน 50 ตัวรวมทั้งขึ้นบรรทัดใหม่ที่เป็นทางเลือกเพิ่มเติม
  • แถวไม่จำเป็นต้องมีความยาวเท่ากัน แต่แต่ละแถวต้องมีความยาวไม่เกิน 50
  • แถวที่มีความยาวเป็นศูนย์สามารถอยู่ด้านบนหรือด้านล่างของรูปร่างที่เชื่อมต่อโดยมีจำนวนแถวทั้งหมดไม่เกิน 50
  • แถวที่มีพื้นที่อย่างเดียวสามารถมีอยู่ด้านบนหรือด้านล่างของรูปร่างที่เชื่อมต่อโดยมีจำนวนแถวไม่เกิน 50
  • ช่องว่างสามารถปรากฏทางด้านซ้ายของรูปร่างโดยที่ความยาวของแถวไม่เกิน 50 (รูปร่างไม่จำเป็นต้องจัดชิดซ้าย)
  • ช่องว่างสามารถปรากฏทางด้านขวาของรูปร่างโดยมีความยาวของแถวไม่เกิน 50
  • อักขระใด ๆ ที่ไม่ได้เป็นส่วนหนึ่งของรูปร่างที่เชื่อมต่อจะต้องเป็นช่องว่างหรือบรรทัดใหม่

หากเอาต์พุตถูกต้องไม่จำเป็นต้องสอดคล้องกันจากการรันครั้งต่อไป

ตัวอย่าง

การป้อนข้อมูล: 6

ผลลัพธ์ที่ถูกต้อง:

 __    __    __
/  \__/  \__/  \__
\__/  \__/  \__/  \
   \__/  \__/  \__/

 __    __
/  \__/  \
\__/  \__/
/  \__/  \
\__/  \__/
   \__/

          __
 __      /  \
/  \__   \__/
\__/  \__/  \
   \__/  \__/
      \__/
      /  \
      \__/

เอาต์พุตไม่ถูกต้อง:

    __
 __/  \__
/  \__/  \
\__/  \__/
/  \__/  \
\__/  \__/
   \__/      Invalid for 6 as the centre hole counts as a 7th hexagon.

 __    __    __      __
/  \__/  \__/  \    /  \
\__/  \__/  \__/    \__/
   \__/  \__/                Invalid as the 6 hexagons are not connected.

 __    __    __  __
/  \__/  \__/  \/  \
\__/  \__/  \__/\__/
   \__/  \__/           Invalid as vertex touching does not count as connected.

 __    __       __
/  \__/  \     /  \
\__/  \__/     \__/
/  \__/  \
\__/  \__/
   \__/       Invalid as the 6 connected hexagons are not the only visible characters.

การชนะ

คำตอบที่ถูกต้องสั้นที่สุดในหน่วยไบต์ชนะ


ลีดเดอร์บอร์ด

(ใช้ตัวอย่างกระดานแต้มนำของ Martin )


ฉันกลัวว่าทุกคนจะใช้รูปแบบผลลัพธ์ตัวอย่างแรกเนื่องจากอาจใช้งานได้ง่ายที่สุด
ทำให้เสียชีวิต

1
@ รวบรวมตัวอย่างของฉันใช้งานได้กับอินพุต6เท่านั้น สำหรับการป้อนข้อมูลของ255รูปหกเหลี่ยมแนวนอนจะไม่พอดีกับศิลปะ 50 โดย 50 ASCII
trichoplax

คุณยังสามารถวนกลับและเติมบรรทัดด้านล่างทุกครั้งที่คุณถึงขีด จำกัด 50 ตัวอักษร
Fatalize

1
@Falize ความท้าทายคือการลดจำนวนไบต์ในรหัส ฉันไม่รังเกียจหากรูปแบบเรียบง่ายมันน่าสนใจที่จะเห็นว่าผู้คนลองและอะไรที่เหมาะกับภาษาที่แตกต่างกัน
trichoplax

@ สรุป: ฉันไม่รู้ว่ามันจะสั้นหรือไม่ แต่คำตอบที่ "น่าสนใจ" มากกว่านั้นอาจทำการค้นหาที่แท้จริงเพื่อดูว่าสามารถวางรูปหกเหลี่ยมและทำให้ได้ผลลัพธ์ที่น่าสนใจยิ่งขึ้น
Alex Van Liew

คำตอบ:


13

CJam, 64 57 55 ไบต์

" __
/  \
\__/"N/{_SS/\+_47>S3*f{\+}_2>\@?}q~(*]:..e>N*

ทดสอบที่นี่

สิ่งนี้จะสร้างรูปแบบต่อไปนี้แบบคอลัมน์ที่ฉลาด :

 __    __    __    __    __    __
/  \__/  \__/  \__/  \__/  \__/  \
\__/  \__/  \__/  \__/  \__/  \__/
/  \__/  \__/  \__/  \__/  \__/  \
\__/  \__/  \__/  \__/  \__/  \__/
/  \__/  \__/  \__/  \__/  \__/  \
\__/  \__/  \__/  \__/  \__/  \__/
/  \__/  \__/  \__/  \__/  \__/  \
\__/  \__/  \__/  \__/  \__/  \__/
/  \__/  \__/  \__/  \__/  \__/  \
\__/  \__/  \__/  \__/  \__/  \__/
/  \__/  \__/  \__/  \__/  \__/  \
\__/  \__/  \__/  \__/  \__/  \__/
/  \__/  \__/  \__/  \__/  \__/  \
\__/  \__/  \__/  \__/  \__/  \__/
/  \__/  \__/  \__/  \__/  \__/  \
\__/  \__/  \__/  \__/  \__/  \__/
/  \__/  \__/  \__/  \__/  \__/  \
\__/  \__/  \__/  \__/  \__/  \__/
/  \__/  \__/  \__/  \__/  \__/  \
\__/  \__/  \__/  \__/  \__/  \__/
/  \__/  \__/  \__/  \__/  \__/  \
\__/  \__/  \__/  \__/  \__/  \__/
/  \__/  \__/  \__/  \__/  \__/  \
\__/  \__/  \__/  \__/  \__/  \__/
/  \__/  \__/  \__/  \__/  \__/  \
\__/  \__/  \__/  \__/  \__/  \__/
/  \__/  \__/  \__/  \__/  \__/  \
\__/  \__/  \__/  \__/  \__/  \__/
/  \__/  \__/  \__/  \__/  \__/  \
\__/  \__/  \__/  \__/  \__/  \__/
/  \__/  \__/  \__/  \__/  \__/  \
\__/  \__/  \__/  \__/  \__/  \__/
/  \__/  \__/  \__/  \__/  \__/  \
\__/  \__/  \__/  \__/  \__/  \__/
/  \__/  \__/  \__/  \__/  \__/  \
\__/  \__/  \__/  \__/  \__/  \__/
/  \__/  \__/  \__/  \__/  \__/  \
\__/  \__/  \__/  \__/  \__/  \__/
/  \__/  \__/  \__/  \__/  \__/  \
\__/  \__/  \__/  \__/  \__/  \__/
/  \__/  \__/  \__/  \__/  \__/
\__/  \__/  \__/  \__/  \__/  \
/  \__/  \__/  \__/  \__/  \__/
\__/  \__/  \__/  \__/  \__/  \
/  \__/  \__/  \__/  \__/  \__/
\__/  \__/  \__/  \__/  \__/  \
/  \__/  \__/  \__/  \__/  \__/
\__/  \__/  \__/  \__/  \__/

คำอธิบาย

นี่เป็นพื้นฐานของเคล็ดลับที่ยอดเยี่ยมของเดนนิสโดยใช้.e>ประกอบงานศิลปะ ASCII จากหลายชิ้น ดังที่เขากล่าว.e>เอาค่าสูงสุดสององค์ประกอบ (หรือสายอักขระ) และเนื่องจากช่องว่างมีรหัสอักขระต่ำสุดเราจึงสามารถใช้สิ่งนี้เพื่อกำหนดอักขระอื่น ๆ บนกริดสตริง นอกจากนี้หากทั้งสองอาร์เรย์ไม่มีความยาวเท่ากันองค์ประกอบภายนอกของอาร์เรย์ที่ยาวกว่าจะถูกคัดลอกโดยไม่มีการเปลี่ยนแปลง ซึ่งหมายความว่ารูปแบบที่แตกต่างกันไม่จำเป็นต้องมีขนาดเท่ากัน เมื่อต้องการใช้นี้เพื่ออาร์เรย์สองมิติ (เพราะเราไม่ต้องการที่จะแทรกบรรทัดใหม่จนกว่าจะถึงปลายมาก) เราใช้คู่กับเส้นซึ่งจะช่วยให้.e>..e>

แนวคิดพื้นฐานของรหัสคือการสร้างNสำเนาของรูปหกเหลี่ยมเดียวย้ายไปยังตำแหน่งที่เหมาะสม เรา "ย้าย" หกเหลี่ยมในแนวตั้งโดยการเติมบรรทัดว่างและแนวนอนโดยการเติมช่องว่าง เมื่อเราทำเสร็จแล้วเราพับสำเนาทั้งหมดเข้าด้วยกันโดยใช้สิ่งที่สวยงาม:..e>(อาจเป็นโอเปอเรเตอร์ที่ยาวที่สุดที่ฉันเคยใช้ในโปรแกรม CJam)

นี่คือรหัส:

" __
/  \
\__/"N/    e# Get a 2D character grid of the hexagon.
{          e# Read input N, repeat this block N-1 times.
  _        e#   Make a copy, so we leave the last hexagon on the stack.
  SS/\+    e#   Prepend two empty lines.
  _47>     e#   Make a copy and discard the first 47 lines.
  S3*f{\+} e#   Prepend 3 spaces to each line. This copy has been moved back to
           e#   the top and one column to the right.
  _2>      e#   Make a copy and discard another two lines.
  \@?      e#   If any lines were left after that, pick the copy in the next column,
           e#   otherwise, stay in the same column.
}q~(*      
]:..e>     e# Wrap all the hexagons in an array and fold them into a single grid.
N*         e# Join them with newline characters.

ผู้ชายฉันควรเรียนรู้ภาษากอล์ฟเหล่านี้อย่างใดอย่างหนึ่ง
Alex Van Liew

@AlexVanLiew คุณควรจะ! :) แต่ไม่ใช่เพราะมันช่วยเพิ่มโอกาสของคุณในการชนะการแข่งขันกอล์ฟรหัส แต่เพราะ CJam เป็นภาษาที่สวยงามซึ่งสนุกในการเขียนโปรแกรมและฉันไม่รู้ภาษาอื่น ๆ ที่ใช้วิธีแก้ปัญหาข้างต้น (ซึ่งฉันคิดว่าค่อนข้างหรูหรา) จะทำให้รู้สึก ;)
Martin Ender

ฉันอาจเรียนรู้ Pyth หรือทั้งสองอย่าง พวกเขาทั้งสองสวยเหมือนกันหรือดีกว่าคนที่เหลือหรือไม่
Alex Van Liew

@AlexVanLiew ฉันไม่รู้จัก Pyth มาก แต่ฉันรู้ว่าพวกเขาอยู่ไกลจากสิ่งเดียวกัน CJam เป็นภาษาที่ใช้กองซ้อนในขณะที่ Pyth มีต้นกำเนิดมาจากภาษาย่อของ Python (แต่ตอนนี้มีชุดของตัวของมันเอง) Pyth อาจมีทักษะระดับสูงกว่าเล็กน้อยเมื่อพูดถึงการเล่นกอล์ฟ แต่โดยส่วนตัวแล้วฉันสนุกกับการเขียนโปรแกรมในกระบวนทัศน์ที่แตกต่างกันดังนั้นฉันจะติดกับ CJam
Martin Ender

ฉันเห็นแล้ว ฉันรู้ว่า Python ค่อนข้างดีซึ่งเป็นสาเหตุที่ฉันต้องการเรียนรู้ Pyth แต่ถ้าฉันมีเวลาบางทีฉันก็จะลองทำ CJam ด้วย!
Alex Van Liew

7

Python 2, 219 207 ตัวอักษร

b=bytearray(' ');h=['__ ','/  \\','\\__/'];k=range;x=input();g=[b*50for _ in k(50)]
for i in k(x):
 c=i*3%48+1;r=(i*3+1)/48*2+i%2
 for m in k(i>15,3):n=m==0;g[r+m][c+n:c+4-n]=h[m]
print"\n".join(map(str,g))

ใช้อินพุตบน stdin

สวยมากเพียงสร้างตาราง 50x50 ของช่องว่างและพล็อตหกเหลี่ยมในที่ที่เหมาะสม หลังจากหกเหลี่ยม 16th ฉันไม่ต้องการแถวแรกของh(หกเหลี่ยมเป็นอาร์เรย์ 2 มิติ) ดังนั้นฉันจึงใช้i>15เพื่อเริ่มช่วงที่ 1 แทน 0 c=i*3%48+1;r=(i*3+1)/48*2+i%2คำนวณค่าc olumn และr ow ฉันต้องเริ่มต้นที่ nเป็นบูลีน แต่ใช้เป็นจำนวนเต็มเพื่อแก้ไขขอบเขต (เนื่องจากh[0]มีเพียง 3 ตัวอักษรเพื่อหลีกเลี่ยงการเขียนทับข้อมูล)

ฉันค่อนข้างมีความสุขกับอันนี้ฉันโกนออกประมาณ 50 ไบต์ตั้งแต่รุ่นเริ่มต้นโดยเฉพาะเมื่อฉันจำa[x:y]=bไวยากรณ์ได้

เอาท์พุท (n = 30):

  __    __    __    __    __    __    __    __
 /  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \__
 \__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \
 /  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/
 \__/  \__/  \__/  \__/  \__/  \__/  \__/  \
    \__/  \__/  \__/  \__/  \__/  \__/  \__/
(plus 44 lines of spaces each 50 wide)

เนื่องจากอนุญาตให้ใช้บรรทัดต่อท้ายของช่องว่างได้ฉันจึงเปลี่ยนการสร้างgเป็นเพียงแค่สร้าง 50 bytearrayวินาทีแทน3+(x>1)+x/16*2ซึ่งเป็นจำนวนแถวที่แน่นอนซึ่งจำเป็นต้องใช้ในการตัดออก 12 ไบต์


6

Swift 2.0, 601 591 bytes

import Cocoa
var a=Int(Process.arguments[1])!,b="/  \\__".join([String](count:9,repeatedValue:""))+"/",c="\\__/  ".join([String](count:9,repeatedValue:""))+"\\",d=c.startIndex,e=c.endIndex,j=[c.stringByReplacingOccurencesOfString("\\",withString:" ").stringByReplacingOccurencesOfString("/",withString:" ").substringToIndex(advance(d,3*a,e)),b.substringToIndex(advance(d,3*a+a%2,advance(e,-1)))]
while a>0{j+=[c.substringToIndex(advance(d,3*a+1,e)),b.substringToIndex(advance(d,3*a+(a+1)%2,e)]
a<=16 ?j+=[" "+j.removeLast().substringFromIndex(advance(d,1))]:()
a-=16}
for l in j{print(l)}

วิ่ง: swift hexagons.swift 21

เอาท์พุท:

 __    __    __    __    __    __    __    __    
/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \__
\__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \
/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/
\__/  \__/  \__/
   \__/  \__/  

รวดเร็วsubstringToIndexและstringByReplacingOccurencesOfStringใช้ตัวละครมากมาย ...


ฉันไม่รู้จัก Swift เลย แต่ไม่มีวิธีสร้างสตริงซ้ำที่มีรหัสน้อยกว่าหรือไม่
Reto Koradi

วิธีเดียวที่ฉันรู้เกี่ยวกับการทำซ้ำสตริงอยู่ด้วยstringByPaddingToLengthอย่างไรก็ตามในกรณีนี้มันจะมีความยาว 11 อักขระมากกว่าการพิมพ์สตริงทั้งหมด
David Skrundz

6
ฉันเห็นว่าแอปเปิ้ลชอบการตัดต่อสตริง verbose มากเกินไป ไม่เลวเท่าstringByAppendingStringใน Objective-C แต่ยัง ...
เสียชีวิต

นอกเหนือจากการตีกอล์ฟแล้วมันดีมาก ๆ เพราะมันทำให้การค้นหาวิธีง่ายขึ้นมาก
JustSid

4

C, 238 ไบต์

#define h(A) c[m+A/4][n+A%4]
i,m,n;
f(a)
{
    char c[50][51];
    for(i=0;i<50;i++)for(m=0;m<51;m++)c[i][m]=m-50?32:0;
    for(;a;)
        m=a/12*2,n=a%12*3,a--%2?m=a/12*2+1,n=a%12*3+3:0,
        h(1)=h(2)=h(9)=h(10)=95,h(4)=h(11)=47,h(7)=h(8)=92;
    for(;i;)puts(c-i--+50);
}

เฉพาะการเว้นวรรคและการขึ้นบรรทัดใหม่ที่จำเป็นสำหรับการนับจำนวนตัวอักษร

มันสร้างเมทริกซ์ของตัวละครเพียงเติมในลำดับที่กลับกันแล้วพิมพ์ทุกอย่าง


2

JavaScript (ES6), 265 ไบต์

A=Array;f='forEach';U=x=1;y=0;a=A.from(A(51),_=>A.from(A(51),_=>' '));d=h=>(` __
/  \\
\\__/`.split`
`[f]((l,i)=>[...l][f]((c,j)=>{if('_/\\'.indexOf(a[x+i][y+j])<0)a[x+i][y+j]=c})),(x+=U*-2+1),(U=!U),(C-y<=3?((U=x+=2),y=0):y+=3),--h?d(h):a.map(d=>d.join``).join`
`)

Tessellates หกเหลี่ยมในแถวจากซ้ายไปขวาสลับขึ้นและลง - เหมือนรวงผึ้ง - จนกระทั่งถึงจุดสิ้นสุดของแถว

Ungolfed พร้อมคำอธิบาย (ทำงานใน Firefox):

'use strict';
const CAP = 51;
var a = Array.from(Array(51), () => Array.from(Array(51),() => ' '))

function draw (hexagons, x, y, a, up) {
  // x, y (row, col) represents the current position of the cursor
  /*
  
    Here's a map of the first three iterations:
    
            01234567
     0        __
     1     __/  \__
     2    /  \__/  \
     3    \__/  \__/

    For the first 17 iterations, the cursor will be at:
    
      # | x | y
      ----------
      1 | 1 | 0
      2 | 0 | 3
      3 | 1 | 6
      4 | 0 | 9
      5 | 1 | 12
      6 | 0 | 15
      7 | 1 | 18
      8 | 0 | 21
      9 | 1 | 24
     10 | 0 | 27
     11 | 1 | 30
     12 | 0 | 33
     13 | 1 | 36
     14 | 0 | 39
     15 | 1 | 42
     16 | 0 | 45
     17 | 3 | 0      <- moves back to the first row

  */
` __
/  \\
\\__/`
  // split the hexagon into three lines
  .split('\n').forEach((line, index) => {
    // and for each line
    ;[...line].forEach((char, j) => {
      // if the cursor position (x, y) translated
      // by (index, j) is not already part of a hexagon
      // then replace it with the current (index, j) piece
      // of the hexagon
      /*
         0123
       0  __
       1 /  \
       2 \__/
       
      */
      if ('_/\\'.indexOf(a[x + index][y + j]) < 0)
        a[x + index][y + j] = char
    })
  })
  
  // `up` represents the next hexagon
  // if true, the next hexagon will be drawn attached to
  // the top right edge of the current hexagon
  if (up) {
    x -= 1
  // otherwise, it'll be drawn attached to the bottom right edge
  } else {
    x += 1
  }

  // move three columns to the right
  y += 3
  // change directions
  up = !up

  // if within the right boundary of the 51x51 matrix,
  // move back to the left edge and down 2 rows
  // and draw the next hexagon as an `up` hexagon
  if (51 - y <= 3) {
    y = 0
    x += 2
    up = true
  }

  // if hexagons > 0, then recurse and draw the next hexagon
  // otherwise, return the array (join the columns in each row, then join each row
  // by a new line)
  return --hexagons ?
    draw(hexagons, x, y, a, up)
    : a.map(d => d.join('')).join('\n')
}

var n = parseInt(prompt('Number to draw:'))
var r = draw(n, 1, 0, a, true)
document.write('<pre>' + r.replace(/\n/g, '<br>') + '</pre>')


2

ทับทิม, 120

->n{a=(1..50).map{' '*50}
n.times{|i|x=i%16*3
3.times{|j|a[47-i/16*2-x/3+j][x..x+3]=[' __ ','/  \\','\__/'][j]}}
puts a}

สร้างอาร์เรย์ 50 สายของ 50 ช่องว่างจากนั้นแทนที่อักขระ 4 ตัวใน 3 บรรทัดเพื่อเพิ่มรูปหกเหลี่ยม:

" __ "
"/  \"
"\__/"

ในฐานะที่เป็นบรรทัดแรกมีช่องว่างเมื่อหกเหลี่ยมได้รับการวางแผนเราไม่สามารถพล็อตอีกด้านล่างเพราะช่องว่างจะเขียนทับรูปหกเหลี่ยมก่อนหน้า

ดังนั้นรูปหกเหลี่ยมจะถูกเพิ่มในรูปแบบของรูปสี่เหลี่ยมขนมเปียกปูน 16x16 (รูปสี่เหลี่ยมบิดเบี้ยว) จากล่างขึ้นบนและเอียงจากล่างซ้ายไปขวาบน

สตริง" __ "จะถูกเขียนทับด้วยเพิ่มเติม\และ/ที่จำเป็น

Ungolfed ในโปรแกรมทดสอบ

g=->n{
  a=(1..50).map{' '*50}              #make an array of 50 strings of 50 spaces
  n.times{|i|                        #loop through all hexagons
    x=i%16*3                         #x coordinate of top left corner of hexagon, 16 per row
    3.times{|j|                      #loop through 3 lines to print hexagon.
      a[47-i/16*2-x/3+j][x..x+3]=    #47-i/16*2 : start at the bottom and work up. each row is 2 lines high and contains 16 hexagons. x/3 : slant upwards as the row moves right. 
       [' __ ','/  \\','\__/'][j]    #These are the symbols for each of the 3 lines required for a hexagon. [x..x+3] defines which characters have to be replaced in each string.
    }      
  }
  puts a                             #print to stdout
}

N=gets.to_i
g.call(N) 

เอาท์พุททั่วไป (n = 250)

ควรมีช่องว่างอีกสองสามแถวที่ด้านบนที่นี่เพื่อรวมเป็น 50 แต่ฉันไม่รู้ว่ามีวิธีที่จะให้ Stackexchange จัดรูปแบบเพื่อรวมไว้หรือไม่

                                              __  
                                           __/  \ 
                                        __/  \__/ 
                                     __/  \__/  \ 
                            __    __/  \__/  \__/ 
                         __/  \__/  \__/  \__/  \ 
                      __/  \__/  \__/  \__/  \__/ 
                   __/  \__/  \__/  \__/  \__/  \ 
                __/  \__/  \__/  \__/  \__/  \__/ 
             __/  \__/  \__/  \__/  \__/  \__/  \ 
          __/  \__/  \__/  \__/  \__/  \__/  \__/ 
       __/  \__/  \__/  \__/  \__/  \__/  \__/  \ 
    __/  \__/  \__/  \__/  \__/  \__/  \__/  \__/ 
 __/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \ 
/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/ 
\__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \ 
/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/ 
\__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \ 
/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/ 
\__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \ 
/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/ 
\__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \ 
/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/ 
\__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \ 
/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/ 
\__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \ 
/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/ 
\__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \ 
/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/ 
\__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \ 
/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/ 
\__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/    
/  \__/  \__/  \__/  \__/  \__/  \__/  \__/       
\__/  \__/  \__/  \__/  \__/  \__/  \__/          
/  \__/  \__/  \__/  \__/  \__/  \__/             
\__/  \__/  \__/  \__/  \__/  \__/                
/  \__/  \__/  \__/  \__/  \__/                   
\__/  \__/  \__/  \__/  \__/                      
/  \__/  \__/  \__/  \__/                         
\__/  \__/  \__/  \__/                            
/  \__/  \__/  \__/                               
\__/  \__/  \__/                                  
/  \__/  \__/                                     
\__/  \__/                                        
/  \__/                                           
\__/                                              
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.