เขาวงกตสร้างหนึ่งซับ


15

C64 พื้นฐานที่มีชื่อเสียงหนึ่งซับ

10 PRINT CHR$(205.5+RND(1)); : GOTO 10

พิมพ์เขาวงกตของทับและแบ็กสแลช

\\/\\\//\/\////\\/\/
\/\///\\///////\//\/
/\\\//\//\////\\//\\
\////\//\//\/\\\\\\/
/\/\\///\\\\/\\\\/\\
\/\//\\\\\\//\/\////
/\//\\///\/\///\////
\/\\\//\\/\\\//\\/\/
//////\\/\\/\/\/\///
\\/\/\\////\/\/\\/\/

อ่านในเขาวงกตที่ทำจากกำแพงในแนวทแยงจาก stdin และพิมพ์เขาวงกตเดียวกันกับแนวนอนและแนวตั้งผนังในซึ่งประกอบด้วยอักขระกำแพง "#"

เช่นเขาวงกตขนาดเล็ก

/\\
\\/
///

แปลเป็น

     #####
     #   #
     # # # #
     # # # #
 ##### # # #
       #   #
   #########

     #####    

เพื่อความแม่นยำแต่ละส่วนของกำแพงที่แยกออกมาจะมีความยาวห้าตัวอักษรส่วนของผนังที่อยู่ติดกันจะแบ่งกันเป็นมุม การย้ายอักขระไปทางขวา / ซ้าย / บน / ล่างในเมทริกซ์ของเครื่องหมายทับและแบ็กสแลชสอดคล้องกับการแปลแบบทแยงมุมโดย 2 ตัวอักษรในแนวตั้งและ 2 ตัวอักษรในแนวนอนใน # -matrix


ตัวอย่างผลลัพธ์อื่นอาจเป็นประโยชน์ และฉันคาดหวังว่าชื่อเรื่องควรเป็น "หนึ่งซับ"
งานอดิเรกของ Calvin

เขาวงกตที่ป้อนข้อมูลจะเป็นรูปสี่เหลี่ยมผืนผ้าเสมอหรือไม่ คุณควรเป็นตัวอย่างที่ใหญ่กว่านี้เพื่อเราจะได้เห็นระยะห่างหรือไม่
xnor

2
ยินดีต้อนรับสู่การเขียนโปรแกรมปริศนา & แลกเปลี่ยนรหัสกองกอล์ฟ! ความท้าทายครั้งแรกที่ยอดเยี่ยม แต่บางสิ่ง: อินพุต / เอาต์พุตสามารถเป็นอย่างอื่นที่ไม่ใช่ STDIN / STDOUT (เช่นเป็นอาร์กิวเมนต์ของฟังก์ชันและค่าส่งคืน) ได้หรือไม่ สามารถคั่นบรรทัดด้วยอักขระอื่นที่ไม่ใช่บรรทัดใหม่ได้หรือไม่
Doorknob

2
การใช้ stdin และ stdout นั้นเป็นข้อบังคับถ้าเป็นไปได้มิฉะนั้น "เทียบเท่าที่ใกล้เคียงที่สุด" มีเหตุผลที่ทำให้สมมติฐานใหม่อ่อนลงหรือไม่?
mschauer

คำตอบ:


5

Python 3, 226 224 ไบต์

Python Golf ตัวแรกของฉันดังนั้นอาจย่อยได้ดีที่สุด มันสร้างช่องว่างต่อท้ายจำนวนมาก แต่ไม่มีการขึ้นบรรทัดใหม่ก่อนหน้าและมีช่องว่างก่อนหน้านี้มากที่สุดสองช่อง ต้องป้อนข้อมูลด้วยมือจากบรรทัดคำสั่ง (อาจมีคนรู้วิธีที่สั้นกว่าในการรับอินพุตหลายบรรทัดใน Python ... )

