Négation du schéma des pyramides

13

Dans mon langage Pyramid Scheme , il y a une construction légèrement amusante: le triangle vide:

^
-

Lorsqu'aucun argument n'est donné, il revient 0. Pour générer en 1utilisant cette construction, nous pourrions utiliser ceci:

   ^
  /!\
 ^---
 -

Cela passe simplement 0à la fonction de négation. Nous pouvons continuer à nier ce résultat:

 ^
/!\
---^
  /!\
 ^---
 -

Pour obtenir 0. Une négation de plus donne:

   ^
  /!\
 ^---
/!\
---^
  /!\
 ^---
 -

Défi

Etant donné un entier n ≥ 1, sortir la pyramide vide étant annulée n fois de la manière décrite.

Cas de test

input
output

1
   ^
  /!\
 ^---
 -

2
 ^
/!\
---^
  /!\
 ^---
 -

3
   ^
  /!\
 ^---
/!\
---^
  /!\
 ^---
 -

6
 ^
/!\
---^
  /!\
 ^---
/!\
---^
  /!\
 ^---
/!\
---^
  /!\
 ^---
 -
Conor O'Brien
la source
Par négation, je suppose que vous entendez complément au niveau du bit ( ~)?
user202729
@ user202729 Non, je veux dire négation régulière.
Conor O'Brien
C'est donc C / C ++ !( not).
user202729
@ user202729 Oui. Bien que ce que cela signifie soit tangentiel au problème
Conor O'Brien
1
/!\ Avertissement! /! \ Je vois des triangles d'avertissement partout!
RedClover

Réponses:

7

Fusain , 17 octets

FN«↙^→/!\¶³‖T»↓^-

Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:

FN«

Boucle pour le nombre approprié de négations.

↙^→/!\¶³

Imprime une fonction de négation. (Le se ³développe en ---.)

‖T

Reflète la toile.

»↓^-

À la fin de la boucle, imprimez le triangle vide.

Neil
la source
Juste pour info, le triangle vide utilise à la -place de_
Conor O'Brien
@ ConorO'Brien Merci de l'avoir signalé! Je pensais que ça n'avait pas l'air bien, mais je ne pouvais pas mettre le doigt dessus ...
Neil
4

Python 2 , 94 octets

i=input();print i%2*2*" "+" ^"
while i:print['/!\\\n---^','  /!\\\n ^---'][i%2];i-=1
print" -"

Essayez-le en ligne!

Essayer de jouer au golf ... 3 print déclarations semblent terriblement redondantes.

M. Xcoder
la source
2

JavaScript (ES6), 77 74 octets

n=>(s=`^
  /!\\
 ^---`,n%2?`   `+s:` ^`)+`
/!\\
---${s}`.repeat(n/2)+`
 -`

Essayez-le:

darrylyeo
la source
1

Funky , 95 octets

n=>{print((n%2)?" ^":"   ^")fori=n i>0i--print({"  /!\\\n ^---","/!\\\n---^"}[i%2])print"   -"}

Essayez-le en ligne!

ATaco
la source
1

Proton , 101 octets

a=>{k=" ^---"for i:0..a print(["   ^",k,"---^"][i?~i%2+1:i]+"\n"+" "*(~i%2)*2+"/!\\")print(k+"\n -")}

Essayez-le en ligne!

aussi trop long lol

HyperNeutrino
la source
1

Java 8, 104 octets

n->{String r=n%2>0?"   ^\n":" ^\n";for(;n-->0;r+=n%2<1?"  /!\\\n ^---\n":"/!\\\n---^\n");return r+" -";}

Explication:

Essayez-le ici.

n->{                       // Method with integer parameter and String return-type
  String r=                //  Result-String, starting at:
           n%2>0?          //  If the input is odd:
            "   ^\n"       //   Start the result at "   ^" + new-line
           :               //  Else (the input is even):
            " ^\n";        //   Start the result at " ^" + new-line
  for(;n-->0;              //  Loop the input amount of times
    r+=n%2<1?              //   If the current row is even:
        "  /!\\\n ^---\n"  //    Append the result-String with "  /!\" + new-line
                           //                                  " ^---" + new-line
       :                   //   Else (the current row is odd):
        "/!\\\n---^\n"     //    Append the result-String with "/!\" + new-line
                           //                                  "---^" + new-line
  );                       //  End of loop
  return r                 //  Return the result-String
          +" -";           //   + " -"
}                          // End of method
Kevin Cruijssen
la source
1

Python 2 , 82 octets

def f(n):x=n%2;print' '*x*2,'^'+(-~n/2*"\n/!\\\n---^\n  /!\\\n ^---")[x*9:]+'\n -'

Essayez-le en ligne!

TFeld
la source
1

Perl 5, 77 + 1 (-p) octets

$\=' ^
 _';map$_%2?$\=~s,\^,  ^
  /!\\
 ^---,:$\=~s,  \^,^
/!\\
---^,,1..$_}{

essayez-le en ligne

Nahuel Fouilleul
la source
0

C (gcc) , 87 octets

f(n){for(puts(n%2?"   ^":" ^");n;)puts(n--%2?"  /!\\\n ^---":"/!\\\n---^");puts(" -");}

Essayez-le en ligne!

cleblanc
la source
0

Python 3 , 167 octets

def f(n):
	g=[[" "]*5for _ in'  '*-~n];a=["^","/!\\","---"]
	for i in range(n):
		for r,R in zip(a,g[i*2:]):R[(i-n)%2*2+(r>"]"):]=r
	g[-2][1]="^";g[-1][1]="-";return g

Essayez-le en ligne!

-4 octets grâce à M. Xcoder
-1 octets grâce à Jonathan Frech

HyperNeutrino
la source
' '*2*npeut être ' '*n(deux espaces là, mais eugh ... démarque SE), puis ' '*n+' 'peut être remplacé par ' '*-~npour 168 octets .
M. Xcoder,
@ Mr.Xcoder Oh cool, merci!
HyperNeutrino
Je pense que c'est r=="^"possible r>"]".
Jonathan Frech
@JonathanFrech semble l'être, merci!
HyperNeutrino