ทั้งหมดนี้เป็นเพียงแค่เอ่อเคล็ดลับในการเล่นกอล์ฟ


64

จุดประสงค์ของความท้าทายนี้คือการสร้างปกอัลบั้มที่ยอดเยี่ยมของ ASCII เวอร์ชั่นนี้โดย Pink Floyd วงร็อค

รอยต่อกับอิฐที่ทำจากตัวอักษรและ_ |อิฐมีความกว้าง 7 และความสูง 2 ตัวอักษรยกเว้นตัวแยก ดังนั้นหน่วยพื้นฐานรวมถึงทางแยกคือ:

_________
|       |
|       |
_________

แต่ละแถวของอิฐจะถูกชดเชยด้วยความกว้างของอิฐครึ่งหนึ่ง (4 ตัวอักษร) เทียบกับแถวก่อนหน้า:

________________________________________
  |       |       |       |       |     
  |       |       |       |       |     
________________________________________
      |       |       |       |       | 
      |       |       |       |       | 
________________________________________
  |       |       |       |       |     
  |       |       |       |       |     

ผนังถูกปรับพารามิเตอร์ดังนี้ พารามิเตอร์ทั้งหมดจะถูกวัดเป็นตัวอักษรรวมถึงทางแยก:

  1. ออฟเซ็ตแนวนอนของแถวแรก, F. นี่คือระยะห่างระหว่างระยะขอบซ้ายและจุดเชื่อมต่อแนวตั้งแรกของแถวสูงสุด (โปรดจำไว้ว่าญาติครึ่งอิฐตรงข้ามระหว่างแถว) ค่าที่เป็นไปมันเป็น0, 1, ... 7,
  2. ความกว้างทั้งหมด, W. ซึ่งรวมถึงทางแยก ค่าของมันคือเลขจำนวนเต็มบวก
  3. ความสูงรวม, H. ซึ่งรวมถึงทางแยก ค่าของมันคือเลขจำนวนเต็มบวก

ด้านบนของผนังจะตรงกับด้านบนของแถวเสมอ ด้านล่างอาจขาด (หากความสูงทั้งหมดไม่เป็นทวีคูณ3) ยกตัวอย่างเช่นนี่คือผลลัพธ์สำหรับ6, 44, 11:

____________________________________________
      |       |       |       |       |     
      |       |       |       |       |     
____________________________________________
  |       |       |       |       |       |     
  |       |       |       |       |       |     
____________________________________________
      |       |       |       |       |     
      |       |       |       |       |     
____________________________________________
  |       |       |       |       |       |     

และคำอธิบายภาพของพารามิเตอร์:

          F=6
         ......   
     .   ____________________________________________
     .         |       |       |       |       |    
     .         |       |       |       |       |     
     .   ____________________________________________
     .     |       |       |       |       |       | 
H=11 .     |       |       |       |       |       |      
     .   ____________________________________________
     .         |       |       |       |       |     
     .         |       |       |       |       |     
     .   ____________________________________________
     .     |       |       |       |       |       |      

         ............................................
                             W=44

กฎเพิ่มเติม

คุณอาจให้โปรแกรมหรือฟังก์ชั่น

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

อนุญาตให้เว้นวรรคต่อท้ายหรือขึ้นบรรทัดใหม่

รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ

กรณีทดสอบ

อินพุตอยู่ในลำดับที่ระบุข้างต้นนั่นคือ: ออฟเซ็ตแนวนอนของแถวแรกความกว้างทั้งหมดความสูงรวม

6, 44, 11:
____________________________________________
      |       |       |       |       |     
      |       |       |       |       |     
____________________________________________
  |       |       |       |       |       | 
  |       |       |       |       |       | 
____________________________________________
      |       |       |       |       |     
      |       |       |       |       |     
____________________________________________
  |       |       |       |       |       |     


2, 20, 10:
____________________
  |       |       | 
  |       |       | 
____________________
      |       |     
      |       |     
____________________
  |       |       | 
  |       |       | 
____________________


1, 1, 1:
_


1, 2, 3:
__
 |
 |


3, 80, 21:
________________________________________________________________________________
   |       |       |       |       |       |       |       |       |       |    
   |       |       |       |       |       |       |       |       |       |    
________________________________________________________________________________
       |       |       |       |       |       |       |       |       |       |
       |       |       |       |       |       |       |       |       |       |
