Заперечення схеми піраміди


13

У моїй пірамідній схемі мови є трохи кумедна конструкція: порожній трикутник:

^
-

Якщо не дано аргументів, він повертається 0. Для створення 1за допомогою цієї конструкції ми могли б скористатися цим:

   ^
  /!\
 ^---
 -

Це просто переходить 0до функції заперечення. Ми можемо продовжувати заперечувати цей результат:

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

Отримати 0. Ще одне заперечення дає:

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

Виклик

Враховуючи ціле число n ≥ 1, виведіть порожню піраміду, заперечувану n разів у описаному способі.

Тестові справи

input
output

1
   ^
  /!\
 ^---
 -

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

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

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

Заперечення тут, я гадаю, ви маєте на увазі побітове доповнення ( ~)?
користувач202729

@ user202729 Ні, я маю на увазі регулярне заперечення.
Conor O'Brien

Отже, це C / C ++ !( not).
користувач202729

@ user202729 Так. Хоча те, що це означає, є дотичним до проблеми
Конор О'Брайен

1
/!\ Увага! /! \ Я всюди бачу попереджувальні трикутники!
RedClover

Відповіді:


7

Вугілля деревне , 17 байт

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

Спробуйте в Інтернеті! Посилання на багатослівну версію коду. Пояснення:

FN«

Петля для відповідної кількості відхилень.

↙^→/!\¶³

Роздрукувати функцію заперечення. ( ³Розширюється до ---.)

‖T

Відбийте полотно.

»↓^-

В кінці циклу роздрукуйте порожній трикутник.


Тільки фій, порожній трикутник використовує -замість_
Conor O'Brien

@ ConorO'Brien Дякую за вказівку на це! Я думав, що це не зовсім добре виглядає, але я не міг покласти свій палець на це ...
Ніл





1

Java 8, 104 байти

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

Пояснення:

Спробуйте тут.

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








0

Python 3 , 167 байт

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

Спробуйте в Інтернеті!

-4 байти завдяки містеру Xcoder
-1 байт завдяки Джонатану Фреху


' '*2*nможе бути ' '*n(два пробіли там, але eugh ... SE markdown), а потім ' '*n+' 'можна замінити ' '*-~nна 168 байт .
Містер Xcoder

@ Mr.Xcoder О здорово, спасибі!
HyperNeutrino

Я думаю, що r=="^"може бути r>"]".
Джонатан Фрех

@JonathanFrech Здається, що так, дякую!
HyperNeutrino
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.