混沌是ASCII阶梯


43

你一无所知 我为 混沌是梯子做的事情是电视连续剧 “权力的游戏中令人难忘的台词。

这项挑战的目的是从ASCII艺术的混乱中构建阶梯。

挑战

输入项

  • 梯子宽度W >= 3(整数)
  • 台阶高度H >= 2(整数)
  • 梯级数N >= 2(整数)。

输出量

带有水平横档垂直横档的梯子,全部为1个字符宽。梯子宽度(W)包括两个轨道,梯级高度(H)包括相应的梯级。

所有梯级,包括最上层和最下层,都将在其H-1正上方和正下方具有一条垂直轨道。该示例将使这一点更加清楚。

梯子将作出的可印刷,非空白ASCII字符,即,从包含的范围!(代码点33)到~(码点126)。实际的字符将被选择随机。给定输入,每个字符的随机选择都必须具有非零概率。除此之外,概率分布是任意的。

允许水平或垂直的前导或尾随空白

给定W=5, H=3, N=2,一种可能的输出如下。

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

请注意,总高度为H*(N+1)-1,因为有N梯级和N+1垂直截面。

附加规则

  • 输入方式和格式像往常一样灵活。例如,您可以按任何顺序输入三个数字,或包含它们的数组。

  • 输出可以通过STDOUT或函数返回的参数进行。在这种情况下,它可以是带有换行符的字符串,2D字符数组或字符串数​​组。

  • 可以提供程序或功能

  • 禁止出现标准漏洞

  • 以字节为单位的最短代码获胜。

测试用例

对于每个W, H, N显示可能的输出。

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    

可以为ASCII字符添加(数字)范围吗?

@Rod好主意。完成
Luis Mendo

1
对于随机性质量有什么样的下限?我假设从一个随机点开始,并且由于相邻值之间的明显相关性,所以以模(126-33)为增量将不合格。还是必须能够产生所有可能的序列?(所以一个8位线性同余生成器将不起作用,因为一个字符唯一地确定了下一个字符?)
Peter Cordes

@PeterCordes有与不具有问题的一些相关性,只要能发生每个可能的组合。正如您所说,您描述的方法是无效的,因为它在不同位置的字符之间引入了过于强烈的统计依赖性,从而使某些组合不可能实现
Luis Mendo

1
@PeterCordes是的,我的意思是理论上的。不用担心RNG的强度;您可以假设RNG是理想的。关于此有一些元共识。我想有更具体的东西,但我能找到的这个这个
路易斯Mendo

Answers:


6

果冻 24 23  22 字节

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

一个完整的程序走的是三个参数WHN和打印结果。

在线尝试!

怎么样?

为单个梯级及其下面的垂直部分构建一个二维数组蒙版,重复其N+1次数并删除顶部梯级,然后根据蒙版值放置随机字符或空格。

«þỊ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

操作Flashpoint脚本语言,643 624字节

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}

荒谬的长,因为无法从字符代码中创建字符。

致电:

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

输出:

由于字体不是等宽的,因此梯形图特别混乱。

展开:

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
}

看起来像是 "\n"行得通,"\xa3"获得类似的东西£行不通吗?如果您可以使用Unicode转义符,则可以修剪该数组。
Tschallacka

我自己该如何运行?:D
Geeky I'9

22
这看起来就像是编写了脚本并删除了空格和换行符。只是因为梯子的图像而获得投票权,还是我错过了一些聪明的高尔夫运动?
乔纳森·艾伦,

@steadybox在我针对一个问题xD请求非草地屏幕截图之后,现在正在使用上下文屏幕截图吗?
Magic Octopus Urn'Sep

@Tschallacka \n是唯一被识别的转义符。(并且""内部引号代表一个"
Steadybox

14

05AB1E,29个字节

按顺序输入 N, H, W

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

在线尝试!

说明

>*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

这有点作弊。
vdegenne

4
@ user544262772为什么会这样?
乔纳森·艾伦

你可以解释一下吗?
Mischa

@MischaBehrend:当然,我现在添加了一个解释。
Emigna

3
@ user544262772用高尔夫球语言做出一个很好的高尔夫球答案可能是非常具有挑战性的,相信我,它们是为高尔夫球而设计的,但是使用它们通常需要一些思考(除非只是“这里有一个内置功能可以完全满足您的需求) ”)。
乔纳森·艾伦