________________________________________________________________________________
   |       |       |       |       |       |       |       |       |       |    
   |       |       |       |       |       |       |       |       |       |    
________________________________________________________________________________
       |       |       |       |       |       |       |       |       |       |
       |       |       |       |       |       |       |       |       |       |
________________________________________________________________________________
   |       |       |       |       |       |       |       |       |       |    
   |       |       |       |       |       |       |       |       |       |    
________________________________________________________________________________
       |       |       |       |       |       |       |       |       |       |
       |       |       |       |       |       |       |       |       |       |
________________________________________________________________________________
   |       |       |       |       |       |       |       |       |       |    
   |       |       |       |       |       |       |       |       |       |    

34
คุณได้รับฉันด้วย clickbait ใน hnq
Rohan Jhunjhunwala

2
@RohanJhunjhunwala ฟังดูแล้วใช่มั้ย
Insane

4
ขอบคุณสำหรับการจับคู่จำนวนพยางค์ในเนื้อเพลง ... คุณคงไม่เชื่อว่ามีกี่คนที่พยายามแยกเพลงออกมาและทำให้การออกเสียงผิดมันทำให้ฉันบ้าคลั่ง!
Chris Cirefice

1
@ChrisCirefice ฮ่าฮ่าขอบคุณ! ชื่อเป็นส่วนสำคัญของการท้าทายนี้
Luis Mendo

คำตอบ:


17

Pyth, 43 27 ไบต์

ฉันต้องตีกอล์ฟหนักหน่วง ... คะแนนแย่เกินไป

AQVE<*H?%N3X*8d+G*4/N3\|\_H

ลองออนไลน์แล้ว

รูปแบบอินพุต

6,44
11

รูปแบบผลลัพธ์

____________________________________________
      |       |       |       |       |     
      |       |       |       |       |     
____________________________________________
  |       |       |       |       |       | 
  |       |       |       |       |       | 
____________________________________________
      |       |       |       |       |     
      |       |       |       |       |     
____________________________________________
  |       |       |       |       |       | 

คำอธิบาย

AQVE<*H?%N3X*8d+G*4/N3\|\_H   First two inputs as list in Q,
                              third input as E.

AQ                            Assign G to the first item in Q
                              and H to the second item in Q.
  VE                          For N from 0 to E-1:
                   /N3            N floor-div 3.
                                    if N gives a remainder of 3 or 4 or 5
                                    when divided by 6, this will be odd;
                                    otherwise, this will be even.
                 *4               Multiply by 4.
                                    if the above is odd, this will leave
                                    a remainder of 4 when divided by 8;
                                    otherwise, the remainder would be 0.
               +G                 Add G (as an offset).
           X*8d       \|          In the string "        " (*8d),
                                  replace (X) the character with the
                                  index above with "|" (modular indexing,
                                  hence the manipulation above).
       ?%N3             \_        If N%3 is non-zero, use the above;
                                  otherwise, use "_".
     *H                           The above repeated H times.
    <                     H       Take the first H characters of above.
                                  Implicitly print with newline.

ดูเหมือนว่าคุณจะชนะ
คำต่อไปนี้

30

C, 86 85 83 82 ไบต์

บันทึกได้ 3 ไบต์ด้วย Lynn
บันทึก 1 ไบต์ต้องขอบคุณ charlie

i;f(o,w,h){++w;for(i=0;++i<w*h;)putchar(i%w?i/w%3?i%w+i/w/3*4+~o&7?32:124:95:10);}

1
for(i=0;++i<w*h;)หรือถ้าiจะทำในท้องถิ่น (พระรามเคล็ดลับ):for(;++i<w*h;)
ชาร์ลี

แทนที่i;โดยi=1;และบันทึกหนึ่งไบต์มากขึ้นในห่วง
xryl669

for(i=1;i<w*h;++i)-> for(i=0;++i<w*h;)ประหยัด 1
Yay295

@ xryl669 ไม่ถูกต้องฟังก์ชั่นจะต้องสามารถใช้ซ้ำได้
orlp

@ Yay295 ฉันให้เครดิตกับชาร์ลีเพราะเขาโพสต์เมื่อ 7 ชั่วโมงก่อนหน้านี้
orlp


13

Perl, 63 ไบต์

