แบนเนอร์เครื่องบิน ASCII


11

ได้รับสองปัจจัยการผลิต - หนึ่งของพวกเขาไม่ว่างเปล่าสตริง ASCII พิมพ์ (รวมทั้งพื้นที่ไม่รวมการขึ้นบรรทัดใหม่) ซึ่งเป็นหนึ่งในความเป็นอยู่อื่น ๆ ของทั้งสองแตกต่างกันค่าที่สอดคล้องกันของทางเลือกของคุณ ( 1 / 0, l / r, left / rightฯลฯ ) - เอาท์พุท ASCII ศิลปะเครื่องบิน แบนเนอร์ของสตริงชี้ทั้งซ้ายหรือขวา เพื่อความสอดคล้องฉันจะใช้leftและrightตลอดทั้งคำอธิบายการท้าทายนี้

เครื่องบินนั้นเป็น|-DI>-/( left) หรือ\-<ID-|( right) เนื่องจากแบนเนอร์มีความชัดเจนจึงประกอบด้วยอักขระของสตริงอินพุตคั่นด้วยช่องว่างทั้งจากซ้ายไปขวา ( left) หรือจากขวาไปซ้าย ( right) และล้อมรอบด้วยกล่องของรูปร่าง

    /--/
---<  <
    \--\

หรือ

\--\
 >  >---
/--/

หมายเหตุต้องมีหนึ่งช่องว่างระหว่างจุดเริ่มต้น / ท้ายของข้อความและ>, <ตัวละคร

ตัวอย่างเช่นนี่คือข้อความHAPPY BIRTHDAY!และทิศทางleft:

           /-------------------------------/
|-DI>-/---< H A P P Y   B I R T H D A Y ! <
           \-------------------------------\

นี่คือข้อความและทิศทางPPCG rightโปรดทราบว่าตัวอักษรปรากฏเป็น "ย้อนกลับ" เมื่อดูจากด้านข้างของแบนเนอร์นี้:

\---------\
 > G C P P >---\-<ID-|
/---------/

กฎระเบียบ

  • ขึ้นบรรทัดใหม่หรือต่อท้ายช่องว่างหรือช่องว่างทั้งหมดเป็นตัวเลือกตราบใดที่ตัวละครตัวเองเข้าแถวอย่างถูกต้อง
  • ยอมรับได้ทั้งโปรแกรมหรือฟังก์ชั่น หากฟังก์ชั่นคุณสามารถส่งคืนผลลัพธ์มากกว่าการพิมพ์
  • หากเป็นไปได้โปรดรวมลิงค์ไปยังสภาพแวดล้อมการทดสอบออนไลน์เพื่อให้ผู้อื่นสามารถลองใช้รหัสของคุณได้!
  • ช่องโหว่มาตรฐานเป็นสิ่งต้องห้าม
  • นี่คือเพื่อให้ใช้กฎการตีกอล์ฟตามปกติและรหัสที่สั้นที่สุด (เป็นไบต์) ชนะ


2
JavaScript, 4 ไบต์: eval- ป้อนโปรแกรมที่สร้างระนาบหันหน้าไปทางซ้ายสำหรับซ้ายและโปรแกรมที่สร้างระนาบหันขวาไปทางขวา
darrylyeo

คำตอบ:


6

JavaScript (ES6), 141 138 ไบต์

สตริงและทิศทางเป็นการป้อนข้อมูลผ่านทางไวยากรณ์ curating
'/\n|-DI>-/---< 'สำหรับซ้าย'/\n|-DI<-\\---> 'สำหรับขวา

t=>p=>(r=`${s='           '}/${_='-'.repeat(t.length*2+1)}${p}${[...t].join` `} ${d=p[12]} 
${s}\\${_}\\`,d>'<'?[...r].reverse().join``:r)


ฮาการเขียนโค้ดอย่างหนักในส่วนของเอาท์พุทดูเหมือนจะเป็นการเอารัดเอาเปรียบช่องโหว่ แต่มันก็ดูดีขึ้นอยู่กับความท้าทายตามที่เขียนไว้ ฉลาด!
Rick Hitchcock