13

C,95个字节

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个字节

-13字节感谢Neal Fultz!

-1字节感谢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(R为1索引),并且滑轨是第一列和最后一列,1以及W。因此,我创建了一个随机ASCII字符矩阵,并用空格替换那些不符合这些条件的字母,然后返回该矩阵。TIO链接可以很好地打印出来。

尼尔·福尔茨(Neal Fultz)建议对空格字符使用不同的索引,该索引[-H*(1:N),3:W-1]将替换所有字符,除了以H:的倍数组成的行中的字符外,-H*(1:N)而不是在边缘3:W-1<==>上2:(W-1)

R,121字节

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")}

在线尝试!

对我最初基于矩阵的原始方法的改进;这是相同的算法,但是for循环比构造和打印矩阵要短(但如果我不打印矩阵,则不会!)


m[-H*(1:N),3:W-1]=" "似乎短了一点-你可以随时更换测试rowcol用2-d片。
Neal Fultz

@NealFultz哇,那太好了!谢谢!
朱塞佩

替换sample(33:126,...)为-1字节32+sample(94,...)
罗宾·赖德


6

木炭34 32字节

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

在线尝试!输入顺序为N,H,W。详细近似Plus(InputNumber(), 1)当前在TIO上无效)。说明:

E…¹×⁺¹NN

映射范围1..H*(N+1)。这意味着,当i的倍数为时,出现梯级H

加入以下结果:

EIζ

隐式范围内的映射0..W

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

如果列不是0W-1并且行不是的倍数,H则输出一个空格;

§⮌γ‽⁹⁴

否则,采用预定义的ASCII字符变量,将其取反(将空格放在第94位),然后从现在的第一个94开始打印随机字符。(因为Slice很烂。)

ω

使用空字符串加入。最终结果将隐式打印。


不知道这是否有帮助,但是您可以画出梯子,然后将其显示为peekall并映射到我认为可以打印的随机图像上?编辑似乎已损坏。哎呀。
ASCII码,仅ASCII,2009年

我将尝试对其进行修复(确信之前已在运行),但是我有点忙,所以可能要花点时间
ASCII码,仅适用于2009年

仅@ASCII我假设您正在考虑NθGH↓θ→N↑θ*‖O↓F⁻N¹C⁰θ¿EKA§⮌γ‽⁹⁴«?好吧,我一分为二并且犯a0a6316了错。
尼尔于2009年

仅限@ASCII实际上,这不是很正确,在Map使用not is_command时它所在的位置存在一个不相关的错误is_command。因此,NθGH↓θ→N↑θ*‖O↓F⁻N¹C⁰θUMKA§⮌γ‽⁹⁴如果不是那个bug,您应该去写。
尼尔于2009年


6

Perl 6的76 73个字节

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

在线尝试!

以(h,n,w)作为参数。返回字符串列表。

说明:

-> \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
}

备选方案73使用xx++$代替map。也许您可以找到一个打高尔夫球的地方?
Jo King

5

PowerShell中132个 124字节

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

在线尝试!

我们构造了一个唯一的阶梯组成的#第一(例如),然后依次|%{...}通过每个字符和if它的-eqUAL来35,我们拿出一个新Random的合适的范围内的字符。否则,我们输出(即,空格或换行符)。


5

的JavaScript(ES6),117个 115字节

一个递归函数,逐个字符地构建输出。

“瞧,妈,没有换行!”

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

演示版


该死的!我是在这个过程中打高尔夫球雷倒,当我看到这一点。:\ 你又赢了!:p
Shaggy

