Não é muito difícil codificar isso, certo?


17

Você precisa escrever um programa ou uma função em qualquer idioma que produz esse padrão:

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

A saída é composta por 20 linhas de 61 caracteres cada.

Regras

  • As brechas padrão são proibidas
  • Pode haver uma nova linha final à direita no final da saída
  • Pode não haver espaço em branco à direita em nenhuma linha da saída

Sem uma nova linha à direita, a soma de verificação md5 da saída é fde4e3b4606bf9f8c314131c93988e96.

Com uma nova linha à direita, a soma de verificação md5 da saída é 1f0b43db4fec6594be202c8339024cb7.

Isso é , então o código mais curto em bytes vence.


Editei o desafio para torná-lo um pouco mais claro, fique à vontade para reverter a edição.
Kritixi Lithos

1
Eu desenhei um padrão curioso ... rextester.com/WXZV81312
sergiol

Respostas:


13

C (gcc) , 97 82 81 80 bytes

Jogou 15 bytes depois de aprender que absé embutido em C, um byte adicional graças a Rogem por apontar que as declarações de minhas variáveis ​​podem ser movidas para a função e outro byte graças a ceilingcat por sugerir em x=31;--x+31vez de x=-31;++x<31.

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

Experimente online!

Isso gera uma nova linha à direita. A função ffaz a saída.

Explicação

A saída pode ser indicada como um gráfico.

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

(Os +s são mostrados apenas para fins de explicação e representam os eixos.)

A equação deste gráfico é y=abs(10abs(x)) como pode ser visto aqui neste link para um gráfico 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

Em função f, temos dois for-loops que iteram por todas as coordenadas deste gráfico. ypassa de 20para 1e x passa de -30para 30.

Para cada x, vamos verificar se abs(10-abs(x))iguais yfazendo abs(10-abs(x))-yem um ternário. Se eles são iguais, isso gera 0um valor de falsey em C; caso contrário, ele será avaliado com algum valor positivo. Então, no ternário abs(10-abs(x))-y?"|":"~", nós printfconcordamos.

E após cada linha, produzimos uma nova linha usando puts(""), e é assim que a função gera uma nova linha à direita.


1
Salve um byte com, em f(x,y)vez dex,y;f()

@ceilingcat Obrigado pelo golfe
Kritixi Lithos 25/10/19



3

Geléia , 18 16 bytes

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

Experimente 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 bytes

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]

Experimente online!

Editar 1: -25 bytes: alterei o algoritmo depois que me senti um pouco ambicioso. : P

Editar 2: -3 bytes: cortesia Felipe Nardi Batista

Editar 3: -2 bytes: cortesia de shooqie

Editar 4: -20 bytes: cortesia notjagan

Editar 5: -22 bytes: cortesia de Leaky Nun


Perdeu completamente isso! Obrigado @FelipeNardiBatista. Porém, não importa mais: P mudou completamente o algoritmo.
Koishore Roy 11/07


1
empilhamento atribuições como a,b,c='1','2','3'é a mesma a='1';b='2';c='3'eo mesmo que colocar cada um em sua própria linha, mas você pode ganhar bytes por desembalar cordas comoa,b,c='123'
Felipe Nardi Batista

1
Não é n<mmais curto que n-m<0?
111117 shooqie

1
Reduzimos para 113 bytes .
notjagan

3

/// , 231 bytes

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

Experimente online! Ou visualize-o interativamente aqui !


3

WendyScript , 65 bytes (excluir nova linha)

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

Experimente online!

Segue o mesmo princípio que a resposta C dada acima. A primeira linha é a absfunção, a segunda linha executa duas para loops e saídas ~ou com |base no gráfico. O último ""é usado para gerar uma nova linha após cada loop ativado y.


1
Por que você está excluindo a nova linha?
Conor O'Brien

A nova linha não é necessária, a nova linha pode ser removida e o script ainda funciona bem. Está lá apenas, por isso é mais fácil ver a separação da absfunção versus a função principal.
Felix Guo


2

Japonês , 32 bytes

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

Experimente online! Certifique-se de expandir a caixa de saída.

Explicação

20ç|

Defina Upara |repetir 20 vezes.

AÆhX'~

Defina Vpara o intervalo [0,9]( ) mapeado por:
U(implícito) com o caractere no índice X(valor atual) definido como ( h) ~.

