เพลงของ Beatles และ Hexagons


30

เขียนโปรแกรมรูปสามเหลี่ยมสองรูป (เช่นปิรามิด)

คนแรกควรเป็นสามเหลี่ยมข้อความชี้ขึ้นไปที่มีความกว้างฐานขั้นต่ำที่สามตัวอักษร ดังนั้นมันจะมีโครงสร้างเหมือน

 X
XXX

หรือ

  X
 XXX
XXXXX

หรือ

   X
  XXX
 XXXXX
XXXXXXX

หรือใหญ่กว่า แต่ละตัวXจะถูกแทนที่ด้วยตัวอักษรของรหัสจริงของคุณซึ่งอาจเป็นอะไรก็ได้ยกเว้นตัวต่อบรรทัด (เพื่อให้Xสามารถเว้นวรรคได้) ทั้งหมดXจะต้องถูกแทนที่และเว้นวรรคและการขึ้นบรรทัดใหม่ที่จะช่วยในการสร้างรูปสามเหลี่ยมนั้นจะต้องคงอยู่เหมือนเดิม

โปรแกรมที่สองจะต้องมีขนาดและรูปร่างเท่ากับโปรแกรมแรกยกเว้นว่ารูปสามเหลี่ยมจะชี้ลง

ดังนั้นหากโปรแกรมแรกของคุณดูเหมือน

  X
 XXX
XXXXX

จากนั้นโปรแกรมที่สองของคุณจะดูเหมือน

yyyyy
 yyy
  y

โดยที่yอักขระแต่ละตัวคุณต้องกรอกรหัสจริงของคุณ (อาจแตกต่างจากXรหัสของคุณ) ช่องว่างและการขึ้นบรรทัดใหม่จะต้องอยู่ที่นี่เหมือนกัน

งานของคุณคือการเขียนโปรแกรมเหล่านี้เพื่อให้แต่ละเอาต์พุต (ไปยัง stdout หรือทางเลือกที่ใกล้เคียงที่สุด) ชื่อเพลงBeatles ที่แตกต่างกันโดยไม่ต้องป้อนข้อมูลใด ๆ บทความ Wikipedia นี้จะทำหน้าที่เป็นรายการเพลงอย่างเป็นทางการของเราสำหรับ The Beatles I Want You (She's So Heavy)เอาท์พุทควรจะเป็นหนึ่งของชื่อเรื่องตรงตามที่ระบุไว้เช่น

อย่างไรก็ตามมันค่อนข้างง่ายแม้จะมีความต้องการของโปรแกรมสามเหลี่ยมแปลก ดังนั้นเราจะสร้างโปรแกรมอื่นจากสองรายการแรกที่จะต้องส่งออกไปยังชื่อเพลงอื่น

โดยการรวมสามสำเนาของโปรแกรมสามเหลี่ยมสองตัวแต่ละโปรแกรมเราสามารถสร้างโปรแกรมที่สามที่มีรูปร่างเหมือนรูปหกเหลี่ยม

หากความกว้างฐานของโปรแกรมแรกของคุณเป็นสามจะเป็นดังนี้:

 XyyyX
XXXyXXX
yyyXyyy
 yXXXy

หากความกว้างฐานเท่ากับห้ามันจะเป็นดังนี้:

  XyyyyyX
 XXXyyyXXX
XXXXXyXXXXX
yyyyyXyyyyy
 yyyXXXyyy
  yXXXXXy

โปรแกรมนี้ (เมื่อทำงานด้วยการเว้นวรรคและการขึ้นบรรทัดใหม่เหมือนคนอื่น ๆ ) จะต้องส่งออกชื่อเพลงของ Beatles อีกครั้งเหมือนกับโปรแกรมสองรายการแรก นอกจากนี้:

  • สามรายการของคุณจะต้องแสดงชื่อเพลงที่แตกต่างกัน
  • อนุญาตเฉพาะชื่อเพลงที่มีความยาวแปดตัวอักษรหรือนานกว่านั้น
  • คุณสามารถเลือกหนึ่งในRevolutionนั้นRevolution 1และRevolution 9เนื่องจากชื่อมีความคล้ายคลึงกันมาก
  • คุณต้องเลือกเพลง Beatles ที่คุณชื่นชอบสามเพลง (ดีลองไป)

โปรดทราบว่าจำเป็นต้องใช้โปรแกรมจริง ไม่อนุญาตให้ใช้ฟังก์ชัน ไม่อนุญาตให้อ่านซอร์สโค้ดของคุณเองในโปรแกรมใด ๆ

ตัวอย่าง

ถ้าโปรแกรมแรกของคุณคือ

  A
 AAA
AAAAA

Across the Universeมันอาจจะส่งออก

จากนั้นโปรแกรมที่สองของคุณ

bbbbb
 bbb
  b

Revolutionสามารถเอาท์พุท

รวมกันแล้วเป็นโปรแกรมรูปหกเหลี่ยม

  AbbbbbA
 AAAbbbAAA
AAAAAbAAAAA
bbbbbAbbbbb
 bbbAAAbbb
  bAAAAAb

Get Backการส่งออกอาจจะมี

เกณฑ์การให้คะแนน

การส่งที่มีความกว้างฐานสามเหลี่ยมที่เล็กที่สุดชนะ ในกรณีที่มีความเป็นไปได้ที่จะส่งผลงานเพลงที่มีความยาวรวมที่ใหญ่ที่สุดของสามชื่อเพลงให้ชนะ


2
แน่นอนว่า tiebreaker ควรเป็นตัวเลือกที่ดีที่สุดของสามเพลง? ;)
Doug McClean

