Tất cả trong tất cả chỉ là, uh, một mẹo khác trong mã golf


64

Mục đích của thử thách này là sản xuất một phiên bản ASCII của bìa album tuyệt vời này của ban nhạc rock Pink Floyd.

Các mối nối gạch được làm bằng các ký tự _|. Gạch có chiều rộng 7 và chiều cao 2 ký tự, không bao gồm các mối nối. Vì vậy, đơn vị cơ bản, bao gồm các nút giao, là:

_________
|       |
|       |
_________

Mỗi hàng gạch được bù bằng một nửa chiều rộng gạch (4 ký tự) so với hàng trước:

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

Bức tường được tham số hóa như sau. Tất cả các tham số được đo bằng ký tự bao gồm các mối nối:

  1. Bù ngang của hàng đầu tiên , F. Đây là khoảng cách giữa lề trái và đường giao nhau dọc đầu tiên của hàng trên cùng. (Cũng nhớ phần bù tương đối nửa viên gạch giữa các hàng). Giá trị có thể của nó là 0, 1, ..., 7.
  2. Tổng chiều rộng , W. Điều này bao gồm các mối nối. Giá trị của nó là một số nguyên dương.
  3. Tổng chiều cao , H. Điều này bao gồm các mối nối. Giá trị của nó là một số nguyên dương.

Đỉnh của bức tường luôn trùng với đỉnh của một hàng. Đáy có thể bị rách (nếu tổng chiều cao không phải là bội số của 3). Ví dụ, đây là đầu ra cho 6, 44, 11:

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

và một lời giải thích trực quan về các tham số:

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

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

Quy tắc bổ sung

Bạn có thể cung cấp một chương trình hoặc một chức năng.

Định dạng đầu vào linh hoạt như bình thường. Đầu ra có thể thông qua STDOUT hoặc một đối số được trả về bởi một hàm. Trong trường hợp này, nó có thể là một chuỗi với dòng mới hoặc một chuỗi các chuỗi.

Không gian lưu trữ hoặc dòng mới được cho phép.

Mã ngắn nhất trong byte thắng.

Các trường hợp thử nghiệm

Các đầu vào theo thứ tự được đưa ra ở trên, đó là: bù ngang của hàng đầu tiên, tổng chiều rộng, tổng chiều cao.

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


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


1, 1, 1:
_


1, 2, 3:
__
 |
 |


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

34
Bạn đã cho tôi với clickbait trong hnq
Rohan Jhunjhunwala

2
@RohanJhunjhunwala Âm thanh đúng
điên

4
Cảm ơn bạn đã kết hợp số lượng âm tiết trong lời bài hát ... bạn sẽ không tin có bao nhiêu người cố gắng loại bỏ một bài hát và nhận sai âm tiết, điều đó khiến tôi phát điên!
Chris Cirefice 17/8/2016

1
@ChrisCirefice Haha, cảm ơn! Tiêu đề là một phần quan trọng của thử thách này
Luis Mendo

Câu trả lời:


17

Bình thường, 43 27 byte

Tôi cần phải đánh golf nó thật nhiều ... điểm số quá đáng xấu hổ.

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

Hãy thử trực tuyến rồi.

định dạng đầu vào

6,44
11

Định dạng đầu ra

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

Giải trình

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.

có vẻ như bạn thắng
lời giới thiệu

30

C, 86 85 83 82 byte

3 byte được lưu nhờ Lynn.
Lưu 1 byte nhờ 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;)hoặc nếu iđược thực hiện tại địa phương (param trick):for(;++i<w*h;)
charlie

thay thế i;bằng i=1;và lưu thêm một byte trong vòng lặp for.
xryl669

for(i=1;i<w*h;++i)-> for(i=0;++i<w*h;)tiết kiệm 1
Yay295

@ xryl669 Điều đó không hợp lệ, các chức năng phải được sử dụng lại.
orlp

@ Yay295 Tôi ghi có charlie với điều đó, vì anh ấy đã đăng nó 7 giờ trước đó.
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);}

Gọi như b(F, W, H).


3
Chỉ có 92 byte trong C? Thật phi thường.
Leaky Nun


13

Perl, 63 byte

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

Đếm shebang là 2, đầu vào được lấy từ stdin, khoảng trắng được phân tách.

Sử dụng mẫu

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

11

Haskell, 83 byte

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

Điều này xác định một hàm infix ternary !trả về một danh sách các chuỗi. Ví dụ sử dụng:

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

Làm thế nào nó hoạt động:

            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
Câu trả lời như thế này khiến tôi muốn học ngôn ngữ này.
GuitarPicker

3
Tôi nghĩ về Haskell khi đọc mô tả vấn đề. "Lặp lại vô hạn" là một tính năng thực sự gọn gàng cần có.
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>

