Leo lên mỹ


11

Bây giờ những người dùng khác đã giúp Trump xây dựng bức tường , đã đến lúc để bạn leo lên nó.

Đây là một thử thách nghệ thuật ascii trong đó bạn cần xuất ra một bức tường leo núi với các vị trí được đặt ngẫu nhiên.

Một bức tường leo núi được tạo thành từ các tấm, mỗi tấm có từ 3 đến 10 giữ và cao 5 tấm. Mỗi bảng cao 4 ký tự và 10 ký tự

Chúng tôi sử dụng |để đại diện cho cạnh của bức tường (arête) và a -để đại diện cho các cạnh của bảng. Các góc của bảng được hiển thị bởi +và giữ được hiển thị như o.

Cuối cùng, bức tường phải có America!ở trên cùng và Mexicoở dưới cùng.

Chương trình của bạn sẽ không có đầu vào trừ khi đầu vào được yêu cầu để chạy và sẽ xuất ra thứ gì đó tương tự như bên dưới

Đây là một ví dụ đầu ra:

  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

Điều này có thể được đặt ra một cách khó hiểu để nó được cấu trúc rõ ràng hơn dưới đây

Đầu vào

Zilcho. Bạn không nên hoàn toàn nhập liệu.

Đầu ra

Một bức tường leo núi nghệ thuật ascii gồm 5 tấm, mỗi tấm 6 dòng bằng 12 cột với America!tâm ở trên và Mexicogiữa ở dưới. Mỗi bảng có một mẫu giống hệt nhau được tạo ra ngẫu nhiên bởi chương trình. Mẫu bảng điều khiển bao gồm số lần giữ ngẫu nhiên được phân phối ngẫu nhiên, từ 3 đến 10.

Quy tắc

  • Không cho phép đầu vào
  • Tôi sẽ nói "không có nội dung" nhưng nếu ngôn ngữ của bạn có nội dung cho việc này, tôi sẽ tự động chấp nhận nó là người chiến thắng.
  • Đây là để mã ngắn nhất (tính bằng byte) thắng.
  • Đầu ra không có giữ phải giống hệt như trên, một lần nữa không có giữ.
  • Ngẫu nhiên là ngẫu nhiên được xác định ở đây

5
Liệu ngẫu nhiên có nghĩa là ngẫu nhiên thống nhất, hoặc mỗi bố cục có thể chỉ cần một cơ hội khác không xảy ra, hay tôi chỉ cần có ít nhất hai khả năng?
Pavel

@ Notts90 Chúng phải giống nhau và chọn một số lượng ngẫu nhiên. Điều này được đề cập trong bài viết, nhưng tính ngẫu nhiên không được xác định.
Pavel

2
Tôi vẫn nghĩ rằng đây sẽ là một thử thách tốt hơn nếu mỗi bảng điều khiển phải khác nhau.
Xù xì

3
Đây là vấn đề của tôi với Sandbox. Tôi đã có thử thách này ở đó hơn một tháng và vừa quyết định xóa bài viết của mình ở đó. Vì vậy, tôi đăng bài này, nghĩ rằng mọi vấn đề đã được giải quyết và điều này xảy ra!
caird coinheringaahing

1
@WORNGALL Tin tức giả! Dối trá! Sự ngẫu nhiên là rất quan trọng. Trumpscript có MÁY PHÁT ĐIỆN RANDOM TỐT NHẤT mà bạn từng thấy. (Tất cả những gì bạn phải làm là liên kết với nguồn cấp dữ liệu twitter của tổng thống!)
Level River St

Câu trả lời:


5

Thạch , 65 57 byte

Đầu tiên sử dụng trong những mới lạ , một hai mã điểm số nguyên chuỗi chữ ( ⁽¥0= 2049)

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

Chương trình đầy đủ không có đầu vào và in tường.

Hãy thử trực tuyến!

Làm sao?

⁽¥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
Đây là chương trình thạch dài nhất tôi từng thấy.
Pavel

Sự mơ hồ đã được thay đổi. Tôi quyết định với 3-10 là cho phép bạn ở lại.
caird coinheringaahing

+1 cho )o <-- a space. Thực sự làm tôi cười!
caird coinheringaahing

@Phoenix nó ngắn hơn, nhưng tôi không thể không nghĩ nó vẫn ngắn hơn.
Jonathan Allan

@ Satan'sSon gần như là một phễu không gian!
Jonathan Allan

4

PHP, 138 byte

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

Hãy thử trực tuyến!

Mở rộng

