รหัสนี้ไม่ยากเกินไปใช่ไหม


17

คุณต้องเขียนโปรแกรมหรือฟังก์ชั่นในภาษาใด ๆ ที่แสดงรูปแบบนี้:

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

ผลลัพธ์ประกอบด้วย 20 บรรทัดละ 61 ตัวอักษร

กฎระเบียบ

  • ช่องโหว่มาตรฐานเป็นสิ่งต้องห้าม
  • อาจมีการขึ้นบรรทัดใหม่ที่ส่วนท้ายที่ท้ายของเอาต์พุต
  • อาจไม่มีช่องว่างต่อท้ายบนบรรทัดใด ๆ ของเอาต์พุต

โดยไม่ต้องขึ้นบรรทัดใหม่ในการตรวจสอบ MD5 fde4e3b4606bf9f8c314131c93988e96ของการส่งออกเป็น

ด้วยการขึ้นบรรทัดใหม่ในการตรวจสอบ MD5 1f0b43db4fec6594be202c8339024cb7ของการส่งออกเป็น

นี่คือดังนั้นรหัสที่สั้นที่สุดในไบต์ชนะ


ฉันได้แก้ไขความท้าทายเพื่อให้ชัดเจนขึ้นเล็กน้อยคุณสามารถย้อนกลับการแก้ไขได้
Kritixi Lithos

1
ฉันวาดรูปแบบที่อยากรู้อยากเห็น ... rextester.com/WXZV81312
sergiol

คำตอบ:


13

C (gcc) , 97 82 81 80 ไบต์

Golfed 15 bytes หลังจากการเรียนรู้นั่นabsคือ builtin ใน C, ขอบคุณ byte เพิ่มเติมสำหรับRogemสำหรับการชี้ให้เห็นว่าการประกาศตัวแปรของฉันสามารถย้ายไปยังฟังก์ชัน, และอีกไบต์ขอขอบคุณceilingcatสำหรับการแนะนำx=31;--x+31แทนx=-31;++x<31.

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

ลองออนไลน์!

เอาต์พุตนี้มีการขึ้นบรรทัดใหม่ที่ต่อท้าย ฟังก์ชั่นfทำการส่งออก

คำอธิบาย

เอาต์พุตสามารถระบุเป็นกราฟได้

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

( +s จะปรากฏขึ้นเพื่อวัตถุประสงค์ในการอธิบายเท่านั้นและเป็นตัวแทนของแกน)

สมการของกราฟนี้คือy=abs(10abs(x))สามารถมองเห็นได้ที่นี่ในการเชื่อมโยงนี้ให้กราฟ 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

ในฟังก์ชั่นfเรามีสองลูปสำหรับวนซ้ำที่ทุกพิกัดในกราฟนี้ yไปจาก20ไป1และ x ไปจากการ-3030

สำหรับทุก ๆ คนxเราจะตรวจสอบว่าabs(10-abs(x))เท่ากับyโดยทำabs(10-abs(x))-yในไตรภาค หากพวกเขามีความเท่าเทียมกันนี้ให้ผล0เป็นค่าความเท็จใน C มิฉะนั้นจะประเมินค่าบวกบางอย่าง จากนั้นในไตรภาคabs(10-abs(x))-y?"|":"~"เราprintfตาม

และหลังจากแต่ละบรรทัดเราจะออกบรรทัดใหม่โดยใช้puts("")และนั่นคือวิธีที่ฟังก์ชันส่งออกด้วยการขึ้นบรรทัดใหม่


1
บันทึกหนึ่งไบต์ด้วยf(x,y)แทนที่จะเป็นx,y;f()

@ceilingcat ขอบคุณสำหรับการเล่นกอล์ฟ
Kritixi Lithos



3

เยลลี่ , 18 16 ไบต์

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

ลองออนไลน์!

⁵×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 ไบต์

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]

ลองออนไลน์!

แก้ไข 1: -25 ไบต์: เปลี่ยนอัลกอริทึมหลังจากที่ฉันรู้สึกทะเยอทะยานเล็กน้อย : P

แก้ไข 2: -3 ไบต์: ความอนุเคราะห์Felipe Nardi Batista

แก้ไข 3: -2 bytes: มารยาทshooqie

แก้ไข 4: -20 ไบต์: ความอนุเคราะห์notjagan

แก้ไข 5: -22 bytes: Leun Nun


พลาดโดยสิ้นเชิง! ขอบคุณ @FelipeNardiBatista มันไม่สำคัญอีกต่อไปแม้ว่า: P จะเปลี่ยนอัลกอริทึมอย่างสมบูรณ์
Koishore Roy


1
การอ้างเหตุผลแบบเรียงซ้อนเหมือนa,b,c='1','2','3'กันa='1';b='2';c='3'และเหมือนกับการวางแต่ละรายการในบรรทัดของตัวเอง แต่คุณสามารถรับไบต์ด้วยการคลายสตริงเช่นa,b,c='123'
Felipe Nardi Batista

1
ไม่n<mสั้นกว่านี้n-m<0หรือ
shooqie

1
ได้มันลงไป113 ไบต์
notjagan


3

WendyScript 65 ไบต์ (ไม่รวมบรรทัดใหม่)

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

ลองออนไลน์!

ปฏิบัติตามหลักการเดียวกันกับคำตอบ C ที่ให้ไว้ข้างต้น บรรทัดแรกคือabsฟังก์ชั่นบรรทัดที่สองวิ่งสองลูปและเอาท์พุท~หรือ|ขึ้นอยู่กับกราฟ สุดท้ายจะใช้ในการส่งออกขึ้นบรรทัดใหม่หลังจากที่แต่ละวงใน""y


1
ทำไมคุณไม่รวม newline
Conor O'Brien

