これを正しくコーディングするのはそれほど難しくありませんか?


17

このパターンを出力する言語でプログラムまたは関数を作成する必要があります。

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

出力は、それぞれ61文字の20行で構成されます。

ルール

  • 標準的な抜け穴は禁止されています
  • 出力の最後に単一の末尾改行がある場合があります
  • 出力のどの行にも末尾の空白がない可能性があります

末尾に改行がなければ、出力のmd5チェックサムは fde4e3b4606bf9f8c314131c93988e96です。

末尾に改行があると、出力のmd5チェックサムは 1f0b43db4fec6594be202c8339024cb7です。

これはであるため、バイト単位の最短コードが優先されます。


チャレンジを編集して、それを少し明確にしました。編集をロールバックしてください。
クリティキシリソス

1
私は好奇心が強いパターンを描きました... rextester.com/WXZV81312
sergiol

回答:


13

C(gcc)97 82 81 80バイト

absCに組み込まれていることを学習してから15バイト、変数の宣言を関数に移動できることを指摘してくれたRogemに感謝しx=31;--x+31x=-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には、このグラフのすべての座標を反復処理する2つのforループがあります。yから201、xから-3030ます。

毎に、3進法で行うことで等しいxかどうかをチェックします。それらが等しい場合、これはCのfalsey値を生成します。そうでない場合は、正の値に評価されます。その後、三項では、我々abs(10-abs(x))yabs(10-abs(x))-y0abs(10-abs(x))-y?"|":"~"printf応じて。

そして、各行の後に、を使用して改行をputs("")出力します。これは、関数が末尾の改行で出力する方法です。


1
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

パイソン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バイト:礼儀 フェリペナルディバティスタ

編集3:-2バイト:礼儀 shooqieの

編集4:-20バイト:礼儀 notjaganの

編集5:-22バイト:Leaky Nun提供


それを完全に逃した!ありがとう@FelipeNardiBatista。ただし、Pはアルゴリズムを完全に変更しました。
コイショアロイ


1
以下のような帰属を積み重ねるa,b,c='1','2','3'と同じでありa='1';b='2';c='3'、それ自身のラインで各1を置くことと同じで、しかし、あなたは次のように文字列をアンパックすることでバイトを得ることができますa,b,c='123'
フェリペ・ナルディバティスタ

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の回答と同じ原則に従います。1行目はabs関数、2行目は2つのforループと出力を実行する~|、グラフに基づいています。最後の""ループは、各ループの後に改行を出力するために使用されますy


1
なぜ改行を除外するのですか?
コナーオブライエン

改行は不要です。改行は削除できますが、スクリプトは引き続き正常に実行されます。ちょうどそこにあるので、abs関数とメイン関数の分離を見やすくなります。
フェリックス郭


2

Japt、32バイト

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

オンラインでお試しください!必ず出力ボックスを展開してください。

説明

20ç|

20回繰り返されるように設定U|ます。

AÆhX'~

マッピングされVた範囲[0,9])に設定します:(
U暗黙)インデックスの文字X(現在の値)を(h)に設定し~ます。

VméA

各行を10()文字右に回転WVてに設定しAます。

VpWUVmw

アレイを作成し: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

オクターブ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
ここでは、コードとゴルフのチャレンジでよくゴルフをするための答えが必要です。少なくとも、あなたは、たとえばなど空白不要を除去することにより、ゴルフにそれを試みるべき
エリックOutgolfer

1
また、この言語は単に「オクターブ」と呼ばれます。ゴルフについては、すべての空白(改行も)を削除する以外に、最後の2行のようにステートメントを必ず組み合わせてください。
-Sanchises

endforの後に改行を削除する方法を知っている人がいれば、それは大きな助けになるでしょう。
ミクサン




1

バブルガム、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

自動生成された説明として多くが便利であるため、彼らは通常のポイント欠場なぜプログラムがその...やっている
ジョー・キング

@JoKingこれは、ほとんどゼリーの答えの移植です。この後、ほぼ同じロジックを使用して21バイトを見つけました。そのためのより良い説明を書きます。
maxb



0

Mathematica、78 75バイト

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

\n実際の改行に置き換えられることを除きます。オンラインでお試しください!(何らかの理由でMathicsの行の先頭に余分なスペースがありますが、Mathematicaでは問題なく動作しますます。)

私は自分の提出物を思い付きましたが、Kritixi Lithosは彼らの説明を追加し、それは私のものに非常に似ていましたが、少し巧妙な式を使用していたので、これはその答えの単なるポートです。(行って、それを読んで、それを支持してください!)


0

バブルガム、93バイト

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.

オンラインでお試しください!



0

Lua、193バイト

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

Luaは新しい行を作成しないと何かを印刷できないことに注意してください。このため、ルールの1つを破る必要があります。

大幅に最小化:

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

縮小中に行われたいくつかの変更により、プログラムの拡張性は低下しますが、小さくなります。

それを試してみてください。https://tio.run/##PY7LCoMwEEX3@YqQVVJTcWwRCp0vKV1oNa1QJ0UjGPr49TRq6eoO91wOcx/LEDp8vs1IF9da4lc5aa9aI6djkSt3a4h1pynxmwLOKD5iJog7sD2Pmf9yD@u0QrKOV6yhmkVTAtonUla8pHoLKm5BqZmtHHSmTCw9ZhoOvLZsQCHMogRdwNoMaSr/L9hevMSiePQtOTnMdwhf

誰かがこれを以前に行ったかどうかはわかりませんが、プログラムを文字列としてロードし、gsub(search / replace)を使用して縮小化を試みました。残念ながら、プログラムが大きくなりました。ただし、このプログラムが十分に大きい場合は、バイト数が少なくなります。

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

実際の結果(240バイト、わずか41バイト)との相対的な近さのため、私はそれを投稿したいと考えました。このプログラムが350バイト以上の場合、おそらく削減されたでしょう。


0

Java 8、113バイト

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

私はチェックを感じています(j==i|j+i==60|i>9&(j-i==20|j+i==40)どういうわけか、複数の小切手を1つに組み合わせることでゴルフをすることができます。

説明:

ここで試してみてください。

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バイト

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

オンラインでお試しください!


Tcl、105バイト

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

オンラインでお試しください!


Tcl、109バイト

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

オンラインでお試しください!

TCL、143 133 123 110

まだたくさんありますが、私は後に進化させます:

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

デモ


ウォルフラムは、ゴルフに少し助けを与え、それより少し:wolframalpha.com/input/?i=-abs(10-abs(x-31))%2B21私はDesmos上でトレースプロット:desmos.com/calculator/z9czvtpihy
セルジオ

0

05AB1E20 19 バイト

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

オンラインでお試しください。

説明:

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∍û リストを生成します:

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