<?=($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 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`

Thử nó

Mô hình của các khoản giữ sẽ thay đổi cứ sau 2 giây trong Đoạn trích bên dưới.

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>


Giải trình

  • Chúng tôi tạo một hàm ẩn danh, mặc dù nó không nhận bất kỳ đầu vào nào, nhưng có 2 tham số với các giá trị mặc định:
    • h, được đưa ra một giá trị ban đầu là 0; điều này sẽ giữ số lượng giữ trên bảng điều khiển khi chúng ta thêm chúng.
    • g, đó là một hàm đệ quy mà chúng ta sẽ sử dụng để tạo ra kiểu giữ ngẫu nhiên trên bảng điều khiển. Chúng tôi sẽ trở lại vấn đề này một chút.
  • Trong thân hàm chính, chúng ta xuất ra một mẫu bằng chữ, bắt đầu bằng America!\n.
  • Sau đó, chúng ta tạo bộ chia bảng điều khiển ( +----------+\n) và gán nó cho biến t, thêm nó vào đầu ra trong quy trình.
  • Tiếp theo, chúng tôi tạo một dòng duy nhất của bảng điều khiển ( | |\n), lặp lại 4 lần và nối thêm t.
  • Chúng tôi gọi g, chuyển chuỗi từ bước trên dưới dạng đối số, thông qua tham số p.
  • Bây giờ, cho các mẫu giữ. Trong g:
    • Chúng tôi kiểm tra xem nếu h>2(nghĩa là chúng tôi có 3 lần giữ trở lên).
    • Nếu vậy, chúng tôi trả lại chuỗi p.
    • Nếu không, chúng tôi gọi glại, lần này chuyển một bản sao đã sửa đổi plàm đối số.
    • Bản sao được sửa đổi preplacephương thức được sử dụng trên nó, thay thế tất cả các <space>ký tự bằng một <space>hoặc một obằng cách tham chiếu chỉ số ký tự (0 hoặc 1) của chuỗi <space>o.
    • Chúng tôi xác định chỉ số nhân vật bằng
      1. Gọi Math.random(), trong đó trả về một số thập phân giữa 0 và 1, độc quyền.
      2. Kiểm tra nếu đó là lớn hơn .8. Với 40 chỗ trống trong bảng điều khiển và chỉ có tối đa 10 khoảng giữ, làm điều này giúp cải thiện việc phân phối các khoản giữ trên bảng điều khiển ( .75sẽ chính xác hơn, nhưng, hy vọng, bạn sẽ cho phép tôi nhượng bộ vì lợi ích của tiết kiệm một byte!).
      3. Boolean của kiểm tra đó được gán cho biến s.
      4. sđược ép buộc thành một số nguyên (0 hoặc 1) và được thêm vào h.
      5. Chúng tôi kiểm tra xem hbây giờ có ít hơn 11 không (nghĩa là chúng tôi hiện có ít hơn 10 lần giữ) nếu điều đó slà đúng.
      6. Boolean đó lần lượt được ép buộc thành một số nguyên, cho chúng ta một chỉ mục trong chuỗi.
  • Quay lại đầu ra của chúng tôi! Chúng tôi lặp lại chuỗi trả về g5 lần.
  • Và sau đó chỉ cần thêm Mexicovào cuối chuỗi để kết thúc mọi thứ. Phù!

Thay thế

Và, đơn giản vì tôi nghĩ rằng nó sẽ tạo ra một sự bổ sung tốt cho thử thách: Chỉ với 12 byte bổ sung, chúng ta có thể có một kiểu giữ duy nhất trên mỗi bảng, thay vì tất cả chúng đều giống hệt nhau.

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

Thử nó

Một lần nữa, mô hình của các khoản giữ sẽ thay đổi cứ sau 2 giây.


3

Pyth - 58 57 byte, có thể 47

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

Thử nó

Giải thích về giải pháp cũ (Tôi sẽ cập nhật khi có thời gian):

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

Tôi nghĩ rằng tôi có thể nhận được 47 trong khi vẫn tuân thủ các quy tắc:

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

Ở đây, số lượng lỗ vẫn được chọn ngẫu nhiên (từ bộ {4,8}) và cấu hình của các lỗ đó được chọn ngẫu nhiên (từ bộ cấu hình trong đó mỗi hàng giống hệt nhau)

Thử nó


2

Toán học, 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"}]

+1 để sử dụng ngôn ngữ tôi không thể kiểm tra?
caird coinheringaahing

@ Satan'sSon, bạn có thể chạy hầu hết các chương trình Mathicala miễn phí tại đây tại Wolfram Sandbox. (Dán nó vào và nhấn shift-enter.)
Không phải là một cây vào

Khi nói đến in, trang web này in một cách hài hước. Đầu ra bị méo vì nó sử dụng các charachters đặc biệt ...
J42161217

1

Powershell (255 byte)

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

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

Hãy thử nó tại repl.it

-35 bao gồm một số gợi ý từ @ Satan'sSon - cảm ơn!

-3 cảm ơn @Wondercricket


bạn có thể lưu byte bằng cách xuất ra tchứ không phải lưu nó vào một biến và nếu bạn loại bỏ khoảng trắng sau America!Mexico? print" America!" <NEWLINE> d,a,b,c=[" Mexico"],["+"+"-"*10+"+"],[" "]*40,0?
caird coinheringaahing

Cảm ơn @ Satan'sSon. Đây là một "bữa ăn trưa đặc biệt" và có thể đánh golf công bằng hơn một chút khi tôi có thời gian. Cảm ơn một lần nữa cho các gợi ý.
ElPedro

Bạn cũng có thể lưu một vài byte bằng cách thay đổi nhập from random import*và xóa r.khỏi các chức năng
Wondercricket

Cảm ơn @Wondercricket. Không chắc chắn làm thế nào tôi có thể bỏ lỡ cái đó :)
ElPedro

Satan rất hữu ích! (Lần đầu tiên và lần cuối cùng cho tất cả mọi thứ> :(
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'])
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.