ไม่จำเป็นต้องขึ้นบรรทัดใหม่สามารถขึ้นบรรทัดใหม่และสคริปต์ยังทำงานได้ดี มันอยู่ตรงนั้นเพื่อให้ง่ายต่อการมองเห็นการแยกabsฟังก์ชั่นกับฟังก์ชั่นหลัก
เฟลิกซ์กัว

2

เป็นกลุ่ม 59 ไบต์

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

ที่ไหน^[เป็น<ESC>สำคัญ


:11<CR>สามารถ11G
nmjcman101

ไชโย ฉันไม่รู้เกี่ยวกับสิ่งนั้น
bioweasel

2

Japt , 32 ไบต์

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

ลองออนไลน์! ให้แน่ใจว่าได้ขยายกล่องออก

คำอธิบาย

20ç|

การตั้งค่าUที่จะ|ทำซ้ำ 20 ครั้ง

AÆhX'~

การตั้งค่าVในช่วง[0,9]( ) แมปโดย:
U(นัย) กับตัวละครที่ดัชนีX(ราคาปัจจุบัน) ชุด ( )h~

VméA

กำหนดWให้Vกับแต่ละบรรทัดหมุน 10 ( A) ตัวอักษรขวา

VpWUVmw

สร้างอาร์เรย์: V, W, UและVมีการย้อนกลับแต่ละบรรทัด ( w) นี่คือครึ่งซ้ายของรูปร่างหมุนไปทางซ้าย 90 °

c ê z ·

แผ่อาร์เรย์ ( c) ทำให้แบนด์วิดท์ ( ê) หมุนขวา 90 ° ( z) และเข้าร่วมกับ newlines ( ·)


2

พู่กัน 36 ไบต์

ไม่ใช่การแข่งขัน

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

คำอธิบาย

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)

สิ่งนี้เตือนฉันว่าฉันต้องเพิ่มการทำงานของมิเรอร์


2

Octave , 157 57 54 ไบต์

เอามันลงไปต่อขอบคุณคำตอบและความคิดเห็นอื่น ๆ

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

ฉันเพิ่งเข้าหามันเหมือนคำตอบอื่น ๆ ด้วยฟังก์ชั่น abs (10-abs (x)) แล้วใช้ตัวอักษร ASCII ที่เหมาะสมเพื่อพิมพ์ภาพ


1
ที่นี่เราต้องการคำตอบที่จะได้รับการตีกอล์ฟอย่างดีในการแข่งขันกอล์ฟ อย่างน้อยคุณควรพยายามเล่นกอล์ฟโดยการลบช่องว่างที่ไม่จำเป็นออก ฯลฯ
Erik the Outgolfer

1
นอกจากนี้ภาษาที่เรียกว่า "คู่" เพียง สำหรับการเล่นกอล์ฟนอกเหนือจากการลบช่องว่างทั้งหมด (บรรทัดใหม่เกินไป) ตรวจสอบให้แน่ใจว่าคุณรวมคำสั่งเช่นสองบรรทัดสุดท้าย
Sanchises

หากใครรู้ว่าฉันจะกำจัดบรรทัดใหม่ได้อย่างไรหลังจากนั้นก็จะเป็นความช่วยเหลือที่ดี
Michthan




1

Bubblegum , 90 ไบต์

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

ลองออนไลน์!


1

MathGolf , 22 ไบต์

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

ลองออนไลน์!

คำอธิบาย

อาจเป็นไปได้ที่จะตีกอล์ฟออกไป 2-3 ไบต์จากนี้ฉันจะเห็นสิ่งที่ฉันสามารถทำได้

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

As much as the auto generated explanations are convenient, they usually miss the point of why the program is doing that...
Jo King

@JoKing this is pretty much a port of the Jelly answer. I found a 21-byter after this using pretty much the same logic, I'll try to write a better explanation for that.
maxb


0

Positron, 165 bytes

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

Try it online!

I think Positron has too many bugs in it. I should get it updated to TIO because then ++ will actually work.


0

Mathematica, 78 75 bytes

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

except the \n is replaced by an actual newline. Try it online! (There are extra spaces at the starts of the lines in Mathics for some reason, but it works fine in Mathematica.)

I came up with a submission of my own, but then Kritixi Lithos added an explanation of theirs and it was quite similar to mine but using a slightly cleverer formula, so now this is just a port of that answer. (Go and read that one and upvote it!)


0

Bubblegum, 93 bytes

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.

Try it online!



0

Lua, 193 bytes

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

Note that Lua cannot print something out without creating a new line. For this reason, I have to break one of the rules.

Minimally minified to a large extent:

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

Some changes where made during minification, all of which makes the program less extendable but smaller.

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

I'm not sure if anyone has done this before, but I tried minifying by loading the program as a string and using gsub(search/replace). Unfortainitly, it made the program bigger. However, if this program was big enough, it would yield in less bytes.

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

Due to its relative closeness with the real result(240 bytes, only 41 more), I figured I'd post it. If this program where 350+ bytes, there would have likely been a reduction.


0

Java 8, 113 bytes

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

I have the feeling the checks (j==i|j+i==60|i>9&(j-i==20|j+i==40) can definitely be golfed by somehow combining multiple checks into one.

Explanation:

Try it here.

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 bytes

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

Try it online!


Tcl, 105 bytes

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

Try it online!


Tcl, 109 bytes

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

Try it online!

Tcl, 143 133 123 110

Still much ungolfed, but I will evolve it after:

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 gave a little help to golf it more a little: wolframalpha.com/input/?i=-abs(10-abs(x-31))%2B21 a plot I traced on Desmos: desmos.com/calculator/z9czvtpihy
sergiol

0

05AB1E, 20 19 bytes

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

Try it online.

Explanation:

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∍û generates the list:

[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]
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.