1
ฉันมีปัญหาในการเขียนรายการ Python โดยไม่เพียงคัดลอกวิธีของ Sp3000 (ไม่เคยคิดว่าฉันจะบ่นเกี่ยวกับ syntax ของ whitespace!) แต่ฉันเขียนสคริปต์เพื่อรวบรวมสามเหลี่ยมสองรูปเป็นหกเหลี่ยม ในกรณีที่มันเป็นประโยชน์กับทุกคนอื่นนี่มันอยู่ในกระทู้
ทิม Pederick

@ mbomb007 ช่องว่างต่อท้ายไม่ใช่ส่วนหนึ่งของรูปแบบสามเหลี่ยมไม่เป็นไร
งานอดิเรกของ Calvin

@TimPederick เนื่องจากฉันไม่สามารถใช้ hexagon-ifier ให้ทำงานได้ฉันจึงเขียนสคริปต์ Python ขึ้นมาโดยเริ่มด้วย 2 สายหลายบรรทัด ดูที่นี่หากใครต้องการใช้
mbomb007

@ mbomb007 ขออภัย แต่ไม่อนุญาตให้ใช้พื้นที่ต่อท้ายเนื่องจากไม่ใช่ส่วนหนึ่งของชื่อ (ฉันอนุญาตให้ขึ้นบรรทัดใหม่ต่อท้ายเนื่องจากมีคำสั่งการพิมพ์เพิ่มอีกหนึ่งรายการ) ฉันไม่แน่ใจเกี่ยวกับนโยบาย Backspace ปกติ แต่พวกเขาก็ใช้ได้กับฉัน
งานอดิเรกของ Calvin

คำตอบ:


18

GolfScript, width = 9 chars, title = 33 chars

หกเหลี่ยม

    "Let It Be"
   }";"Yeste"}";      
  "Twi""rda""Twi"
 "st an""y""st an"
"d Shout"}"d Shout"
Let It Be"Let It Be
 "Yeste"}";"Yeste"
  "rda""Twi""rda"
   "y""st an""y"
    }"d Shout"}

พิมพ์ Let It Be (9 ตัวอักษร)

ลองออนไลน์

มันทำงานอย่างไร

โทเค็น"Let It Be"ในบรรทัดแรกผลักสตริงLet It Beบนสแต็ก

บรรทัดที่สองเริ่มต้นด้วย}"ความคิดเห็นสุดยอด" ที่ไม่มีเอกสารซึ่งจะยกเลิกการดำเนินการทันที

ก่อนออกจาก GolfScript พิมพ์เนื้อหาของสแต็ก

สามเหลี่ยม X

    "
   }";
  "Twi"
 "st an"
"d Shout"

พิมพ์และตะโกน (15 ตัวอักษร)

ลองออนไลน์

มันทำงานอย่างไร

สองบรรทัดแรกผลักดันสตริง"\n }"ซึ่งคำสั่ง;จะแยกออกจากสแต็ก

บรรทัดที่เหลือประกอบด้วยสัญญาณ"Twi", "st an"และ"d Shout"ซึ่งผลักดันสตริงและตะโกนในสามชิ้น

ก่อนออกจาก GolfScript พิมพ์เนื้อหาของสแต็ก

สามเหลี่ยม Y

Let It Be
 "Yeste"
  "rda"
   "y"
    }

พิมพ์เมื่อวานนี้ (9 ตัวอักษร)

ลองออนไลน์

มันทำงานอย่างไร

ราชสกุลLet, ItและBeในบรรทัดแรกจะไม่ได้กำหนดเพื่อให้พวกเขาทำอะไร

สามบรรทัดต่อไปนี้ประกอบด้วยสัญญาณ"Yeste", "rda"และ"y"ซึ่งผลักดันสตริงเมื่อวานนี้ในสามชิ้น

}ในบรรทัดสุดท้ายไม่ทำอะไรเลย; โปรแกรมก็จะเสร็จเรียบร้อยแล้วล่ะค่ะ

