Podsumowując, to po prostu kolejna sztuczka w golfie kodowym

64

Celem tego wyzwania jest wyprodukowanie wersji ASCII okładki tego wspaniałego albumu zespołu rockowego Pink Floyd.

Ceglane skrzyżowania składają się z postaci _i |. Cegły mają szerokość 7 i wysokość 2 znaki, z wyłączeniem skrzyżowań. Zatem podstawową jednostką, w tym skrzyżowaniami, jest:

_________
|       |
|       |
_________

Każdy rząd cegieł jest przesunięty o połowę szerokości cegły (4 znaki) w stosunku do poprzedniego rzędu:

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

Ściana jest parametryzowana w następujący sposób. Wszystkie parametry są mierzone w znakach, w tym skrzyżowaniach:

  1. Poziome przesunięcie pierwszego rzędu F. Jest to odległość między lewym marginesem a pierwszym pionowym skrzyżowaniem najwyższego rzędu. (Pamiętaj również o względnym przesunięciu między cegłami między rzędami). Jego możliwych wartości 0, 1, ..., 7.
  2. Całkowita szerokość , W. Obejmuje to skrzyżowania. Jego wartość jest dodatnią liczbą całkowitą.
  3. Łączna wysokość , H. Obejmuje to skrzyżowania. Jego wartość jest dodatnią liczbą całkowitą.

Szczyt ściany zawsze pokrywa się z górą rzędu. Dno może być poszarpane (jeśli całkowita wysokość nie jest wielokrotnością 3). Na przykład, tutaj jest wyjście 6, 44, 11:

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

oraz wizualne objaśnienie parametrów:

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

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

Dodatkowe zasady

Możesz podać program lub funkcję.

Format wejściowy jest elastyczny jak zwykle. Dane wyjściowe mogą być przekazywane przez STDOUT lub argument zwracany przez funkcję. W tym przypadku może to być ciąg znaków z nowymi liniami lub tablica ciągów.

Końcowe spacje lub znaki nowej linii są dozwolone.

Najkrótszy kod w bajtach wygrywa.

Przypadki testowe

Dane wejściowe są w podanej wyżej kolejności, to znaczy: przesunięcie w poziomie pierwszego rzędu, całkowita szerokość, całkowita wysokość.

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


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


1, 1, 1:
_


1, 2, 3:
__
 |
 |


3, 80, 21:
________________________________________________________________________________
   |       |       |       |       |       |       |       |       |       |    
   |       |       |       |       |       |       |       |       |       |    
________________________________________________________________________________
       |       |       |       |       |       |       |       |       |       |
       |       |       |       |       |       |       |       |       |       |
________________________________________________________________________________
   |       |       |       |       |       |       |       |       |       |    
   |       |       |       |       |       |       |       |       |       |    
________________________________________________________________________________
       |       |       |       |       |       |       |       |       |       |
       |       |       |       |       |       |       |       |       |       |
________________________________________________________________________________
   |       |       |       |       |       |       |       |       |       |    
   |       |       |       |       |       |       |       |       |       |    
________________________________________________________________________________
       |       |       |       |       |       |       |       |       |       |
       |       |       |       |       |       |       |       |       |       |
________________________________________________________________________________
   |       |       |       |       |       |       |       |       |       |    
   |       |       |       |       |       |       |       |       |       |    
Luis Mendo
źródło
34
Dostałeś mnie z kliknięciem w hnq
Rohan Jhunjhunwala
2
@RohanJhunjhunwala Brzmi dobrze
Insane
4
Dziękuję za dopasowanie liczby sylab w tekście ... nie uwierzysz, ile osób próbuje wyodrębnić piosenkę i źle zrozumie sylabację, doprowadza mnie to do szału!
Chris Cirefice,
1
@ChrisCirefice Haha, dzięki! Tytuł był ważną częścią tego wyzwania
Luis Mendo

Odpowiedzi:

17

Pyth, 43 27 bajtów

I potrzebują do golfa to mocno ... wynik jest zbyt wstydliwe.

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

