Піднімаємось до Америки


11

Тепер, коли інші користувачі допомогли Трампа побудувати стіну , прийшов час вам піднятися на неї.

Це виклик мистецтва Ascii, коли вам потрібно вивести стіну для сходження з випадковими розміщеннями трюмів.

Стіна для сходження складається з панелей, кожна з яких має від 3 до 10 трюмів і висотою 5 панелей. Кожна панель має 4 символи та 10 символів

Ми використовуємо |для подання сторони стіни (арте) і 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

Це може бути заплутано викладене, тому воно більш чітко структуровано нижче

Вхідні дані

Зільчо. Ви не повинні брати абсолютно ніяких внесків.

Вихідні дані

Стіна скелелазіння ascii-art, що складається з 5 панелей, кожна по 6 рядків по 12 стовпчиків з America!центрованою вгорі та Mexicoцентрованою внизу. Кожна панель має ідентичний візерунок, який випадково генерується програмою. Шаблон панелі складається з випадково розподіленого випадкового числа трюмів, між 3 та 10.

Правила

  • Вхід заборонено
  • Я б сказав "немає вбудованих", але якщо у вашій мові є вбудований для цього, я автоматично прийму його як переможця.
  • Це тому найкоротший код (у байтах) виграє.
  • Вихід без затримок повинен бути точно таким же, як вище, знову ж таки без затримань.
  • Випадковий - випадковий, визначений тут

5
Чи означає випадковий рівномірно випадковий вигляд, чи кожен можливий макет просто потребує ненульового шансу виникнути, чи мені просто потрібно мати принаймні дві можливості?
Павло

@ Notts90 Вони повинні бути однаковими, а кількість вибирати випадковим чином. Про це йдеться у публікації, але випадковість не визначена.
Павло

2
Я все ще думаю, що це було б кращим завданням, якби кожна панель мала бути різною.
Кудлатий

3
Це прямо тут моя проблема з пісочницею. Я мав цей виклик там більше місяця, і я просто вирішив очистити свої посади там. Тож я публікую це, думаючи, що кожне питання було випрасовано, і це відбувається!
caird coinheringaahing

1
@WORNGALL Підроблені новини! Брехня! Випадковий дуже важливий. У Trumpscript є НАЙКРАЩИЙ ГЕНЕРАТОР СКЛАДКИ, який ви коли-небудь бачили. (Все, що вам потрібно зробити - це посилання на твіттер каналу президента!)
Level River St

Відповіді:


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
Це найдовша програма з желе, яку я коли-небудь бачив.
Павло

Неоднозначність була змінена. Я вирішив з 3-10 як дозволити вашому залишитися.
caird coinheringaahing

+1 для )o <-- a space. По-справжньому змусив мене сміятися!
caird coinheringaahing

@Phoenix це коротше, але я не можу не стверджувати, що все-таки має бути коротшим.
Джонатан Аллан

@ Satan'sSon - це майже космос!
Джонатан Аллан

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 .
  • Потім створюємо роздільник панелі ( +----------+\n) і присвоюємо йому зміннуt , додаючи її до результату в процесі.
  • Далі ми створюємо єдиний рядок панелі ( | |\n), повторюємо її 4 рази і додаємоt .
  • Ми викликаємо g, передаючи рядок із кроку вище як аргумент, через параметрp .
  • Тепер для схеми утримування. У межахg :
    • Ми перевіряємо, чи є h>2 (тобто чи є 3 чи більше затримок).
    • Якщо так, повертаємо рядок p.
    • Якщо ні, ми gзнову зателефонуємо , цього разу передаючи модифіковану копію pяк аргумент.
    • Модифікована копія pмає replaceметод, який використовується на ній, замінюючи всі <space>символи а <space>або a 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

Математика, 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 за використання мови, яку я не можу перевірити?
каїр coinheringaahing

@ Satan'sSon, ви можете запускати більшість програм Mathematica безкоштовно тут у Sandram Sandbox. (Вставте його та натисніть shift-enter.)
Не дерево

Що стосується друку, цей сайт друкує кумедно. Вихід спотворений, оскільки він використовує спеціальні характеристики ...
J42161217

1

Powershell (255 байт)

echo "  America!"
for($l=0;$l-lt4;$l++){$a=," "*12;$a[0]="|";$a[11]="|";$i=get-random -Max 10 -Min 6;$j=get-random -Max 5 -Min 1;$a[$i]=$a[$j]="o";$b+=($a-join"")}
for($k=0;$k-lt5;$k++){echo +----------+($b-join"`n")} 
echo +----------+`n"   Mexico" 

1

Пітон 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


Ви можете зберегти байти, просто вивівши, tа не збереживши його до змінної, і якщо ви видалите пробіли після America!та Mexico? print" America!" <NEWLINE> d,a,b,c=[" Mexico"],["+"+"-"*10+"+"],[" "]*40,0?
caird coinheringaahing

Спасибі @ Satan'sSon. Це був "особливий обід" і, ймовірно, можна гольф справедливо трохи більше, коли я отримую час. Ще раз дякую за підказки.
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'])
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.