ปิรามิด Scheme Negation


13

ในPyramid Schemeภาษาของฉันมีโครงสร้างที่ตลกเล็กน้อย: สามเหลี่ยมว่าง:

^
-

0เมื่อได้รับการขัดแย้งใดก็จะส่งกลับ เพื่อสร้าง1โดยใช้โครงสร้างนี้เราสามารถใช้สิ่งนี้:

   ^
  /!\
 ^---
 -

นี่จะผ่าน0ไปยังฟังก์ชันลบ เราสามารถคัดค้านผลลัพธ์นี้ต่อไป:

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

ในการรับ 0. การปฏิเสธเพิ่มอีกหนึ่งรายการ:

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

ท้าทาย

รับจำนวนเต็มn ≥ 1 ส่งออกพีระมิดที่ว่างเปล่าเมื่อตะกี้nครั้งในรูปแบบที่อธิบายไว้

กรณีทดสอบ

input
output

1
   ^
  /!\
 ^---
 -

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

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

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

โดยการปฏิเสธที่นี่ฉันคิดว่าคุณหมายถึงส่วนประกอบ bitwise ( ~)?
user202729

@ user202729 ไม่ฉันหมายถึงการปฏิเสธปกติ
Conor O'Brien

ดังนั้นมันคือ C / C ++ !( not)
user202729

@ user202729 ใช่ แม้ว่าความหมายของปัญหาจะเป็นสิ่งที่สัมผัสกับปัญหา
Conor O'Brien

1
/!\ คำเตือน! /! \ ฉันเห็นรูปสามเหลี่ยมเตือนทุกที่!
RedClover

คำตอบ:


7

ถ่าน 17 ไบต์

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

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด คำอธิบาย:

FN«

วนรอบสำหรับจำนวน negations ที่เหมาะสม

↙^→/!\¶³

พิมพ์ฟังก์ชั่นการปฏิเสธ (การ³ขยายเป็น---)

‖T

สะท้อนผืนผ้าใบ

»↓^-

ที่ส่วนท้ายของลูปให้พิมพ์สามเหลี่ยมว่าง


แค่ fyi สามเหลี่ยมว่างใช้-แทน_
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 ไบต์ขอบคุณ Mr. Xcoder
-1 ไบต์ขอบคุณ Jonathan Frech


' '*2*nสามารถ' '*n(สองช่องว่างมี แต่ eugh ... SE markdown) และจากนั้น' '*n+' 'จะถูกแทนที่ด้วย' '*-~nสำหรับ168 ไบต์
Mr. Xcoder

@ Mr.Xcoder โอ้เยี่ยมมากขอบคุณ!
HyperNeutrino

ผมคิดว่าอาจจะเป็นr=="^" r>"]"
Jonathan Frech

@ JonathanFrech ดูเหมือนจะเป็นเช่นนั้นขอบคุณ!
HyperNeutrino
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.