Wypróbuj już online.

Format wejściowy

6,44
11

Format wyjściowy

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

Wyjaśnienie

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.
Leaky Nun
źródło
Wygląda na to, że
wygrałeś
30

C, 86 85 83 82 bajtów

3 bajty zapisane dzięki Lynn.
1 bajt zapisany dzięki 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
źródło
1
for(i=0;++i<w*h;)lub jeśli ijest lokalny (param trick):for(;++i<w*h;)
charlie
zamień i;na i=1;i zapisz jeszcze jeden bajt w pętli for.
xryl669,
for(i=1;i<w*h;++i)-> for(i=0;++i<w*h;)zapisuje 1
Yay295
@ xryl669 To nie jest poprawne, funkcje muszą być wielokrotnego użytku.
orlp
@ Yay295 Przypisałem to Charliemu, ponieważ opublikował go 7 godzin wcześniej.
orlp
26

C, 92 bajty

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

Wywołaj jako b(F, W, H).

Lynn
źródło
3
Tylko 92 bajty w C? To jest niesamowite.
Leaky Nun
85 bajtów
pułapkap
13

Perl, 63 bajty

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

Licząc shebang jako 2, dane wejściowe są pobierane ze standardowego wejścia, oddzielone spacjami.

Przykładowe użycie

$ echo 2 20 10 | perl bricks.pl
____________________
  |       |       |
  |       |       |
____________________
      |       |
      |       |
____________________
  |       |       |
  |       |       |
____________________
primo
źródło
11

Haskell, 83 bajty

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

Definiuje to potrójną funkcję poprawki, !która zwraca listę ciągów znaków. Przykład użycia:

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

Jak to działa:

            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
źródło
1
Takie odpowiedzi sprawiają, że chcę się uczyć tego języka.
GuitarPicker,
3
Myślałem o Haskellu, czytając opis problemu. „Powtarzanie w nieskończoność” to naprawdę fajna funkcja.
DLosc
10

JavaScript (ES6), 96 95 bajtów

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>

Objaśnienie: Tworzy ciąg powtarzających się 7 spacji plus |wzorzec lub tylko powtarzane _s, ale co najmniej wystarczająco długi, aby móc wyodrębnić wznaki wymagane dla każdego wiersza. Pierwsze trzy rzędy zaczynają się od pozycji, f^7a następnie następne trzy rzędy zaczynają się od pozycji f^3, więc osiągam to poprzez przełączanie bitu 2 z fco trzeciego rzędu za pomocą przeciwnego bitu 2 w ostatnich dwóch rzędach każdego bloku 6 dla oszczędności 1 bajt.

Neil
źródło
7

MATL, 42 36 33 bajtów

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

Format wejściowy jest: nCols, offset,nRows

Wypróbuj online

Podejście polega na tym, że ustawiamy „szablon”, do którego następnie indeksujemy, używając indeksów wierszy ( [1 2 ... nRows]) i indeksów kolumn przesuniętych o pierwsze wejście ( [1 2 ... nCols] - shift). Dzięki modułowemu indeksowaniu MATL, automatycznie wygeneruje kafelkowe wyjście. Na marginesie, aby zaoszczędzić trochę miejsca, technicznie pracuję z transponowaną wersją szablonu, a następnie biorę transpozycję ( !) na końcu.

Szablon jest następujący:

________
       |
       |
________
  |     
  |     
Suever
źródło
1
Dobre wykorzystanie kodowania długości przebiegu do wygenerowania wzoru
Luis Mendo
6

Python 2, 93 88 bajtów

Drugi poziom wcięcia to zakładka Oszczędność niektórych bajtów dzięki Dziurawej Zakonnicy i własnym modyfikacjom, teraz także poprawne przesunięcie:

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

poprzedni kod:

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]

