Semua dalam semua itu hanya, eh, trik lain dalam kode golf

64

Tujuan dari tantangan ini adalah untuk menghasilkan versi ASCII dari sampul album hebat ini oleh band rock Pink Floyd.

Persimpangan bata terbuat dari karakter _dan |. Batu bata memiliki lebar 7 dan tinggi 2 karakter, tidak termasuk persimpangan. Jadi unit dasar, termasuk persimpangan, adalah:

_________
|       |
|       |
_________

Setiap baris bata diimbangi oleh setengah lebar bata (4 karakter) sehubungan dengan baris sebelumnya:

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

Dinding parameter sebagai berikut. Semua parameter diukur dalam karakter termasuk persimpangan:

  1. Offset horizontal baris pertama F,. Ini adalah jarak antara margin kiri dan persimpangan vertikal pertama dari baris paling atas. (Ingat juga offset relatif setengah bata di antara baris). Mungkin nilai-nilainya yang 0, 1, ..., 7.
  2. Total lebar , W. Ini termasuk persimpangan. Nilainya adalah bilangan bulat positif.
  3. Jumlah tinggi , H. Ini termasuk persimpangan. Nilainya adalah bilangan bulat positif.

Bagian atas dinding selalu bertepatan dengan bagian atas baris. Bagian bawah mungkin kasar (jika tinggi total bukan kelipatan 3). Sebagai contoh, inilah output untuk 6, 44, 11:

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

dan penjelasan visual parameter:

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

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

Aturan tambahan

Anda dapat menyediakan program atau fungsi.

Format input fleksibel seperti biasa. Output dapat melalui STDOUT atau argumen yang dikembalikan oleh suatu fungsi. Dalam hal ini mungkin string dengan baris baru atau array string.

Ruang tambahan atau baris baru diizinkan.

Kode terpendek dalam byte menang.

Uji kasus

Input dalam urutan yang diberikan di atas, yaitu: offset horizontal baris pertama, total lebar, tinggi total.

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


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


1, 1, 1:
_


1, 2, 3:
__
 |
 |


3, 80, 21:
________________________________________________________________________________
   |       |       |       |       |       |       |       |       |       |    
   |       |       |       |       |       |       |       |       |       |    
________________________________________________________________________________
       |       |       |       |       |       |       |       |       |       |
       |       |       |       |       |       |       |       |       |       |
________________________________________________________________________________
   |       |       |       |       |       |       |       |       |       |    
   |       |       |       |       |       |       |       |       |       |    
________________________________________________________________________________
       |       |       |       |       |       |       |       |       |       |
       |       |       |       |       |       |       |       |       |       |
________________________________________________________________________________
   |       |       |       |       |       |       |       |       |       |    
   |       |       |       |       |       |       |       |       |       |    
________________________________________________________________________________
       |       |       |       |       |       |       |       |       |       |
       |       |       |       |       |       |       |       |       |       |
________________________________________________________________________________
   |       |       |       |       |       |       |       |       |       |    
   |       |       |       |       |       |       |       |       |       |    
Luis Mendo
sumber
34
Anda mendapatkan clickbait di hnq
Rohan Jhunjhunwala
2
@RohanJhunjhunwala Kedengarannya benar
Insane
4
Terima kasih karena telah mencocokkan jumlah suku kata dalam lirik ... Anda tidak akan percaya berapa banyak orang yang mencoba untuk memutar lagu dan membuat suku kata yang salah, itu membuat saya gila!
Chris Cirefice
1
@ ChrisCirefice Haha, terima kasih! Judul adalah bagian penting dari tantangan ini
Luis Mendo

Jawaban:

17

Pyth, 43 27 byte

Saya perlu golf sangat ... nilainya terlalu memalukan.

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

Cobalah online.

Masukkan format

6,44
11

Format output

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

Penjelasan

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.
Biarawati Bocor
sumber
Sepertinya Anda menang
selanjutnya
30

C, 86 85 83 82 byte

