Negação do esquema de pirâmide

13

Na minha linguagem Pyramid Scheme , há uma construção um pouco engraçada: o triângulo vazio:

^
-

Quando não há argumentos, ele retorna 0. Para gerar 1usando essa construção, poderíamos usar isso:

   ^
  /!\
 ^---
 -

Isso simplesmente passa 0para a função de negação. Podemos continuar negando esse resultado:

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

Para obter 0. Mais uma negação fornece:

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

Desafio

Dado um número inteiro n ≥ 1, produza a pirâmide vazia sendo negada n vezes da maneira descrita.

Casos de teste

input
output

1
   ^
  /!\
 ^---
 -

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

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

6
 ^
/!\
---^
  /!\
 ^---
/!\
---^
  /!\
 ^---
/!\
---^
  /!\
 ^---
 -
Conor O'Brien
fonte
Por negação aqui, suponho que você queira dizer complemento bit a bit ( ~)?
user202729
@ user202729 Não, quero dizer negação regular.
Conor O'Brien
Então é C / C ++ !( not).
usar o seguinte comando
@ user202729 Sim. Embora o que significa é tangencial para o problema
Conor O'Brien
1
/!\ Aviso! /! \ Eu vejo triângulos de aviso em todo lugar!
RedClover

Respostas:

7

Carvão , 17 bytes

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

Experimente online! Link é a versão detalhada do código. Explicação:

FN«

Loop para o número apropriado de negações.

↙^→/!\¶³

Imprima uma função de negação. (O ³expande para ---.)

‖T

Reflita a tela.

»↓^-

No final do loop, imprima o triângulo vazio.

Neil
fonte
Apenas fyi, o triângulo vazio usa em -vez de_
Conor O'Brien
@ ConorO'Brien Obrigado por apontar isso! I fez pensar que não chegou a olhar direito, mas não poderia colocar o dedo sobre ele ...
Neil
4

Python 2 , 94 bytes

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

Experimente online!

Tentando jogar golfe ... 3 printafirmações parecem muito redundantes.

Mr. Xcoder
fonte
2

JavaScript (ES6), 77 74 bytes

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

Tente:

darrylyeo
fonte
1

Funky , 95 bytes

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

Experimente online!

ATaco
fonte
1

Próton , 101 bytes

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

Experimente online!

também muito longo lol

HyperNeutrino
fonte
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+" -";}

Explicação:

Experimente aqui.

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

Retina , 70 68 60 bytes

graças a @MartinEnder por -8 bytes

.+
$*
r`11
21
1
¶  /!\¶ ^---
2
¶/!\¶---^
^¶( *)
$1 ^$&
$
¶ -

Experimente online!

ovs
fonte
1

Python 2 , 82 bytes

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

Experimente online!

TFeld
fonte
1

Perl 5, 77 + 1 (-p) bytes

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

experimente online

Nahuel Fouilleul
fonte
0

Python 2 , 100 bytes

lambda n:n%2*'  '+' ^\n'+'\n'.join(['/!\\\n---^','  /!\\\n ^---'][i%2]for i in range(n,0,-1))+'\n -'

Experimente online!

totalmente humano
fonte
0

C (gcc) , 87 bytes

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

Experimente online!

cleblanc
fonte
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

Experimente online!

-4 bytes graças ao Sr. Xcoder
-1 byte graças a Jonathan Frech

HyperNeutrino
fonte
' '*2*npode ser ' '*n(dois espaços lá, mas eugh ... SE remarcação) e, em seguida, ' '*n+' 'pode ser substituído por ' '*-~npara 168 bytes .
Sr. Xcoder 9/11
@ Mr.Xcoder Oh legal, obrigado!
HyperNeutrino
Eu acho que r=="^"pode ser r>"]".
precisa
@JonathanFrech Parece ser assim, obrigado!
HyperNeutrino