Pas trop difficile à coder, non?

17

Vous devez écrire un programme ou une fonction dans n'importe quel langage qui génère ce modèle:

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

La sortie est composée de 20 lignes de 61 caractères chacune.

Règles

  • Les failles standard sont interdites
  • Il peut y avoir une seule nouvelle ligne à la fin de la sortie
  • Il ne doit y avoir aucun espace de fin sur aucune ligne de la sortie

Sans une nouvelle ligne de fin, la somme de contrôle md5 de la sortie est fde4e3b4606bf9f8c314131c93988e96.

Avec une nouvelle ligne de fin, la somme de contrôle md5 de la sortie est 1f0b43db4fec6594be202c8339024cb7.

Il s'agit de , donc le code le plus court en octets l'emporte.

Pro11
la source
J'ai modifié le défi pour le rendre un peu plus clair, n'hésitez pas à annuler la modification.
Kritixi Lithos
1
J'ai dessiné un motif curieux ... rextester.com/WXZV81312
sergiol

Réponses:

13

C (gcc) , 97 82 81 80 octets

Golfé 15 octets après avoir appris qu'il abss'agit d'un C intégré, un octet supplémentaire grâce à Rogem pour avoir souligné que les déclarations de mes variables peuvent être déplacées vers la fonction, et un autre octet grâce à plafondcat pour avoir suggéré à la x=31;--x+31place de x=-31;++x<31.

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

Essayez-le en ligne!

Cela sort avec une nouvelle ligne de fin. La fonctionf effectue la sortie.

Explication

La sortie peut être indiquée sous forme de graphique.

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

(Le + s ne sont présentés qu'à des fins d'explication et représentent les axes.)

L'équation de ce graphique est y=abs(10abs(x)) comme on peut le voir ici dans ce lien vers un graphique de 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 fonction f, nous avons deux boucles for qui parcourent chaque coordonnée de ce graphique.yva de 20à 1et x va de -30à 30.

Pour chaque x, nous vérifions si abs(10-abs(x))est égal yen faisantabs(10-abs(x))-y dans un ternaire. S'ils sont égaux, cela donne 0une valeur de falsey en C, sinon il sera évalué à une valeur positive. Puis dans le ternaire abs(10-abs(x))-y?"|":"~", nous en printfconséquence.

Et après chaque ligne, nous sortons une nouvelle ligne en utilisant puts(""), et c'est ainsi que la fonction sort avec une nouvelle ligne de fin.

Kritixi Lithos
la source
1
Enregistrer un octet avec f(x,y)au lieu dex,y;f()
@ceilingcat Merci pour le golf
Kritixi Lithos
11

Fusain , 16 15 octets

-1 octet grâce à notjagan

↘×~²⁰↗↗×~χ‖OUB|

Essayez-le en ligne!

Okx
la source
-1 octet en supprimant le et en se déplaçant implicitement.
notjagan
4

R , 70 67 octets

3 octets grâce à Giuseppe.

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

Essayez-le en ligne!

Leaky Nun
la source
67 octets
Giuseppe
Remplacez le premier ""par un 1pour -1.
J.Doe
3

Gelée , 18 16 octets

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

Essayez-le en ligne!

⁵×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
la source
3

Python 2.7, 163 138 135 135 133 113 91 octets

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]

Essayez-le en ligne!

Edit 1: -25 octets: changé l'algorithme après que je me sente un peu ambitieux. : P

Edit 2: -3 octets: avec la permission de Felipe Nardi Batista

Modifier 3: -2 octets: courtoisie shooqie

Modifier 4: -20 octets: courtoisie notjagan

Edit 5: -22 octets: avec la permission de Leaky Nun

Koishore Roy
la source
Complètement manqué ça! Merci @FelipeNardiBatista. Cela n'a plus d'importance cependant: P a complètement changé l'algorithme.
Koishore Roy
1
135 octets
Felipe Nardi Batista
1
empiler les attributions comme a,b,c='1','2','3'est le même a='1';b='2';c='3'et le même que de placer chacun dans sa propre ligne, mais vous pouvez gagner des octets en déballant des chaînes commea,b,c='123'
Felipe Nardi Batista
1
N'est-ce pas n<mplus court que n-m<0?
shooqie
1
Je l'ai réduit à 113 octets .
notjagan
3

/// , 231 octets

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

Essayez-le en ligne! Ou regardez-le interactivement ici !

Conor O'Brien
la source
3

WendyScript , 65 octets (exclure la nouvelle ligne)

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

Essayez-le en ligne!

Suit le même principe que la réponse C donnée ci-dessus. La première ligne est la absfonction, la deuxième ligne en exécute deux pour les boucles et les sorties ~ou en |fonction du graphique. Le dernier ""est utilisé pour sortir une nouvelle ligne après chaque boucle y.

Felix Guo
la source
1
Pourquoi excluez-vous la nouvelle ligne?
Conor O'Brien
La nouvelle ligne n'est pas requise, la nouvelle ligne peut être supprimée et le script fonctionne toujours correctement. Il est juste là, donc il est plus facile de voir la séparation de la absfonction par rapport à la fonction principale.
Felix Guo
2

Vim, 59 octets

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

