Отрицание схемы пирамиды


13

В моей языковой пирамидальной схеме есть немного забавная конструкция: пустой треугольник:

^
-

Когда не дано никаких аргументов, он возвращается 0. Для генерации 1с использованием этой конструкции мы могли бы использовать это:

   ^
  /!\
 ^---
 -

Это просто переходит 0к функции отрицания. Мы можем продолжить отрицание этого результата:

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

Чтобы получить 0. Еще одно отрицание дает:

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

Вызов

Если задано целое число n ≥ 1, выведите пустую пирамиду, отмененную n раз описанным способом.

Контрольные примеры

input
output

1
   ^
  /!\
 ^---
 -

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

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

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

Под отрицанием здесь я полагаю, что вы имеете в виду побитовое дополнение ( ~)?
user202729

@ user202729 Нет, я имею в виду регулярное отрицание.
Конор О'Брайен,

Так что это C / C ++ !( not).
user202729

@ user202729 Да. Хотя то, что это означает, имеет отношение к проблеме
Конор О'Брайен,

1
/! \ Внимание! /! \ Я вижу предупреждающие треугольники везде!
RedClover

Ответы:


7

Древесный уголь , 17 байт

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

Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:

FN«

Цикл для соответствующего количества отрицаний.

↙^→/!\¶³

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

‖T

Отражать холст.

»↓^-

В конце цикла выведите пустой треугольник.


Просто к сведению, пустой треугольник использует -вместо_
Конор О'Брайен

@ 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 уценка), а затем ' '*n+' 'может быть заменен ' '*-~nна 168 байтов .
г-н Xcoder

@ Mr.Xcoder О, круто, спасибо!
HyperNeutrino

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

@JonathanFrech Похоже, что так, спасибо!
HyperNeutrino
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.