Tidak terlalu sulit untuk mengkodekan ini, kan?


17

Anda harus menulis program atau fungsi dalam bahasa apa pun yang menghasilkan pola ini:

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

Outputnya terdiri dari 20 baris masing-masing 61 karakter.

Aturan

  • Celah standar dilarang
  • Mungkin ada satu trailing newline di akhir output
  • Mungkin tidak ada spasi spasi tambahan di baris output mana pun

Tanpa trailing newline, md5 checksum dari output adalah fde4e3b4606bf9f8c314131c93988e96.

Dengan trailing newline, checksum md5 dari output adalah 1f0b43db4fec6594be202c8339024cb7.

Ini adalah , jadi kode terpendek dalam byte menang.


Saya telah mengedit tantangan untuk membuatnya sedikit lebih jelas, merasa bebas untuk mengembalikan hasil edit.
Kritixi Lithos

1
Saya telah menggambar pola yang aneh ... rextester.com/WXZV81312
sergiol

Jawaban:


13

C (gcc) , 97 82 81 80 byte

Golf 15 byte setelah belajar yang absmerupakan builtin di C, byte tambahan terima kasih kepada Rogem untuk menunjukkan bahwa deklarasi variabel saya dapat dipindahkan ke fungsi, dan byte lain berkat ceilingcat untuk menyarankan x=31;--x+31alih-alih x=-31;++x<31.

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

Cobalah online!

Ini menghasilkan dengan baris baru tambahan. Fungsi fmelakukan keluaran.

Penjelasan

Outputnya dapat dinyatakan sebagai grafik.

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

( +S hanya ditampilkan untuk tujuan penjelasan dan mewakili sumbu.)

Persamaan grafik ini adalah y=abs(10abs(x)) seperti yang dapat dilihat di sini dalam tautan ini ke grafik Desmos .

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

Secara fungsi f, kami memiliki dua for-loop yang berulang melalui setiap koordinat dalam grafik ini. ypergi dari 20ke 1dan x pergi dari -30ke 30.

Untuk setiap x, kami memeriksa apakah abs(10-abs(x))sama ydengan melakukan abs(10-abs(x))-ydi ternary. Jika mereka sama, ini menghasilkan 0, nilai falsey dalam C, jika tidak maka akan mengevaluasi beberapa nilai positif. Kemudian di terner abs(10-abs(x))-y?"|":"~", kami printfsesuai.

Dan setelah setiap baris, kami menampilkan baris baru menggunakan puts(""), dan itulah bagaimana fungsi output dengan baris baru yang tertinggal.


1
Simpan satu byte dengan f(x,y)bukannyax,y;f()

@ceilingcat Terima kasih untuk golf
Kritixi Lithos



3

Jelly , 18 16 byte

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

Cobalah online!

⁵×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]

Cobalah online!

Sunting 1: -25 byte: mengubah algoritme setelah saya merasa agak ambisius. : P

Sunting 2: -3 byte: milik Felipe Nardi Batista

Sunting 3: -2 bytes: courtesy shooqie

Sunting 4: -20 byte: milik notjagan

Sunting 5: -22 byte: milik Leaky Nun


Benar-benar melewatkan itu! Terima kasih @FelipeNardiBatista. Tidak masalah lagi: P mengubah algoritma sepenuhnya.
Koishore Roy


1
susun atribusi seperti a,b,c='1','2','3'adalah sama dengan a='1';b='2';c='3'dan sama dengan menempatkan masing-masing di baris itu sendiri, tetapi Anda dapat memperoleh byte dengan membongkar string sepertia,b,c='123'
Felipe Nardi Batista

1
Bukankah n<mlebih pendek dari itu n-m<0?
shooqie

1
Turun ke 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"&&

Cobalah online! Atau, lihat secara interaktif di sini !


3

WendyScript , 65 byte (tidak termasuk baris baru)

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

Cobalah online!

Mengikuti prinsip yang sama dengan jawaban C yang diberikan di atas. Baris pertama adalah absfungsinya, baris kedua menjalankan dua untuk loop dan output ~atau |berdasarkan pada grafik. Yang terakhir ""digunakan untuk menampilkan baris baru setelah setiap loop aktif y.


1
Mengapa Anda mengecualikan baris baru?
Conor O'Brien

Baris baru tidak diperlukan, baris baru dapat dihapus dan skrip masih berjalan dengan baik. Itu hanya ada sehingga lebih mudah untuk melihat pemisahan absfungsi vs fungsi utama.
Felix Guo

2

Vim, 59 Bytes

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

Di mana ^[adalah <ESC>kunci


:11<CR>dapat11G
nmjcman101

Bersulang. Saya tidak tahu tentang yang itu
bioweasel

2

Japt , 32 byte

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

Cobalah online! Pastikan untuk memperluas kotak output.

Penjelasan

20ç|

Setel Uke| diulang 20 kali.

AÆhX'~

Setel Vke rentang [0,9]( ) dipetakan oleh:
U(implisit) dengan karakter pada indeks X(nilai saat ini) disetel ke ( h)~ .

VméA

Set Wuntuk Vdengan setiap baris diputar 10 (A ) karakter yang tepat.

VpWUVmw

Buat array:, V, W, Udan Vdengan setiap baris terbalik ( w). Ini sekarang bagian kiri dari bentuk, diputar 90 ° ke kiri.

c ê z ·

Ratakan array ( c), palendromize ( ê), putar 90 ° ke kanan ( z), dan gabungkan dengan baris baru ( ·).


2

Kuas , 36 byte

tidak bersaing

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

Penjelasan

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)

