Naik ke Amerika

11

Sekarang pengguna lain telah membantu Trump membangun dinding , saatnya bagi Anda untuk memanjatnya.

Ini adalah tantangan seni ascii di mana Anda perlu membuat dinding panjat dengan pegangan yang ditempatkan secara acak.

Dinding panjat terdiri dari panel yang masing-masing memiliki antara 3 dan 10 pegangan dan tingginya 5 panel. Setiap panel memiliki 4 karakter dan 10 karakter

Kami menggunakan |untuk mewakili sisi dinding (arête) dan a -untuk mewakili tepi panel. Sudut-sudut panel ditunjukkan oleh +dan pegangan ditampilkan sebagai o.

Akhirnya, dinding harus ada America!di atas dan Mexicodi bawah.

Program Anda tidak boleh mengambil input kecuali input diperlukan untuk menjalankan dan harus menampilkan sesuatu yang mirip dengan di bawah ini

Ini adalah contoh output:

  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

Ini mungkin membingungkan diatur sehingga terstruktur lebih jelas di bawah ini

Memasukkan

Zilcho. Anda seharusnya tidak mengambil input sama sekali.

Keluaran

Dinding panjat ascii-art terdiri dari 5 panel, masing-masing 6 baris dengan 12 kolom dengan America!berpusat di bagian atas dan Mexicoberpusat di bagian bawah. Setiap panel memiliki pola identik yang dihasilkan secara acak oleh program. Pola panel terdiri dari jumlah penahanan acak yang didistribusikan secara acak, antara 3 dan 10.

Aturan

  • Tidak ada input yang diizinkan
  • Saya akan mengatakan "tidak ada builtin" tetapi jika bahasa Anda memiliki builtin untuk ini, saya secara otomatis akan menerimanya sebagai pemenang.
  • Ini adalah sehingga kode terpendek (dalam byte) menang.
  • Output tanpa penahanan harus persis sama seperti di atas, lagi tanpa penahanan.
  • Acak adalah acak yang didefinisikan di sini
caird coinheringaahing
sumber
5
Apakah acak berarti acak seragam, atau apakah masing-masing tata letak yang mungkin hanya memerlukan kesempatan nol, atau apakah saya hanya perlu memiliki setidaknya dua kemungkinan?
Pavel
@ Notts90 Mereka harus sama, dan memilih jumlah secara acak. Ini disebutkan dalam posting, tetapi keacakan tidak didefinisikan.
Pavel
2
Saya masih berpikir ini akan menjadi tantangan yang lebih baik jika setiap panel harus berbeda.
Shaggy
3
Ini di sini adalah masalah saya dengan Sandbox. Saya memiliki tantangan ini di sana selama lebih dari sebulan dan baru saja memutuskan untuk membersihkan posting saya di sana. Jadi saya memposting ini, berpikir bahwa setiap masalah telah diselesaikan dan ini terjadi!
caird coinheringaahing
1
@WORNGALL Berita palsu! Kebohongan! Acak sangat penting. Trumpscript memiliki GENERATOR ACAK TERBAIK yang pernah Anda lihat. (Yang harus Anda lakukan adalah tautan ke umpan twitter presiden!)
Level River St

Jawaban:

5

Jelly , 65 57 byte

Pertama pernah menggunakan yang baru-fangled , seorang dua-kode-point literal bilangan bulat tali ( ⁽¥0= 2049)

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

Program penuh tanpa input dan mencetak dinding.

Cobalah online!

Bagaimana?

⁽¥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
Jonathan Allan
sumber
4
Ini adalah program jeli terpanjang yang pernah saya lihat.
Pavel
Ambiguitas telah diubah. Saya memutuskan dengan 3-10 untuk memungkinkan Anda tetap.
caird coinheringaahing
+1 untuk )o <-- a space. Benar-benar membuatku tertawa!
caird coinheringaahing
@Phoenix punya lebih pendek, tapi saya tidak bisa membantu tetapi berpikir itu harus tetap lebih pendek.
Jonathan Allan
@ Setan, ini hampir seperti hopper ruang!
Jonathan Allan
4

PHP, 138 Bytes

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

Cobalah online!

Diperluas