4
@RickHitchcock ช่องโหว่ที่ดีที่สุดคือeval... เพียงแค่ให้แหล่งที่มาของฟังก์ชั่นซ้ายและขวาเป็นค่าสองค่าที่คุณเลือก (ฉันคิดว่าจะมีเมตาดาต้าเกี่ยวกับเรื่องนี้ แต่ฉันหามันไม่พบ)
Neil

1
@ Neil eval"เคล็ดลับ" จะเป็นช่องโหว่นี้ด้วยจิตวิญญาณแม้ว่าจะไม่ได้ระบุไว้อย่างชัดเจนก็ตาม คำตอบนี้ตรงนี้ช่างฉลาดจริงๆ
AdmBorkBork

ใช่ฉันกำลังถกเถียงกันว่าจะโพสต์evalเป็นคำตอบที่จริงจังหรือไม่ วิธีแก้ปัญหาสำหรับความท้าทายในอนาคตเช่นนี้อาจรวมอินพุตเป็นส่วนหนึ่งของจำนวนไบต์
darrylyeo

4

Perl 5 , 149 +1 (-p) = 150 ไบต์

$d=<>;chomp;$_=($q=$"x11 .'/'.'-'x(1+2*length)."/\n").'|-DI>-/---< '.s/./$& /gr."<\n".$q=~y|\\/|/\\|r;if($d){y|<>|><|;$_=reverse;s/>/ >/;s|-/-|-\\-|}

ลองออนไลน์!

อินพุตสองบรรทัด แรกคือข้อความ ที่สองคือ 0 สำหรับซ้าย 1 สำหรับขวา


4

V , 73 , 65 ไบต์

Ó./& 
É ÄÒ-ys$/YGpr\$.11>Hj|R|-DI>-/³-<A< ÀñkæG|æ}-r>$BR>³-\-<

ลองออนไลน์!

ไม่ใช่คะแนนที่ยิ่งใหญ่ที่สุด แต่เป็นเพราะเกือบครึ่งหนึ่งมาจากการย้อนกลับผลลัพธ์

hexdump:

00000000: d32e 2f26 200a c920 c4d2 2d79 7324 2f59  ../& .. ..-ys$/Y
00000010: 4770 725c 242e 3131 3e48 6a7c 527c 2d44  Gpr\$.11>Hj|R|-D
00000020: 493e 2d2f b32d 3c1b 413c 201b c0f1 6be6  I>-/.-<.A< ...k.
00000030: 477c e616 7d2d 723e 2442 523e b32d 5c2d  G|..}-r>$BR>.-\-
00000040: 3c                                       <

รับสตริงเป็นอินพุตไปยังบัฟเฟอร์และทิศทาง0สำหรับซ้ายและ1ขวาเป็นอาร์กิวเมนต์บรรทัดคำสั่ง


4

05AB1E , 63 ไบต์

„\\S'-¹g·>×ýD∞2äθ‚11ú"|-DI>-/---<"¸¹ε²i∞θ}J'<«S«ð«J¸«Àε²i∞2äθ}»

ลองออนไลน์!

ตามข้อบกพร่องที่อาจได้รับการแก้ไขในอนาคต


@MagicOctopusUrn เป็นไปได้
Erik the Outgolfer

@MagicOctopusUrn จริง ๆ แล้วมันไม่ทำงาน ...
Erik the Outgolfer

@MagicOctopusUrn พยายามที่จะเปลี่ยนในบรรทัดที่สองไป0 1
Erik the Outgolfer

อ๊ะพื้นที่ชั้นนำ ...
Magic Octopus Urn

4

ถ่าน , 44 40 39 35 ไบต์