Giải thích: Tạo một chuỗi gồm 7 khoảng trắng lặp lại cộng với |mẫu hoặc chỉ lặp lại _s, nhưng ít nhất đủ dài để có thể trích xuất các wký tự cần thiết cho mỗi hàng. Ba hàng đầu tiên bắt đầu tại vị trí f^7và sau đó ba hàng tiếp theo bắt đầu tại vị trí f^3, vì vậy tôi đạt được điều này bằng cách chuyển bit 2 của fmỗi hàng thứ ba bằng cách sử dụng bit 2 đối diện trên hai hàng cuối của mỗi khối 6 để tiết kiệm 1 byte.


7

MATL, 42 36 33 byte

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

Định dạng đầu vào là: nCols, offset,nRows

Dùng thử trực tuyến

Cách tiếp cận ở đây là chúng tôi thiết lập một "mẫu" mà sau đó chúng tôi lập chỉ mục bằng cách sử dụng các chỉ mục hàng ( [1 2 ... nRows]) và các chỉ mục cột được dịch chuyển bởi đầu vào đầu tiên ( [1 2 ... nCols] - shift). Nhờ lập chỉ mục mô-đun của MATL, nó sẽ tự động dẫn đến kết quả đầu ra lát gạch. Như một lưu ý phụ, để tiết kiệm không gian, về mặt kỹ thuật, tôi làm việc với một phiên bản chuyển đổi của mẫu và sau đó chỉ cần chuyển đổi ( !) ở cuối.

Mẫu này là:

________
       |
       |
________
  |     
  |     

1
Sử dụng tốt mã hóa độ dài chạy để tạo mẫu
Luis Mendo

6

Python 2, 93 88 byte

Cấp độ thụt thứ 2 là tab Lưu một số byte nhờ Leaky Nun và một số sửa đổi riêng, giờ đây cũng chính xác bù:

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

mã trước đó:

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]

Cùng chiều dài với lambda không tên:

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()
Nữ tu bị rò rỉ

xóa khoảng trắng sauprint
Leaky Nun

sử dụng h/3%2*4hoặc h%6/3*4thay vì4*(h%6>3)
Leaky Nun

Bạn không cần mức thụt thứ hai. Chỉ cần đặt printtuyên bố ở cùng dòng với fortuyên bố
Leaky Nun

"| "ngắn hơn ("|"+7*" ")nếu tôi đếm chính xác
Leaky Nun

6

QBasic, 121 109 byte

(Đã thử nghiệm trên QB64)

Cảm ơn @DLosc đã đánh golf IFtuyên bố của tôi với một phép toán tương đương. Đó là giá trị 12 byte.

Phương pháp chung:

Vòng qua mỗi tế bào cùng một lúc và xác định xem nó phải là một _, hoặc |tùy thuộc vào vị trí của nó. MODcâu lệnh và logic boolean được sử dụng để xác định ranh giới gạch và mức độ sắp xếp các viên gạch.

Mã số:

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

Chú thích sử dụng:

QBasic dự kiến ​​đầu vào là các số được phân tách bằng dấu phẩy.


1
Sử dụng toán học thay vì IF/ THENthêm nhiều dấu ngoặc đơn hơn nhưng tiết kiệm 12 byte:?CHR$((y MOD 3>0)*(((x-(y MOD 6>3)*4)MOD 8=F)*92+63)+95);
DLosc

Cảm ơn đã bình luận. Trong đầu tôi đã xem xét việc khám phá toán học, nhưng không. Tôi đã làm một cái gì đó tương tự như thế này để tô màu một hình ảnh trong lần gửi gần đây , nhưng việc triển khai tôi sử dụng không có toán tử MOD.
GuitarPicker 17/8/2016

5

Java, 149 , 147 , 146 , 143 byte

Chơi gôn

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

Ung dung:

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
Có lẽ bạn có thể chuyển đổi thứ tự của chim nhạn bằng cách so sánh với > 0thứ có thể cứu hai nhân vật. Và tất nhiên bạn có thể kết hợp các khai báo để int y=0,x.
Frozn

Như đã nói bởi Frozn , bạn có thể loại bỏ int trước xvà sử dụng int y=0,xtrong vòng lặp for đầu tiên thay vào đó để lưu 2 byte. Ngoài ra, hiện tại bạn có thể thay đổi y%3==0thành y%3<1. (Điều này là không thể cho ...%8==0đến ...&8<1tuy nhiên, kể từ khi hoạt động của bạn có thể trở lại một số âm.)
Kevin Cruijssen

Ngay và luôn. Bạn đã đúng, modulo thứ hai có thể trả về âm và nó đã làm trong quá trình gỡ lỗi khi tôi ban đầu viết hàm này.

1
Không chắc thế nào chúng ta bỏ lỡ này, nhưng bạn có thể loại bỏ các khoảng trống ở các thông số của bạn cho -2 byte .. Ngoài ra, sử dụng int...onhư tham số và thay đổi wđể o[1], hđến o[2]ođể o[0]là -3 byte để thay thế.
Kevin Cruijssen

4

Hồng ngọc 72 66 byte

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

Cảm ơn @Value Ink cho 6 byte!

Nhân chuỗi đơn giản và cắt.

Hoạt động trong Ruby 2.3.0 (Lỗi cú pháp phiên bản 2.1 của Ideone).


