ปีนไปอเมริกา


11

ตอนนี้ผู้ใช้รายอื่นช่วยให้ทรัมป์สร้างกำแพงได้แล้ว

นี่คือความท้าทายทางศิลปะแบบ ascii ที่คุณต้องการเอาท์พุทปีนกำแพงพร้อมที่จับแบบสุ่ม

ผนังปีนเขานั้นประกอบไปด้วยแผ่นไม้แต่ละแผ่นที่มีระหว่าง 3 ถึง 10 แผ่นและสูง 5 แผ่น แต่ละแผงมีความสูง 4 ตัวอักษรและ 10 ตัว

เราใช้|เพื่อเป็นตัวแทนของผนังด้านข้าง (the arête) และ a -เพื่อใช้แทนขอบของแผง มุมของแผงจะแสดงโดยและถือจะแสดงเป็น+o

ในที่สุดผนังจะต้องมีAmerica!ที่ด้านบนและMexicoด้านล่าง

โปรแกรมของคุณไม่ควรป้อนข้อมูลหากไม่จำเป็นต้องป้อนข้อมูลให้เรียกใช้และควรส่งออกบางสิ่งที่มีลักษณะคล้ายกับด้านล่าง

นี่คือตัวอย่างเอาต์พุต:

  America!
+----------+
|  o       |
|    o o   |
| o    o   |
|  o    o  |
+----------+
|  o       |
|    o o   |
| o    o   |
|  o    o  |
+----------+
|  o       |
|    o o   |
| o    o   |
|  o    o  |
+----------+
|  o       |
|    o o   |
| o    o   |
|  o    o  |
+----------+
|  o       |
|    o o   |
| o    o   |
|  o    o  |
+----------+
   Mexico

สิ่งนี้อาจถูกกำหนดไว้อย่างสับสนดังนั้นจึงมีโครงสร้างที่ชัดเจนด้านล่าง

อินพุต

Zilcho คุณไม่ควรป้อนข้อมูลใด ๆ

เอาท์พุต

ผนังปีนศิลปะแบบแอสทีไอซึ่งประกอบไปด้วย 5 แผงแต่ละอันมี 6 เส้นโดย 12 คอลัมน์โดยมีAmerica!กึ่งกลางที่ด้านบนและMexicoอยู่กึ่งกลางที่ด้านล่าง แต่ละแผงมีรูปแบบที่เหมือนกันซึ่งสร้างขึ้นโดยโปรแกรมแบบสุ่ม รูปแบบพาเนลประกอบด้วยจำนวนการสุ่มแบบกระจายที่กระจายแบบสุ่มระหว่าง 3 ถึง 10

กฎระเบียบ

  • ไม่อนุญาตให้ป้อนข้อมูล
  • ฉันจะพูดว่า "ไม่มีบิลด์อิน" แต่ถ้าภาษาของคุณมีบิวอินสำหรับสิ่งนี้ฉันจะยอมรับโดยอัตโนมัติว่าเป็นผู้ชนะ
  • นี่คือเพื่อให้ได้รหัสที่สั้นที่สุด (เป็นไบต์)
  • เอาต์พุตที่ไม่มีการพักจะต้องตรงเหมือนกับข้างบนอีกครั้งโดยไม่มีการพัก
  • Random เป็นการสุ่มที่กำหนดไว้ที่นี่

5
การสุ่มหมายถึงการสุ่มอย่างสม่ำเสมอหรือแต่ละเลย์เอาท์ที่เป็นไปได้นั้นต้องการโอกาสที่จะเกิดขึ้นหรือไม่หรือฉันต้องมีความเป็นไปได้อย่างน้อยสองอย่าง?
Pavel

@ Notts90 พวกเขาควรจะเหมือนกันและเลือกปริมาณแบบสุ่ม สิ่งนี้ถูกกล่าวถึงในโพสต์ แต่ไม่ได้กำหนดแบบแผน
Pavel

2
ฉันยังคงคิดว่านี่จะเป็นความท้าทายที่ดีกว่าถ้าทุกแผงต้องแตกต่างกัน
Shaggy

3
นี่คือปัญหาของฉันกับ Sandbox ฉันมีความท้าทายนี้ที่นั่นนานกว่าหนึ่งเดือนและเพิ่งตัดสินใจล้างโพสต์ของฉันที่นั่น ดังนั้นผมจึงโพสต์สิ่งนี้โดยคิดว่าทุกประเด็นถูกรีดออกและเกิดขึ้น!
caird coinheringaahing