我暂时结束了我的高尔夫运动-我划定了一条线,在其中移动所有三元组String.fromCharCode,因为我不能坦白地说,看到这一点后我会自己提出。让我知道您是否觉得我的现在和您的相似了。
毛茸茸的

@Shaggy不用担心!(实际上,我只是在发布我的信息后才看到您的答案。如果我早些看到它,我可能会放弃。)
Arnauld

1
啊,这就是游戏的本质!:)结合我们的解决方案,可以得到113个字节,顺便说一下
Shaggy




3

SOGL V0.1232 31 个字节

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

在这里尝试!

输入顺序为N,W,H。

说明:

 ~Δ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个字节,不包含随机字符:/


3

爪哇8,203 188 168 133 132个 130 128 126字节

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);}

在线尝试!


133个字节: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

您当前正在打印的结果W-1,内部循环必须执行一次额外的迭代(>=0+1字节)。
Nevay

1
132个字节: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个字节。
奥利维尔·格雷戈尔

3

Haskell中226个 220 211 190字节

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}

在线尝试!

感谢Laikoni,节省了9个字节

wchargin节省了21个字节

应该是可打高尔夫球的(b$(s w)<$[2..h]b$((s w)<$[2..h])++[r w])。我对IO和打高尔夫球并不满意。


您可以将infix表示法用于t w h n= ...(w#h)n= ...pure可以代替return。您可以在(d ' ')<$和周围加上括号(s w)<$
Laikoni

@Laikoni我下次不会忘记infix符号!谢谢。
jferard

1
使用节省一堆字节c=randomRIO('!','~'),这也可以使您内联d=return。此外,mapM id比短一个字节sequence
wchargin

1
@wchargin谢谢。我今天学到了一些东西!
jferard

2

JavaScript(ES6),144个字节

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

#字符创建梯形图,然后用随机的ASCII字符替换每个字符。

测试片段


String.fromCharCodeMath.random在一个解决方案-为什么JavaScript的恨我们?有了这个 137个字节,这与您的字节非常相似,只是没有数组。我现在想知道递归解决方案是否还会缩短?待会再调查。
长毛


2

的JavaScript(ES6),129个 117字节

不幸的是,在我打高尔夫球的过程中,阿尔诺(Arnauld)用类似但更短的解决方案击败了我。结合我们的2个解决方案,这可以是113个字节

包括结尾的换行符。

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

试试吧

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个字节

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

说明

[                       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

样品运行

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

1

MATL63 50字节

-13字节感谢Luis Mendo

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

在线尝试!

我仍然不擅长使用MATL打高尔夫球(而且我在MATLAB方面也不是很擅长),所以我知道这可能不是最佳选择。欢迎小费。按顺序接受输入N,H,W

开始了:

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.

现在,我们有了一个随机字符矩阵。

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

现在,铁轨也有了逻辑矩阵。

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

现在,我们在堆栈上有3个矩阵:

  • 顶部:非梯级0,否则1
  • 中:非铁路为0,否则为1
  • 底部:随机字符,-20

因此,我们执行以下操作:

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

这里有几个小秘诀:X"就是3$默认。6Y2可能比13:106... 更方便20+~~gJ3G&Ol5LZ(可以代替1F3G2-Y"h1hJT3$X"
Luis Mendo

@LuisMendo啊,我不是通过所有文档都做到这一点,否则我会发现的X"。在最后一个技巧中,5L是,[1 0]但是我不确定如何将其与Z(- 一起使用-我知道它是分配1给第一列和最后一列的,但是我不知道如何5LZ(实现这一点。稍后,我可能会在MATL CHATL中对您执行ping操作,因此现在不必担心。
朱塞佩

1
索引是模块化的,因此0与“ end”相同。Z(分配给列。当然,可以在聊天中对我进行ping操作!
Luis Mendo

1

Powershell,102字节

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

少打高尔夫的测试脚本:

$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

输出:

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

红宝石,71个字节

编辑:糟糕,我认为这是一个新的挑战,因为最近进行了修改,以解决错字。不过,我仍将其保留,因为还没有Ruby的答案。

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

在线尝试!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.