3 byte disimpan berkat Lynn.
1 byte disimpan berkat 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);}
orlp
sumber
1
for(i=0;++i<w*h;)atau jika idibuat lokal (param trick):for(;++i<w*h;)
charlie
ganti i;dengan i=1;dan simpan satu byte lagi di for loop.
xryl669
for(i=1;i<w*h;++i)-> for(i=0;++i<w*h;)menghemat 1
Yay295
@ xryl669 Itu tidak valid, fungsi harus dapat digunakan kembali.
orlp
@ Yay295 Saya menghargai charlie dengan itu, karena dia mempostingnya 7 jam sebelumnya.
orlp
26

C, 92 byte

b(f,w,h,y,x){for(y=0;y<h;y++,puts(""))for(x=0;x<w;x++)putchar(y%3?(x+y/3*4-f)%8?32:124:95);}

Diminta sebagai b(F, W, H).

Lynn
sumber
3
Hanya 92 byte di C? Itu luar biasa.
Leaky Nun
85 bytes
ceilingcat
13

Perl, 63 byte

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

Menghitung shebang sebagai 2, input diambil dari stdin, dipisahkan dengan spasi putih.

Contoh Penggunaan

$ echo 2 20 10 | perl bricks.pl
____________________
  |       |       |
  |       |       |
____________________
      |       |
      |       |
____________________
  |       |       |
  |       |       |
____________________
primo
sumber
11

Haskell, 83 byte

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

Ini mendefinisikan fungsi infiks terner !yang mengembalikan daftar string. Contoh penggunaan:

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

Bagaimana itu bekerja:

            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
nimi
sumber
1
Jawaban seperti ini membuat saya ingin belajar bahasa ini.
GuitarPicker
3
Saya memikirkan Haskell ketika membaca deskripsi masalah. "Ulangi tak terhingga" adalah fitur yang sangat rapi untuk dimiliki.
DLosc
10

JavaScript (ES6), 96 95 byte

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>

Penjelasan: Membuat string dari 7 spasi yang berulang ditambah |pola atau hanya yang diulang _, tetapi setidaknya cukup lama untuk dapat mengekstraksi wkarakter yang diperlukan untuk setiap baris. Tiga baris pertama mulai dari posisi f^7dan kemudian tiga baris berikutnya mulai dari posisi f^3, jadi saya mencapainya dengan mengubah bit 2 fpada setiap baris ketiga menggunakan bit yang berlawanan 2 pada dua baris terakhir dari setiap blok 6 untuk penghematan 1 byte.

Neil
sumber
7

MATL, 42 36 33 byte

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

Format masukan adalah: nCols, offset,nRows

Cobalah secara Online

Pendekatan di sini adalah kita mengatur "templat" yang kemudian kita indeks dengan menggunakan indeks baris ( [1 2 ... nRows]) dan indeks kolom digeser oleh input pertama ( [1 2 ... nCols] - shift). Berkat pengindeksan modular MATL, ini akan secara otomatis menghasilkan output ubin. Sebagai catatan tambahan, untuk menghemat ruang, secara teknis saya bekerja dengan versi template yang telah diubah dan kemudian hanya mengambil transpose ( !) di akhir.

Templatnya adalah ini:

________
       |
       |
________
  |     
  |     
Suever
sumber
1
Penggunaan kode run-length yang bagus untuk menghasilkan pola
Luis Mendo
6

Python 2, 93 88 byte

Level indentasi ke-2 adalah Tab Menyimpan beberapa byte berkat Leaky Nun dan beberapa modifikasi sendiri, juga sekarang memperbaiki offset:

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

kode sebelumnya:

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]

Panjang yang sama dengan lambda yang tidak disebutkan namanya:

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))
Karl Napf
sumber
F,W,H=input()
Leaky Nun
hapus spasi setelahprint
Leaky Nun
gunakan h/3%2*4atau h%6/3*4alih-alih4*(h%6>3)
Leaky Nun
Anda tidak membutuhkan tingkat lekukan kedua. Letakkan printpernyataan di baris yang sama dengan forpernyataan
Leaky Nun
"| "lebih pendek daripada ("|"+7*" ")jika saya hitung dengan benar
Leaky Nun
6