Taka sama długość jak nienazwana lambda:

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
źródło
F,W,H=input()
Leaky Nun
usuń spację poprint
Leaky Nun
użyj h/3%2*4lub h%6/3*4zamiast4*(h%6>3)
Leaky Nun
Nie potrzebujesz drugiego poziomu wcięcia. Wystarczy umieścić printoświadczenie w tym samym wierszu, co foroświadczenie
Leaky Nun
"| "jest krótszy niż, ("|"+7*" ")jeśli liczę poprawnie
Leaky Nun
6

QBasic, 121 109 bajtów

(Testowane na QB64)

Dzięki @DLosc za grę w golfa moim IFstwierdzeniem z matematycznym odpowiednikiem. To było warte 12 bajtów.

Ogólna metoda:

Pętli każdej komórce jednej na raz i ustalić, czy powinien to być _, albo |w zależności od jego lokalizacji. MODinstrukcje i logika logiczna służą do określania granic cegieł i tego, jak bardzo rozłożyć cegły.

Kod:

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

Uwaga dotycząca użytkowania:

QBasic oczekuje, że dane wejściowe będą liczbami oddzielonymi przecinkami.

GuitarPicker
źródło
1
Używanie matematyki zamiast IF/ THENdodaje jeszcze więcej nawiasów, ale oszczędza 12 bajtów:?CHR$((y MOD 3>0)*(((x-(y MOD 6>3)*4)MOD 8=F)*92+63)+95);
DLosc
Dziękuję za komentarz. Z tyłu głowy zastanawiałem się nad poznaniem matematyki, ale nie zrobiłem tego. Zrobiłem coś podobnego do tego, aby pokolorować obraz w ostatnim zgłoszeniu , ale implementacja, której użyłem, nie miała operatora MOD.
GuitarPicker
5

Java, 149 , 147 , 146 , 143 bajtów

Gra w golfa:

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

Nie golfowany:

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

}

źródło
1
Może mógłbyś zmienić kolejność trójki, porównując z tym, > 0co mogłoby zapisać dwie postacie. I oczywiście można łączyć deklaracje z int y=0,x.
Frozn
Jak powiedział Frozn , możesz usunąć int przed xi użyć int y=0,xw pierwszej pętli for, aby zapisać 2 bajty. Ponadto obecnie możesz zmienić y%3==0na y%3<1. (To nie jest możliwe, ...%8==0aby ...&8<1chociaż, ponieważ operacja może wrócić liczbę ujemną.)
Kevin Cruijssen
Gotowe i gotowe. Masz rację, ten drugi moduł może zwracać wartość ujemną, a zrobił to podczas debugowania, kiedy pierwotnie napisałem tę funkcję.
1
Nie jestem pewien, jak to przeoczyliśmy, ale możesz usunąć spacje przy swoich parametrach dla -2 bajtów. Alternatywnie, użycie int...ojako parametru i zamiana wna o[1], hna o[2]i ona o[0]to -3 bajty.
Kevin Cruijssen
4

Rubin, 72 66 bajtów

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

Dzięki @Value Ink za 6 bajtów!

Proste mnożenie i krojenie ciągów.

Działa w Ruby 2.3.0 (w wersji 2.1 ideone wystąpił błąd składniowy).

Leibrug
źródło
2
Użyj i%6/4*4zamiast (i%6>3?4:0)i użyj ?_zamiast '_', ?|zamiast '|'.
Wartość tuszu
Dziękuję Ci. Zapomniałem o ?sztuczce single char, a część „matematyczna” robi wrażenie!
Leibrug,
1
Myślę, że ((' '*7+?|)*w)[f^7^i%6&4,w]oszczędza ci dwa bajty.
Neil,
Dziękuję @Neil.
Zmodyfikuję
4

Julia: 150 128 116 108 107 bajtów

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

uruchomić z argumentami: julia -e 'o=2;h=18;w=40;include("codegolf.jl")'

Jeśli czujesz, że dzwonienie z bash jest oszustwem i chcesz mieć funkcję wewnątrz interpretera, to wersja funkcji ma 117 bajtów :)

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

próbny

(Dzięki, @ glen-o za dodatkową wskazówkę oszczędzającą bajty!)