Ini mengingatkan saya, saya perlu menambahkan operasi cermin.


2

Oktaf , 157 57 54 byte

Menurunkannya lebih jauh, berkat jawaban dan komentar lainnya

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

Saya hanya mendekatinya seperti jawaban lain dengan fungsi abs (10-abs (x)) dan kemudian menggunakan karakter ASCII yang tepat untuk mencetak gambar.


1
Di sini kita membutuhkan jawaban untuk bisa bermain golf dengan baik dalam tantangan kode-golf. Setidaknya Anda harus mencoba untuk golf dengan misalnya menghapus spasi yang tidak perlu dll.
Erik the Outgolfer

1
Juga, bahasa ini disebut "Oktaf". Sedangkan untuk bermain golf, selain menghapus semua spasi putih (baris baru juga), pastikan Anda menggabungkan pernyataan, seperti dua baris terakhir.
Sanchises

Jika ada yang tahu bagaimana saya bisa menghilangkan baris baru demi akhir, itu akan sangat membantu.
Michthan




1

Bubblegum , 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......

Cobalah online!


1

MathGolf , 22 byte

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

Cobalah online!

Penjelasan

Mungkin saja untuk bermain golf 2-3 byte dari ini, saya akan lihat apa yang bisa saya lakukan.

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

Sebanyak penjelasan yang dihasilkan secara otomatis itu mudah, mereka biasanya kehilangan titik mengapa program melakukan itu ...
Jo King

@ Bersenang-senang. Ini cukup banyak port dari jawaban Jelly. Saya menemukan 21-byter setelah ini menggunakan logika yang hampir sama, saya akan mencoba menulis penjelasan yang lebih baik untuk itu.
Maks

1

C (gcc) , 75 byte

f(x){for(x=1240;--x;)putchar(x%62?x/62+1-abs(10-abs(x%62-31))?124:126:10);}

Cobalah online!

Benar-benar berubah dari jawaban sapi dukun


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

Cobalah online!

Saya pikir Positron memiliki terlalu banyak bug di dalamnya. Saya harus memperbaruinya ke TIO karena kemudian ++akan benar-benar berfungsi.


0

Mathematica, 78 75 byte

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

kecuali \ndiganti oleh baris baru yang sebenarnya. Cobalah online! (Ada beberapa ruang tambahan di awal baris dalam Matematika untuk beberapa alasan, tetapi berfungsi dengan baik di Mathematica .)

Saya datang dengan pengajuan saya sendiri, tetapi kemudian Kritixi Lithos menambahkan penjelasan mereka dan itu sangat mirip dengan saya tetapi menggunakan formula yang sedikit lebih pintar, jadi sekarang ini hanya port jawaban itu. (Pergi dan baca yang itu dan jawablah!)


0

Bubblegum , 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.

Cobalah online!


0

JavaScript (ES6), 87 byte

for(a=Math.abs,y=20;y--;console.log(s))for(s='',x=-30;x<31;x++)s+=a(10-a(x))+~y?'|':'~'


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

Perhatikan bahwa Lua tidak dapat mencetak sesuatu tanpa membuat baris baru. Untuk alasan ini, saya harus melanggar salah satu aturan.

Minimal diperkecil sebagian besar:

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

Beberapa perubahan yang dilakukan selama minifikasi, yang semuanya membuat program kurang dapat diperpanjang tetapi lebih kecil.

Cobalah: https://tio.run/##PY7LCoMwEEX3@YqQVVJTcWwRCp0vKV1oNa1QJ0UjGPr49TRq6eoO91wOcx/LEDp8vs1IF9da4lc5aa9aI6djkSt3a4h1pynxmwLOKD5iJog7sD2Pmf9yD@u0QrKOV6yhmkVTAtonUla8pHoLKm5BqZmtHHSmTCw9ZhoOvLZsQCHMogRdwNoMaSr/L9hevMSiePQtOTnMdwhf

Saya tidak yakin apakah ada yang pernah melakukan ini sebelumnya, tetapi saya mencoba mengecilkan dengan memuat program sebagai string dan menggunakan gsub (cari / ganti). Sayangnya, itu membuat program lebih besar. Namun, jika program ini cukup besar, itu akan menghasilkan lebih sedikit byte.

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

Karena kedekatannya dengan hasil sebenarnya (240 byte, hanya 41 lebih), saya pikir saya akan mempostingnya. Jika program ini di mana 350+ byte, kemungkinan akan ada pengurangan.


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

Saya punya perasaan cek ( j==i|j+i==60|i>9&(j-i==20|j+i==40)pasti bisa golf dengan entah bagaimana menggabungkan beberapa cek menjadi satu.

Penjelasan:

Coba di sini.

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

Cobalah online!


Tcl , 105 byte

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

Cobalah online!


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

Cobalah online!

Tcl, 143 133 123 110

Masih banyak ungolfed, tapi saya akan berkembang setelah:

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

demo


Wolfram memberikan sedikit bantuan untuk bermain golf lebih sedikit: wolframalpha.com/input/?i=-abs(10-abs(x-31))%2B21 plot yang saya telusuri di Desmos: desmos.com/calculator/z9czvtpihy
sergiol

0

05AB1E , 20 19 byte

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

Cobalah online.

Penjelasan:

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∍û menghasilkan daftar:

[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]
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.