อีกครั้ง GolfScript พิมพ์เนื้อหาของสแต็กก่อนออก


21

Befunge -93, width = 13 15 , title = 31 24 chars

เมื่อคืนที่ไฟฟ้าดับทำให้ฉันไม่สามารถอัปเดตสิ่งนี้เมื่อฉันคิดออก แต่ฉันจัดการเพื่อลดความกว้างของรูปสามเหลี่ยมและเพิ่มความยาวของเพลง!

โปรแกรมชี้: "ขุดม้า", 10 ตัวอักษร:

      v
     v> 
    v#  >
   "<     
  v <>"y"v>
 <v"Dig a P"
"^>:#,_@.>"no

คำอธิบาย

ฉันใช้ประโยชน์จากกลอุบายของ Befunge จริงๆแล้วฉันเลือก "Dig a Pony" เป็นพิเศษเพราะมันมีช่องว่างที่ตำแหน่งที่ 6 นี้จะช่วยให้การไหลของโปรแกรมที่จะย้ายผ่านชื่อเพลง ลองใช้ในล่ามออนไลน์เพื่อดูว่ามันทำงานอย่างไร

โปรแกรมชี้: "ถ้าฉันตก", 9 ตัวอักษร:

< v"f I Fell"
 v>"I">:#,_@
  "raC yM "
   v"Drive


       .

(ระยะเวลาเป็นสิ่งที่ไม่เกี่ยวข้องและรวมไว้เพื่อให้บรรทัดอื่นแสดงเท่านั้น)

คำอธิบาย

บรรทัดที่เกี่ยวข้องเท่านั้นที่นี่เป็นสองบรรทัดแรก ฉันใช้เคล็ดลับล้อมรอบ (ตัวชี้คำสั่งถูกส่งไปทางซ้ายทันที) เพื่อบีบตัวละครอีกหนึ่งตัว บรรทัดที่สองพิมพ์ชื่อเพลง

รวมกัน: "ขับรถของฉัน", 12 ตัวอักษร:

      v< v"f I Fell"v
     v> v>"I">:#,_@v> 
    v#  >"raC yM "v#  >
   "<     v"Drive"<     
  v <>"y"v>     v <>"y"v>
 <v"Dig a P"   <v"Dig a P"
"^>:#,_@.>"no "^>:#,_@.>"no
< v"f I Fell"v< v"f I Fell"
 v>"I">:#,_@v> v>"I">:#,_@
  "raC yM "v#  >"raC yM "
   v"Drive"<     v"Drive
         v <>"y"v>     
        <v"Dig a P"   
       "^>:#,_@.>"no 

นี่คือสิ่งเดียวกัน แต่มีการเพิ่มบรรทัดเพื่อแสดงรูปหกเหลี่ยมและสามเหลี่ยม

       -----------------
      /v\< v"f I Fell"/v\
     /v> \v>"I">:#,_@/v> \
    /v#  >\"raC yM "/v#  >\
   /"<     \v"Drive/"<     \
  /v <>"y"v>\     /v <>"y"v>\
 /<v"Dig a P"\   /<v"Dig a P"\
/"^>:#,_@.>"no\ /"^>:#,_@.>"no\
-------------------------------
\< v"f I Fell"/v\< v"f I Fell"/
 \v>"I">:#,_@/v> \v>"I">:#,_@/
  \"raC yM "/v#  >\"raC yM "/
   \v"Drive/"<     \v"Drive/
    \     /v <>"y"v>\     /
     \   /<v"Dig a P"\   /
      \ /"^>:#,_@.>"no\ /
       -----------------

คำอธิบาย

นี่คือจุดที่สามและสี่ของสามเหลี่ยมชี้ลงมาเล่น มีการเปลี่ยนเส้นทางหลายครั้งที่ขอบของสามเหลี่ยมทั้งสองที่ทำหน้าที่ย้ายตัวชี้คำสั่งผ่านสองบรรทัดเหล่านั้นและกด "Drive My Car" ลงบนสแต็ก จากนั้นจะถูกพิมพ์ออกมาโดยใช้>:#,_@บิตในรูปสามเหลี่ยมชี้ขึ้น อนึ่งทั้งซ้ายและใช้สามเหลี่ยมชี้ขวา

มีอาจจะเป็นวิธีการที่จะใช้มากขึ้นจากพื้นที่ว่างเปล่า แต่ผมคิดว่าเวลาของฉันคือการใช้จ่ายที่ดีขึ้นในคำถามอื่น ๆ : P