Tasos Papastylianou
źródło
Witamy w PPCG! Miło cię widzieć także tutaj!
Luis Mendo,
Zauważ, że dane wejściowe powinny być podejmowane jawnie, tzn. Potrzebujesz jakiejś instrukcji wejściowej dla tych trzech zmiennych. Lub możesz użyć funkcji, która bierze je jako argumenty i wyniki lub wyświetla wynik. Gdy skończysz, możesz opublikować demo online za pomocą Wypróbuj online!
Luis Mendo,
ah. tak! : p
Tasos Papastylianou
1
Możesz zapisać kilka znaków, używając repmat zamiast z nich ( repmat([32],6,8)), a następnie zmieniając nazwę repmat, aby ogolić inny znak ( g=repmat;b=g([32],6,8)i później b=g(b,h,w)[1:h,o+1:o+w+1]). Następnie zastąpić reinterpretz map. Według moich obliczeń zaoszczędzisz 9 bajtów między tymi zmianami.
Glen O
3

JavaScript, 172 168 165 157 147 142 137 137 bajtów

(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
źródło
Dlaczego nie użyć s.repeat(w)zamiast Array(w).fill(s).join``?
Neil,
@Neil: Dobry pomysł, ale pomyślałem o czymś lepszym.
Yay295,
i wtedy zdałem sobie sprawę, że twoje rozwiązanie jest lepsze niż myślałem. Dzięki!
Yay295,
3

Dyalog APL, 29 bajtów

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

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

jest analizowany wkład; jako wyrażenie wykonuje od prawej do lewej, to prosi o F, Wi Hw tej kolejności

¯8↑'|' jest ' |'

⎕⌽ obraca się, tnie znaki F z przodu i kładzie je na końcu łańcucha

drugi oznacza odwrócenie

'_',2⍴⊂ tworzy 3 krotkę „_”, a następnie dwie osobne kopie ciągu

a,4⌽¨a← dodajmy 4-rotację wszystkiego do tej pory, otrzymujemy 6-krotność

⎕⍴¨ przekształć każdy element na szerokość

⎕⍴ zmienić kształt na wysokość

zmieszać wektor wektorów w macierz

ngn
źródło
2

Faktycznie , 44 43 40 bajtów

Jest to właściwie port algorytmu w odpowiedzi JS Neila . Sugestie dotyczące gry w golfa mile widziane. Wypróbuj online!

╗╝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.
Sherlock9
źródło
2

PowerShell , 101 88 bajtów

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

Wypróbuj online!

Veskah
źródło
1

Oktawa 80 76 bajtów

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

uruchomić z terminala: octave --eval "o=2;h=18;w=44; codegolf"

(alternatywnie, jeśli uważasz, że wywołanie terminalu oszukuje: p, wówczas implementacja funkcji anonimowej zajmuje 86 bajtów :)

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

Zadzwoń f(2,18,44)do tłumacza oktawy.

Tasos Papastylianou
źródło
1

Bash + Sed, 411 395 381 370 bajtów:

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

Cóż, oto moja pierwsza odpowiedź w języku Bash lub w dowolnym innym języku skryptowym. Jest to także zdecydowanie najdłuższa odpowiedź tutaj. Pobiera sekwencję rozdzielonych spacjami argumentów wiersza poleceń w formacie Offset Width Height. Może to być prawdopodobnie o wiele krótsze niż obecnie, więc wszelkie wskazówki i / lub triki dotyczące gry w golfa są doceniane bardziej.

R. Kap
źródło
1

Delphi / Object Pascal, 305 , 302 , 292 bajtów

Pełny program konsoli, który odczytuje 3 parametry.

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.

bez golfa

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.

Niestety, Delphi nie ma potrójnego operatora i jest to dość szczegółowy język.

walizka testowa

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

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

Edycja: Można ogolić 3 bajty, używając bajtu jako typu dla wszystkich zmiennych.

Edycja 2: A aplikacje konsolowe nie potrzebują deklaracji programu, -10

R & D
źródło