Không quá khó để viết mã này phải không?


17

Bạn phải viết một chương trình hoặc một chức năng bằng bất kỳ ngôn ngữ nào tạo ra mẫu này:

~|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||~
|~|||||||||||||||||||||||||||||||||||||||||||||||||||||||||~|
||~|||||||||||||||||||||||||||||||||||||||||||||||||||||||~||
|||~|||||||||||||||||||||||||||||||||||||||||||||||||||||~|||
||||~|||||||||||||||||||||||||||||||||||||||||||||||||||~||||
|||||~|||||||||||||||||||||||||||||||||||||||||||||||||~|||||
||||||~|||||||||||||||||||||||||||||||||||||||||||||||~||||||
|||||||~|||||||||||||||||||||||||||||||||||||||||||||~|||||||
||||||||~|||||||||||||||||||||||||||||||||||||||||||~||||||||
|||||||||~|||||||||||||||||||||||||||||||||||||||||~|||||||||
||||||||||~|||||||||||||||||||~|||||||||||||||||||~||||||||||
|||||||||||~|||||||||||||||||~|~|||||||||||||||||~|||||||||||
||||||||||||~|||||||||||||||~|||~|||||||||||||||~||||||||||||
|||||||||||||~|||||||||||||~|||||~|||||||||||||~|||||||||||||
||||||||||||||~|||||||||||~|||||||~|||||||||||~||||||||||||||
|||||||||||||||~|||||||||~|||||||||~|||||||||~|||||||||||||||
||||||||||||||||~|||||||~|||||||||||~|||||||~||||||||||||||||
|||||||||||||||||~|||||~|||||||||||||~|||||~|||||||||||||||||
||||||||||||||||||~|||~|||||||||||||||~|||~||||||||||||||||||
|||||||||||||||||||~|~|||||||||||||||||~|~|||||||||||||||||||

Đầu ra bao gồm 20 dòng gồm 61 ký tự.

Quy tắc

  • Sơ hở tiêu chuẩn bị cấm
  • Có thể có một dòng mới duy nhất ở cuối đầu ra
  • Có thể không có bất kỳ khoảng trắng ở cuối trên bất kỳ dòng nào của đầu ra

Không có dòng mới, tổng kiểm tra md5 của đầu ra là fde4e3b4606bf9f8c314131c93988e96.

Với một dòng mới, tổng kiểm tra md5 của đầu ra là 1f0b43db4fec6594be202c8339024cb7.

Đây là , vì vậy mã ngắn nhất tính bằng byte sẽ thắng.


Tôi đã chỉnh sửa thử thách để làm cho nó rõ ràng hơn một chút, thoải mái quay lại chỉnh sửa.
Kritixi Lithos

1
Tôi đã vẽ một mẫu tò mò ... rextester.com/WXZV81312
sergiol

Câu trả lời:


13

C (gcc) , 97 82 81 80 byte

Đã chơi 15 byte sau khi học absđược tích hợp sẵn trong C, một byte bổ sung nhờ Rogem đã chỉ ra rằng các khai báo của các biến của tôi có thể được chuyển đến hàm và một byte khác nhờ trần nhà để đề xuất x=31;--x+31thay vì x=-31;++x<31.

f(x,y){for(y=21;--y;puts(""))for(x=31;--x+31;)printf(abs(10-abs(x))-y?"|":"~");}

Hãy thử trực tuyến!

Điều này đầu ra với một dòng mới. Các chức năng flàm đầu ra.

Giải trình

Đầu ra có thể được nêu dưới dạng biểu đồ.

