No es muy difícil codificar esto ¿verdad?

17

Debe escribir un programa o una función en cualquier idioma que genere este patrón:

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

La salida se compone de 20 líneas de 61 caracteres cada una.

Reglas

  • Las lagunas estándar están prohibidas
  • Puede haber una nueva línea final al final de la salida
  • Es posible que no haya espacios en blanco al final en ninguna línea de la salida

Sin una nueva línea final, la suma de comprobación md5 de la salida es fde4e3b4606bf9f8c314131c93988e96.

Con una nueva línea final, la suma de comprobación md5 de la salida es 1f0b43db4fec6594be202c8339024cb7.

Este es el , por lo que gana el código más corto en bytes.

Pro11
fuente
He editado el desafío para hacerlo un poco más claro, no dude en revertir la edición.
Kritixi Lithos
1
He dibujado un patrón curioso ... rextester.com/WXZV81312
sergiol

Respuestas:

13

C (gcc) , 97 82 81 80 bytes

Golfé 15 bytes después de aprender que absestá integrado en C, un byte adicional gracias a Rogem por señalar que las declaraciones de mis variables se pueden mover a la función, y otro byte gracias a ceilingcat por sugerir en x=31;--x+31lugar de x=-31;++x<31.

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

Pruébalo en línea!

Esto sale con una nueva línea final. La función fhace la salida.

Explicación

La salida se puede establecer como un gráfico.

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

(Los +s solo se muestran con fines explicativos y representan los ejes).

La ecuación de este gráfico es y=abdominales(10-abdominales(X)) como se puede ver aquí en este enlace a un 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

En función f, tenemos dos bucles for que iteran a través de cada coordenada en este gráfico. yva de 20a 1y x va de -30a 30.

Para cada uno x, verificamos si abs(10-abs(x))es igual yal hacerlo abs(10-abs(x))-yen un ternario. Si son iguales, esto produce 0un valor falso en C, de lo contrario, se evaluará a algún valor positivo. Luego, en el ternario abs(10-abs(x))-y?"|":"~", en printfconsecuencia.

Y después de cada línea, sacamos una nueva línea usando puts(""), y así es como la función sale con una nueva línea final.

Kritixi Lithos
fuente
1
Ahorre un byte con en f(x,y)lugar dex,y;f()
@ceilingcat Gracias por el golf
Kritixi Lithos
4

R , 70 67 bytes

3 bytes gracias a Giuseppe.

write(c("|","~")[outer(abs(10-abs(-30:30)),20:1,"==")+1],"",61,,"")

Pruébalo en línea!

Monja permeable
fuente
67 bytes
Giuseppe
Cambie el primero ""a a 1por -1.
J.Doe
3

Jalea , 18 16 bytes

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

Pruébalo en línea!

⁵×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.
Dennis
fuente
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]

Pruébalo en línea!

Edición 1: -25 bytes: cambié el algoritmo después de que me sentí un poco ambicioso. :PAG

Edición 2: -3 bytes: cortesía de Felipe Nardi Batista

Edición 3: -2 bytes: cortesía de shooqie

Edición 4: -20 bytes: cortesía de notjagan

Edición 5: -22 bytes: cortesía Leaky Nun

Koishore Roy
fuente
Completamente perdido eso! Gracias @FelipeNardiBatista. Sin embargo, ya no importa: P cambió el algoritmo por completo.
Koishore Roy
1
135 bytes
Felipe Nardi Batista
1
apilar atribuciones como a,b,c='1','2','3'es lo mismo a='1';b='2';c='3'y lo mismo que colocar cada una en su propia línea, pero puedes ganar bytes desempacando cadenas comoa,b,c='123'
Felipe Nardi Batista
1
¿No es n<mmás corto que n-m<0?
shooqie
1
Lo bajé a 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"&&

Pruébalo en línea! O, ¡míralo interactivamente aquí !

Conor O'Brien
fuente
3

WendyScript , 65 bytes (excluir nueva línea)

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

Pruébalo en línea!

Sigue el mismo principio que la respuesta C dada anteriormente. La primera línea es la absfunción, la segunda línea ejecuta dos para bucles y salidas ~o se |basa en el gráfico. El último ""se usa para generar una nueva línea después de cada bucle activado y.

Felix Guo
fuente
1
¿Por qué excluyes la nueva línea?
Conor O'Brien
La nueva línea no es necesaria, la nueva línea se puede eliminar y el script aún funciona bien. Simplemente está allí, por lo que es más fácil ver la separación de la absfunción frente a la función principal.
Felix Guo
2

Vim, 59 bytes

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