<?=($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
Jörg Hülsermann
sumber
4

JavaScript (ES6), 194 160 byte

(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`

Cobalah

Pola penahanan akan berubah setiap 2 detik dalam Cuplikan di bawah ini.

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>


Penjelasan

  • Kami membuat fungsi anonim, yang, meskipun tidak mengambil input apa pun, memiliki 2 parameter dengan nilai default:
    • h, yang diberi nilai awal 0; ini akan terus menghitung jumlah penangguhan pada panel saat kita menambahkannya.
    • g, yang merupakan fungsi rekursif yang akan kami gunakan untuk membuat pola penahanan acak pada panel. Kami akan kembali ke sini sebentar lagi.
  • Di badan fungsi utama, kami menampilkan templat literal, dimulai dengan America!\n.
  • Kami kemudian membuat pembagi panel ( +----------+\n) dan menetapkannya ke variabel t, menambahkannya ke output dalam proses.
  • Selanjutnya, kita membuat satu baris panel ( | |\n), ulangi 4 kali dan tambahkan t.
  • Kami memanggil g, meneruskan string dari langkah di atas sebagai argumen, melalui parameter p.
  • Sekarang, untuk pola penahanan. Di dalam g:
    • Kami memeriksa untuk melihat apakah h>2(yaitu, apakah kami memiliki 3 penahanan atau lebih).
    • Jika demikian, kami mengembalikan string p.
    • Jika tidak, kami akan menelepon glagi, kali ini mengirimkan salinan modifikasi psebagai argumen.
    • Salinan yang dimodifikasi pmemiliki replacemetode yang digunakan di dalamnya, menggantikan semua <space>karakter dengan <space>atau odengan merujuk indeks karakter (0 atau 1) dari string <space>o.
    • Kami menentukan indeks karakter dengan
      1. Memanggil Math.random(), yang mengembalikan angka desimal antara 0 & 1, eksklusif.
      2. Memeriksa apakah itu lebih besar dari .8. Dengan 40 ruang di panel dan hanya ada maksimum 10 penahan, melakukan ini meningkatkan distribusi penahan di panel ( .75akan lebih akurat, tetapi, mudah-mudahan, Anda akan memberi saya konsesi untuk kepentingan menghemat satu byte!).
      3. Boolean dari cek itu ditugaskan ke variabel s.
      4. sdipaksa ke integer (0 atau 1) dan ditambahkan ke h.
      5. Kami memeriksa apakah hsekarang kurang dari 11 (yaitu, apakah saat ini kami memiliki kurang dari 10 penahanan) dan apakah situ benar.
      6. Boolean itu pada gilirannya dipaksa ke integer, memberi kita indeks dalam string.
  • Kembali ke hasil kami! Kami mengulangi string yang dikembalikan sebanyak g5 kali.
  • Dan kemudian cukup tambahkan Mexicoke ujung string untuk menyelesaikannya. Fiuh!

Alternatif

Dan, hanya karena saya pikir itu akan menjadi tambahan yang bagus untuk tantangan: Untuk hanya 12 byte tambahan, kita dapat memiliki pola penangguhan yang unik pada setiap panel, alih-alih semuanya identik.

(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`

Cobalah

Sekali lagi, pola penahanan akan berubah setiap 2 detik.

Shaggy
sumber
3

Pyth - 58 57 byte, mungkin 47

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

Cobalah

Penjelasan solusi lama (saya akan memperbarui ketika saya punya waktu):

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

Saya pikir saya bisa mendapatkan 47 sementara masih secara teknis mengikuti aturan:

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

Di sini, jumlah lubang masih dipilih secara acak (dari himpunan {4,8}) dan konfigurasi lubang-lubang itu dipilih secara acak (dari himpunan konfigurasi di mana setiap baris identik)

Cobalah

Maria
sumber
2

Mathematica, 201 byte

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"}]
J42161217
sumber
+1 untuk menggunakan bahasa yang tidak bisa saya uji?
caird coinheringaahing
@ Satan'sSon, Anda dapat menjalankan program yang paling Mathematica gratis di sini pada Wolfram Sandbox. (Tempel di dan tekan shift-enter.)
Bukan pohon
Ketika datang untuk mencetak, situs ini mencetak dengan cara yang lucu. Outputnya terdistorsi karena menggunakan charachters khusus ...
J42161217
1

Powershell (255 Bytes)

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" 
Sivaprasath Vadivel
sumber
1

Python 2 , 259 224 221 218 byte

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'])

Cobalah di repl.it

-35 termasuk beberapa petunjuk dari @ Satan'sSon - terima kasih!

-3 dengan terima kasih kepada @Wondercricket

ElPedro
sumber
Anda bisa menyimpan byte dengan hanya mengeluarkan tdaripada menyimpannya ke variabel dan jika Anda menghapus spasi setelah America!dan Mexico? print" America!" <NEWLINE> d,a,b,c=[" Mexico"],["+"+"-"*10+"+"],[" "]*40,0?
caird coinheringaahing
Terima kasih @ Setan. Ini adalah "makan siang khusus" dan mungkin bisa bermain golf lebih adil ketika saya punya waktu. Terima kasih lagi untuk petunjuknya.
ElPedro
Anda juga dapat menyimpan beberapa byte dengan mengubah impor Anda ke from random import*dan menghapus r.dari fungsi
Wondercricket
Terima kasih @Wondercricket. Tidak yakin bagaimana saya bisa melewatkan yang satu itu :)
ElPedro
Setan sangat membantu! (Pertama dan terakhir kali untuk semuanya> :(
caird coinheringaahing
0

Python 2, 197 byte

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'])
TFeld
sumber