~|||||||||||||||||||||||||||||+|||||||||||||||||||||||||||||~
|~||||||||||||||||||||||||||||+||||||||||||||||||||||||||||~|
||~|||||||||||||||||||||||||||+|||||||||||||||||||||||||||~||
|||~||||||||||||||||||||||||||+||||||||||||||||||||||||||~|||
||||~|||||||||||||||||||||||||+|||||||||||||||||||||||||~||||
|||||~||||||||||||||||||||||||+||||||||||||||||||||||||~|||||
||||||~|||||||||||||||||||||||+|||||||||||||||||||||||~||||||
|||||||~||||||||||||||||||||||+||||||||||||||||||||||~|||||||
||||||||~|||||||||||||||||||||+|||||||||||||||||||||~||||||||
|||||||||~||||||||||||||||||||+||||||||||||||||||||~|||||||||
||||||||||~|||||||||||||||||||+|||||||||||||||||||~||||||||||
|||||||||||~|||||||||||||||||~+~|||||||||||||||||~|||||||||||
||||||||||||~|||||||||||||||~|+|~|||||||||||||||~||||||||||||
|||||||||||||~|||||||||||||~||+||~|||||||||||||~|||||||||||||
||||||||||||||~|||||||||||~|||+|||~|||||||||||~||||||||||||||
|||||||||||||||~|||||||||~||||+||||~|||||||||~|||||||||||||||
||||||||||||||||~|||||||~|||||+|||||~|||||||~||||||||||||||||
|||||||||||||||||~|||||~||||||+||||||~|||||~|||||||||||||||||
||||||||||||||||||~|||~|||||||+|||||||~|||~||||||||||||||||||
|||||||||||||||||||~|~|||||||||||||||||~|~|||||||||||||||||||
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

(Các +s chỉ được hiển thị cho mục đích giải thích và đại diện cho các trục.)

Phương trình của biểu đồ này là như có thể thấy ở đây trong liên kết này với biểu đồ Desmos .y= =cơ bụng(10-cơ bụng(x))

abs(10 - abs(x))
abs(           )            Reflect whatever is beneath the x-axis to above the x-axis
    10 - abs(x)             This forms the central triangle-like structure

Trong hàm f, chúng ta có hai vòng lặp for lặp qua mọi tọa độ trong biểu đồ này. yđi từ 20đến 1và x đi từ -30đến 30.

Đối với mỗi x, chúng tôi kiểm tra nếu abs(10-abs(x))bằng bằng ycách làm abs(10-abs(x))-ytrong một ternary. Nếu chúng bằng nhau, sản lượng này 0, một giá trị falsey trong C, nếu không nó sẽ đánh giá một số giá trị dương. Sau đó, trong ternary abs(10-abs(x))-y?"|":"~", chúng tôi printftheo.

Và sau mỗi dòng, chúng tôi xuất ra một dòng mới bằng cách sử dụng puts("")và đó là cách hàm xuất ra với một dòng mới.


1
Lưu một byte bằng f(x,y)thay vìx,y;f()

@ceilingcat Cảm ơn bạn đã chơi gôn
Kritixi Lithos



3

Thạch , 18 16 byte

⁵×3ŒRAạ=þḤṚị⁾~|Y

Hãy thử trực tuyến!

⁵×3ŒRAạ=þḤṚị⁾~|Y  Main link. No arguments.

⁵                 Set the argument and the return value to 10.
 ×3               Multiply by 3 to yield 30.
   ŒR             Balanced range; yield [-30, -29, ..., 29, 30].
     A            Take absolute values.
      ạ           Take absolute differences with 10.
         Ḥ        Unhalve; yield 20.
       =þ         Table equals; compare each result with each k in [1, ..., 20].
          Ṛ       Reverse the resulting 2D array.
           ị⁾~|   Index into "~|", yielding '~' for 1 and '|' for 0.
               Y  Separate by linefeeds.

3

Python 2.7, 163 138 135 133 113 91 byte

l,t=S='|~'
for s in range(20):a=[l]*61;a[s]=a[60-s]=t;a[40-s]=a[20+s]=S[s>9];print`a`[2::5]

Hãy thử trực tuyến!

Chỉnh sửa 1: -25 byte: đã thay đổi thuật toán sau khi tôi cảm thấy hơi tham vọng. : P

Chỉnh sửa 2: -3 byte: lịch sự Felipe Nardi Batista

Chỉnh sửa 3: -2 byte: lịch sự shooqie

Chỉnh sửa 4: -20 byte: lịch sự notjagan

Chỉnh sửa 5: -22 byte: lịch sự Leaky Nun


