이 코드를 코딩하기가 너무 어렵지 않습니까?


17

이 패턴을 출력하는 모든 언어로 프로그램이나 함수를 작성해야합니다.

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

출력은 각각 61 자의 20 행으로 구성됩니다.

규칙

  • 표준 허점은 금지되어 있습니다
  • 출력의 끝에 단일 후행 줄 바꿈이있을 수 있습니다
  • 출력 줄에 공백이 없을 수 있습니다.

후행 줄 바꿈이 없으면 출력의 md5 체크섬은입니다 fde4e3b4606bf9f8c314131c93988e96.

후행 줄 바꿈으로 출력의 md5 체크섬은입니다 1f0b43db4fec6594be202c8339024cb7.

이것은 이므로 바이트 단위의 가장 짧은 코드가 이깁니다.


나는 약간 더 명확하게하기 위해 도전 과제를 편집했으며 자유롭게 편집을 롤백 할 수 있습니다.
Kritixi Lithos

1
나는 호기심 패턴을 그려 ... rextester.com/WXZV81312
sergiol

답변:


13

C (gcc) , 97 82 81 80 바이트

absC에 내장 된 학습 후 15 바이트의 골프 를 쳤습니다 .Rogem 덕분 에 내 변수의 선언을 함수로 옮길 수 있음을 지적한 추가 바이트와 x=31;--x+31대신에 ceilingcat 덕분에 다른 바이트 가 제안 되었습니다 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는 설명 목적으로 만 표시되며 축을 나타냅니다.)

이 그래프의 방정식은 여기서 Desmos 그래프 에 대한이 링크에서 볼 수 있듯이 y=abs(10abs(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

function f에는이 그래프의 모든 좌표를 반복하는 두 개의 for-loop가 있습니다. y에서 20로 이동 1하고 x는에서 -30로 이동 합니다 30.

모든 x경우 에 대해 삼항 을 수행 하여 abs(10-abs(x))동등한 지 확인합니다 . 동일하면 C에서 false 값을 얻습니다. 그렇지 않으면 양수 값으로 평가됩니다. 그런 다음 삼항 에서 우리는 그에 따라.yabs(10-abs(x))-y0abs(10-abs(x))-y?"|":"~"printf

그리고 각 줄 다음에을 사용하여 줄 바꿈을 출력합니다. 이것이 바로 줄 바꿈으로 puts("")함수가 출력되는 방식입니다.


1
다음 f(x,y)대신에 1 바이트를 저장하십시오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

파이썬 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 바이트 : 약간 야심을 느낀 후에 알고리즘을 변경했습니다. :피

편집 2 : -3 바이트 : 예의 Felipe Nardi Batista

편집 3 : -2 바이트 : 호의 shooqie

편집 4 : -20 바이트 : 예의 notjagan

편집 5 : -22 바이트 : 무료 Leaky 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함수이고 두 번째 줄은 두 개의 for 루프와 출력을 실행 ~하거나 |그래프를 기반으로합니다. 마지막 ""은 각 루프가 켜진 후 줄 바꿈을 출력하는 데 사용됩니다 y.


1
줄 바꿈을 제외하는 이유는 무엇입니까?
코너 오브라이언

The newline isn't required, the newline can be removed and the script still runs fine. It's just there so it's easier to see the separation of the abs function vs the main function.
Felix Guo

2

Vim, 59 Bytes

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

Where ^[ is the <ESC> key


:11<CR>할 수 있습니다11G
nmjcman101

건배. 나는 그것에 대해 몰랐다
bioweasel

2

Japt , 32 바이트

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

온라인으로 사용해보십시오! Be sure to expand the output box.

설명

20ç|

설정 U|반복 20 회.

AÆhX'~

설정 V범위를 [0,9]( 의해 맵핑)
U인덱스의 문자 (암시 적) X으로 (현재 값) 세트 ( h) ~.

VméA

각 줄을 오른쪽 으로 10 ( ) 자로 회전 W하도록 설정하십시오 . VA

VpWUVmw

array : V, W, U을 만들고 V각 줄을 뒤집습니다 ( w). 이것은 이제 도형의 왼쪽 절반이며 왼쪽으로 90 ° 회전합니다.

c ê z ·

배열을 평평하게하고 ( c), 펜 드롬 화하고 ( ê), 오른쪽으로 90 ° 회전 하고 ( ) z개행 ( ·) 과 결합 합니다.


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 bytes

Golfed it further down, thanks to the other answers and the comments.

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

I just approached it like the other answer with the abs(10-abs(x)) function and then used the right ASCII characters to print out the image.


1
Here we require answers to be well-golfed in a code-golf challenge. At least you should attempt to golf it by for example removing unnecessary whitespace etc.
Erik the Outgolfer

1
Also, the language is called simply "Octave". As for golfing, apart from removing all whitespace (newlines too), make sure you combine statements, like the two final lines.
Sanchises

If anyone knows how I can get rid of the newline after endfor, that would be a great help.
Michthan




1

Bubblegum, 90 bytes

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

Try it online!


1

MathGolf, 22 bytes

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

Try it online!

Explanation

It's probably possible to golf away 2-3 bytes from this, I'll see what I can do.

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

1

C (gcc), 75 bytes

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

Try it online!

Totally changed from Cows quack's answer


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

JavaScript (ES6), 87 bytes

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