QBasic, 121 109 byte

(Diuji pada QB64)

Terima kasih kepada @DLosc karena telah memadukan IFpernyataan saya dengan matematika yang setara. Itu bernilai 12 byte.

Metode umum:

Loop melalui setiap sel satu per satu dan menentukan apakah itu harus menjadi _, atau |tergantung pada lokasi. MODpernyataan dan logika boolean digunakan untuk menentukan batas-batas batu bata dan berapa banyak untuk mengejutkan batu bata.

Kode:

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

Catatan Penggunaan:

QBasic mengharapkan input menjadi angka yang dipisahkan oleh koma.

GuitarPicker
sumber
1
Menggunakan matematika alih-alih IF/ THENmenambahkan lebih banyak tanda kurung tetapi menghemat 12 byte:?CHR$((y MOD 3>0)*(((x-(y MOD 6>3)*4)MOD 8=F)*92+63)+95);
DLosc
Terima kasih atas komentarnya. Di belakang kepala saya, saya mempertimbangkan untuk mengeksplorasi matematika, tetapi tidak. Saya melakukan sesuatu yang mirip dengan ini untuk mewarnai gambar di dalam pengiriman baru - baru ini , tetapi implementasi yang saya gunakan tidak memiliki operator MOD.
GuitarPicker
5

Java, 149 , 147 , 146 , 143 byte

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

Tidak Disatukan:

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

}

sumber
1
Mungkin Anda bisa mengganti urutan ternary dengan membandingkan > 0mana yang bisa menyelamatkan dua karakter. Dan tentu saja Anda dapat menggabungkan deklarasi ke int y=0,x.
Frozn
Seperti yang dikatakan oleh Frozn , Anda dapat menghapus int sebelum xdan menggunakan int y=0,xdi-for pertama sebagai gantinya untuk menyimpan 2 byte. Juga, saat ini Anda dapat berubah y%3==0menjadi y%3<1. (Hal ini tidak mungkin untuk ...%8==0ke ...&8<1meskipun, sejak operasi Anda bisa kembali angka negatif.)
Kevin Cruijssen
Dilakukan dan dilakukan. Anda benar, bahwa modulo kedua dapat kembali negatif dan itu terjadi selama debugging ketika saya awalnya menulis fungsi ini.
1
Tidak yakin bagaimana kami melewatkan ini, tetapi Anda dapat menghapus spasi pada parameter Anda untuk -2 byte .. Atau, gunakan int...osebagai parameter dan ubah wmenjadi o[1], hmenjadi o[2]dan omenjadi o[0]-3 byte.
Kevin Cruijssen
4

Rubi, 72 66 byte

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

Terima kasih @ Nilai Tinta untuk 6 byte!

Perkalian dan irisan string sederhana.

Berfungsi di Ruby 2.3.0 (Ideone versi 2.1 melemparkan kesalahan sintaksis).

Leibrug
sumber
2
Gunakan i%6/4*4sebagai ganti (i%6>3?4:0)dan gunakan ?_sebagai ganti '_', ?|alih-alih '|'.
Nilai Tinta
Terima kasih. Saya lupa tentang ?trik char tunggal, dan bagian "matematika" benar-benar mengesankan!
Leibrug
1
Saya pikir ((' '*7+?|)*w)[f^7^i%6&4,w]menghemat dua byte.
Neil
@Neil terima kasih. Saya akan mengedit kode ... segera setelah saya mengerti cara kerja saran Anda :)
Leibrug
4

Julia: 150 128 116 108 107 byte

# 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'...)

untuk dijalankan dengan argumen: julia -e 'o=2;h=18;w=40;include("codegolf.jl")'

Jika Anda merasa panggilan dari bash curang dan Anda menginginkan fungsi di dalam interpreter, maka versi fungsinya adalah 117 byte :)

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'...))

demo

(Terima kasih, @ glen-o untuk tip penghematan byte ekstra!)