1
@WORNGALL ข่าวปลอม! โกหก! การสุ่มนั้นสำคัญมาก Trumpscript มีเครื่องกำเนิดไฟฟ้าแบบสุ่มที่ดีที่สุดที่คุณเคยเห็นมา (สิ่งที่คุณต้องทำคือเชื่อมโยงไปยังฟีด Twitter ของประธานาธิบดี!)
เลเวลริเวอร์เซนต์

คำตอบ:


5

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

ครั้งแรกที่เคยใช้ของแบบใหม่เป็นสองรหัสจุดสตริงจำนวนเต็มอักษร ( ⁽¥0= 2049)

⁽¥0ṃ⁾+-W
“K2X)»Ṅø40RẊ<8X+3¤s⁵ị⁾o j@€⁾||Yṭ¢µṄ€5¡Ṗ;⁷“Ç€:;#»

โปรแกรมเต็มรูปแบบไม่มีการป้อนข้อมูลและการพิมพ์ผนัง

ลองออนไลน์!

อย่างไร?

⁽¥0ṃ⁾+-W - Link 1, panel separator: no arguments
⁽¥0      - literal 2049
    ⁾+-  - literal "+-"
   ṃ     - convert 2049 to base "+-" as if they were [1,0]
       W - wrap in a list   -> ["+----------+"]

“K2X)»Ṅø40RẊ<8X+3¤s⁵ị⁾o j@€⁾||Yṭ¢µṄ€5¡Ṗ;⁷“Ç€:;#» - Main link: no arguments
“K2X)»                                           - "  America!"
      Ṅ                                          - print with line feed
       ø                                         - niladic chain separation
        40                                       - literal 40
          R                                      - range -> [1,2,...,40]
           Ẋ                                     - random shuffle
                 ¤                               - nilad and link(s) as a nilad:
             8X                                  -   random integer between 1 and 8
                3                                -   literal 3
               +                                 -   add
            <                                    - less than? (vectorises)
                   ⁵                             - literal 10
                  s                              - split into chunks of length 10
                     ⁾o <-- a space              - literal "o "
                    ị                            - index into
                           ⁾||                   - literal "||"
                        j@€                      - join with reversed @rguments
                              Y                  - join with line feeds
                                ¢                - call last link (1) as a nilad
                               ṭ                 - tack left to right
                                 µ               - call that p... (monadic chain separation)
                                    5¡           - repeat five times:
                                   €             -   for €ach (separator & panel)
                                  Ṅ              -     print with trailing line feed(separator and panel):
                                      Ṗ          - pop (just the separator now)
                                        ⁷        - literal line feed
                                       ;         - concatenate
                                                 - unused value printed
                                         “Ç€:;#» - "   Mexico"
                                                 - implicit print

4
นี่เป็นโปรแกรมเยลลี่ที่ยาวที่สุดที่ฉันเคยเห็น
Pavel

ความคลุมเครือมีการเปลี่ยนแปลง ฉันตัดสินใจด้วย 3-10 เพื่อให้คุณพัก
caird coinheringaahing

+1 )o <-- a spaceสำหรับ ทำให้ฉันหัวเราะอย่างแท้จริง!
caird coinheringaahing

@ ฟีนิกซ์มันสั้นกว่านี้ แต่ฉันอดไม่ได้ที่จะคิดว่ามันควรจะสั้นกว่านี้
Jonathan Allan

@ ซาตานมันเกือบจะเป็นยานอวกาศแล้ว!
Jonathan Allan

4

PHP, 138 ไบต์