อืมมม กฎของการจ่ายต่อหนึ่งคลิกคือถ้าโปรแกรมทำงานในล่ามอย่างน้อยหนึ่งตัวก็ถือว่าใช้ได้ จุดที่ดีแม้ว่า
El'endia Starman

"กฎ" อีกอย่างของ PPCG คือล่ามจะกำหนดภาษาไม่ใช่สเปค ดังนั้นรหัส Befunge ของฉันเป็นหลักถูกต้อง
El'endia Starman

18

Python 2, width = 51

                         #print "Yellow Submarine" if id else "(Reprise)"   ##
                        #.##...............................................##.#
                       #...##.............................................##...#
                      #.....##...........................................##.....#
                     #.......##.........................................##.......#
                    #.........##.......................................##.........#
                   #...........##.....................................##...........#
                  #.............##...................................##.............#
                 #...............##.................................##...............#
                #.................##...............................##.................#
               #...................##.............................##...................#
              #.....................##...........................##.....................#
             #.......................##.........................##.......................#
            #.........................##.......................##.........................#
           #...........................##.....................##...........................#
          #.............................##...................##.............................#
         #...............................##.................##...............................#
        #.................................##...............##.................................#
       #...................................##.............##...................................#
      #.....................................##...........##.....................................#
     #.......................................##.........##.......................................#
    #.........................................##.......##.........................................#
   #...........................................##.....##...........................................#
  #.............................................##...##.............................................#
 #...............................................##.##...............................................#
print "Sgt. Pepper's Lonely Hearts Club Band",;id=0#print "Sgt. Pepper's Lonely Hearts Club Band",;id=0
print "Yellow Submarine" if id else "(Reprise)"   ##print "Yellow Submarine" if id else "(Reprise)"   #
 #...............................................##.##...............................................#
  #.............................................##...##.............................................#
   #...........................................##.....##...........................................#
    #.........................................##.......##.........................................#
     #.......................................##.........##.......................................#
      #.....................................##...........##.....................................#
       #...................................##.............##...................................#
        #.................................##...............##.................................#
         #...............................##.................##...............................#
          #.............................##...................##.............................#
           #...........................##.....................##...........................#
            #.........................##.......................##.........................#
             #.......................##.........................##.......................#
              #.....................##...........................##.....................#
               #...................##.............................##...................#
                #.................##...............................##.................#
                 #...............##.................................##...............#
                  #.............##...................................##.............#
                   #...........##.....................................##...........#
                    #.........##.......................................##.........#
                     #.......##.........................................##.......#
                      #.....##...........................................##.....#
                       #...##.............................................##...#
                        #.##...............................................##.#
                         #print "Sgt. Pepper's Lonely Hearts Club Band",;id=0#

ใช่แล้ว ... Python

ความคิดเห็นของ Python เริ่มต้นด้วย#ดังนั้นบรรทัดส่วนใหญ่จึงเป็นเพียงความคิดเห็น สำหรับรูปสามเหลี่ยมที่หันขึ้นด้านบนสิ่งเดียวที่ดำเนินการคือ

print "Sgt. Pepper's Lonely Hearts Club Band",;id=0

Sgt. Pepper's Lonely Hearts Club Bandซึ่งพิมพ์

สำหรับสามเหลี่ยมหันหน้าลงเราดำเนินการ

print "Yellow Submarine" if id else "(Reprise)"

ซึ่งพิมพ์Yellow Submarineเนื่องจากฟังก์ชั่นidเป็นความจริง

เมื่อเรารวมโปรแกรมเข้าด้วยกันสิ่งที่เกิดขึ้นคือสองบรรทัดด้านบนตามลำดับ ตั้งแต่จุดสิ้นสุดของชุดบรรทัดแรกid=0ซึ่งตอนนี้เป็นเท็จผลลัพธ์ที่ได้คือเราพยายามที่(Reprise)จะสิ้นสุดให้ได้Sgt. Pepper's Lonely Hearts Club Band (Reprise)ตามผลลัพธ์ของเรา (Calvin กล่าวว่าไม่เป็นไร )


15
นี่ทำให้ฉันคิดถึง Imperial March มากกว่าเพลงของ Beatles ...
Calvin's Hobbies

6
ฉันสามารถได้ยินเอฟเฟกต์เสียง TIE-fighter เพียงแค่เห็นรูปร่างนี้
Fatalize

@ Calvin'sHobbies Hahaha แน่นอน!
Luis Mendo

17

