สร้าง ASCII Hexagon Ring Tiling


10

การใช้ ASCII พิมพ์ส่วนของการเรียงแหวนวงแหวนหกเหลี่ยม

นี่คือส่วนเล็ก ๆ :

       /\__/\
      /_/  \_\
 /\__/\ \__/ /\__/\ 
/_/  \_\/__\/_/  \_\
\ \__/ /\__/\ \__/ /
 \/__\/_/  \_\/__\/
 /\__/\ \__/ /\__/\ 
/_/  \_\/__\/_/  \_\ 
\ \__/ /\__/\ \__/ /
 \/__\/_/  \_\/__\/
      \ \__/ /
       \/__\/

นี่คือส่วนที่ใหญ่กว่า:

\ \__/ /\__/\ \__/ /\__/\ \__/ /\__/\ \__/ /\__/\
 \/__\/_/  \_\/__\/_/  \_\/__\/_/  \_\/__\/_/  \_\
 /\__/\ \__/ /\__/\ \__/ /\__/\ \__/ /\__/\ \__/ /
/_/  \_\/__\/_/  \_\/__\/_/  \_\/__\/_/  \_\/__\/
\ \__/ /\__/\ \__/ /\__/\ \__/ /\__/\ \__/ /\__/\
 \/__\/_/  \_\/__\/_/  \_\/__\/_/  \_\/__\/_/  \_\
 /\__/\ \__/ /\__/\ \__/ /\__/\ \__/ /\__/\ \__/ /
/_/  \_\/__\/_/  \_\/__\/_/  \_\/__\/_/  \_\/__\/
\ \__/ /\__/\ \__/ /\__/\ \__/ /\__/\ \__/ /\__/\
 \/__\/_/  \_\/__\/_/  \_\/__\/_/  \_\/__\/_/  \_\
 /\__/\ \__/ /\__/\ \__/ /\__/\ \__/ /\__/\ \__/ /
/_/  \_\/__\/_/  \_\/__\/_/  \_\/__\/_/  \_\/__\/

ท้าทาย

รับ 2 จำนวนเต็มhและwโดยที่hความสูงและwเป็นความกว้างเอาท์พุทhxwส่วนของการเรียงแหวนแหวนหกเหลี่ยม

ตัวอย่าง

อินพุต 1

4x4

เอาท์พุท 1

 /\__/\ \__/ /\__/\ \__/ /
/_/  \_\/__\/_/  \_\/__\/
\ \__/ /\__/\ \__/ /\__/\
 \/__\/_/  \_\/__\/_/  \_\
 /\__/\ \__/ /\__/\ \__/ /
/_/  \_\/__\/_/  \_\/__\/
\ \__/ /\__/\ \__/ /\__/\
 \/__\/_/  \_\/__\/_/  \_\
 /\__/\ \__/ /\__/\ \__/ /
/_/  \_\/__\/_/  \_\/__\/
\ \__/ /\__/\ \__/ /\__/\
 \/__\/_/  \_\/__\/_/  \_\
 /\__/\ \__/ /\__/\ \__/ /
/_/  \_\/__\/_/  \_\/__\/
\ \__/ /\__/\ \__/ /\__/\
 \/__\/_/  \_\/__\/_/  \_\

อินพุต 2

3x3

เอาท์พุท 2

 /\__/\ \__/ /\__/\
/_/  \_\/__\/_/  \_\
\ \__/ /\__/\ \__/ /
 \/__\/_/  \_\/__\/
 /\__/\ \__/ /\__/\
/_/  \_\/__\/_/  \_\
\ \__/ /\__/\ \__/ /
 \/__\/_/  \_\/__\/
 /\__/\ \__/ /\__/\
/_/  \_\/__\/_/  \_\
\ \__/ /\__/\ \__/ /
 \/__\/_/  \_\/__\/

อินพุต 3

1x3

เอาท์พุท 3

 /\__/\ \__/ /\__/\