|-DI>-/³↗<→/-LηLη↙¹←< ¿N↷⁴‖T⮌⪫η ‖B↓

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด อินพุตแรกคือ 1 สำหรับขวาและ 0 สำหรับซ้ายที่สองคือสตริงแบนเนอร์ แก้ไข: บันทึก 1 ไบต์โดยใช้ ReflectButterfly(:Up) ในReflectButterfly(:Down)ขณะนี้มีข้อผิดพลาดการวางตำแหน่งเคอร์เซอร์ แต่ฉันบันทึกอีก 4 ไบต์โดยย้อนกลับทิศทางการพิมพ์และตอนนี้มันไม่สำคัญว่าฉันจะใช้ 38 34 32 เวอร์ชันไบต์หากอนุญาตการทำมิเรอร์แบนเนอร์:

|-DI>-/³P⪫⪫<<η ↘→\-LηLη↖¹‖B↑¿N‖T

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

|-DI>-/

พิมพ์เครื่องบิน

³↗<→/-LηLη↙¹←< 

พิมพ์ครึ่งบนของกล่อง (ช่องว่างท้ายโน้ต)

¿N↷⁴‖T

หากอินพุตที่สองไม่ใช่ศูนย์ให้กลับทิศทางการพิมพ์มิฉะนั้นจะสะท้อนถึงระนาบและกล่อง

⮌⪫η 

พิมพ์ข้อความด้วยการเว้นวรรคพิเศษ (เว้นวรรคต่อท้ายโน้ต) เคอร์เซอร์อยู่ที่ปลายสุดของกล่องจากระนาบดังนั้นข้อความจะต้องกลับด้าน

‖B↓

สะท้อนเพื่อรับครึ่งล่างของกล่อง


ดูเหมือนว่าเวอร์ชัน verbose จะมีปัญหา
Erik the Outgolfer

@EriktheOutgolfer Deverbosifier เสียเร็ว ๆ นี้; TIO ยังไม่มีการแก้ไข
Neil

2

เยลลี่ , 68 65 ไบต์

“/\<“\/>”y
³K“|-DI>-/---< “ < ”j
LḤ‘”-x⁾//jṭ⁶x11¤Fµ,Ñj¢œs3U⁴¡YÑ⁴¡

ลองออนไลน์!

ใช้ 1 สำหรับขวา 0 สำหรับซ้าย

-3 bytes ต้องขอบคุณ @JanathanAllan ( grrฉันลืมไปเสมอว่าAB+ทำเหมือนกันB+@A)


³K“|-DI>-/---< “ < ”jบันทึกไบต์; LḤ‘”-x⁾//jṭ⁶x11¤Fµ,Ñj¢œs3U⁴¡YÑ⁴¡ประหยัดอีก 2 ในแบบเดียวกัน
Jonathan Allan

1

ถ่านขนาด 56 ไบต์

-8 ไบต์ขอบคุณทั้งมนุษย์และErik the Outgolfer!

≔⪫S θ≔⁺Lθ²η× ¹¹/η/⸿|-DI>-/³<× η<‖B↓FN«‖TM⁺η³→≔⮌θθ»↑↑Mη←θ

ลองออนไลน์!

การแก้ไขกรณีที่dzaimaกล่าวถึงใช้เวลาค่อนข้างมากในการนับจำนวนไบต์ 36 ไบต์ถ้าเราได้รับอนุญาตให้กลับตัวอักษรเช่นและ</


1
ในงูหลาม' '.join(s)ทำงาน แน่นอนว่าสามารถนำมาใช้ใน Charcoal?
มนุษย์โดยรวม

1
@tallyallyhuman Joinทำงานในสายเกินไป
Erik the Outgolfer

อืมฉันคิดว่ามันเป็นมนุษย์โดยสิ้นเชิงที่แนะนำจริง ๆ
Erik the Outgolfer

@EriktheOutgolfer โอ้ฉันตีความคำแนะนำของ @humanhuman ว่าเป็นการเรียก Python ' '.joinin Charcoal ฉันจะให้เครดิตคุณทั้งคู่
notjagan

คุณเคยเสียตัวประมวลผล AST และ ...
นีล


1

Python 2 , 137 136 133 ไบต์