Tasos Papastylianou
sumber
Selamat datang di PPCG! Senang melihatmu juga di sini!
Luis Mendo
Perhatikan bahwa input harus diambil secara eksplisit, yaitu Anda memerlukan semacam pernyataan input untuk ketiga variabel tersebut. Atau Anda dapat menggunakan fungsi yang menjadikannya sebagai argumen dan output atau menampilkan hasilnya. Setelah selesai, Anda mungkin ingin memposting demo online menggunakan Coba online!
Luis Mendo
ah. ya saya lakukan! : p
Tasos Papastylianou
1
Anda dapat menyimpan beberapa karakter dengan menggunakan repmat alih-alih yang ( repmat([32],6,8)), lalu mengganti nama repmat untuk mencukur karakter lain ( g=repmat;b=g([32],6,8)dan yang lebih baru b=g(b,h,w)[1:h,o+1:o+w+1]). Lalu ganti reinterpretdengan map. Menurut hitungan saya, Anda akan menghemat 9 byte di antara perubahan ini.
Glen O
3

JavaScript, 172 168 165 157 147 142 137 byte

(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));

Yay295
sumber
Mengapa tidak menggunakan s.repeat(w)bukan Array(w).fill(s).join``?
Neil
@ Neil: Ide bagus, tapi saya memikirkan sesuatu yang lebih baik.
Yay295
dan kemudian menyadari solusi Anda lebih baik dari yang saya kira. Terima kasih!
Yay295
3

Dyalog APL, 29 byte

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

tes: 6 44 11, 2 20 10, 1 1 1, 1 2 3, 3 80 21

input dievaluasi; sebagai ekspresi mengeksekusi dari kanan ke kiri, ia meminta untuk F, Wdan Hagar

¯8↑'|' aku s ' |'

⎕⌽ diputar, ia memotong karakter F dari depan dan menempatkannya di akhir string

yang lainnya berarti terbalik

'_',2⍴⊂ membuat 3-tupel dari '_' diikuti oleh dua salinan terpisah dari string sejauh ini

a,4⌽¨a← tambahkan 4-rotasi dari semuanya sejauh ini, kita berakhir dengan 6-tuple

⎕⍴¨ membentuk kembali setiap elemen dengan lebar

⎕⍴ membentuk kembali ke ketinggian

mencampur vektor vektor menjadi sebuah matriks

ngn
sumber
2

Sebenarnya , 44 43 40 byte

Ini sebenarnya pelabuhan algoritma dalam jawaban JS Neil . Saran golf diterima. Cobalah online!

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

Tidak melakukan pelanggaran:

          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.
Sherlock9
sumber
2

PowerShell , 101 88 byte

param($n,$w,$h)0..--$h|%{(('|       '*$w|% S*g(8-$n+4*($_%6-gt3))$w),('_'*$w))[!($_%3)]}

Cobalah online!

Veskah
sumber
1

Oktaf 80 76 byte

% 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))

untuk lari dari terminal: octave --eval "o=2;h=18;w=44; codegolf"

(Atau, jika Anda berpikir panggilan terminal curang: p maka implementasi fungsi anonim membutuhkan 86 byte :)

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))

Hubungi f(2,18,44)juru bahasa oktaf.

Tasos Papastylianou
sumber
1

Bash + Sed, 411 395 381 370 byte:

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`"

Nah, inilah jawaban pertama saya di Bash, atau bahasa skrip shell apa pun. Ini juga merupakan jawaban terpanjang di sini. Mengambil dalam urutan argumen baris perintah yang dipisahkan spasi dalam format Offset Width Height. Ini mungkin jauh lebih pendek daripada saat ini, jadi setiap tips dan / atau trik untuk bermain golf ini lebih dihargai.

R. Kap
sumber
1

Delphi / Object Pascal, 305 , 302 , 292 byte

Program konsol penuh yang membaca 3 parameter.

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.

Sedihnya, Delphi tidak memiliki operator ternary dan ini adalah bahasa yang sangat verbose.

Kasus cobaan

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

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

Sunting: Bisa mencukur 3 byte dengan menggunakan byte sebagai tipe untuk semua variabel.

Sunting 2: Dan aplikasi konsol tidak perlu deklarasi program, -10

RD
sumber