Donde ^[esta la <ESC>llave

bioweasel
fuente
:11<CR>puede ser11G
nmjcman101
Salud. No sabía sobre eso
bioweasel
2

Japt , 32 bytes

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

Pruébalo en línea! Asegúrese de expandir el cuadro de salida.

Explicación

20ç|

Establecer Upara |repetir 20 veces.

AÆhX'~

Establezca Vel rango [0,9]( ) asignado por:
U(implícito) con el carácter en el índice X(valor actual) establecido en ( h) ~.

VméA

Conjunto Wpara Vcada línea girada 10 ( A) char de la derecha.

VpWUVmw

Crear matriz:, V, W, Uy Vcon cada línea invertida ( w). Esta es ahora la mitad izquierda de la forma, girada 90 ° a la izquierda.

c ê z ·

Aplane la matriz ( c), pálidala ( ê), gírela 90 ° a la derecha ( z) y únala con nuevas líneas (· ).

Justin Mariner
fuente
2

Pincel , 36 bytes

no competidor

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

Explicación

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)

Esto me recuerda que necesito agregar una operación espejo.

Hiperneutrino
fuente
2

Octava , 157 57 54 bytes

Golfed más abajo, gracias a las otras respuestas y los comentarios.

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

Simplemente lo enfoqué como la otra respuesta con la función abs (10-abs (x)) y luego usé los caracteres ASCII correctos para imprimir la imagen.

Michthan
fuente
1
Aquí requerimos respuestas para jugar bien en un desafío de código de golf. Al menos deberías intentar jugar golf eliminando espacios en blanco innecesarios, etc.
Erik the Outgolfer
1
Además, el lenguaje se llama simplemente "Octave". En cuanto al golf, además de eliminar todos los espacios en blanco (también las nuevas líneas), asegúrese de combinar declaraciones, como las dos líneas finales.
Sanchises
Si alguien sabe cómo puedo deshacerme de la nueva línea después de endfor, sería de gran ayuda.
Michthan
1

Chicle , 90 bytes

00000000: 9dcb a10d 0040 08c5 50cf cc4d 673f 85ab  [email protected]?..
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......

Pruébalo en línea!

ovs
fuente
1

MathGolf , 22 bytes

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

Pruébalo en línea!

Explicación

Probablemente sea posible jugar golf a 2-3 bytes de esto, veré qué puedo hacer.

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
maxb
fuente
Si bien las explicaciones generadas automáticamente son convenientes, por lo general no entienden por qué el programa está haciendo eso ...
Jo King
@JoKing esto es más o menos un puerto de la respuesta Jelly. Encontré un 21-byter después de esto usando más o menos la misma lógica, intentaré escribir una mejor explicación para eso.
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);}

Pruébalo en línea!

Totalmente cambiado de la respuesta del curandero de las vacas

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

Pruébalo en línea!

Creo que Positron tiene demasiados errores. Debería actualizarlo a TIO porque ++realmente funcionará.

Hiperneutrino
fuente
0

Mathematica, 78 75 bytes

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

excepto que \nse reemplaza por una nueva línea real. Pruébalo en línea! (Hay espacios adicionales al comienzo de las líneas en matemáticas por alguna razón, pero funciona bien en Mathematica ).

Se me ocurrió una presentación propia, pero luego Kritixi Lithos agregó una explicación de ellos y fue bastante similar a la mía, pero usando una fórmula ligeramente más inteligente, así que ahora esto es solo un puerto de esa respuesta. (¡Ve y lee ese y vótalo!)

No un arbol
fuente
0

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

Pruébalo en línea!

musicman523
fuente
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?'|':'~'

Darrylyeo
fuente
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

Tenga en cuenta que Lua no puede imprimir algo sin crear una nueva línea. Por esta razón, tengo que romper una de las reglas.

Mínimamente minimizado en gran medida:

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

Algunos cambios se realizaron durante la minificación, todo lo cual hace que el programa sea menos extensible pero más pequeño.

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

No estoy seguro de si alguien ha hecho esto antes, pero intenté minificar cargando el programa como una cadena y usando gsub (buscar / reemplazar). Desafortunadamente, hizo que el programa fuera más grande. Sin embargo, si este programa fuera lo suficientemente grande, produciría 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 '))()

Debido a su relativa cercanía con el resultado real (240 bytes, solo 41 más), pensé que lo publicaría. Si este programa tuviera más de 350 bytes, probablemente habría habido una reducción.

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

Tengo la sensación de que los cheques ( j==i|j+i==60|i>9&(j-i==20|j+i==40)definitivamente pueden jugarse de alguna manera combinando múltiples cheques en uno.

Explicación:

Pruébalo aquí

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
Kevin Cruijssen
fuente
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

Pruébalo en línea!


Tcl , 105 bytes

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

Pruébalo en línea!


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

Pruébalo en línea!

Tcl, 143 133 123 110

Todavía no me gusta mucho, pero lo evolucionaré después:

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

manifestación

sergiol
fuente
Wolfram dio un poco de ayuda para jugar golf un poco más: wolframalpha.com/input/?i=-abs(10-abs(x-31))%2B21 una trama que rastreé
sergiol
0

05AB1E , 20 19 bytes

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

Pruébalo en línea.

Explicación:

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∍û genera la 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]
Kevin Cruijssen
fuente