Pyramid Scheme Negation

13

In meiner Sprache Pyramid Scheme gibt es ein etwas lustiges Konstrukt: das leere Dreieck:

^
-

Wenn keine Argumente angegeben werden, wird zurückgegeben 0. Um 1mit diesem Konstrukt zu generieren , könnten wir dies verwenden:

   ^
  /!\
 ^---
 -

Dies geht einfach 0auf die Negationsfunktion über. Wir können dieses Ergebnis weiterhin negieren:

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

Um 0 zu bekommen. Eine weitere Verneinung ergibt:

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

Herausforderung

Bei einer ganzen Zahl n ≥ 1 wird die leere Pyramide in der beschriebenen Weise n- mal negiert ausgegeben .

Testfälle

input
output

1
   ^
  /!\
 ^---
 -

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

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

6
 ^
/!\
---^
  /!\
 ^---
/!\
---^
  /!\
 ^---
/!\
---^
  /!\
 ^---
 -
Conor O'Brien
quelle
Unter Negation verstehe ich hier wohl bitweises Komplement ( ~)?
user202729
@ user202729 Nein, ich meine regelmäßige Verneinung.
Conor O'Brien
Es ist also C / C ++ !( not).
User202729
@ user202729 Ja. Was es bedeutet, ist für das Problem von tangentialer Bedeutung
Conor O'Brien,
1
/!\ Warnung! /! \ Ich sehe überall Warndreiecke!
RedClover

Antworten:

7

Holzkohle , 17 Bytes

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

Probieren Sie es online!Link ist eine ausführliche Version des Codes. Erläuterung:

FN«

Schleife für die entsprechende Anzahl von Negationen.

↙^→/!\¶³

Drucken Sie eine Negationsfunktion. (Das ³erweitert sich zu--- .)

‖T

Spiegeln Sie die Leinwand.

»↓^-

Drucken Sie am Ende der Schleife das leere Dreieck.

Neil
quelle
Nur zu Ihrer Information, das leere Dreieck verwendet -statt_
Conor O'Brien
@ ConorO'Brien Danke für den Hinweis! Ich dachte, dass es nicht ganz richtig aussieht, konnte aber meinen Finger nicht darauf legen ...
Neil
4

Python 2 , 94 Bytes

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

Probieren Sie es online!

Der Versuch, Golf zu spielen ... 3 printAussagen scheinen schrecklich überflüssig zu sein.

Mr. Xcoder
quelle
2

JavaScript (ES6), 77 bis 74 Byte

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

Versuch es:

darrylyeo
quelle
1

Funky , 95 Bytes

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

Probieren Sie es online!

Ein Taco
quelle
1

Proton , 101 Bytes

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

Probieren Sie es online!

auch zu lang lol

HyperNeutrino
quelle
1

Java 8, 104 Bytes

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

Erläuterung:

Probieren Sie es hier aus.

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
quelle
1

Python 2 , 82 Bytes

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

Probieren Sie es online!

TFeld
quelle
1

Perl 5, 77 + 1 (-p) Bytes

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

versuche es online

Nahuel Fouilleul
quelle
0

C (gcc) 87 Bytes

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

Probieren Sie es online!

Cleblanc
quelle
0

Python 3 , 167 Bytes

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

Probieren Sie es online!

-4 Bytes dank Mr. Xcoder
-1 Bytes dank Jonathan Frech

HyperNeutrino
quelle
' '*2*nkann sein ' '*n(zwei Leerzeichen da, aber eugh ... SE Markdown), und ' '*n+' 'kann dann durch ' '*-~nfür 168 Bytes ersetzt werden .
Mr. Xcoder
@ Mr.Xcoder Oh cool, danke!
HyperNeutrino
Ich denke r=="^"kann sein r>"]".
Jonathan Frech
@ JonathanFrech Scheint so zu sein, danke!
HyperNeutrino