^[est la <ESC>clé

bioweasel
la source
:11<CR>peut être11G
nmjcman101
À votre santé. Je ne connaissais pas celui-là
bioweasel
2

Japt , 32 octets

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

Essayez-le en ligne!Assurez-vous d'agrandir la zone de sortie.

Explication

20ç|

Réglez Usur |répété 20 fois.

AÆhX'~

Défini Vsur la plage [0,9]( ) mappée par:
U(implicite) avec le caractère à l'index X(valeur actuelle) défini sur ( h) ~.

VméA

Réglez WsurV chaque ligne avec une rotation de 10 ( A) caractères vers la droite.

VpWUVmw

Créer un tableau:, V, W, Uet Vavec chaque ligne inversée (w ). C'est maintenant la moitié gauche de la forme, tournée de 90 ° vers la gauche.

c ê z ·

Aplatissez le tableau ( c), palendromisez-le ( ), faites ê-le pivoter de 90 ° vers la droite ( z) et joignez-le à des nouvelles lignes ( ·).

Justin Mariner
la source
2

Pinceau , 36 octets

non compétitif

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

Explication

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)

Cela me rappelle que je dois ajouter une opération miroir.

HyperNeutrino
la source
2

Octave , 157 57 54 octets

Golfé plus bas, grâce aux autres réponses et commentaires.

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

Je l'ai juste approché comme l'autre réponse avec la fonction abs (10-abs (x)), puis j'ai utilisé les bons caractères ASCII pour imprimer l'image.

Michthan
la source
1
Ici, nous avons besoin de réponses pour bien jouer dans un défi de code-golf. Au moins, vous devriez essayer de
jouer
1
En outre, la langue est appelée simplement "Octave". En ce qui concerne le golf, en plus de supprimer tous les espaces (sauts de ligne également), assurez-vous de combiner les instructions, comme les deux dernières lignes.
Sanchises
Si quelqu'un sait comment je peux me débarrasser de la nouvelle ligne après la fin, ce serait d'une grande aide.
Michthan
1

Bubblegum , 90 octets

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

Essayez-le en ligne!

ovs
la source
1

MathGolf , 22 octets

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

Essayez-le en ligne!

Explication

Il est probablement possible de jouer au golf à 2-3 octets de cela, je vais voir ce que je peux faire.

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
la source
Bien que les explications générées automatiquement soient pratiques, elles manquent généralement de savoir pourquoi le programme fait cela ...
Jo King
@JoKing c'est à peu près un portage de la réponse Jelly. J'ai trouvé un 21 octets après cela en utilisant à peu près la même logique, je vais essayer d'écrire une meilleure explication pour cela.
maxb
1

C (gcc) , 75 octets

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

Essayez-le en ligne!

Totalement changé depuis la réponse du charlatan des vaches

l4m2
la source
0

Positron , 165 octets

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

Essayez-le en ligne!

Je pense que Positron contient trop de bugs. Je devrais le mettre à jour sur TIO, car ++cela fonctionnera.

HyperNeutrino
la source
0

Mathematica, 78 75 octets

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

sauf que le \nest remplacé par une nouvelle ligne réelle. Essayez-le en ligne! (Il y a des espaces supplémentaires au début des lignes en mathématiques pour une raison quelconque, mais cela fonctionne bien dans Mathematica .)

J'ai présenté ma propre soumission, mais ensuite Kritixi Lithos a ajouté une explication de la leur et elle était assez similaire à la mienne mais en utilisant une formule légèrement plus intelligente, alors maintenant ce n'est qu'un portage de cette réponse. (Allez lire celui-là et votez!)

Pas un arbre
la source
0

Bubblegum , 93 octets

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.

Essayez-le en ligne!

musicman523
la source
0

JavaScript (ES6), 87 octets

for(a=Math.abs,y=20;y--;console.log(s))for(s='',x=-30;x<31;x++)s+=a(10-a(x))+~y?'|':'~'

darrylyeo
la source
0

Lua, 193 octets

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

Notez que Lua ne peut pas imprimer quelque chose sans créer une nouvelle ligne. Pour cette raison, je dois enfreindre l'une des règles.

Minimisé dans une large mesure:

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

Certains changements ont été effectués lors de la minification, ce qui rend le programme moins extensible mais plus petit.

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

Je ne sais pas si quelqu'un l'a déjà fait auparavant, mais j'ai essayé de minifier en chargeant le programme sous forme de chaîne et en utilisant gsub (rechercher / remplacer). Malheureusement, cela a agrandi le programme. Cependant, si ce programme était suffisamment grand, il donnerait moins d'octets.

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

En raison de sa relative proximité avec le résultat réel (240 octets, seulement 41 de plus), j'ai pensé que je le publierais. Si ce programme comptait plus de 350 octets, il y aurait probablement eu une réduction.

AI221
la source
0

Java 8, 113 octets

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'ai l'impression que les chèques ( j==i|j+i==60|i>9&(j-i==20|j+i==40)peuvent certainement être joués en combinant en quelque sorte plusieurs chèques en un seul.

Explication:

Essayez-le ici.

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
la source
0

Tcl , 104 octets

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

Essayez-le en ligne!


Tcl , 105 octets

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

Essayez-le en ligne!


Tcl , 109 octets

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

Essayez-le en ligne!

Tcl, 143 133 123 123 110

Encore très peu golfé, mais je vais le faire évoluer aprè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

démo

sergiol
la source
Wolfram a donné un peu d'aide au golf un peu plus: wolframalpha.com/input/?i=-abs(10-abs(x-31))%2B21 un complot que j'ai tracé sur Desmos: desmos.com/calculator/z9czvtpihy
sergiol
0

05AB1E , 20 19 octets

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

Essayez-le en ligne.

Explication:

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∍û génère la liste:

[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
la source