/_/  \_\/__\/_/  \_\
\ \__/ /\__/\ \__/ /
 \/__\/_/  \_\/__\/

อินพุต 4

3x6

เอาท์พุท 4

 /\__/\ \__/ /\__/\ \__/ /\__/\ \__/ /
/_/  \_\/__\/_/  \_\/__\/_/  \_\/__\/
\ \__/ /\__/\ \__/ /\__/\ \__/ /\__/\
 \/__\/_/  \_\/__\/_/  \_\/__\/_/  \_\
 /\__/\ \__/ /\__/\ \__/ /\__/\ \__/ /
/_/  \_\/__\/_/  \_\/__\/_/  \_\/__\/
\ \__/ /\__/\ \__/ /\__/\ \__/ /\__/\
 \/__\/_/  \_\/__\/_/  \_\/__\/_/  \_\
 /\__/\ \__/ /\__/\ \__/ /\__/\ \__/ /
/_/  \_\/__\/_/  \_\/__\/_/  \_\/__\/
\ \__/ /\__/\ \__/ /\__/\ \__/ /\__/\
 \/__\/_/  \_\/__\/_/  \_\/__\/_/  \_\

ชี้แจง

  • คำถามของฉันคือคล้ายกับหน้านี้: ผมอยากรังผึ้ง
  • hxwการป้อนข้อมูลจะอยู่ในบรรทัดเดียวในรูปแบบ
  • ส่งออกไปยัง stdout (หรือสิ่งที่คล้ายกัน)
  • นี่คือ code-golf ดังนั้นคำตอบที่สั้นที่สุดในจำนวนไบต์ชนะ

6
คุณควรอธิบายให้ชัดเจนว่าส่วนใดที่เราต้องส่งออกมากเพื่อคงความชัดเจนและวัตถุประสงค์
James

ฉันเพิ่งเห็นความคิดเห็นของคุณฉันจะแก้ไขมิติเพื่อให้ชัดเจนยิ่งขึ้น
Bobas_Pett

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

ควรติดแท็ก kolmogorov-complex หรือไม่
Pavel

ป่วยเพิ่มใน 1 วินาที ...
Bobas_Pett

คำตอบ:


2

Befunge, 137 ไบต์

ฉันดูเหมือนจะสร้างปืนมือไซไฟบางชนิด

&>4*>~>$&>\>1-:4%3v
>00gg,\1-:v^_@#:\<>+00p\::6*\00g2/+2%+1+66+:
^%+66<:+1\_$$55+,^
_\/__\/_/  \
\ \__/ /\__/\
/_/  \_\/__\/
 /\__/\ \__/

ลองออนไลน์!

คำอธิบาย

&>4*>                    Read the height and multiply by 4.
     ~>$                 Drop the 'x' separator. 
        &>\              Read the width and swap below the height

>                        Start of the outer loop.
 1-                      Decrement the height.              
   :4%3+00p              Calculate the pattern y offset: height%4+3
           \             Swap the width back to the top.

::6*\00g2/+2%+1+         Calculate the line length: w*6+(w+y/2)%2+1 
                66+:     Initialise the pattern x offset to 12, and duplicate it.

>                        Start of the inner loop.     
 00gg                    Get a pattern char using the x on the stack and the saved y.
     ,                   Output the char.
      \1-                Swap the line length to the top of the stack and decrement it.
         :v              Check if it's zero, and if so...
          _                 ...break out of the loop to the right.
       +1\               Otherwise swap the x offset back to the top and increment it.
 %+66<:                  Mod it with 12 to make sure it's in range.
^                        Then return to the beginning of the inner loop.

$$                       Drop the x offset and line length.
  55+,                   Output a newline.
     \<                  Swap the height back to the top of the stack.
 _@#:                    Check if it's zero, and exit if that's the case.
^                        Otherwise return to the start of the outer loop.

3

Lua, 174 176 156 ไบต์