Hoàn toàn bỏ lỡ điều đó! Cảm ơn @FelipeNardiBatista. Nó không còn quan trọng nữa: P đã thay đổi thuật toán hoàn toàn.
Koishore Roy


1
xếp chồng các phân phối giống a,b,c='1','2','3'như a='1';b='2';c='3'và giống như đặt từng phân bổ vào dòng riêng của nó, nhưng bạn có thể nhận được byte bằng cách giải nén các chuỗi nhưa,b,c='123'
Felipe Nardi Batista

1
Không n<mngắn hơn n-m<0?
shooqie

1
Có nó xuống tới 113 byte .
notjagan

3

/// , 231 byte

/3/|~//2/\/\///1/!!20/|
2-/&#2,/|#2'/"""2&/||2%/1|2#/&~2"/1!2!/&&|/~'%,
3'1#0#'1~&
,'!,&0-'!3&&
!~'-!
!3'#!0!#'~!&
!,""%#!&0!-""%~!&&
1~"-"-1
%~"#3"#%
1#"~,"~%0%#%#!~%#%&
%,%~!#%~%&0"~!-!-!-"
"3!#%~!#"0"#!~%#!~"&
",,"~,"&0"-3"#3"&&

Hãy thử trực tuyến! Hoặc, xem nó tương tác ở đây !


3

WendyScript , 65 byte (không bao gồm dòng mới)

<<a=>(x)?x<0/>-x:/>x
#y:20->0{#x:-30->31?a(10-a(x))==y@"~":@"|"""}

Hãy thử trực tuyến!

Theo nguyên tắc tương tự như câu trả lời C đã cho ở trên. Dòng đầu tiên là abshàm, dòng thứ hai chạy hai vòng lặp và đầu ra ~hoặc |dựa trên biểu đồ. Cái cuối cùng ""được sử dụng để xuất một dòng mới sau mỗi vòng lặp trên y.


1
Tại sao bạn loại trừ dòng mới?
Conor O'Brien

Dòng mới không bắt buộc, dòng mới có thể được gỡ bỏ và tập lệnh vẫn chạy tốt. Nó chỉ ở đó để dễ dàng thấy sự phân tách của abschức năng và chức năng chính.
Felix Guo

2

Vim, 59 byte