e,z,s=enumerate,'0',list(iter(input,""))
p=''.join(s)*5
r=[len(p)*[' ']for _ in p]
for y,l in e(s):
 for x,c in e(l):
  for i in range(-2,3):r[2*(x+y+(s>[z]))+i*(c>z)][2*(x+len(s)-y)+i*(c<z)]='#'
for l in r:print(''.join(l))

แนวคิดคือการกำหนดค่าเริ่มต้นของช่องว่างขนาดใหญ่จากrนั้นวนซ้ำผ่านอินพุตและแทนที่ช่องว่างด้วย#ตามต้องการและในที่สุดก็พิมพ์ทั้งอาร์เรย์ เคล็ดลับที่ฉันใช้คือการเปรียบเทียบอักขระz = '0'แทนการทดสอบความเท่าเทียมกัน'/'หรือ'\'ซึ่งจะช่วยประหยัดไบต์


1

จูเลีย 258 ไบต์

โซลูชันที่ใช้งานได้ ...

A=split(readall(STDIN))
q(i,j)=fld(i-1,j)
n,^ =A[].(3),q
f(i,j)=try A[1+i^5][1+j^5]<'0'?(i+j)%5==1:(i-j)%5==0catch 0end
h(i,j)=f(i+i^4,j)|f(i+(i-1)^4,j)
g(i,j)=h(i,j+j^4)|h(i,j+(j-1)^4)
for i=1:6length(A),j=-n-5:2n;print(" #"[1+g(i-j,i+j)],j==2n?"\n":"")end

ในลำดับการแสดง: fครอบคลุม '/' และ '\' โดย 5 * 5 patters บิตของพวกเขา hพับทุกห้าและบรรทัดต่อไปนี้ในบรรทัดเดียว (เรียกคืน "ส่วนผนังที่อยู่ติดกันแบ่งปันมุม") และgไม่เหมือนกันสำหรับคอลัมน์ ในที่สุดi-j,i+jหมุนภาพ


1

JavaScript (ES6), 258

ฟังก์ชั่นที่มีเขาวงกตเป็นพารามิเตอร์ส่งกลับผลลัพธ์

ไม่แน่ใจว่าถูกต้องหรือไม่เนื่องจากกฎอินพุต / เอาต์พุต (มันสนุกอยู่ดี)

f=m=>([...m].map(c=>{if(c<' ')x=sx-=2,y=sy+=2;else for(x+=2,y+=2,d=c>'0',i=y-3*d,j=x-3*!d,c=5;c--;)o[i+=d][j+=!d]='#';},w=m.search`
`,h=m.match(/\n/g).length,sy=y=0,sx=x=h*2,o=Array(z=(w+h+1)*2).fill(' ').map(x=>Array(z).fill(x))),o.map(r=>r.join``).join`
`)

// LESS GOLFED

U=m=>(
  w=m.search`\n`,
  h=m.match(/\n/g).length,
  o=Array(z=(w+h+1)*2).fill(' ').map(x=>Array(z).fill(x)),
  sy=y=0,
  sx=x=h*2,
  [...m].forEach(c=>{
    if(c<' ')x=sx-=2,y=sy+=2
    else for(x+=2,y+=2,d=c>'0',i=y-3*d,j=x-3*!d,c=5;c--;)o[i+=d][j+=!d]='#';
  }),
  o.map(r=>r.join``).join`\n`  
)

// TEST
out=x=>O.innerHTML+=x+'\n'

test=`\\\\/\\\\\\//\\/\\////\\\\/\\/
\\/\\///\\\\///////\\//\\/
/\\\\\\//\\//\\////\\\\//\\\\
\\////\\//\\//\\/\\\\\\\\\\\\/
/\\/\\\\///\\\\\\\\/\\\\\\\\/\\\\
\\/\\//\\\\\\\\\\\\//\\/\\////
/\\//\\\\///\\/\\///\\////
\\/\\\\\\//\\\\/\\\\\\//\\\\/\\/
//////\\\\/\\\\/\\/\\/\\///
\\\\/\\/\\\\////\\/\\/\\\\/\\/`
out(test),out(f(test))
<pre id=O></pre>

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