รหัสจะพิมพ์จำนวนความสูงของเส้นไม่ใช่จำนวนความสูงของรูปหกเหลี่ยม เพิ่ม*4ที่แก้ไขแล้ว แต่เพิ่ม 2 ไบต์พิเศษ บันทึกไบต์จำนวนหนึ่งโดยการเปลี่ยนตัวนับจากถ้าเป็นโมดูโลและโดยใส่สองio.read()s เป็นหนึ่ง

ใช้io.read()เป็นอินพุต

a,w,h,n,d={[[ /\__/\ \__/]],[[/_/  \_\/__\\]],[[\ \__/ /\__/]],[[_\/__\/_/  \\]]},io.read(,),"",0 for i=h*4,0,-1 do d=d+1 d=5%d end n=a[d]print(n:rep(w))end

ทำซ้ำสตริงความกว้าง - จำนวนครั้งที่ผ่านstring:rep(width)มาแล้ววนซ้ำความสูงจำนวนครั้งด้วย for-loop ที่จำเป็น[[]] (สตริงตัวอักษร) เพราะแบ็กสแลชทำให้เมาขึ้น

เวอร์ชั่นเก่า:

a,w,h,n,d={[[ /\__/\ \__/]],[[/_/  \_\/__\\]],[[\ \__/ /\__/]],[[_\/__\/_/  \\]]},io.read(),io.read(),"",0 for i=h*4,0,-1 do d=d+1 d=5%d end n=a[d]print(n:rep(w))end

1

Python 2, 180 ไบต์

a,b,c,d=' /\__/\ \__/','/_/  \_\/__\\','\ \__/ /\__/','_\/__\/_/  \\'
h,w=input()
x=w/2
e,E=[(2,1),(7,8)][w%2]
print'\n'.join([a*x+a[:e],b*x+b[:E],c*x+c[:E],' '+(d*x+d[:e])[1:]]*h)

รับอินพุตเป็นจำนวนเต็มสองตัว

การป้อนข้อมูล: 2,7

เอาท์พุท:

 /\__/\ \__/ /\__/\ \__/ /\__/\ \__/ /\__/\
/_/  \_\/__\/_/  \_\/__\/_/  \_\/__\/_/  \_\
\ \__/ /\__/\ \__/ /\__/\ \__/ /\__/\ \__/ /
 \/__\/_/  \_\/__\/_/  \_\/__\/_/  \_\/__\/
 /\__/\ \__/ /\__/\ \__/ /\__/\ \__/ /\__/\
/_/  \_\/__\/_/  \_\/__\/_/  \_\/__\/_/  \_\
\ \__/ /\__/\ \__/ /\__/\ \__/ /\__/\ \__/ /
 \/__\/_/  \_\/__\/_/  \_\/__\/_/  \_\/__\/

1

แบตช์ 266 ไบต์

@echo off
for /l %%i in (1,1,%1)do call:l %2 " \" /__\/ "_/  \_\" " \__/ /" \__/\
exit/b
:l
call:c %1 " /" %6 %5
call:c %1 / %4 %3
call:c %1 \ %5 %6
:c
set s=%~2
for /l %%j in (2,2,%1)do call set s=%%s%%%~3%~4
set/ao=%1^&1
if %o%==1 set s=%s%%~3
echo %s%

:cย่อยไม่ทั้งหมด legwork ของ concatenating ชิ้นด้วยกันสำหรับสายเดียว; มันถูกเรียกโดย:l4 ครั้ง (โดยการตกลงแม้ว่าโดยการจัดเรียง:lของอาร์กิวเมนต์ให้เป็น superset ของ:c) เพื่อสร้าง 4 บรรทัดสำหรับแต่ละแถวของวง นอกจากนี้ยังมีความเป็นไปได้ที่จะล้มลงในแถวสุดท้ายของแหวนแทน แต่กลับกลายเป็น 5 ไบต์ที่ยาวกว่า

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