#!perl -nl
$y+=print+map$y%3?$_++-$`&7?$":'|':_,($y%6&4)x$&for/ \d+/..$'

นับ Shebang เป็น 2 อินพุตจะถูกนำมาจาก stdin โดยคั่นด้วยช่องว่าง

ตัวอย่างการใช้งาน

$ echo 2 20 10 | perl bricks.pl
____________________
  |       |       |
  |       |       |
____________________
      |       |
      |       |
____________________
  |       |       |
  |       |       |
____________________

11

Haskell, 83 ไบต์

q s="_":[s,s]
(f!w)h=take h$cycle$take w.drop(7-f).cycle<$>q"       |"++q"   |    "

สิ่งนี้จะกำหนดฟังก์ชัน!ที่ประกอบไปด้วย ternary ซึ่งจะส่งคืนรายการสตริง ตัวอย่างการใช้งาน:

*Main> putStrLn $ unlines $ (3!14) 7
______________
   |       |  
   |       |  
______________
       |      
       |      
______________

มันทำงานอย่างไร:

            q"       |"++q"   |    "  -- build a list of 6 strings
                                      --   1:     "_"
                                      --   2:     "       |"
                                      --   3:     "       |"
                                      --   4:     "_"
                                      --   5:     "   |    "
                                      --   6:     "   |    "
         <$>                          -- for each of the strings
     take w.drop(7-f).cycle           -- repeat infinitely, drop the first 7-f chars
                                      --    and take the next w chars
  cycle                               -- infinitely repeat the resulting list
take h                                -- and take the first h elements

1
คำตอบเช่นนี้ทำให้ฉันต้องการเรียนรู้ภาษานี้
GuitarPicker

3
ฉันคิดถึงแฮสเค็ลล์เมื่ออ่านคำอธิบายปัญหา "ทำซ้ำอย่างไม่สิ้นสุด" เป็นคุณสมบัติที่ประณีตจริงๆ
DLosc

10

JavaScript (ES6), 96 95 ไบต์

g=
(f,w,h)=>[...Array(h)].map((_,i)=>(i%3?`       |`:`_`).repeat(w+7).substr(f^7^i%6&4,w)).join`
`
;
<div onchange=o.textContent=g(f.value,w.value,+h.value)><input id=f type=number min=0 max=7 placeholder=Offset><input id=w type=number min=0 placeholder=Width><input id=h type=number min=0 placeholder=Height></div><pre id=o>

คำอธิบาย: สร้างสตริงของช่องว่าง 7 |รูปแบบรวมทั้งรูปแบบซ้ำหรือเพียงแค่ทำซ้ำ_s แต่อย่างน้อยก็นานพอที่จะสามารถแยกwอักขระที่จำเป็นสำหรับแต่ละแถว สามแถวแรกเริ่มต้นที่ตำแหน่งf^7จากนั้นสามแถวถัดไปจะเริ่มที่ตำแหน่งf^3ดังนั้นฉันจะได้รับสิ่งนี้โดยการสลับบิต 2 ของfทุกแถวที่สามโดยใช้บิตตรงกันข้าม 2 ในสองแถวสุดท้ายของแต่ละบล็อก 6 เพื่อประหยัด 1 ไบต์


7

MATL, 42 36 33 ไบต์

:-Q'_ | |'[DClCl]Y"8et4YShwi:3$)!

รูปแบบอินพุตคือnCols, offset,nRows

ลองออนไลน์

วิธีการที่นี่คือเราตั้งค่า "เทมเพลต" ซึ่งเราจะจัดทำดัชนีโดยใช้ดัชนีแถว ( [1 2 ... nRows]) และดัชนีคอลัมน์เลื่อนจากอินพุตแรก ( [1 2 ... nCols] - shift) ต้องขอบคุณการจัดทำดัชนีแบบแยกส่วนของ MATL ซึ่งจะส่งผลให้มีการปูกระเบื้องอัตโนมัติ ในฐานะที่เป็นบันทึกย่อด้านข้างเพื่อประหยัดพื้นที่บางส่วนในทางเทคนิคฉันทำงานกับเทมเพลตเวอร์ชันที่ถูกย้ายและจากนั้นใช้การแปลงแบบ (! ) ที่ส่วนท้าย

แม่แบบนี้คือ:

________
       |
       |
________
  |     
  |     

1
ใช้การเข้ารหัสแบบรันไทม์เพื่อสร้างรูปแบบได้เป็นอย่างดี
Luis Mendo

6

Python 2, 93 88 ไบต์

ระดับการเยื้องที่สองคือแท็บการบันทึกบางไบต์ด้วย Leaky Nun และการแก้ไขบางอย่างตอนนี้ออฟเซ็ตที่ถูกต้อง:

def f(F,W,H):
 for h in range(H):print["_"*W,((("|"+7*" ")*W)[8-F+h%6/3*4:])[:W]][h%3>0]

รหัสก่อนหน้า:

def f(F,W,H,x="|"+7*" "):
 for h in range(H):
    print ["_"*W,(x[F+4*(h%6>3):]+x*W)[:W]][h%3>0]

ความยาวเท่ากับแลมบ์ดาที่ไม่มีชื่อ:

lambda F,W,H,x="|"+7*" ":"\n".join(["_"*W,(x[F+4*(h%6>3):]+x*W)[:W]][h%3>0]for h in range(H))

F,W,H=input()
Leun Nun

ลบช่องว่างออกหลังจากprint
Leaky Nun

ใช้h/3%2*4หรือh%6/3*4แทน4*(h%6>3)
แม่ชีที่รั่ว

คุณไม่ต้องการระดับการเยื้องที่สอง เพียงใส่printข้อความที่บรรทัดเดียวกับforข้อความ
Leaky Nun

"| "สั้นกว่า("|"+7*" ")ถ้าฉันนับอย่างถูกต้อง
Leun Nun

6

QBasic, 121 109 ไบต์

(ทดสอบใน QB64)

ขอบคุณ @DLosc สำหรับการเล่นกอล์ฟของฉัน IFคำพูดด้วยการคำนวณทางคณิตศาสตร์ นั่นมีค่า 12 ไบต์

วิธีการทั่วไป:

ห่วงผ่านแต่ละเซลล์หนึ่งที่เวลาและตรวจสอบว่ามันควรจะเป็น_, หรือ|ขึ้นอยู่กับทำเลที่ตั้ง MODงบและตรรกะบูลีนจะใช้ในการกำหนดขอบเขตของอิฐและวิธีการที่จะทำให้อิฐมาก

รหัส:

INPUT F,W,H
FOR y=0TO H-1:FOR x=0TO W-1
?CHR$((y MOD 3>0)*(((x-(y MOD 6>3)*4)MOD 8=F)*92+63)+95);
NEXT:?:NEXT

หมายเหตุการใช้งาน:

QBasic คาดว่าอินพุตจะเป็นตัวเลขคั่นด้วยเครื่องหมายจุลภาค


1
ใช้คณิตศาสตร์แทนIF/ THENเพิ่มวงเล็บให้มากขึ้น แต่จะช่วยประหยัด 12 ไบต์:?CHR$((y MOD 3>0)*(((x-(y MOD 6>3)*4)MOD 8=F)*92+63)+95);
DLosc

ขอบคุณสำหรับความคิดเห็น ในส่วนท้ายของหัวฉันได้พิจารณาการสำรวจคณิตศาสตร์ แต่ไม่ได้ ฉันทำสิ่งที่คล้ายกับสิ่งนี้เพื่อให้สีของภาพในการส่งล่าสุดแต่การนำไปใช้ที่ฉันใช้ไม่มีตัวดำเนินการ MOD
GuitarPicker

5

Java, 149 , 147 , 146 , 143 ไบต์

แข็งแรงเล่นกอล์ฟ:

String f(int o,int w,int h){String s="";for(int y=0,x;y<h;++y){for(x=0;x<w;++x){s+=y%3>0?(x-o+(y-1)/3%2*4)%8==0?'|':' ':'_';}s+='\n';}return s;}

Ungolfed:

public class AllInAllItsJustUhAnotherTrickInCodeGolf {

  public static void main(String[] args) {
    int offset = 6;
    int width = 44;
    int height = 11;
    System.out.println(new AllInAllItsJustUhAnotherTrickInCodeGolf()
        .f(offset, width, height));
  }

  // Begin golf
  String f(int o, int w, int h) {
    String s = "";
    for (int y = 0, x; y < h; ++y) {
      for (x = 0; x < w; ++x) {
        s += y % 3 > 0 ? (x - o + (y - 1) / 3 % 2 * 4) % 8 == 0 ? '|' : ' ' : '_';
      }
      s += '\n';
    }
    return s;
  }
  // End golf

}

1
บางทีคุณสามารถเปลี่ยนลำดับของไตรภาคโดยเปรียบเทียบกับ> 0ที่สามารถบันทึกอักขระสองตัว int y=0,xและแน่นอนคุณสามารถรวมการประกาศไป
Frozn

ตามที่พูดโดยFroznคุณสามารถลบint ก่อนหน้าxและใช้int y=0,xใน for-loop แรกแทนเพื่อบันทึก 2 ไบต์ นอกจากนี้ขณะนี้คุณสามารถเปลี่ยนไปy%3==0 y%3<1(ซึ่งเป็นไปไม่ได้...%8==0ที่จะ...&8<1แต่เนื่องจากการทำงานของคุณจะกลับมาเป็นจำนวนลบ.)
เควิน Cruijssen

เสร็จแล้ว คุณถูกต้องโมดูโล่ตัวที่สองสามารถส่งคืนค่าลบและทำในระหว่างการดีบักเมื่อฉันเขียนฟังก์ชันนี้

1
ไม่แน่ใจว่าเราพลาดนี้ แต่คุณสามารถลบช่องว่างที่พารามิเตอร์ของคุณสำหรับ -2 ไบต์ .. อีกวิธีหนึ่งคือใช้int...oเป็นพารามิเตอร์และการเปลี่ยนแปลงwไปo[1], hไปo[2]และoจะo[0]เป็น -3 ไบต์แทน
Kevin Cruijssen

4

ทับทิม, 72 66 ไบต์

->f,w,h{h.times{|i|puts i%3<1??_*w:((?|+' '*7)*w)[8-f+i%6/4*4,w]}}

ขอบคุณ @Value Ink ขนาด 6 ไบต์!

การคูณและการแบ่งสตริงอย่างง่าย

ใช้งานได้ใน Ruby 2.3.0 (ข้อผิดพลาดทางไวยากรณ์ของรุ่นโยน IDEone 2.1)


2
ใช้i%6/4*4แทน(i%6>3?4:0)และใช้?_แทน'_', แทน?| '|'
หมึกมูลค่า

ขอขอบคุณ. ฉันลืม?เคล็ดลับถ่านเดี่ยวและส่วน "คณิตศาสตร์" นั้นน่าประทับใจจริงๆ!
Leibrug

1
ฉันคิดว่า((' '*7+?|)*w)[f^7^i%6&4,w]ช่วยคุณสองไบต์
Neil

ขอบคุณ @ นีล ฉันจะแก้ไขรหัส ... เร็วที่สุดเท่าที่ผมเข้าใจว่าข้อเสนอแนะของคุณทำงาน :)
Leibrug

4

จูเลีย: 150 128 116 108 107 ไบต์

# in codegolf.jl
r=repmat;b=r([' '],6,8);b[[1,4],:]='_';b[[2,3,23,24]]='|';b=r(b,h,w)[1:h,o+=1:o+w];b[:,end]=10;print(b'...)

ทำงานด้วยข้อโต้แย้ง: julia -e 'o=2;h=18;w=40;include("codegolf.jl")'

หากคุณรู้สึกว่าการโทรจาก bash เป็นการโกงและคุณต้องการฟังก์ชั่นภายในล่ามดังนั้นรุ่นฟังก์ชั่นคือ 117 ไบต์ :)

f(o,h,w)=(r=repmat;b=r([' '],6,8);b[[1,4],:]='_';b[[2,3,23,24]]='|';b=r(b,h,w)[1:h,o+=1:o+w];b[:,end]=10;print(b'...))

การสาธิต

(ขอบคุณ @ glen-o สำหรับเคล็ดลับการประหยัดไบต์พิเศษ!)


ยินดีต้อนรับสู่ PPCG! ยินดีที่ได้พบคุณที่นี่!
Luis Mendo

โปรดทราบว่าอินพุตควรมีความชัดเจนเช่นคุณต้องการคำสั่งอินพุตบางประเภทสำหรับตัวแปรทั้งสามตัว หรือคุณสามารถใช้ฟังก์ชั่นที่รับเป็นอาร์กิวเมนต์และผลลัพธ์หรือแสดงผลลัพธ์ เมื่อเสร็จแล้วคุณอาจต้องการโพสต์ตัวอย่างออนไลน์โดยใช้ลองออนไลน์!
Luis Mendo


อา ใช่ฉันทำ! : p
Tasos Papastylianou

1
คุณสามารถบันทึกอักขระได้สองสามตัวโดยใช้ repmat แทนอัน ( repmat([32],6,8)) แล้วเปลี่ยนชื่อ repmat เพื่อโกนตัวละครอื่น ( g=repmat;b=g([32],6,8)และใหม่กว่าb=g(b,h,w)[1:h,o+1:o+w+1]) แล้วแทนที่ด้วยreinterpret mapจากการนับของฉันคุณจะประหยัด 9 ไบต์ระหว่างการเปลี่ยนแปลงเหล่านี้
เกลน O

3

JavaScript, 172 168 165 157 147 142 137 ไบต์

(O,W,H)=>{t='_'.repeat(W),x='|       '.repeat(W),f=t+`
`;for(i=0;++i<H;)f+=(!(i%3)?t:(i%6)>3?x.substr(O,W):x.substr(8-O,W))+`
`;return f}

N = (O,W,H)=>{t='_'.repeat(W),x='|       '.repeat(W),f=t+`
`;for(i=0;++i<H;)f+=(!(i%3)?t:(i%6)>3?x.substr(O,W):x.substr(8-O,W))+`
`;return f}

let test_data = [[6,44,11],
                 [2,20,10],
                 [1,1,1],
                 [1,2,3],
                 [3,80,21]];

for (test of test_data)
    console.log(N(...test));


ทำไมไม่ใช้s.repeat(w)แทนArray(w).fill(s).join``?
Neil

@ Neil: ความคิดที่ดี แต่ฉันคิดว่าบางสิ่งที่ดีกว่า
Yay295

และจากนั้นตระหนักถึงวิธีการแก้ปัญหาของคุณดีกว่าที่ฉันคิด ขอบคุณ!
Yay295

3

Dyalog APL ขนาด 29 ไบต์

↑⎕⍴⎕⍴¨a,4⌽¨a←'_',2⍴⊂⌽⎕⌽¯8↑'|'

การทดสอบ: 6 44 11, 2 20 10, 1 1 1, 1 2 3, 3 80 21

ถูกประเมินอินพุต เป็นสำนวนที่รันจากขวาไปซ้ายก็แจ้งให้สำหรับF, WและHอยู่ในลำดับที่

¯8↑'|' คือ ' |'

⎕⌽ คือหมุนมันสับ F ตัวอักษรจากด้านหน้าและวางไว้ที่ส่วนท้ายของสตริง

วิธีการอื่น ๆย้อนกลับ

'_',2⍴⊂ สร้าง 3-tuple ของ '_' ตามด้วยสำเนาสองชุดแยกกันของสตริง

a,4⌽¨a← ต่อท้ายการหมุน 4 รอบของทุกสิ่งจนถึงตอนนี้เราจบด้วย 6-tuple

⎕⍴¨ ปรับรูปร่างแต่ละองค์ประกอบให้มีความกว้าง

⎕⍴ ก่อร่างใหม่ตามความสูง

ผสมเวกเตอร์ของเวกเตอร์เป็นเมทริกซ์


2

อันที่จริง , 44 43 40 ไบต์

นี้เป็นพอร์ตที่จริงของอัลกอริทึมในคำตอบ JS นีล ยินดีต้อนรับคำแนะนำการเล่นกอล์ฟ ลองออนไลน์!

╗╝r⌠;6(%4&╜7^^╛'|7" "*+*t╛@H╛'_*3(%YI⌡Mi

Ungolfing:

          Takes implicit input in the order h, w, f.
╗╝        Save f to register 0. Save w to register 1.
r⌠...⌡M   Map over range [0..h-1]. Call this variable i.
  ;         Duplicate i
  6(%       i%6...
  4&        ...&4
  ╜7^^      ...^i^7. Call it c.
  ╛         Push w.
  '|7" "*+  The string "       |"
  *t╛@H     (("       |" * w)[c:])[:w]
  ╛'_*      Push "_" * w
  3(%       Push 3, move duplicate i to TOS, mod.
  YI        If not i%3, take "_"*w, else (("       |" * w)[c:])[:w]
            Function ends here.
i         Flatten the resulting list and print the bricks implicitly.


1

อ็อกเทฟ80 76 ไบต์

% in file codegolf.m
c(6,8)=0;c([1,4],:)=63;c([2,3,23,24])=92;char(repmat(c+32,h,w)(1:h,o+1:o+w))

เรียกใช้จากเทอร์มินัล: octave --eval "o=2;h=18;w=44; codegolf"

(หรือถ้าคุณคิดว่าการเรียกใช้เทอร์มินัลกำลังโกง: p ดังนั้นการใช้งานฟังก์ชั่นที่ไม่ระบุชื่อใช้เวลา 86 ไบต์ :)

c(6,8)=0;c([1,4],:)=63;c([2,3,23,24])=92;f=@(o,h,w)char(repmat(c+32,h,w)(1:h,o+1:o+w))

โทรหาf(2,18,44)ที่ล่ามระดับแปดเสียง


1

Bash + Sed, 411 395 381 370 ไบต์:

F=`printf '_%.s' $(eval echo {1..$2})`;V="       |";(($[($2-$1)/8]>0))&&L=`printf "$V%.s" $(eval echo {1..$[($2-$1)/8]})`||L=;Z=`printf "%$1.s|%s\n" e "$L"`;I=$[($2-(${#Z}-4))/8];(($I>0))&&W=`printf "$V%.s" $(eval echo {1..$I})`||W=;J=${Z:4}$W;for i in `eval echo {1..$[$3/3+1]}`;{ (($[$i%2]<1))&&O+="$F\n$J\n$J\n"||O+="$F\n$Z\n$Z\n";};echo "`echo -e "$O"|sed -n 1,$3p`"

นี่คือคำตอบแรกของฉันใน Bash หรือภาษาสคริปต์เชลล์ใด ๆ สำหรับเรื่องนั้น นี่คือคำตอบที่ยาวที่สุดที่นี่ Offset Width Heightใช้เวลาในลำดับของพื้นที่แยกอาร์กิวเมนต์บรรทัดคำสั่งในรูปแบบ นี่อาจจะสั้นกว่าที่เป็นอยู่ในปัจจุบันดังนั้นเคล็ดลับและ / หรือลูกเล่นใด ๆ สำหรับการลงเล่นกอล์ฟนี้จึงเป็นที่นิยมมากขึ้น


1

Delphi / Object Pascal, 305 , 302 , 292 bytes

โปรแกรมคอนโซลแบบเต็มที่อ่านพารามิเตอร์ 3 ตัว

uses SySutils,Math;var i,q,o,w,h:byte;begin o:=StrToInt(paramstr(1));w:=StrToInt(paramstr(2));h:=StrToInt(paramstr(3));for q:=0to h-1do begin for i:=1to w do if q mod 3=0then Write('_')else if IfThen(Odd(q div 3),((i+o)mod 8),((i-o)mod 8))=1then Write('|')else Write(' ');Writeln('');end end.

ungolfed

uses
  SySutils,
  Math;
var
  i,q,o,w,h:byte;
begin
  o:=StrToInt(paramstr(1));
  w:=StrToInt(paramstr(2));
  h:=StrToInt(paramstr(3));

  for q := 0 to h-1 do
  begin
    for i := 1 to w do
      if q mod 3 = 0  then
        Write('_')
      else
        if IfThen(Odd(q div 3),((i+o)mod 8),((i-o)mod 8)) = 1 then
          Write('|')
        else Write(' ');
    Writeln('');
  end
end.

น่าเศร้าที่ Delphi ไม่มีผู้ประกอบการที่ประกอบไปด้วยสามภาษาและมันเป็นภาษาที่ค่อนข้างสมบูรณ์

กรณีทดสอบ

D:\Test\CodeGolfWall\Win32\Debug>Project1.exe 2 20 10
____________________
  |       |       |
  |       |       |
____________________
      |       |
      |       |
____________________
  |       |       |
  |       |       |
____________________

D:\Test\CodeGolfWall\Win32\Debug>Project1.exe 6 44 11
____________________________________________
      |       |       |       |       |
      |       |       |       |       |
____________________________________________
  |       |       |       |       |       |
  |       |       |       |       |       |
____________________________________________
      |       |       |       |       |
      |       |       |       |       |
____________________________________________
  |       |       |       |       |       |

แก้ไข: สามารถโกนได้ 3 ไบต์โดยใช้ไบต์เป็นชนิดสำหรับตัวแปรทั้งหมด

แก้ไข 2: และแอปพลิเคชันคอนโซลไม่จำเป็นต้องมีการประกาศโปรแกรม -10

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