Snowman 1.0.2 , width = 13

      }?}///////////}
     ///"Get Back"////
    ///////////////////
   /////////////////////
  "Sun King//"[["Sun King
 "*"BirthdaysP/"*"Birthday
"]]8AaLsP[[///"]]8AaLsP[[//
?}///////////}?}///////////
 "Get Back"////"Get Back"/
  ///////////////////////
   /////////////////////
    //"[["Sun King//"[[
     sP/"*"BirthdaysP/
      /"]]8AaLsP[[///

ที่สุด! ความท้าทายที่มนุษย์หิมะสามารถเติบโตได้! : D: D

เครื่องหมายทับส่วนใหญ่มีวัตถุประสงค์เพื่อความสวยงามและส่วนใหญ่สามารถแทนที่ด้วยช่องว่าง (แต่นั่นจะทำให้ดูน่าเบื่อมากขึ้นทั้งหมด) เครื่องหมายทับบางอันมีความจำเป็นสำหรับความคิดเห็น

โปรแกรม A (ผลลัพธ์:) Birthday:

      }
     ///
    /////
   ///////
  "Sun King
 "*"Birthday
"]]8AaLsP[[//

คนนี้ค่อนข้างเรียบง่าย ตัวละครตัวแรก ( }) ตั้งค่าตัวแปรที่ใช้งานของเราจากนั้นก็มีคอมเม้นท์ / ไม่ จำกัด จากนั้นจะเก็บสตริง"Sun King\n "และละทิ้งมันทันที (ผ่าน*เก็บไว้ใน permavar ซึ่งเราไม่เคยใช้) "Birthday\n"จากนั้นก็จะเก็บ

]]เป็นแบบไม่มี op ที่นี่เนื่องจาก[[ foo ]]เป็นความคิดเห็นแบบบล็อกใน Snowman แต่เนื่องจากไม่มีการจับคู่[[ก่อนหน้านี้]](ภายในโปรแกรม A เอง) มันไม่ทำอะไรเลย จากนั้น8AaLคว้าอักขระ 8 ตัวแรกของสตริงsPพิมพ์[[ออกมาและคอมเม้นต์ส่วนที่เหลือของโปรแกรม (เพราะอีกครั้งไม่มีการจับคู่]](เพราะอีกครั้งไม่มีการจับคู่

โปรแกรม B (ผลลัพธ์:) Get Back:

?}///////////
 "Get Back"/
  /////////
   ///////
    //"[[
     sP/
      /

อันนี้ค่อนข้างตรงไปตรงมา ?}เทียบเท่ากับ}( ?เพียงตั้งค่าตัวแปรทั้งหมดเป็นไม่ใช้งานซึ่งไม่มีตัวเลือกที่นี่ แต่สำคัญอีกครั้งในภายหลัง) จากนั้นก็จะเก็บสตริง"Get Back"ไม่พวงของไม่มี Ops (ที่//ไปยังจุดสิ้นสุดของเส้นอยู่เสมอความคิดเห็น) sPและพิมพ์ผ่านทาง

โปรแกรมเต็มรูปแบบ

ผลลัพธ์คือคุณเดาได้Sun King1 .

ลองดูที่บรรทัดนี้โดยบรรทัด:

  • บรรทัด 1

          }?}///////////}
    

    นี่เป็นการตั้งค่าตัวแปรแอคทีฟของเราเช่นเดียวกับโปรแกรมก่อนหน้า (เราสามารถเห็นได้ในตอนนี้ว่า?จำเป็นต้องมีเพื่อที่จะไม่เพียงแค่สลับมันแล้วกลับมาอีกครั้งด้วย}}) ส่วนที่เหลือของบรรทัดจะถูกใส่ความคิดเห็น

  • บรรทัด 2-4

         ///"Get Back"////
        ///////////////////
       /////////////////////
    

    ความคิดเห็น ...

  • บรรทัดที่ 5

      "Sun King//"[["Sun King
    

    ที่นี่เราจัดเก็บสตริง"Sun King//"แล้วเริ่มความคิดเห็นบล็อก การทำเช่นนี้จะข้ามทุกสิ่งไปจน]]จบ

  • บรรทัดที่ 6

     "*"BirthdaysP/"*"Birthday
    

    ยังอยู่ในความคิดเห็นบล็อก ...

  • บรรทัด 7

    "]]8AaLsP[[///"]]8AaLsP[[//
    

    ที่นี่เราแยกออกจากความคิดเห็นบล็อกในช่วงเวลาสั้น ๆ เพื่อรันโค้ด 8AaLsPของเวลาในการดำเนินการรหัส นี่คือการนำกลับมาใช้จริงจากโปรแกรม A. เนื่องจากฉันเลือกเพลงทั้งหมดที่มีความยาว 8 ตัวอักษรฉันสามารถใช้รหัสเดียวกันสำหรับโปรแกรมที่รวมกันได้

    จากนั้นมันก็จะยุ่งยากเล็กน้อย ครั้งต่อไปที่เราโผล่ออกมาจากความคิดเห็นบล็อกเราจะเห็น8AaLsPอีกครั้ง อย่างไรก็ตามเวลานี้ตัวแปรทั้งหมดยังไม่ได้กำหนด (เราเรียกว่าspพิมพ์ในโหมดใช้งานซึ่งจะกำจัดตัวแปร) เนื่องจากaalต้องมีการโต้แย้งสองครั้งและครั้งนี้มันมีเพียงครั้งเดียว (8ข้อข้อผิดพลาดและทำให้ตัวแปรไม่เปลี่ยนแปลง

    ในทำนองเดียวกันspพบกับ8ตระหนักว่ามันเป็นประเภทที่ไม่ถูกต้องที่จะพิมพ์และออกจากตัวแปรตามที่เป็นอยู่

  • บรรทัดที่ 8-13

    ?}///////////}?}///////////
     "Get Back"////"Get Back"/
      ///////////////////////
       /////////////////////
        //"[["Sun King//"[[
         sP/"*"BirthdaysP/
    

    ยังติดอยู่ในความคิดเห็นบล็อกนั้น ...

  • บรรทัดที่ 14

          /"]]8AaLsP[[///
    

    สุดท้ายเราลองเรียกลำดับการพิมพ์ครั้งแรก -8-chars ที่เหมือนกันอีกครั้งและมันล้มเหลวอีกครั้งทำให้เกิดข้อผิดพลาดอีกสองข้อ ( 8หมายความว่าตัวแปรอยู่ในขณะนี้8 8ซึ่งเป็นจำนวนตัวแปรที่ถูกต้องสำหรับaalตอนนี้ แต่ยังไม่ใช่ประเภทที่ถูกต้อง)


1: เช่นเดียวกับสี่ข้อผิดพลาด Runtime ( SnowmanExceptions) เพื่อ STDERR แต่เป็นต่อเมตาที่ไม่ได้เรื่อง


The slashes are mostly for aesthetic purposes, and the majority of them can be replaced with spaces (but that would make it look a whole lot more boring)แต่มันทำให้ยากขึ้นนิดหน่อยที่จะเข้าใจว่าเกิดอะไรขึ้น ...
อยากรู้อยากเห็น dannii

14

> <> , width = 11

     /"yadhtri"\ /
           v"B"/   
        ?!;>ol      
  duJ yeH" /"eduJ yeH
 o   >l?!;   o   >l?!;
staC"/"klaw staC"/"klaw
"yadhtri"\ /"yadhtri"\ 
     v"B"/       v"B"/
  ?!;>ol      ?!;>ol 
   " /"eduJ yeH" /"e
       o   >l?!;   
      staC"/"klaw 

ภาษา 2D มีช่วงเวลาที่ดีกับความท้าทายนี้

ลูกศรขึ้น

     /


  duJ yeH
 o   >l?!;
staC"/"klaw

การไหลของโปรแกรมเริ่มจากด้านบนซ้ายเลื่อนไปทางขวา การ/สะท้อนกลับขึ้นและเนื่องจาก> <> นั้นเป็นแบบวงแหวนเราจะปรากฏขึ้นอีกครั้งจากด้านล่าง จากนั้นเราจะไปที่อื่น/และสะท้อนกลับอีกครั้งและผลักดันตัวละครklawstaCทีละตัวไปที่สแต็กใน""โหมดสตริง ในที่สุดเราก็สะท้อนขึ้นและกดปุ่ม>l?!;oลูปซึ่งเป็นวิธีการพิมพ์สำนวนทั้งหมดใน> <>

ภาพพิมพ์นี้ Catswalkนี้

ลูกศรลง

"yadhtri"\ 
     v"B"/
  ?!;>ol 
   " /"e

โดยพื้นฐานแล้วสิ่งเดียวกันคือการผลักดันตัวละครจากการเดินทางและใช้มิเรอร์และลูกศรเพื่อควบคุมการไหลของโปรแกรม ภาพพิมพ์นี้Birthdayนี้

รวม

     /

  ?!;>ol      ?!;>ol 
     /"eduJ yeH" / 

ส่วนต่าง ๆ ที่เกี่ยวข้องอยู่ด้านบน (ฉันตัดออกเป็นเส้นตรงกลางจำนวนมาก) ใช้/ลูกศรขึ้นลงเราสะท้อนขึ้นและล้อมรอบ แต่เนื่องจากตอนนี้เรามีลูกศรชี้ลงใต้ส่วนหนึ่งของรหัสนั้นจะถูกดำเนินการแทน จากนั้นเราจะผลักดันตัวอักษรที่เกี่ยวข้องไปยังสแต็กและนำวงเอาท์พุตกลับมาจากลูกศรชี้ลง

งานพิมพ์Hey Judeนี้


5

Python 2 ขนาด 21

โปรแกรมนี้ต้องการเทอร์มินัลที่รองรับ ANSI (DOS) ANSI.SYSจะเฉพาะเจาะจง) เนื่องจากฉันใช้\x1b[2Jเพื่อล้างคอนโซลและเลื่อนเคอร์เซอร์ไปด้านบนซ้าย ในการทำให้สิ่งนี้เข้ากันได้กับขั้ว ANSI อื่น ๆ ให้พิมพ์\x1b[1J\x1b[H (สิ่งนี้ยังสามารถใส่ในรูปหกเหลี่ยมขนาด 21) ฉันไม่สามารถทดสอบส่วนนี้ได้เนื่องจากฉันไม่มีเทอร์มินัลที่พิมพ์รหัสหลบหนี ANSI

ฉันคิดว่าโปรแกรมดูเท่มาก ๆ คล้ายกับสัญลักษณ์กัมมันตภาพรังสี (แม้ว่าการแรเงา ASCII จะบอกถึงสีที่อยู่ข้างหลัง) หรือไอคอนของอาวุธสไนเปอร์จาก Metroid Prime: Hunters

มัน ไม่พอดีกับขนาด 17 แต่ฉันลืมid=0ในลูกศรขึ้น ฉันไม่คิดว่าฉันจะลดขนาดมันลงได้เพราะมันต้องอยู่ในบรรทัดเดียว ...

เครดิตยังไปที่ Sp3000 สำหรับแนวคิดที่จะใช้ idสำหรับความคิดที่จะใช้

          #exec('print"'       ##
         ###'\x1b[2J"+(id '   ####
        #####'and"Hey Ju'    ######
       #######'de"or"Ca'    ########
      #########'tswalk'    ##########
     ###########'")')     ############
    ##############       ##############
   ################     ################
  ##################   ##################
 #################### ####################
id=0;print"Birthday"##id=0;print"Birthday"#
exec('print"'       ##exec('print"'       #
 '\x1b[2J"+(id '   ####'\x1b[2J"+(id '   #
  'and"Hey Ju'    ######'and"Hey Ju'    #
   'de"or"Ca'    ########'de"or"Ca'    #
    'tswalk'    ##########'tswalk'    #
     '")')     ############'")')     #
      #       ###############       #
       #     #################     #
        #   ###################   #
         # ##################### #
          #id=0;print"Birthday"##

ลูกศรขึ้น:

          #
         ###
        #####
       #######
      #########
     ###########
    #############
   ###############
  #################
 ###################
id=0;print"Birthday",

ลูกศรลง:

exec('print"'       #
 '\x1b[2J"+(id '   #
  'and"Hey Ju'    #
   'de"or"Ca'    #
    'tswalk'    #
     '")')     #
      #       #
       #     #
        #   #
         # #
          #

"Hey Jude" เป็นหนึ่งในเพลงที่ชื่นชอบของ Beatles แต่ฉันไม่รู้จักมาก่อน ฉันไม่เคยได้ยินอีกสองเพลงที่ฉันใช้ มันไม่ใช่แนวที่ฉันฟังบ่อย


1
1. \x1b[2Jผลงานเท่านั้นที่มี ANSI.SYS; ไม่ควรทำสิ่งใดในเทอร์มินัลอื่น นอกจากนี้\x1b[;Hคาดว่าจะเป็นจำนวนเต็มหลังจากอัฒภาค ที่จะทำให้ทั้งสองแถวและคอลัมน์เริ่มต้น 1, \x1b[Hการใช้งาน 2. \x1b[1J\x1b[Hและ\x1b[H\x1b[Jควรทำงานกับเทอร์มินัล ANSI ทั้งหมด 3. บนเทอร์มินัล Linux คุณสามารถใช้\x1bcเพื่อรีเซ็ตเทอร์มินัล 4. \x1bสามารถแทนที่ด้วย ESC ตัวอักษรในกรณีที่ช่วยปรับปรุงคะแนนของคุณ
Dennis

@Dennis ขอขอบคุณสำหรับการล้างข้อมูล ฉันยังคงไม่สามารถปรับปรุงคะแนนของฉันได้เนื่องจากฉันไม่สามารถหาวิธีที่จะทำลายรหัสลูกศรขึ้นลงในหลายบรรทัด
mbomb007

2

C (gcc)ความกว้างฐาน = 17

ด้านบน "เฮ้จูด"

        s
       ;//
      s;///
     main(//
    ){puts(//
   #define T//
  s?"Michell"//
 "e":"Hey Jud"//
"e");}///////////

ลองออนไลน์!

ด้านล่าง "กลักไม้ขีดไฟ"

s=1;/////////////
 #ifndef T//////
  main(){puts//
   ("Matchb"//
    "ox");}//
     # endif
      /////
       //\
        ;

ลองออนไลน์!

หกเหลี่ยม "มิเชล"

        ss=1;/////////////s
       ;//#ifndef T//////;//
      s;///main(){puts//s;///
     main(//("Matchb"//main(//
    ){puts(//"ox");}//){puts(//
   #define T//# endif#define T//
  s?"Michell"///////s?"Michell"//
 "e":"Hey Jud"////\"e":"Hey Jud"//
"e");}///////////;"e");}///////////
s=1;/////////////ss=1;/////////////
 #ifndef T//////;//#ifndef T//////
  main(){puts//s;///main(){puts//
   ("Matchb"//main(//("Matchb"//
    "ox");}//){puts(//"ox");}//
     # endif#define T//# endif
      /////s?"Michell"///////
       //\"e":"Hey Jud"////\
        ;"e");}///////////;

ลองออนไลน์!


1

เหยี่ยว, ฐานยาว 15

เพิ่งพบว่ามันไม่ทำงานกับ mawk : /

มันไม่ได้ยุ่งยากเกินไป แต่เมื่อโตขึ้นในยุค 70 โดย The Beatles ยังคงอยู่ทั่วไปทุกหนทุกแห่งในอากาศฉันต้องตอบคำถามนี้ ครั้งแรกที่ฉันคิดว่า awk ไม่เหมาะ แต่แล้วมันก็มาหาฉัน

เนื่องจากสคริปต์เหล่านี้มีบล็อก BEGIN- และ / หรือ END- บล็อกจึงต้องมีการแจ้งให้ทราบว่าจะไม่มีอินพุตสำหรับดำเนินการบล็อก END สิ่งนี้สามารถทำได้โดยการกด Ctrl-D หลังจากเริ่มต้นพวกเขาหรือเริ่มพวกเขาเช่นนี้:

awk -f script.awk </dev/null

ซึ่งฉันคิดว่าสะดวกกว่า echo | awk -f script.awkจะใช้งานได้ แต่ถ้าฉันจะใช้บรรทัดว่างเป็นอินพุตฉันจะทำสิ่งนี้แตกต่างอย่างสิ้นเชิง

ชี้ไปที่พิมพ์For No One (ลิงก์ Youtube)

       #
      # #
     #   #
    BEGIN {
   print n?#
  #         #
 n"So Tired":#
n="For No One"}

รหัสสำคัญที่ไม่มีความคิดเห็นคือสิ่งนี้ เนื่องจากnไม่ได้กำหนดไว้จะพิมพ์ "For No One" หากถูกเรียกโดยตัวเอง

    BEGIN {
   print n?

 n"So Tired":
n="For No One"}

ชี้ลงไปพิมพ์Blackbird

END{a="Blackb"#
 a=n?_:a"ird"#
  printf a  #
   n="I'm "#
    if(a) #
     print
      } #
       #

รหัสที่สำคัญคือสิ่งนี้ หากnมีการกำหนดไว้ก่อนที่จะไม่พิมพ์อะไรเลย ฉันบังคับเอาท์พุทที่ดีด้วยบรรทัดใหม่หลังจากชื่อแทร็คทุกอันเพราะฉันมีห้องที่จะทำและดูดีกว่าในคอนโซล nถูกกำหนดในกระบวนการ ที่จำเป็นสำหรับ Hexagon

END{a="Blackb"
 a=n?_:a"ird"
  printf a
   n="I'm "
    if(a)
     print
      }

หกเหลี่ยมพิมพ์ฉันเหนื่อยมาก

       #END{a="Blackb"##
      # #a=n?_:a"ird"## #
     #   #printf a  ##   #
    BEGIN {n="I'm "#BEGIN {
   print n?#if(a) #print n?#
  #         #print#         #
 n"So Tired":#} #n"So Tired":#
n="For No One"}#n="For No One"}
END{a="Blackb"##END{a="Blackb"#
 a=n?_:a"ird"## #a=n?_:a"ird"#
  printf a  ##   #printf a  #
   n="I'm "#BEGIN {n="I'm "#
    if(a) #print n?#if(a) #
     print#         #print
      } #n"So Tired":#} #
       #n="For No One"}#

รหัสที่จำเป็น ในที่สุดก็nมีการใช้สิ่งลึกลับ เนื่องจากnมีการกำหนดไว้ในบรรทัดแรกสามเหลี่ยมชี้ขึ้นด้านบนจะพิมพ์เอาต์พุตทางเลือกและรูปสามเหลี่ยมชี้ชี้ลงด้านล่างจะว่างเปล่า

    BEGIN {n="I'm "
   print n?

 n"So Tired":
n="For No One"}
END{a="Blackb"
 a=n?_:a"ird"
  printf a  
   n="I'm "
    if(a) 
     print
      } 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.