Bu hakkı kodlamak çok zor değil mi?


17

Bu kalıbı çıktılayan herhangi bir dilde bir program veya işlev yazmanız gerekir:

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

Çıktı, her biri 61 karakterden oluşan 20 satırdan oluşur.

kurallar

  • Standart boşluklar yasaktır
  • Çıktının sonunda tek bir son satır olabilir
  • Çıktının herhangi bir satırında herhangi bir boşluk bulunmayabilir

Sondaki yeni satır olmadan, çıktının md5 sağlama toplamıdır fde4e3b4606bf9f8c314131c93988e96.

Sondaki yeni satırla, çıktının md5 sağlama toplamı olur 1f0b43db4fec6594be202c8339024cb7.

Bu , bu nedenle bayttaki en kısa kod kazanır.


Biraz daha net hale getirmek için meydan okumayı düzenledim, düzenlemeyi geri almaktan çekinmeyin.
Kritixi Lithos

1
Meraklı bir desen çizdim ... rextester.com/WXZV81312
sergiol

Yanıtlar:


13

C (gcc) , 97 82 81 80 bayt

absC'de yerleşik olan öğrendikten sonra 15 bayt golf oynadı , değişkenlerimin bildirimlerinin işleve taşınabileceğine işaret eden Rogem sayesinde ek bir bayt ve bunun yerine önermek için ceilingcat sayesinde başka bir bayt .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?"|":"~");}

Çevrimiçi deneyin!

Bu, sondaki yeni satırla sonuçlanır. Fonksiyon fçıkışı yapar.

açıklama

Çıktı grafik olarak belirtilebilir.

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

( +S sadece açıklama amacıyla gösterilmiştir ve eksenleri temsil eder.)

