Chaos là một cái thang ASCII


43

Bạn không biết gì Những điều tôi làm cho " Chaos là một cái thang " là một dòng đáng nhớ từ loạt phim truyền hình Game of Thrones .

Mục đích của thử thách này là xây dựng một nấc thang từ sự hỗn loạn, trong nghệ thuật ASCII.

Các thách thức

Đầu vào

  • Chiều rộng thang, W >= 3(số nguyên)
  • Bước cao, H >= 2(số nguyên)
  • Số bậc thang, N >= 2(số nguyên).

Đầu ra

Một cái thang có các nấc ngangđường ray dọc , rộng tất cả 1 ký tự. Chiều rộng thang ( W) bao gồm hai đường ray và chiều cao bước ( H) bao gồm các bậc thang tương ứng.

Tất cả các nấc thang, bao gồm cả trên cùng và dưới cùng, sẽ có một đoạn đường ray dọc có chiều dài H-1trực tiếp bên trên và bên dưới. Ví dụ sẽ làm cho điều này rõ ràng hơn.

Thang sẽ được tạo từ các ký tự ASCII có thể in, không có khoảng trắng , nghĩa là phạm vi bao gồm từ !(điểm mã 33) đến ~(điểm mã 126). Các ký tự thực tế sẽ được chọn ngẫu nhiên . Với các đầu vào, mỗi lựa chọn ngẫu nhiên của các ký tự phải có xác suất khác không. Ngoài ra, phân phối xác suất là tùy ý.

Khoảng trắng hàng đầu hoặc dấu , theo chiều ngang hoặc dọc, được cho phép.

Thí dụ

Cho W=5, H=3, N=2, một đầu ra có thể là như sau.

x   :
g   h
q$UO{
t   T
6   <
bUZXP
8   T
5   g

Lưu ý rằng tổng chiều cao là H*(N+1)-1, vì có các Nbậc và N+1phần dọc.

Quy tắc bổ trợ

  • Phương tiện và định dạng đầu vào là linh hoạt như bình thường. Ví dụ: bạn có thể nhập ba số theo bất kỳ thứ tự nào hoặc một mảng chứa chúng.

  • Đầu ra có thể thông qua STDOUT hoặc một đối số được trả về bởi một hàm. Trong trường hợp này, nó có thể là một chuỗi có dòng mới, mảng ký tự 2D hoặc một chuỗi các chuỗi.

  • Một chương trình hoặc một chức năng có thể được cung cấp.

  • Sơ hở tiêu chuẩn bị cấm.

  • Mã ngắn nhất trong byte thắng.

Các trường hợp thử nghiệm

Đối với mỗi W, H, Nđầu ra có thể được hiển thị.

W=5, H=3, N=2:

\   ~
:   K
ke:[E
5   u
0   _
8Fr.D
#   r
7   X


W=3, H=2, N=2:

$ X
Mb)
0 ]
(T}
j 9


W=12, H=4, N=5:

d          Y
P          `
5          3
p$t$Ow7~kcNX
D          x
`          O
*          H
LB|QX1'.[:[F
p          p
x          (
2          ^
ic%KL^z:KI"^
C          p
(          7
7          h
TSj^E!tI&TN8
|          [
<          >
=          Q
ffl`^,tBHk?~
O          +
p          e
n          j


W=20, H=5, N=3:

G                  %
o                  y
%                  3
-                  7
U'F?Vml&rVch7{).fLDF
o                  }
U                  I
h                  y
a                  g
;W.58bl'.iHm\8v?bIn&
,                  U
N                  S
4                  c
5                  r
F3(R|<BP}C'$=}xK$F]^
'                  h
h                  u
x                  $
6                  5    

bạn có thể thêm phạm vi (số) cho các ký tự ascii không?
Rod

@Rod Ý kiến ​​hay. Xong
Luis Mendo

1
Những loại giới hạn thấp hơn về chất lượng ngẫu nhiên là có? Tôi giả sử bắt đầu từ một điểm ngẫu nhiên và tăng modulo (126-33) sẽ không đủ điều kiện vì có mối tương quan rõ ràng giữa các giá trị liền kề. Hay nó phải có khả năng tạo ra mọi trình tự có thể? (Vì vậy, một trình tạo cộng hưởng tuyến tính 8 bit sẽ không hoạt động, bởi vì một ký tự xác định duy nhất ký tự tiếp theo?)
Peter Cordes

@PeterCordes Không có vấn đề gì với việc có một số mối tương quan, miễn là mọi sự kết hợp có thể xảy ra. Cách tiếp cận mà bạn mô tả là, như bạn nói, không hợp lệ vì nó đưa ra sự phụ thuộc thống kê quá mạnh giữa các nhân vật ở các vị trí khác nhau, khiến một số kết hợp không thể thực hiện được
Luis Mendo

1
@PeterCordes Vâng, ý tôi là về mặt lý thuyết. Đừng lo lắng về sức mạnh của RNG; bạn có thể cho rằng RNG là lý tưởng. Có một số sự đồng thuận meta về điều đó. Tôi nghĩ rằng có một cái gì đó cụ thể hơn, nhưng tất cả những gì tôi có thể tìm thấy là cái nàycái này
Luis Mendo

Câu trả lời:


6

Thạch ,  24 23  22 byte

«þỊoU$ẋ⁵‘¤Ḋ×94X€€+32ỌY

Một chương trình đầy đủ lấy ba đối số W, H, Nvà in kết quả.

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

Làm sao?

Xây dựng mặt nạ mảng 2d của một nấc đơn và các phần dọc của nó bên dưới, lặp lại N+1thời gian và loại bỏ các nấc trên cùng sau đó đặt các ký tự hoặc khoảng trắng ngẫu nhiên tùy thuộc vào giá trị mặt nạ.

«þỊoU$ẋ⁵‘¤Ḋ×94X€€+32ỌY - Main link: W, H (N is third input / 5th command line argument)
 þ                     - outer product (build a table using):
«                      -  minimum
                       -  ...note: þ implicitly builds ranges of W and H prior
  Ị                    - insignificant? (abs(z)<=1) - yields a W by H 2-d array,
                       -   all zeros except the left and top edges which are 1s
     $                 - last two links as a monad:
    U                  -   upend (reverse each row)
   o                   -   or (vectorises) - giving us our |‾| shape of 1s
         ¤             - nilad followed by link(s) as a nilad:
       ⁵               -   5th command line argument, N
        ‘              -   increment -> N+1
      ẋ                - repeat list - giving us our ladder-mask plus a top rung)
          Ḋ            - dequeue - remove the top rung
            94         - literal ninety-four
           ×           - multiply (vectorises) - replace the 1s with 94s
              X€€      - random for €ach for €ach - 0 -> 0; 94 -> random integer in [1,94]
                  32   - literal thirty-two
                 +     - add (vectorises) - 0 -> 32; random integers now from [33,126]
                    Ọ  - character from ordinal (vectorises)
                     Y - join with newlines
                       - implicit print

34

Hoạt động ngôn ngữ kịch bản Flashpoint , 643 624 byte

f={l=["""","!","#","$","%","&","'","(",")","*","+",",","-",".","/","0","1","2","3","4","5","6","7","8","9",":",";","<","=",">","?","@","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","[","\","]","^","_","`","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","{","|","}","~"];t=_this;w=t select 0;r={l select random 92};v="";s=v;i=2;while{i<w}do{i=i+1;v=v+" "};p={i=1;while{i<t select 1}do{i=i+1;s=s+call r+v+call r+"\n"}};k=0;call p;while{k<t select 2}do{k=k+1;i=0;while{i<w}do{i=i+1;s=s+call r};s=s+"\n";call p};s}

Vô lý dài vì không có cách nào để tạo các ký tự từ mã ký tự.

Gọi với:

hint ([5, 3, 2] call f)

Đầu ra:

Các bậc thang là hỗn loạn thêm vì phông chữ không phải là đơn cách.

Chưa được kiểm soát:

f =
{
    l = ["""","!","#","$","%","&","'","(",")","*","+",",","-",".","/","0","1","2","3","4","5","6","7","8","9",":",";","<","=",">","?","@","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","[","\","]","^","_","`","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","{","|","}","~"];

    t = _this;
    w = t select 0;

    r =
    {
        l select random 92
    };

    v = "";
    s = v;

    i = 2;
    while {i < w} do 
    {
        i = i + 1;
        v = v + " "
    };

    p =
    {
        i = 1;
        while {i < t select 1} do 
        {
            i = i + 1;
            s = s + call r + v + call r + "\n"
        }
    };

    k = 0;
    call p;
    while {k < t select 2} do 
    {
        k = k + 1;

        i = 0;
        while {i < w} do
        {
            i = i + 1;
            s = s + call r
        };
        s = s + "\n";

        call p
    };

    s
}

Có vẻ như là "\n"công việc, "\xa3"để có được một cái gì đó như £không hoạt động? nếu bạn có thể sử dụng lối thoát unicode, bạn có thể cắt mảng đó của bạn.
Tschallacka

Làm thế nào tôi có thể tự chạy cái này? : D
Geeky I

22
Điều này trông giống như một kịch bản đã được viết và các khoảng trắng và dòng mới đã bị xóa. Có phải nó chỉ nhận được upvote vì hình ảnh của một cái thang hoặc tôi đã bỏ lỡ một số golf thông minh?
Jonathan Allan

@steadybox bạn có đang sử dụng ảnh chụp màn hình theo ngữ cảnh bây giờ sau khi tôi yêu cầu ảnh chụp màn hình không phải đồng cỏ cho câu hỏi đó xD không?
Bạch tuộc ma thuật Urn

@Tschallacka \nlà lối thoát duy nhất được công nhận. (Và ""bên trong dấu ngoặc kép để đại diện cho một ")
Steadybox

14

05AB1E , 29 byte

Đầu vào được thực hiện theo thứ tự N, H, W

>*GNUžQ¦©.RIÍFð®.R«X²Öè}®.RJ,

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

Giải trình

>*G                              # for N in [1 ... (N+1)*H)-1] do:
   NU                            # store N in variable X
     žQ                          # push a string of printable ascii
       ¦©                        # remove the first (space) and save a copy in register
         .R                      # pick a random character
           IÍF                   # W-2 times do:
              ð                  # push a space
               ®.R               # push a random ascii character
                  «              # concatenate
                   X²Ö           # push X % H == 0
                      è          # index into the string of <space><random_char> with this
                       }         # end inner loop
                        ®.R      # push a random ascii character
                           J,    # join everything to a string and print

Đây là một chút gian lận.
vdegenne

4
@ user544262772 tại sao vậy?
Jonathan Allan

bạn có thể giải thích điều này một chút không?
Mischa

@MischaBehrend: Chắc chắn, tôi đã thêm một lời giải thích ngay bây giờ.
Emigna

3
@ user544262772 có thể khá khó khăn để đưa ra một câu trả lời được đánh golf tốt bằng ngôn ngữ chơi gôn, tin tôi đi, chúng được thiết kế để chơi gôn, nhưng sử dụng chúng thường đòi hỏi một số suy nghĩ (trừ khi đó là "đây là một tích hợp thực hiện chính xác những gì bạn muốn ").
Jonathan Allan

13

C, 95 byte

f(w,h,n,i){++w;for(i=0;i++<w*~(h*~n);)putchar(i%w?~-i%w%(w-2)*((i/w+1)%h)?32:33+rand()%94:10);}

8

R , 138 129 111 98 93 byte

-13 byte nhờ Neal Fultz!

-1 byte nhờ Robin Ryder

function(W,H,N){m=matrix(intToUtf8(32+sample(94,W*(h=H*N+H-1),T),T),h)
m[-H*1:N,3:W-1]=" "
m}

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

Chức năng ẩn danh; trả về kết quả dưới dạng ma trận.

Nhờ câu hỏi Word Grids đó , tôi đã suy nghĩ về ma trận nhiều hơn bình thường. Tôi quan sát thấy các bậc thang nằm trong các hàng ma trận đó là bội số của chiều cao bước H(R là 1 chỉ mục) và các đường ray là cột đầu tiên và cuối cùng, 1W. Vì vậy, tôi tạo một ma trận gồm các ký tự ASCII ngẫu nhiên và thay thế các chữ cái không khớp với các tiêu chí đó bằng dấu cách và trả về ma trận. Liên kết TIO in nó ra độc đáo.

Neal Fultz đã đề xuất một chỉ mục khác cho các ký tự khoảng trắng, [-H*(1:N),3:W-1]thay thế tất cả các ký tự ngoại trừ các ký tự trong các hàng bội số của H: -H*(1:N)và không phải trên cạnh, 3:W-1<==> 2:(W-1).

R , 121 byte

function(W,H,N)for(i in 1:(H*N+H-1)){for(j in 1:W)cat("if"(!(i%%H&j-1&j-W),sample(intToUtf8(33:126,T),1)," "))
cat("\n")}

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

Một cải tiến so với cách tiếp cận dựa trên ma trận ban đầu mà tôi đã bắt đầu; đó là cùng một thuật toán nhưng forcác vòng lặp ngắn hơn so với việc xây dựng và in một ma trận (nhưng không phải là nếu tôi không in nó!)


m[-H*(1:N),3:W-1]=" "có vẻ ngắn hơn một chút - bạn luôn có thể thay thế thử nghiệm rowcolvới lát cắt 2 chiều.
Neal Fultz

@NealFultz wow, điều đó khá xuất sắc! Cảm ơn bạn!
Giuseppe

-1 byte bằng cách thay thế sample(33:126,...)bằng 32+sample(94,...).
Robin Ryder


6

Than , 34 32 byte

E…¹×⁺¹NN⪫EIζ⎇∧﹪ιIη﹪λ⁻Iζ¹ §⮌γ‽⁹⁴ω

Hãy thử trực tuyến!Lấy đầu vào theo thứ tự xấp xỉ N, H, W. Verbose ( Plus(InputNumber(), 1)hiện đang bị hỏng trên TIO). Giải trình:

E…¹×⁺¹NN

Bản đồ trên phạm vi 1..H*(N+1) . Điều này có nghĩa là các bậc thang xuất hiện khi ilà bội số của H.

Tham gia kết quả của:

EIζ

ánh xạ trên phạm vi ngầm 0..W:

⎇∧﹪ιIη﹪λ⁻Iζ¹ 

nếu cột không 0hoặcW-1 và hàng không phải là bội số Hthì xuất ra một khoảng trắng;

§⮌γ‽⁹⁴

mặt khác, lấy biến ký tự ASCII được xác định trước, đảo ngược nó (đặt khoảng trắng ở vị trí thứ 94) và in một ký tự ngẫu nhiên từ cái hiện là 94 đầu tiên (Bởi vì Slice hút.)

ω

Tham gia sử dụng chuỗi trống. Kết quả cuối cùng được in ngầm.


Tôi không chắc nó có hữu ích không nhưng bạn có thể vẽ thang rồi nhìn lén và ánh xạ qua bản in ngẫu nhiên tôi nghĩ không? EDIT Nó dường như bị phá vỡ. Úi.
ASCII-chỉ

Tôi sẽ cố gắng sửa nó (khá chắc chắn là nó đã hoạt động trước đó) nhưng tôi đã hơi bận nên có thể mất một lúc
ASCII - chỉ

@ ASCII - chỉ tôi cho rằng bạn đang nghĩ đến NθGH↓θ→N↑θ*‖O↓F⁻N¹C⁰θ¿EKA§⮌γ‽⁹⁴«? Vâng, tôi đã chia đôi và cam kết a0a6316phá vỡ nó.
Neil

@ Chỉ có ASCII Trên thực tế điều đó không hoàn toàn đúng, có một lỗi không liên quan ở Mapnơi nó được sử dụng not is_commandkhi nó có nghĩa is_command. Vì vậy, bạn phải viết NθGH↓θ→N↑θ*‖O↓F⁻N¹C⁰θUMKA§⮌γ‽⁹⁴nếu không có lỗi đó.
Neil

6

C (gcc) , 141 131 114 109 107 byte

Có thể chơi golf này xuống một chút ...

i,j,c;f(w,h,n){for(i=1;i<h*n+h;i+=j==w)printf(i%h?i++,j=0,"%c%*c\n":"%c",++j^w?c^8:10,w-2,c=33+rand()%94);}

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


chúng ta có thể chỉnh sửa i=1trong tuyên bố toàn cầu?
Mukul Kumar

6

Perl 6 , 76 73 byte

->\h,\n,\w{map {chrs (roll(w,1..94)Z*1,|($_%%h xx w-2),1)X+32},1..^h*n+h}

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

Lấy (h, n, w) làm đối số. Trả về một danh sách các chuỗi.

Giải trình:

-> \h, \n, \w {  # Block taking arguments h, n, w
    map {
        # String from codepoints
        chrs
             # Generate w random numbers between 1 and 94
             (roll(w, 1..94)
              # Set inner numbers on non-rungs to zero
              Z* 1, |($_%%h xx w-2), 1)
             # Add 32 to numbers
             X+ 32
    }
    # Map h*n+h-1 row numbers (1-indexed)
    1..^h*n+h
}

Thay thế 73 byter bằng cách sử dụng xx++$thay vì map. Có lẽ bạn có thể tìm thấy một nơi để chơi golf bất kỳ byte nào?
Jo King

5

PowerShell , 132 124 byte

param($w,$h,$n)-join([char[]]((($a=('#'+' '*($w-2)+"#`n")*--$h)+'#'*$w+"`n")*$n+$a)|%{($_,[char](33..126|Random))[$_-eq35]})

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

Chúng tôi xây dựng một thang gồm chỉ #đầu tiên ( ví dụ ), sau đó lặp |%{...}qua từng nhân vật và if-equal tới 35, chúng tôi kéo ra một mới Randomnhân vật từ phạm vi thích hợp. Nếu không, chúng tôi đầu ra (nghĩa là một không gian hoặc dòng mới).


5

JavaScript (ES6), 117 115 byte

Một hàm đệ quy xây dựng ký tự đầu ra theo ký tự.

"Hãy nhìn Ma, không có nguồn cấp dữ liệu theo nghĩa đen!"

(w,h,n)=>(g=x=>y<h*n+h-1?String.fromCharCode(x++<w?x%w>1&&-~y%h?32:Math.random()*94+33|0:10)+g(x>w?!++y:x):'')(y=0)

Bản giới thiệu


Chết tiệt! Tôi đang trong quá trình đánh golf khi tôi thấy điều này. :\ Bạn lại thắng! : p
Xù xì

Tôi đã hoàn thành việc đánh gôn của mình (bây giờ) - Tôi đã vạch ra đường di chuyển tất cả những con chim nhạn bên trong String.fromCharCode, vì tôi không thể thành thật nói rằng tôi đã tự mình nghĩ ra điều đó sau khi nhìn thấy điều này. Hãy cho tôi biết nếu bạn cảm thấy bây giờ của tôi quá giống với bạn.
Xù xì

@Shaggy Đừng lo! (Trên thực tế, tôi chỉ thấy câu trả lời của bạn sau khi đăng bài của tôi. Nếu tôi đã thấy nó sớm hơn, có lẽ tôi đã bỏ cuộc.)
Arnauld

1
Ah, đó là bản chất của trò chơi! :) Kết hợp các giải pháp của chúng tôi cung cấp cho 113 byte , bằng cách này
Shaggy

5

Python 2 , 142 byte

lambda w,h,n,e=lambda:chr(randint(33,126)):[e()+[eval(("e()+"*(w-2))[:-1])," "*(w-2)][-~i%h>0]+e()for i in range(h*-~n-1)]
from random import*

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

Lưu byte nhờ vào ovs!


@LuisMendo Tôi nghĩ rằng tôi đã sửa nó ngay bây giờ.
Ông Xcoder

@LuisMendo Đó là lỗi của tôi vì đã không kiểm tra cẩn thận.
Ông Xcoder


@ovs Cảm ơn! Bạn đã quên một cái 1ở phía trước mặc dù> _>
Ông Xcoder



3

SOGL V0.12 , 32 31 byte

 ~ΔkψR
I{e{R}¶bH{Re⁾⌡@R¶}}¹∑e⌡k

Hãy thử nó ở đây!

Nhập theo thứ tự N, W, H.

Giải trình:

 ~ΔkψR

     R  a function named "R", pushes a random character:
 ~       push "~"
  Δ      get the charasters from " " to "~"
   k     remove the 1st character
    ψ    choose a random character from that

I{e{R}¶bH{Re⁾⌡@R¶}}¹∑e⌡k  main program

I                         increase the 1st input - N
 {                }       N times do
  e                         push the variable e, which is here initialised to the next input - W
   { }                      E times do
    R                         execute R
      ¶                     push a newline
       bH                   push b-1, where b is initialised to the next input - H
         {       }          B-1 times do
          R                   execute R
           e⁾                 push e-2 aka width-2
             ⌡@               push that many spaces
               R              execute R
                ¶             push a newline
                   ¹∑     join the stack together
                     e⌡k  remove the first width characters

18 byte không có ký tự ngẫu nhiên: /


3

Java 8, 203 188 168 133 132 130 128 126 byte

W->H->N->{for(double i=0,j,q;++i<H*N+H;)for(j=W,q=10;j-->=0;q=i%H*j<1|j>W-2?33+Math.random()*94:32)System.out.print((char)q);}

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


133 byte:W->H->N->{for(int i=0,j;i++<H*N+H-1;){char c=10;for(j=W;j-->0;c=i%H<1|j>W-2|j<2?(char)(Math.random()*94+33):32)System.out.print(c);}}
Nevay

Bạn hiện đang in kết quả cho W-1, vòng lặp bên trong phải thực hiện một bước lặp bổ sung ( >=0+1 byte).
Nevay

1
132 byte:W->H->N->{for(int i=0,j;i++<H*N+H-1;){char c=10;for(j=W;j-->=0;c=i%H*j<1|j>W-2?(char)(Math.random()*94+33):32)System.out.print(c);}}
Nevay

2
;++i<H*N+H;: -2 byte.
Olivier Grégoire

3

Haskell , 226 220 211 190 byte

import System.Random
a=mapM id
b=(putStr.unlines=<<).a
c=randomRIO('!','~')
r w=a$c<$[1..w]
s w=a$c:(return ' '<$[3..w])++[c]
(w#h)0=b$s w<$[2..h]
(w#h)n=do{b$(s w<$[2..h])++[r w];(w#h)$n-1}

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

Đã lưu 9 byte nhờ Laikoni

Đã lưu 21 byte nhờ vào wchargein

Nên chơi golf ( b$(s w)<$[2..h]b$((s w)<$[2..h])++[r w]). Tôi không cảm thấy thoải mái với IO và chơi gôn.


Bạn có thể sử dụng ký hiệu infix cho t w h n= ...: (w#h)n= .... purecó thể được sử dụng thay thế return. Bạn có thể thả dấu ngoặc đơn xung quanh (d ' ')<$(s w)<$.
Laikoni

@Laikoni Tôi sẽ không quên ký hiệu infix vào lần tới! Cảm ơn.
jferard

1
Lưu một loạt các byte với c=randomRIO('!','~'), cũng cho phép bạn nội tuyến d=return. Ngoài ra, mapM idlà một byte ngắn hơn sequence.
wchargein

1
@wchargein Cảm ơn. Tôi đã học được một cái gì đó ngày hôm nay!
jferard

2

JavaScript (ES6), 144 byte

(w,h,n)=>Array(n+1).fill(("#".padEnd(w-1)+`#
`).repeat(h-1)).join("#".repeat(w)+`
`).replace(/#/g,_=>String.fromCharCode(33+Math.random()*94|0))

Tạo các bậc thang trong số các #ký tự sau đó thay thế từng cái bằng một char ASCII ngẫu nhiên.

Kiểm tra đoạn trích


String.fromCharCodeMath.randomtrong một giải pháp - tại sao JavaScript ghét chúng ta?! Đến với điều này cho 137 byte, rất giống với của bạn, chỉ cần không có mảng. Bây giờ tôi tự hỏi nếu một giải pháp đệ quy có thể vẫn còn ngắn hơn; sẽ điều tra sau.
Xù xì


2

JavaScript (ES6), 129 117 byte

Thật không may, trong khi tôi đang chơi gôn, Arnauld đã đánh bại tôi với một giải pháp tương tự nhưng ngắn hơn . Bằng cách kết hợp 2 giải pháp của chúng tôi, đây có thể là 113 byte

Bao gồm một dòng mới.

(w,h,n)=>(g=c=>l?(c++<w?c%w>1&&l%h?` `:String.fromCharCode(94*Math.random()+33|0):`
`)+g(c>w?!--l:c):``)(0,l=h*++n-1)

Thử nó

o.innerText=(f=
(w,h,n)=>(g=c=>l?(c++<w?c%w>1&&l%h?` `:String.fromCharCode(94*Math.random()+33|0):`
`)+g(c>w?!--l:c):``)(0,l=h*++n-1)
)(i.value=5,j.value=3,k.value=2);oninput=_=>o.innerText=f(+i.value,+j.value,+k.value)
label,input{font-family:sans-serif;font-size:14px;height:20px;line-height:20px;vertical-align:middle}input{margin:0 5px 0 0;padding:0 0 0 5px;width:100px;}
<label for=i>W: </label><input id=i min=3 type=number><label for=j>H: </label><input id=j min=2 type=number><label for=k>N: </label><input id=k min=2 type=number><pre id=o>



1

QBIC , 76 byte

[:*:+b-1|G=chr$(_r33,126|)~a%b\[:-2|G=G+@ `]][e|G=G+chr$(_r33,126|)]?_sG,1,e

Giải trình

[                       FOR a = 1 TO
 :                         input 1 (Height, now in var b)
  *                        times
   :                       input 2 (# of rungs, now in var c)
    +b-1|                  plus one bottom rung without crossbar
G=chr$(_r33,126|)       Assign to G a random char (_r is the RAND() function, chr$() is BASIC's num-to-char)
~a%b|                   IF we are not at a crossbar (the modulo returns anything but 0), 
  [:-2|G=G+@ `            add to G x spaces, where x is width (input 3, now 'e') - 2
                        Note that G is now either 'X' or 'X   '  (for rnd char X and W=5)
]]                      Close the spacing FOR, close the IF 
[e|                     FOR f = 1 to width
  G=G+chr$(_r33,126|)]     Append to G a rnd char
                        G is now either 'XXXXXX'  or 'X   XXXXX' (for rnd char X and W=5)
?_sG,1,e                PRINT the first w characters of G, and on to the next line

Chạy mẫu

Command line: 3 2 5
N   F
M   `
Bj#=y
!   (
S   N
q(.Ho
%   7
g   ,

1

MATL , 63 50 byte

-13 byte nhờ Luis Mendo

Q*qXJ*6Y2HY)wT3$ZrJ3G3$eJ3G&Ol5LZ(J:HG\~3GTX"!+g*c

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

Tôi vẫn chưa quen với việc chơi golf trong MATL (và tôi không giỏi về MATLAB cho vấn đề đó), vì vậy tôi biết điều này có lẽ không gần với tối ưu. Lời khuyên được chào đón. Đưa đầu vào theo thứ tựN,H,W .

Ở đây chúng tôi đi:

Q*qXJ                     # compute H*(N+1)-1, store as J
     *                    # multiply by W
      6Y2HY)              # push printable ASCII
            wT3$Zr        # sample uniformly with replacement
                  J3G3$e  # reshape to make a matrix of the appropriate shape.

Bây giờ chúng ta có một ma trận char ngẫu nhiên.

J3G                       # push J,W
   &O                     # zero matrix, J x W
     l5LZ(                # assign 1 to first and last columns

Bây giờ cũng có một ma trận logic cho đường ray.

J:                        # push J, range, so 1...J
  HG                      # take second input (H)
    \~                    # mod and bool negate (so it's 1 for rows of multiples of H)
      3GTX"!              # repmat and transpose so we have 1's for rungs

Bây giờ chúng ta có 3 ma trận trên ngăn xếp:

  • Top: 0 cho non-rung, 1 nếu không
  • Giữa: 0 cho phi đường sắt, 1 nếu không
  • Dưới cùng: ký tự ngẫu nhiên, -20

Vì vậy, chúng tôi làm như sau:

+                         # add the top two matrices.
 g                        # convert to logical so 0->0, nonzero->1
   *                      # elementwise multiply
    c                     # convert to char, implicit output (0 -> space).

Dưới đây là một vài lời khuyên nhanh chóng: X"3$theo mặc định. 6Y2có thể có ích thay vì 13:106... 20+. ~~g. J3G&Ol5LZ(có thể được sử dụng thay vì1F3G2-Y"h1hJT3$X"
Luis Mendo

@LuisMendo Ah, tôi đã không hoàn thành nó thông qua tất cả các tài liệu hoặc tôi sẽ phát hiện ra điều đó X". Trong đó đỉnh cuối cùng, 5L[1 0]nhưng tôi không chắc chắn làm thế nào mà được sử dụng kết hợp với Z(- Tôi nhận được rằng nó gán 1cho cột đầu tiên và cuối cùng nhưng tôi không nhận được như thế nào 5LZ(hoàn thành đó. Có lẽ tôi sẽ ping bạn trong MATL CHATL sau này về điều này vì vậy bây giờ đừng lo lắng về điều đó.
Giuseppe

1
Lập chỉ mục là mô-đun, do đó, 0giống như "kết thúc". Z(gán cho các cột. Tất nhiên, hãy thoải mái ping tôi trong trò chuyện!
Luis Mendo

1

Powershell, 102 byte

param($w,$h,$n)1..(++$n*$h-1)|%{$l=$_%$h
-join(1..$w|%{[char](32,(33..126|Random))[!$l-or$_-in1,$w]})}

Kịch bản kiểm tra ít chơi gôn hơn:

$f = {

param($w,$h,$n)
1..(++$n*$h-1)|%{       # for each lines of the ladder
    $l=$_%$h            # line number in a step
    -join(1..$w|%{      # make a line
        [char](32,(33..126|Random))[!$l-or$_-in1,$w]
    })                  # a random character if the line number in a step is a rung line or char position is 1 or width
                        # otherwise a space
}

}

&$f 5 3 2
&$f 3 2 2
&$f 12 4 5
&$f 20 5 3

Đầu ra:

0   {
H   S
']UxR
G   ]
3   t
q^R8O
q   y
t   J
U h
YQZ
_ i
3#D
I #
=          m
&          <
]          6
8nmuyw2'Y7%+
o          l
;          !
D          M
Fn[zGfT";RYt
@          B
$          e
z          @
@J[1|:-IS~y<
(          L
:          [
|          q
zBow0T0FnY8)
/          *
e          B
R          p
9{d2(RacBdRj
u          ~
`          l
J          h
v                  t
T                  -
v                  H
'                  Y
IS7{bx2&k@u7]o}>[Vq?
F                  U
?                  U
|                  Q
}                  T
:wv1wEfc6cS;430sigF|
<                  L
:                  }
*                  `
H                  =
L8k5Q/DQ=0XIUujK|c6|
j                  =
!                  p
V                  :
#                  w

1

Ruby , 71 byte

EDIT: Rất tiếc tôi nghĩ rằng đây là một thử thách mới vì lần chỉnh sửa gần đây để sửa lỗi đánh máy lol. Tôi vẫn để lại điều này mặc dù chưa có câu trả lời cho Ruby.

->w,h,n{(1..h*-~n-1).map{|i|[*?!..?~].sample(x=i%h>0?2:w)*(' '*(w-x))}}

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

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.