2
Sử dụng i%6/4*4thay vì (i%6>3?4:0)và sử dụng ?_thay vì '_', ?|thay vì '|'.
Mực giá trị

Cảm ơn bạn. Tôi đã quên mất ?một trò lừa char và phần "toán học" thực sự ấn tượng!
Leibrug 17/8/2016

1
Tôi nghĩ ((' '*7+?|)*w)[f^7^i%6&4,w]giúp bạn tiết kiệm hai byte.
Neil

Cảm ơn bạn @Neil. Tôi sẽ chỉnh sửa mã ... ngay khi tôi hiểu cách đề xuất của bạn hoạt động :)
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'...)

để chạy với các đối số: julia -e 'o=2;h=18;w=40;include("codegolf.jl")'

Nếu bạn cảm thấy việc gọi từ bash là gian lận và bạn muốn có một hàm bên trong trình thông dịch, thì phiên bản hàm là 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'...))

bản giới thiệu

(Cảm ơn, @ glen-o về mẹo tiết kiệm byte bổ sung!)


Chào mừng đến với PPCG! Rất vui được gặp bạn ở đây!
Luis Mendo

Lưu ý rằng đầu vào nên được thực hiện rõ ràng, tức là bạn cần một số loại câu lệnh đầu vào cho ba biến đó. Hoặc bạn có thể sử dụng một hàm lấy chúng làm đối số và đầu ra hoặc hiển thị kết quả. Khi bạn đã hoàn tất, bạn có thể muốn đăng một bản demo trực tuyến bằng cách sử dụng Thử trực tuyến!
Luis Mendo


Ah. vâng tôi đã làm : p
Tasos Papastylianou

1
Bạn có thể lưu một vài ký tự bằng cách sử dụng repmat thay vì những ký tự ( repmat([32],6,8)), sau đó đổi tên repmat để cạo một ký tự khác ( g=repmat;b=g([32],6,8)và sau đó b=g(b,h,w)[1:h,o+1:o+w+1]). Sau đó thay thế reinterpretbằng map. Theo tính toán của tôi, bạn sẽ lưu 9 byte giữa những thay đổi này.
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));


Tại sao không sử dụng s.repeat(w)thay thế Array(w).fill(s).join``?
Neil

@Neil: Ý kiến ​​hay, nhưng tôi nghĩ ra thứ gì đó tốt hơn.
Yay295

và sau đó nhận ra giải pháp của bạn tốt hơn tôi nghĩ. Cảm ơn!
Yay295

3

APL Dyalog, 29 byte

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

xét nghiệm: 6 44 11, 2 20 10, 1 1 1, 1 2 3, 3 80 21

được đánh giá đầu vào; như biểu thức thực hiện từ phải sang trái, nó nhắc nhở cho F, WHtheo thứ tự

¯8↑'|'' |'

⎕⌽ đang xoay, nó cắt các ký tự F từ phía trước và đặt chúng ở cuối chuỗi

nghĩa khác

'_',2⍴⊂ tạo ra một bộ ba '_' theo sau là hai bản sao riêng biệt của chuỗi cho đến nay

a,4⌽¨a← nối 4 vòng của mọi thứ cho đến nay, chúng tôi kết thúc với 6-tuple

⎕⍴¨ định hình lại từng yếu tố theo chiều rộng

⎕⍴ định hình lại chiều cao

trộn vectơ của vectơ vào một ma trận


2

Trên thực tế , 44 43 40 byte

Đây là một cổng thực sự của thuật toán trong câu trả lời JS của Neil . Gợi ý chơi golf chào mừng. Hãy thử trực tuyến!

╗╝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

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

để chạy từ thiết bị đầu cuối: octave --eval "o=2;h=18;w=44; codegolf"

(cách khác, nếu bạn nghĩ rằng cuộc gọi đầu cuối là gian lận: p thì việc thực hiện chức năng ẩn danh mất 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))

Gọi f(2,18,44)tại phiên dịch quãng tám.


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

Vâng, đây là câu trả lời đầu tiên của tôi trong Bash, hoặc bất kỳ ngôn ngữ kịch bản shell nào cho vấn đề đó. Đây cũng là câu trả lời dài nhất ở đây. Đưa vào một chuỗi các đối số dòng lệnh được phân tách bằng dấu cách trong định dạng Offset Width Height. Điều này có thể có thể ngắn hơn rất nhiều so với hiện tại, vì vậy bất kỳ mẹo và / hoặc thủ thuật để chơi golf này xuống nhiều hơn đều được đánh giá cao.


1

Delphi / Object Pascal, 305 , 302 , 292 byte

Chương trình điều khiển đầy đủ đọc 3 thông số.

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.

vô dụng

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.

Đáng buồn thay, Delphi không có một toán tử ternary và nó là một ngôn ngữ dài dòng.

trường hợp thử nghiệm

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

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

Chỉnh sửa: Có thể cạo 3 byte bằng cách sử dụng byte làm kiểu cho tất cả các biến.

Chỉnh sửa 2: Và các ứng dụng bảng điều khiển không cần khai báo chương trình, -10

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.