2i~^[59i|^[qqYpi|^[f~l2xA|^[q18@q11G31|qqr~jlq9@qF~2lqqr~klq8@q

Trong trường hợp ^[<ESC>chìa khóa


:11<CR>có thể là11G
nmjcman101

Chúc mừng. Tôi không biết về điều đó
bioweasel

2

Japt , 32 byte

20ç|
AÆhX'~
VméA
VpWUVmw)c ê z ·

Hãy thử trực tuyến! Hãy chắc chắn để mở rộng hộp đầu ra.

Giải trình

20ç|

Đặt Uthành |lặp lại 20 lần.

AÆhX'~

Đặt Vthành phạm vi [0,9]( ) được ánh xạ bởi:
U(ẩn) với ký tự tại chỉ mục X(giá trị hiện tại) được đặt thành ( h) ~.

VméA

Đặt Wthành Vvới mỗi dòng xoay 10 ( A) ký tự bên phải.

VpWUVmw

Tạo mảng: V, W, UVvới mỗi dòng đảo ngược ( w). Đây là nửa bên trái của hình, xoay 90 ° trái.

c ê z ·

Làm phẳng mảng ( c), palendromize nó ( ê), xoay 90 ° phải ( z) và nối với dòng mới ( ·).


2

Bút vẽ , 36 byte

không cạnh tranh

b|20{s~>v}10{>^s~}9{>vs~}>v20{>^s~}▁

Giải trình

b|20{s~>v}10{>^s~}9{>vs~}>v20{>^s~}▁  Program
b|                                    Sets the background character to `|`
  20{    }                            Executes function 20 times
     s~                               Sets the current character to `~`
       >v                             Moves one space right and one space down
          10{    }                    Executes function 10 times
             >^                       Moves one space right and one space up
               s~                     Sets the current character to `~`
                  9{    }             Executes function 9 times
                    >v                Moves one space right and one space down
                      s~              Sets the current character to `~`
                         >v           Moves one space right and one space down
                           20{    }   Executes function 20 times
                              >^      Moves one space right and one space up
                                s~    Sets the current character to `~`
                                   ▁  Cuts off the last line (because it pads an extra line when the pointer moves near the edge)

Điều này nhắc nhở tôi, tôi cần thêm một hoạt động gương.


2

Octave , 157 57 54 byte

Đánh gôn xuống sâu hơn, nhờ các câu trả lời khác và các ý kiến.

a=zeros(20,61);for i=-30:30;a(21-abs(10-abs(i)),i+31)=2;end
a=char(a+124)

Tôi chỉ tiếp cận nó như câu trả lời khác với hàm abs (10-abs (x)) và sau đó sử dụng các ký tự ASCII đúng để in ra hình ảnh.


1
Ở đây chúng tôi yêu cầu các câu trả lời phải được chơi tốt trong một thử thách chơi gôn. Ít nhất bạn nên cố gắng đánh gôn bằng cách loại bỏ khoảng trắng không cần thiết, v.v.
Erik the Outgolfer

1
Ngoài ra, ngôn ngữ được gọi đơn giản là "Octave". Đối với việc chơi gôn, ngoài việc loại bỏ tất cả các khoảng trắng (dòng mới cũng vậy), hãy đảm bảo bạn kết hợp các câu lệnh, giống như hai dòng cuối cùng.
Sanchise

Nếu bất cứ ai biết làm thế nào tôi có thể thoát khỏi dòng mới sau khi kết thúc, đó sẽ là một trợ giúp tuyệt vời.
Michthan




1

Bong bóng , 90 byte

00000000: 9dcb a10d 0040 08c5 50cf cc4d 673f 85ab  .....@..P..Mg?..
00000010: b880 22fd 7972 3f07 ef98 e1cc 85e1 ca05  ..".yr?.........
00000020: 8623 97d5 78c2 abf1 8457 e305 b31a 0f78  .#..x....W.....x
00000030: f507 0fcc 54fc 6ed3 794b b6d2 c1ed 163a  ....T.n.yK.....:
00000040: b8dd 42c7 68b7 d031 f757 3ab8 dd42 07b7  ..B.h..1.W:..B..
00000050: 5be8 e076 0b1d dcaf 060f                 [..v......

Hãy thử trực tuyến!


1

MathGolf , 22 byte

I{S╒xñ♂-±Iï--mÆ┬û|~§yp

Hãy thử trực tuyến!

Giải trình

Có thể đánh gôn 2-3 byte từ điều này, tôi sẽ thấy những gì tôi có thể làm.

I                        push 20
 {                       start block or arbitrary length
  S                      push 30
   ╒                     range(1,n+1)
    x                    reverse int/array/string
     ñ                   pop(a), push palindromize(a) string/list/number
      ♂                  push 10
       -                 pop a, b : push(a-b)
        ±                absolute value
         I               push 20
          ï              index of current loop, or length of last loop
           -             pop a, b : push(a-b)
            -            pop a, b : push(a-b)
             m           explicit map
              Æ          start block of length 5
               ┬         check if equal to 0
                û|~      string "|~"
                   §     get from array/string
                    y    join array without separator to string or number
                     p   print with newline

Nhiều như các giải thích được tạo tự động là thuận tiện, họ thường bỏ lỡ lý do tại sao chương trình đang làm điều đó ...
Jo King

@JoKing đây là một cổng của câu trả lời Jelly. Tôi đã tìm thấy một bộ lọc 21 sau khi sử dụng khá nhiều logic tương tự, tôi sẽ cố gắng viết một lời giải thích tốt hơn cho điều đó.
maxb


0

Positron , 165 byte

i=0;while(i<20)do{k='|'*(59-2*i);if(i==10)then{j='|'*19;k=j+'~'+j;};if(i>10)then{q=39-2*i;j='|'*q;q=2*i-21;k=j+'~'+'|'*q+'~'+j;}print@('|'*i+'~'+k+'~'+'|'*i);i=i+1;}

Hãy thử trực tuyến!

Tôi nghĩ rằng Positron có quá nhiều lỗi trong đó. Tôi nên cập nhật nó lên TIO vì sau đó ++sẽ thực sự hoạt động.


0

Toán học, 78 75 byte

Print[""<>Riffle[Array[If[#+Abs[10-Abs[31-#2]]==21,"~","|"]&,{20,61}],"\n"]]

ngoại trừ \nđược thay thế bởi một dòng mới thực tế. Hãy thử trực tuyến! (Có một số khoảng trống ở đầu các dòng trong Mathics vì một số lý do, nhưng nó hoạt động tốt trong Mathicala .)

Tôi đã đưa ra một bản đệ trình của riêng mình, nhưng sau đó Kritixi Lithos đã thêm một lời giải thích về họ và nó khá giống với tôi nhưng sử dụng một công thức thông minh hơn một chút, vì vậy bây giờ đây chỉ là một câu trả lời. (Đi và đọc cái đó và nâng cấp nó!)


0

Bong bóng , 93 byte

00000000: 9dcb 390e 4301 10c2 d09e 335b 9c3d 5d56  ..9.C.....3[.=]V
00000010: e72f 4c35 327a 65bf 86ee 9830 f342 5879  ./L52ze....0.BXy
00000020: 8130 f202 848d 9797 a613 262c bc7c 6a3a  .0........&,.|j:
00000030: 60c2 552e 9858 bcdc a2f9 55ac 9916 5e6f  `.U..X....U...^o
00000040: a285 d79b 6819 eb4d b4cc fe99 165e 6fa2  ....h..M.....^o.
00000050: 85d7 9b68 e1d5 26da 782f 3578 00         ...h..&.x/5x.

Hãy thử trực tuyến!



0

Lua, 193 byte

m={}function g(x,y)if(x<62)then
m[x+y*61]="~"if(x==31or x==21or x==41)then
b=not b
end
g(x+1,y+((b and-1)or 1))end
end
g(1,0)for y=0,19 do
s=""for x=1,61 do
s=s..(m[x+y*61]or"|")end
print(s)end

Lưu ý rằng Lua không thể in một cái gì đó ra mà không tạo ra một dòng mới. Vì lý do này, tôi phải phá vỡ một trong những quy tắc.

Tối thiểu hóa đến một mức độ lớn:

map={}
o=20
p=61
--b is true means go up
function bounce(x,y,c)
    if (x~=p)then
        map[x+y*p]=c 
        if(x==31 or x==21 or x==41)then 
            b=not b 

        end
        bounce(x+1,y+((b and -1) or 1),c)
    end
end
bounce(1,0,"~")
--map[2+60] = "h"
for y=0,o-1 do
    str = ""
    for x=1,p do
        str = str..(map[x+y*p] or "|")
    end
    print(str)
end

Một số thay đổi được thực hiện trong quá trình thu nhỏ, tất cả đều làm cho chương trình ít mở rộng hơn nhưng nhỏ hơn.

Hãy thử nó: https://tio.run/##PY7LCoMwEEX3@YqQVVJTcWwRCp0vKV1oNa1QJ0UjGPr49TRq6eoO91wOcx/LEDp8vs1IF9da4lc5aa9aI6djkSt3a4h1pynxmwLOKD5iJog7sD2Pmf9yD@u0QrKOV6yhmkVTAtonUla8pHoLKm5BqZmtHHSmTCw9ZhoOvLZsQCHMogRdwNoMaSr/L9hevMSiePQtOTnMdwhf

Tôi không chắc có ai đã làm điều này trước đây chưa, nhưng tôi đã thử giảm thiểu bằng cách tải chương trình dưới dạng chuỗi và sử dụng gsub (tìm kiếm / thay thế). Thật không may, nó làm cho chương trình lớn hơn. Tuy nhiên, nếu chương trình này đủ lớn, nó sẽ mang lại ít byte hơn.

g=string.gsub
loadstring(g(g(g('m={}function g(x,y)if(x<62vm[x+y*61]="~"if(x==31zx==21zx==41vb=not beg(x+1,y+((b and-1)z1))eeg(1,0)fzy=0,19 do s=""fzx=1,61 do s=s..(m[x+y*61]z"|")eprint(s)e','e',' end '),'v',')then '),'z','or '))()

Do sự gần gũi tương đối của nó với kết quả thực (240 byte, chỉ còn 41), tôi cho rằng tôi đã đăng nó. Nếu chương trình này có hơn 350 byte, có khả năng đã có sự giảm.


0

Java 8, 113 byte

v->{String r="";for(int i=-1,j;++i<20;r+="\n")for(j=61;j-->0;)r+=j==i|j+i==60|i>9&(j-i==20|j+i==40)?"~":"|";return r;}

Tôi có cảm giác kiểm tra ( j==i|j+i==60|i>9&(j-i==20|j+i==40)chắc chắn có thể được đánh golf bằng cách nào đó kết hợp nhiều kiểm tra thành một.

Giải trình:

Hãy thử nó ở đây.

v->{                    // Method with empty unused parameters and String return-type
  String r="";          //  Result-String
  for(int i=-1,j;       //  Index integers
      ++i<20;           //  Loop (1) from 0 to 20 (exclusive)
      r+="\n")          //    After every iteration: append a new-line to the result-String
    for(j=61;           //   Reset `j` to 61
        j-->0;)         //   Inner loop (2) from 60 down to 0 (inclusive)
      r+=               //    Append the result-String with:
         j==i           //     If `j` and `i` are equal (top-right /),
         |j+i==60       //     or `j` + `i` is 60 (top-left \),
         |i>9           //     or we're at the bottom halve
          &(j-i==20     //      and `j` - `i` is 20 (bottom left \),
            |j+i==40)?  //      or `j` + `i` is 40 (bottom right /)
          "~"           //       Append a literal "~" to the result-String
         :              //     Else:
          "|";          //      Append a literal "|" to the result-String
                        //   End of inner loop (2) (implicit / single-line body)
                        //  End of loop (1) (implicit / single-line body)
  return r;             //  Return the result-String
}                       // End of method


0

Tcl , 104 byte

time {incr j
set i 0
time {puts -nonewline [expr 21-abs(abs([incr i]-31)-10)-$j?"|":"~"]} 61
puts ""} 20

Hãy thử trực tuyến!


Tcl , 105 byte

time {incr j
set i 0
time {puts -nonewline [expr $j==21-abs(abs([incr i]-31)-10)?"~":"|"]} 61
puts ""} 20

Hãy thử trực tuyến!


Tcl , 109 byte

time {incr j;set i 0;time {append s [expr $j==21-abs(abs([incr i]-31)-10)?"~":"|"]} 61;set s $s\n} 20
puts $s

Hãy thử trực tuyến!

Tcl, 143 133 123 110

Vẫn còn nhiều điều chưa từng thấy, nhưng tôi sẽ phát triển nó sau:

time {incr j;set i 0;time {incr i;append s [expr $j==21-abs(abs($i-31)-10)?"~":"|"]} 61;set s $s\n} 20
puts $s

bản giới thiệu


Wolfram đã giúp đỡ một chút để chơi golf nhiều hơn một chút: wolframalpha.com/input/?i=-abs(10-abs(x-31))%2B21 một âm mưu tôi truy tìm trên Desmos: desmos.com/calculator/z9czvtpihy
sergiol

0

05AB1E , 20 19 byte

20F„|~20Ýû31∍ûNQèJ,

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

Giải trình:

20F               # Loop 20 times:
   „|~            #  Push the string "|~"
   20Ý            #  List of range [0,20]
      û           #  Palindromize [0..20..0]
       31        #  Shorten to length 31 [0..20..10]
          û       #  Palindromize again [0..20..10..20..0]
           NQ     #  Check if the loop index is equal to it
             è    #  And index it into the string
              J   #  Then join the list of characters together
               ,  #  And print with trailing newline

20Ýû31∍û tạo danh sách:

[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,19,18,17,16,15,14,13,12,11,10,11,12,13,14,15,16,17,18,19,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0]
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.