VméA

Defina Wpara Vcada linha girada 10 ( A) caracteres à direita.

VpWUVmw

Crie array:, V, W, Ue Vcom cada linha invertida ( w). Agora é a metade esquerda da forma, girada 90 ° para a esquerda.

c ê z ·

Achatar a matriz ( c), palendromize-a ( ê), gire 90 ° para a direita ( z) e junte-se às novas linhas ( ·).


2

Pincel , 36 bytes

não concorrente

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

Explicação

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)

Isso me lembra que eu preciso adicionar uma operação de espelho.


2

Oitava , 157 57 54 bytes

Golpeou ainda mais, graças às outras respostas e comentários.

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

Acabei de abordá-lo como a outra resposta com a função abs (10-abs (x)) e, em seguida, usei os caracteres ASCII certos para imprimir a imagem.


1
Aqui exigimos que as respostas sejam bem-golfe em um desafio de código-golfe. Pelo menos você deve tentar jogar golfe, por exemplo, removendo espaços em branco desnecessários etc.
Erik the Outgolfer

1
Além disso, o idioma é chamado simplesmente "Oitava". Quanto ao golfe, além de remover todo o espaço em branco (novas linhas também), certifique-se de combinar instruções, como as duas linhas finais.
Sanchises

Se alguém souber como posso me livrar da nova linha após o endfor, isso seria uma grande ajuda.
Michthan




1

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

Experimente online!


1

MathGolf , 22 bytes

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

Experimente online!

Explicação

Provavelmente é possível desviar de 2 a 3 bytes disso, vou ver o que posso fazer.

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

Por mais que as explicações auto gerado são convenientes, eles costumam perder o ponto de por que o programa está fazendo isso ...
Jo Rei

@ JoJoing isso é praticamente uma porta da resposta Jelly. Encontrei um byter de 21 caracteres depois disso usando praticamente a mesma lógica, tentarei escrever uma explicação melhor para isso.
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);}

Experimente online!

Totalmente alterado da resposta do vacas charlatão


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

Experimente online!

Eu acho que o Positron tem muitos bugs. Eu deveria atualizá-lo para o TIO, porque então ++realmente funcionará.


0

Mathematica, 78 75 bytes

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

exceto o \né substituído por uma nova linha real. Experimente online! (Há espaços extras no início das linhas em Matemática por algum motivo, mas funciona bem no Mathematica .)

Eu vim com uma apresentação minha, mas depois o Kritixi Lithos adicionou uma explicação deles e era bem parecida com a minha, mas usando uma fórmula um pouco mais inteligente, então agora isso é apenas um exemplo dessa resposta. (Vá e leia essa e a vote!)


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.

Experimente 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

Observe que Lua não pode imprimir algo sem criar uma nova linha. Por esse motivo, eu tenho que quebrar uma das regras.

Minimamente minificado em grande parte:

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

Algumas alterações foram feitas durante a minificação, o que torna o programa menos extensível, mas menor.

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

Não tenho certeza se alguém já fez isso antes, mas tentei minificar carregando o programa como uma string e usando gsub (pesquisar / substituir). Inevitavelmente, aumentou o programa. No entanto, se esse programa fosse grande o suficiente, renderia em menos 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 '))()

Devido à sua relativa proximidade com o resultado real (240 bytes, apenas 41 mais), achei que o postaria. Se este programa tivesse mais de 350 bytes, provavelmente haveria uma redução.


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

Tenho a sensação de que os cheques ( j==i|j+i==60|i>9&(j-i==20|j+i==40)definitivamente podem ser jogados de golfe de alguma maneira combinando vários cheques em um).

Explicação:

Experimente aqui.

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

Experimente 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

Experimente 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

Experimente online!

Tcl, 143 133 123 110 110

Ainda muito sem golfe, mas vou evoluí-lo depois:

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

demonstração


Wolfram deu uma pequena ajuda para jogar um pouco mais: wolframalpha.com/input/?i=-abs(10-abs(x-31))%2B21 uma trama que eu traçava no Desmos: desmos.com/calculator/z9czvtpihy
sergiol 14/07

0

05AB1E , 20 19 bytes

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

Experimente online.

Explicação:

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∍û gera a lista:

[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]
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.