Negación del esquema piramidal

13

En mi lenguaje Pyramid Scheme , hay una construcción ligeramente divertida: el triángulo vacío:

^
-

Cuando no se le dan argumentos, regresa 0. Para generar 1usando esta construcción, podríamos usar esto:

   ^
  /!\
 ^---
 -

Esto simplemente pasa 0a la función de negación. Podemos seguir negando este resultado:

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

Para obtener 0. Una negación más da:

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

Desafío

Dado un número entero n ≥ 1, genera la pirámide vacía que se niega n veces de la manera descrita.

Casos de prueba

input
output

1
   ^
  /!\
 ^---
 -

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

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

6
 ^
/!\
---^
  /!\
 ^---
/!\
---^
  /!\
 ^---
/!\
---^
  /!\
 ^---
 -
Conor O'Brien
fuente
¿Por negación aquí supongo que quiere decir complemento bit a bit ( ~)?
user202729
@ user202729 No, me refiero a la negación regular.
Conor O'Brien el
Entonces es C / C ++ !( not).
user202729
@ user202729 Sí. Aunque lo que significa es tangencial al problema
Conor O'Brien el
1
/!\ ¡Advertencia! /! \ ¡Veo triángulos de advertencia en todas partes!
RedClover

Respuestas:

7

Carbón , 17 bytes

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

Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:

FN«

Bucle para el número apropiado de negaciones.

↙^→/!\¶³

Imprime una función de negación. (El se ³expande a ---.)

‖T

Refleja el lienzo.

»↓^-

Al final del ciclo, imprime el triángulo vacío.

Neil
fuente
Solo para tu información, el triángulo vacío usa en -lugar de_
Conor O'Brien
@ ConorO'Brien ¡Gracias por señalarlo! Pensé que no se veía bien, pero no pude señalarlo ...
Neil
4

Python 2 , 94 bytes

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

Pruébalo en línea!

Tratando de jugar al golf ... 3 printdeclaraciones parecen terriblemente redundantes.

Sr. Xcoder
fuente
2

JavaScript (ES6), 77 74 bytes

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

Intentalo:

Darrylyeo
fuente
1

Protón , 101 bytes

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

Pruébalo en línea!

también demasiado largo lol

Hiperneutrino
fuente
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+" -";}

Explicación:

Pruébalo aquí.

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

Retina , 70 68 60 bytes

gracias a @MartinEnder por -8 bytes

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

Pruébalo en línea!

ovs
fuente
1

Perl 5, 77 + 1 (-p) bytes

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

pruébalo en línea

Nahuel Fouilleul
fuente
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

Pruébalo en línea!

-4 bytes gracias al Sr. Xcoder
-1 byte gracias a Jonathan Frech

Hiperneutrino
fuente
' '*2*npuede ser ' '*n(dos plazas de allí, pero eugh ... SE reducción del precio), y luego ' '*n+' 'se puede sustituir por ' '*-~nde 168 bytes .
Sr. Xcoder
@ Mr.Xcoder Oh genial, gracias!
HyperNeutrino
Creo que r=="^"puede ser r>"]".
Jonathan Frech
@JonathanFrech Parece ser así, ¡gracias!
HyperNeutrino