Bu grafiğin denklemi burada Desmos grafiğine bağlantıda görülebileceği gibi y=abs(10-abs(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

İşlev olarak f, bu grafikteki her koordinatta yinelenen iki for-loop'umuz var. ygider 20etmek 1ve x gider -30için 30.

Her biri için bir üçlü yaparak eşit xolup olmadığını kontrol ederiz . Eşitlerse , bu , C cinsinden bir falsey değeri verir , aksi takdirde bir miktar pozitif değer olarak değerlendirilir. Sonra üçlüde , biz buna göre.abs(10-abs(x))yabs(10-abs(x))-y0abs(10-abs(x))-y?"|":"~"printf

Ve her satırdan sonra, kullanarak bir satırsonu çıkarırız puts("")ve fonksiyon bu şekilde bir satırsonu satırıyla çıkar .


1
İle bir byte kaydet f(x,y)yerinex,y;f()

@ceilingcat Golf için teşekkürler
Kritixi Lithos



3

Jöle , 18 16 bayt

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

Çevrimiçi deneyin!

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

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]

Çevrimiçi deneyin!

Düzenleme 1: -25 bayt: biraz iddialı hissettim sonra algoritmayı değiştirdi. : P

Düzenleme 2: -3 bayt: nezaket Felipe Nardi Batista

Düzenleme 3: -2 bayt: nezaket shooqie

Düzenleme 4: -20 bayt: nezaket notjagan

Düzenleme 5: -22 bayt: nezaket Leaky Nun


Tamamen kaçırdım! Teşekkürler @FelipeNardiBatista. Artık önemli değil: P algoritmayı tamamen değiştirdi.
Koishore Roy


1
gibi istifleme nitelikleri a,b,c='1','2','3', a='1';b='2';c='3'her birini kendi satırına yerleştirmekle aynıdır ve aynı şekilde dizeleri açarak bayt kazanabilirsiniza,b,c='123'
Felipe Nardi Batista

1
Is not n<mdaha kısa n-m<0?
shooqie

1
113 bayta indirdim .
notjagan

3

/// , 231 bayt

/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"&&

Çevrimiçi deneyin! Veya burada etkileşimli olarak izleyin !


3

WendyScript , 65 bayt (yeni satırı hariç tut)

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

Çevrimiçi deneyin!

Yukarıda verilen C cevabı ile aynı prensibi takip eder. İlk satırı absfonksiyonu, ikinci satır döngüler ve çıkış için iki çalışır ~veya |grafik göre. Sonuncusu "", her döngü açıldıktan sonra yeni satır çıktısı almak için kullanılır y.


1
Neden yeni satırı hariç tutuyorsunuz?
Conor O'Brien

Yeni satır gerekli değildir, yeni satır kaldırılabilir ve komut dosyası hala iyi çalışır. Sadece orada olduğundan, absişlevin ana işleve karşı ayrılmasını görmek daha kolaydır .
Felix Guo

2

Vim, 59 Bayt

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

Nerede ^[olduğunu <ESC>tuşu


:11<CR>olabilir11G
nmjcman101

Şerefe. Bunu bilmiyordum
bioweasel

2

Japt , 32 bayt

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

Çevrimiçi deneyin! Çıkış kutusunu genişlettiğinizden emin olun.

açıklama

20ç|

Set Uiçin |tekrarlanan 20 kez.

AÆhX'~

Set Varalığa [0,9]( haritaladığı):
Udizindeki karakteri ile (örtük) Xiçin (mevcut değer) set ( h) ~.

VméA

Set Wiçin Vher hattıyla 10 (döndürülmüş A) sağ kömürleşir.

VpWUVmw

Dizi oluşturun: V, W, Uve Vher satır ters çevrilmiş ( w). Bu şimdi şeklin sol yarısı, 90 ° sola döndü.

c ê z ·

Diziyi düzleştirin ( c), palendromize edin ( ê), 90 ° sağa döndürün ( z) ve yeni satırlarla ( ·) birleştirin.


2

Boya fırçası , 36 bayt

rekabetsiz

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

açıklama

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)

Bu bana bir ayna operasyonu eklemem gerektiğini hatırlatıyor.


2

Oktav , 157 57 54 bayt

Diğer cevaplar ve yorumlar sayesinde daha da aşağı gitti.

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

Ben sadece abs (10-abs (x)) fonksiyonu ile diğer cevap gibi yaklaştı ve sonra görüntü yazdırmak için doğru ASCII karakterleri kullandım.


1
Burada, bir kod-golf mücadelesinde iyi golf oynamak için cevaplara ihtiyacımız var. En azından, örneğin gereksiz boşlukları kaldırarak golf oynamaya çalışmalısınız.
. Kaldırarak oynamaya çalışmalısınız Erik the Outgolfer

1
Ayrıca, dile basitçe "Oktav" denir. Golf gelince, tüm boşlukları (satırsonu) kaldırmak dışında, iki son satır gibi ifadeleri birleştirdiğinizden emin olun.
Sanchises

Eğer kimse sondan sonra yeni satırdan nasıl kurtulabileceğimi biliyorsa, bu çok yardımcı olacaktır.
Michthan




1

Sakız , 90 bayt

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

Çevrimiçi deneyin!


1

MathGolf , 22 bayt

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

Çevrimiçi deneyin!

açıklama

Bundan 2-3 bayt uzakta golf oynamak mümkündür, ne yapabileceğimi göreceğim.

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

Otomatik oluşturulan açıklamalar uygun olduğu sürece, genellikle programın bunu neden yaptığını kaçırırlar ...
Jo King

@JoKing bu hemen hemen Jelly cevabının bir limanı. Bundan sonra hemen hemen aynı mantığı kullanarak 21 bayt buldum, bunun için daha iyi bir açıklama yazmaya çalışacağım.
maxb


0

Pozitron , 165 bayt

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

Çevrimiçi deneyin!

Sanırım Pozitron'un içinde çok fazla hata var. TIO'ya güncellemeliyim çünkü o ++zaman gerçekten işe yarayacak.


0

Mathematica, 78 75 bayt

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

dışında \ngerçek bir satırsonu ile değiştirilir. Çevrimiçi deneyin! (Bir nedenden ötürü Mathics'teki satırların başında fazladan boşluklar var, ancak Mathematica'da iyi çalışıyor .)

Kendi gönderimi ile geldim, ama sonra Kritixi Lithos onların bir açıklaması ekledi ve benimkine oldukça benziyordu ama biraz daha zeki bir formül kullanarak, şimdi bu cevabın bir limanı. (Git ve oku onu ve oy ver!)


0

Sakız , 93 bayt

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.

Çevrimiçi deneyin!


0

JavaScript (ES6), 87 bayt

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 bayt

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'nın yeni bir satır oluşturmadan bir şey yazdıramadığını unutmayın. Bu nedenle, kurallardan birini çiğnemem gerekiyor.

Büyük ölçüde minimize edilmiş:

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

Küçültme sırasında yapılan bazı değişiklikler, bunların hepsi programı daha az genişletilebilir ancak daha küçük yapar.

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

Herkes daha önce bunu yaptım emin değilim, ama bir dize olarak programı yükleyerek ve gsub (arama / değiştirme) kullanarak küçültmeyi denedim. Ne yazık ki, programı büyüttü. Bununla birlikte, eğer bu program yeterince büyük olsaydı, daha az bayt üretecektir.

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

Gerçek sonuçla göreli yakınlığı nedeniyle (240 bayt, sadece 41 tane daha), göndereceğimi düşündüm. 350+ bayt olan bu program büyük olasılıkla bir azalma olurdu.


0

Java 8, 113 bayt

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

Çekler hissi var ( j==i|j+i==60|i>9&(j-i==20|j+i==40)kesinlikle bir şekilde birden fazla kontrol bir araya getirerek golf olabilir.

Açıklama:

Burada deneyin.

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 bayt

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

Çevrimiçi deneyin!


Tcl , 105 bayt

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

Çevrimiçi deneyin!


Tcl , 109 bayt

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

Çevrimiçi deneyin!

Tcl, 143 133 123 110

Hala çok ungolfed, ama sonra geliştireceğim:

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

gösteri


Wolfram biraz golf oynamak için biraz yardım etti : Desmos.com/calculator/z9czvtpihy
sergiol

0

05AB1E , 20 19 bayt

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

Çevrimiçi deneyin.

Açıklama:

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∍û listeyi oluşturur:

[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]
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.