lambda s,d:'{0}/{1}-/\n|-DI{3}-{4}---{5} {2} {5} \n{0}\\-{1}\\'.format(' '*11,'--'*len(s),' '.join(s),*list('></\\<>')[d::2])[::-d|1]

ลองออนไลน์!

1สำหรับขวาและ0ซ้าย


135 ไบต์ (-1 ไบต์)โดยแทนที่1-2*dด้วย-d|1( dnegate xor 1)
Mr. Xcoder

ใช่มันไม่ใช่ xor เป็น bitwise หรืออันที่จริงแล้ว
Mr. Xcoder

1
134 bytesพร้อมกับเคล็ดลับเล็กน้อย:*list('></\\<>')[d::2]
jferard

1

PHP, 175 ไบต์

[,$d,$s]=$argv;$f=str_repeat("--",strlen($s));$r="\-$f\           
 ".join(" ",str_split("><"[$d].$s)).($d?" <---/->":" >---\-<")."ID-|
/-$f/           ";echo$d?strrev($r):$r;

ทำงานด้วย-nrอาร์กิวเมนต์แรก = 0สำหรับการหันหน้าไปทางขวาหรือ1ซ้ายและอาร์กิวเมนต์ = ข้อความที่สอง
หรือลองออนไลน์



1

Corea , 51 ไบต์

"u *:>ip.j:l)X-'/S:>"
|-DI>-/---< V< 
"h}>>`tHL`idF

ลองออนไลน์!

คำอธิบาย

โปรแกรมประกอบด้วยบางส่วน:

1: การเริ่มต้น

"u *:>ip.j:l)X-'/S:>"
"..................."   execute the inside as code
 u                      repeat
   *                    a space, 11 times
    :                   duplicate this string
     >                  write this string to the content field
      i                 take a line of input
       p                push a space
        .j              insert that space after every character
          :l)           get (length(str) + 1)
             X-         repeat a hyphen that many times
               '/       push the "/" character
                 S      surround that string with the above character
                  :>    duplicate and write that string to the content field

2: ข้อความดิบ

ข้อความต่อไปนี้จะถูกส่งไปยังฟิลด์เนื้อหา:


|-DI>-/---< V<

3: postamble

"h}>>`tHL`idF
"               execute until the end of the file
 h              mirror the previous string horizontally
  }             move the modified input string to the front of the stack
   >>           write the top two strings to the content field
     `   `id    do the inside `i`nput times
      tH        reflect the content field horizontally and vertically
        L       reverse the input string
            F   save the input string in a field (default: V)
                this replaces all Vs in the code with the input string

0

Excel VBA, 198 ไบต์

ฟังก์ชันหน้าต่าง VBE แบบไม่ระบุชื่อทันทีที่รับอินพุตเป็นสตริงจาก[A1]และ int จากช่วง[B1]ที่1ระบุว่าระนาบอยู่ทางซ้ายและ0บ่งชี้ว่าระนาบอยู่ทางขวา

b=[B1]:a=StrConv(IIf(b,[A1],StrReverse([A1])),64):j=[Rept("-",2*Len(A1)+1)]:k="/"&j &"/":l="\"&j &"\":s=Space(11):?IIf(b,s &k,l):?IIf(b,"|-DI>-/---< "," > ")a;IIf(b,"<",">---\-<ID-|"):?IIf(b,s &l,k)

0

Google ชีต 210 ไบต์

ฟังก์ชั่นแผ่นงานที่ไม่ระบุชื่อที่รับอินพุตเป็นสตริงจาก [A1] และ int จากช่วง [B1] โดยที่ 1 หมายถึงระนาบอยู่ทางซ้ายและ 0 ระบุว่าระนาบอยู่ทางขวา

=If(B1,"           /","\")&Rept("-",2*Len(A1)+1)&If(B1,"/
","\
")&If(B1,"|-DI>-/---< "," > ")&RegexReplace(A1,"(.)","$1 ")&If(B1,"<
",">---\-<ID-|
")&If(B1,"           \","/")&Rept("-",2*Len(A1)+1)&If(B1,"\","/
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.