<?=($p=str_pad)("  America!",349,strtr("
+----------+
|0|
|1|
|2|
|3|",str_split(str_shuffle($p($p(o,rand(3,10),o),40)),10)))."   Mexico";

ลองออนไลน์!

ขยาย

<?=($p=str_pad)("  America!",349, 
#fill the string till a length of 349 with
strtr("
+----------+
|0|
|1|
|2|
|3|",
# before replace the digits with strings in the array
str_split(str_shuffle($p($p(o,rand(3,10),o),40)),10))) 
# make a string with o length 3- 10 fill it with spaces to length 40
# shuffle the resulting string and split it into a array of strings with length 10
."   Mexico"; # add the end

4

JavaScript (ES6), 194 160 ไบต์

(h=0,g=p=>h>2?p:g(p.replace(/ /g,_=>" o"[(h+=s=Math.random()>.8)<11&s])))=>`  America!
${t=`+----------+
`}${g(`|          |
`.repeat(4)+t).repeat(5)}   Mexico`

ลองมัน

รูปแบบของการระงับจะเปลี่ยนทุก 2 วินาทีในตัวอย่างด้านล่าง

f=
(h=0,g=p=>h>2?p:g(p.replace(/ /g,_=>" o"[(h+=s=Math.random()>.8)<11&s])))=>`  America!
${t=`+----------+
`}${g(`|          |
`.repeat(4)+t).repeat(5)}   Mexico`
o.innerText=f()
setInterval("o.innerText=f()",2e3)
<pre id=o>


คำอธิบาย

  • เราสร้างฟังก์ชั่นที่ไม่ระบุตัวตนซึ่งแม้ว่าจะไม่มีการป้อนข้อมูลใด ๆ แต่ก็มี 2 พารามิเตอร์ด้วยค่าเริ่มต้น:
    • hซึ่งจะได้รับค่าเริ่มต้นของ0; สิ่งนี้จะเก็บจำนวนการระงับบนแผงเมื่อเราไปเพิ่ม
    • gซึ่งเป็นฟังก์ชั่นวนซ้ำที่เราจะใช้เพื่อสร้างรูปแบบการสุ่มจับบนแผง เราจะกลับมาที่นี่อีกสักครู่
  • America!\nในร่างกายทำงานหลักของเราส่งออกแม่แบบตัวอักษรที่ขึ้นต้นด้วย
  • จากนั้นเราจะสร้าง panel divider ( +----------+\n) และกำหนดให้กับตัวแปรtเพิ่มไปยังเอาต์พุตในกระบวนการ
  • ต่อไปเราจะสร้างบรรทัดเดียวของแผง ( | |\n) ทำซ้ำได้ 4 tครั้งและผนวก
  • เราขอเรียกร้องผ่านสตริงจากขั้นตอนดังกล่าวข้างต้นเป็นอาร์กิวเมนต์ผ่านพารามิเตอร์gp
  • ตอนนี้สำหรับรูปแบบการพัก ภายในg:
    • เราตรวจสอบเพื่อดูว่าh>2(เช่นเรามี 3 หรือมากกว่าถือ)
    • pถ้าเป็นเช่นนั้นเราจะกลับสตริง
    • ถ้าไม่เราโทรgอีกครั้งคราวนี้ผ่านการคัดลอกpเป็นอาร์กิวเมนต์
    • สำเนาแก้ไขpมีreplaceวิธีการใช้ที่มันเปลี่ยนทุก<space>ตัวอักษรด้วย<space>หรือoโดยการอ้างอิงดัชนีตัวอักษร (0 หรือ 1) <space>oของสตริง
    • เรากำหนดดัชนีตัวละครโดย
      1. การโทรMath.random()ซึ่งจะส่งกลับตัวเลขทศนิยมระหว่าง 0 และ 1 ซึ่งเป็นเอกสิทธิ์
      2. .8ตรวจสอบว่ามีค่ามากกว่า ด้วยพื้นที่ 40 ช่องในแผงและมีได้สูงสุด 10 ช่องการทำเช่นนี้ช่วยปรับปรุงการกระจายการถือข้ามแผง ( .75จะแม่นยำยิ่งขึ้น แต่หวังว่าคุณจะยอมให้ฉันยอมทำเพื่อประโยชน์ของ ประหยัดไบต์!)
      3. sบูลีนของการตรวจสอบที่กำหนดให้กับตัวแปร
      4. sถูกบังคับให้เป็นจำนวนเต็ม (0 หรือ 1) hและเพิ่มไปยัง
      5. เราตรวจสอบว่าhอยู่ในขณะนี้น้อยกว่า 11 (เช่นทำขณะนี้เรามีน้อยกว่า 10 ถือ) และถ้าsเป็นเรื่องจริง
      6. บูลีนนั้นเปลี่ยนเป็นจำนวนเต็มทำให้เรามีดัชนีในสตริง
  • กลับไปที่ผลลัพธ์ของเรา! เราทำซ้ำสตริงที่ส่งคืนg5 ครั้ง
  • จากนั้นเพิ่มMexicoไปยังจุดสิ้นสุดของสตริงเพื่อทำสิ่งต่างๆให้เสร็จ วุ้ย

ทางเลือก

และเพียงเพราะฉันคิดว่ามันน่าจะเป็นการเพิ่มความท้าทายได้ดี: สำหรับการเพิ่มพิเศษเพียง 12 ไบต์เราสามารถมีรูปแบบการถือที่ไม่ซ้ำกันในแต่ละแผงแทนที่จะเป็นเหมือนกันทั้งหมด

(g=(p=`|          |
`.repeat(4)+t,h=0)=>h>2?p:g(p.replace(/ /g,_=>" o"[(h+=s=Math.random()>.8)<11&s]),h))=>`  America!
${t=`+----------+
`}${g()+g()+g()+g()+g()}    Mexico`

ลองมัน

อีกครั้งรูปแบบการถือจะเปลี่ยนทุก 2 วินาที


3

Pyth - 58 57 ไบต์อาจเป็น 47

Ks(b\+*\-T\+*+++b\|*dT\|4)J<.SxdmdK+3O8+*s.e?/Jk\obK5<K13

ลองมัน

คำอธิบายวิธีแก้ปัญหาแบบเก่า (ฉันจะอัปเดตเมื่อฉันมีเวลา):

J+++b\+*\-T\+K+J*+++b\|*dT\|4=Y<.SxdmdK+3O8+*s.e?/Yk\obK5J
J+++b\+*\-T\+                                                Create the +----------+, and store as J
             K+J*+++b\|*dT\|4                                Create a full panel (minus bottom border, and without holes), store as K
                                  xdmdK                      Get indices of spaces
                                .S                           Create random permutation of these indices
                               <       +3O8                  Get first several indices (a random number from 3 to 10)
                                             s.e?/Yk\obK     Replace space with 'o' at these indices
                                           +*           5J   Create 5 copies, and add bottom border

ฉันคิดว่าฉันสามารถได้ 47 ในขณะที่ยังคงตามกฎ:

JhO2Ks(b\+*\-T\+*+++b\|.S+*\oJ*d-TJ\|4)+*K5<K13

ที่นี่จำนวนหลุมยังคงสุ่มเลือก (จากชุด {4,8}) และการกำหนดค่าของหลุมเหล่านั้นจะถูกเลือกแบบสุ่ม (จากชุดการกำหนดค่าที่แต่ละแถวเหมือนกัน)

ลองมัน


2

Mathematica, 201 ไบต์

c=Column;s=RandomSample[Tuples[{" ",o," "," "},10],4];t="+----------+";w=c[{t,c[Row/@Table[AppendTo[s[[i]],"|"];PrependTo[s[[i]],"|"],{i,Length@s}]]}];c[Flatten@{"  America!",Table[w,5],t,"   Mexico"}]

+1 สำหรับการใช้ภาษาที่ฉันทดสอบไม่ได้ใช่ไหม
caird coinheringaahing

@ Satan'sSon คุณสามารถเรียกใช้โปรแกรม Mathematica ที่สุดสำหรับฟรีที่นี่ที่วุลแฟรม Sandbox (วางในและกด shift-enter)
ไม่ใช่ต้นไม้

เมื่อพูดถึงการพิมพ์เว็บไซต์นี้จะทำการพิมพ์อย่างสนุกสนาน ผลลัพธ์ถูกบิดเบือนเนื่องจากใช้ตัวอักขระพิเศษ ...
J42161217


1

Python 2 , 259 224 221 218 ไบต์

from random import*
b=[' ']*40
for x in sample(range(40),randint(3,10)):b[x]='o'
a=["+"+"-"*10+"+"]+['|'+''.join(o)+'|'for o in[b[x*10:x*10+10]for x in 0,1,2,3]] 
print'\n'.join(['  America!']+a*5+[a[0]]+['   Mexico'])

ลองที่ repl.it

-35 รวมถึงคำใบ้บางส่วนจาก @ Satan'sSon - ขอบคุณ!

-3 ด้วยขอบคุณ @Wondercricket


คุณสามารถบันทึก bytes โดยเพียงแค่ outputting tแทนที่จะบันทึกลงในตัวแปรและถ้าคุณลบช่องว่างหลังจากAmerica!และMexico? print" America!" <NEWLINE> d,a,b,c=[" Mexico"],["+"+"-"*10+"+"],[" "]*40,0?
caird coinheringaahing

ขอบคุณ @ ซาตาน นี่เป็น "อาหารกลางวันพิเศษ" และอาจเป็นไปได้ที่จะเล่นกอล์ฟได้มากขึ้นเมื่อฉันมีเวลา ขอบคุณอีกครั้งสำหรับคำแนะนำ
ElPedro

นอกจากนี้คุณยังสามารถบันทึกไม่กี่ไบต์โดยเปลี่ยนการนำเข้าของคุณเป็นfrom random import*และลบออกr.จากฟังก์ชั่น
Wondercricket

ขอบคุณ @Wondercricket ไม่แน่ใจว่าฉันจัดการเพื่อพลาดที่หนึ่ง :)
ElPedro

ซาตานเป็นประโยชน์! (เป็นครั้งแรกและครั้งสุดท้ายสำหรับทุกสิ่ง> :(
caird coinheringaahing

0

Python 2, 197 ไบต์

from random import*
n=randint(3,10)
s=list('o'*n+' '*(40-n))
shuffle(s)
t=10
S='+'+'-'*t+'+'
print'\n'.join(['  America!']+([S]+['|'+''.join(s[x:x+t])+'|'for x in range(0,40,t)])*5+[S,'   Mexico'])
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.