ボウルにアルファベットのスープを入れます


24

私たちは、ように見える決して取得しない疲れたアルファベット関連の課題の...


レシピ

与えられた

  • 文字列S、および
  • 2つの正の整数MN

文字とアルファベットスープ製造S占有ランダムな位置長方形のボウルサイズのM× Nフレームボウルのリムを表現するために、非アルファベット、非空白文字です。

文字で使用されていない位置はスペースとして表示する必要があります。以下例を参照してください。

追加規則

  • サイズM× Nは、ボウルの内部を指します。リムを含むサイズはM+2× N+2です。
  • からの各キャラクターは、ボウルの異なる位置に一度S表示されます。つまり、ある文字が別の文字を上書きすることはできません。
  • S 重複する可能性があります。たとえばS、が文字列の'abcc'場合、スープにはone a、one b、およびtwo c(すべて異なる位置にある)が含まれている必要があります。
  • 入力は満足さ制限を M >= 1N >= 11 <= length(S) <= M*N
  • ボウルの縁は、アルファベット以外、スペース以外の任意の文字で、プログラムの実行と入力値全体で一貫しています。
  • ボウル内の文字の位置はランダムであるため、同じ入力でプログラムを実行するたびに結果が異なる場合があります。
  • 入力が与えられると、文字位置のすべての可能なセットはゼロ以外の確率を持つ必要があります。これはプログラムのいくつかの実現からはチェックできないため、コードがこれをどのように実現するかを説明してください。
  • 先頭または末尾の空白リムの周りには許可されています。
  • S大文字のみが含まれます。希望する場合は、小文字のみを選択できます。
  • 入出力は通常どおり柔軟です。たとえば、出力は、改行を含む文字列、2D文字配列、または行のリストです。
  • すべてのプログラミング言語プログラムまたは機能を使用できます標準的な抜け穴は禁止されています。
  • バイト単位の最短コードが優先されます。

入力はとして表示されます。S, [M N]ここでMは、行N数と列数です。キャラクター#はリムに使用されます。

'O', [1 1]:

###
#O#
###

'HEY', [1 3]:

#####
#YHE#
#####


'HELLO', [4 11]:

#############
#  O        #
#         H #
#    LE     #
#   L       #
#############


'ADVNJSGHETILMVXERTYIOJKCVNCSF', [8 12]:

##############
#K  V  L   S #
# A   V  X H #
#T    M C    #
# I       O N#
#  YC        #
# G  I   R SE#
#   J      F #
#JT  D  V EN #
##############


'OOOOOOOOOOXXXXX', [13 31]:

#################################
#    X                          #
#                O              #
#                               #
#                  X            #
#                        O      #
#             X           O     #
#      O                        #
#         X                     #
#                        O      #
#       X                       #
#                    O          #
#  O      O      O              #
#                             O #
#################################


'ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ', [11 41]

###########################################
#                                       JU#
#     Q         C M    G     R T U Y  H   #
#  KI          E   H    M   YO            #
#      V BW        I    JC                #
#     SV           D     P   B          U #
#           A     F    RF   J  KP E       #
#            E   N      TH        Z       #
#    N  BM  O     Q   I        AS N  WX   #
#   S     O  K       G L       P       Q  #
#Z     L T         R   L       A      F DD#
#      V   Y           WX   C       G XZ  #
###########################################


「ボウル内の文字の位置はランダムです[...]」<- ランダムにすることできますか、またはランダムにする必要ありますか?また、すべての行で常に同じ数の文字を使用できますか?
イスマエルミゲル

@IsmaelMiguel マスト。そして、すべての構成は、発生する可能性がゼロ以外である必要があります(チャレンジで述べられています)。そのため、常に同じ長さのアプローチを排除しています
ルイスメンドー

リムはプログラムの実行と入力値全体で一貫性がありますが、複数の非文字を使用でき|+-ますか?
アダム

@AdámHm私はノーと言うつもりです、それはあまりにも大きな変化です
ルイス・メンド

回答:


13

05AB1E 20 18 16 15 14 バイト

*j.rS²ô2Føε8.ø

高さ、幅、文字列の順に3つの入力を受け取ります。文字の2Dリストとして出力します。境界線として
使用8しますが、任意の数字を使用できます。

@Grimyのおかげで-1バイト。

オンラインそれを試してみたり、すべてのテストケースを確認してください。(TIOは}}J»結果をきれいに印刷するためにフッターに含まれています。代わりに実際の出力2D文字リストを見るためにそれを削除してください。)

説明:

*               # Multiply the (implicit) width and height inputs
 j              # Pad the (implicit) input-string with up to that amount of leading spaces,
                # so the total string-length is equal to that value
  .r            # Shuffle the characters in the string
    S           # Convert the string to a list of characters
                # (edge-case for the zip below with strings of size 1 with 1x1 dimensions)
     ²          # Push the width input again
      ô         # Split the list of characters into parts of that size
       2F       # Loop 2 times:
         ø      #  Zip/transpose the 2D list; swapping rows/columns
          ε     #  Inner map over each line:
           8.ø  #   And surround this line-list with a leading/trailing "8"
                # (after the loop, the result is output implicitly)

1
@LuisMendo私は実際に3分前に挑戦を言っただけです。;)それは非常に簡単な実装です。ここから下にゴルフしてみます。
ケビンクルーッセン

1
とてもいい、私は考えていませんでした*j!ここだレガシーのための13、または醜い14現代(出力2次元文字配列)のために。
グリミー

1
@Grimy入力1,1,"O"では13バイトが失敗するようですので、レガシーでも14バイトでなければならないと思います。-1をありがとう。
ケビンクルーッセン

7

APL(Dyalog Unicode)、25 バイトSBCS

'#',∘⌽∘⍉⍣4{⍵⍴⊃¨↓∘⍺¨?⍨×/⍵}

オンラインでお試しください!

-22 @ngnに感謝、-7に@ngnと@Adámに感謝

説明:

'#',∘⌽∘⍉⍣4{⍵⍴⊃¨↓∘⍺¨?⍨×/⍵}
          {            ⍵}  Function that generates the content
                            argument:  (width and height),  (string)
                     ×/    get the product
                   ?⍨      For each randomized elements
               ↓∘⍺¨        take the character in 
           ⍵⍴⊃¨            turn it back into a matrix of shape 
      4                 Then, 4 times, do these 3 things:
'#',                       - prepend a # to the axis
                          - reverse the columns
                          - swap columns and lines

APL(Dyalog Extended)、21 バイトSBCS

リムの角度は異なるキャラクターです

{⌂disp⊂⍵⍴⊃¨↓∘⍺¨?⍨×/⍵}

オンラインでお試しください!

dfnを使用してボックスを表示します。


29:'#',∘⌽∘⍉⍣4⊢⍴∘(?⍨∘≢⊃¨⊂)↑⍨∘(×/) オンラインで試してみてください!
アダム

28:({'#',∘⌽∘⍉⍣4⊢⍵⍴⍺\⍨(≢⍺)>?⍨×/⍵}またはifの代わりに)>⎕io=1
ngn

実際には、27:'#',∘⌽∘⍉⍣4{⍵⍴⍺\⍨(≢⍺)>?⍨×/⍵}
ngn

3
25:'#',∘⌽∘⍉⍣4{⍵⍴⊃¨↓∘⍺¨?⍨×/⍵}
ngn


6

Python 3、110バイト

lambda s,m,n,r=['#']:[r+(n*r+[i for i,j in{*zip(s+m*n*' ',range(m*n))}]+n*r)[k*n:-~k*n]+r for k in range(m+2)]

オンラインでお試しください!

set内包表記を使用してランダム化し、2D文字配列を返します。


ランダム化するためのセット内包表記の素晴らしい使用。+1。ただし、コードは関数の名前「f」に依存しています。したがって、ラムダソリューションは有効ではないと思います...
16

1
@agtoeverありがとう!この関数は再帰的ではないため、匿名にすることができます。あなたはそのf'{s:{m*n}}'部分に言及していますか?それはフォーマットされた文字列の構文であるため、偶然にもf
Jitse

3
このコードは、いくつかの点でPEP 8に違反しているようです。
クリストファーオルソン

1
@ Christofer-Ohlsson絶対に!
Jitse

2
@ChristoferOhlssonコードゴルフの世界へようこそ、ハハ。;)コメント/ドキュメントは一切ありません。(不要な)スペース/改行のない単一文字の変数/メソッド。潜在的に何百ものコンパイラ警告が無視されます。O(log(N))からO(N ^ N)へのパフォーマンスの向上。など。1バイトでも保存できる場合は、コードゴルフに適しています。;)
Kevin Cruijssen

5

Bash + coreutils、139 125文字

r=`printf %$3s@@|tr \  @`
echo $r
printf %$[$2*$3]s $1|fold -1|shuf|tr -d \\n|fold -$3|paste -d@ <(:) - <(:)|head -$2
echo $r

サンプル実行:

bash-5.0$ bash soup.sh HELLO 4 11
@@@@@@@@@@@@@
@  H        @
@      OE   @
@    L      @
@          L@
@@@@@@@@@@@@@

オンラインでお試しください!

Bash + coreutils +ボックス、97文字

printf %$[$2*$3]s $1|fold -1|shuf|tr -d \\n|fold -$3|boxes -dsimple -s$[$3+2]x$[$2+2] -pa0 -itext

サンプル実行:

bash-5.0$ set -- HELLO 4 11

bash-5.0$ printf %$[$2*$3]s $1|fold -1|shuf|tr -d \\n|fold -$3|boxes -dsimple -s$[$3+2]x$[$2+2] -pa0 -itext
*************
* O   L  E  *
*      H    *
*           *
*     L     *
*************

オンラインでお試しください!(一部、boxesTIOにはインストールされません。)


5

J30 29バイト

ジョナのおかげで-1バイト

'#'|.@|:@,^:4[$*/@[(?~@[{{.)]

オンラインでお試しください!


1
TIOは固定ランダムシードを使用するためです。9!:1]6!:9''修正される
アダム

2
方法がゼロフィルを使用したように本当に{.。29の微調整'#'|.@|:@,^:4[$*/@[(?~@[{{.)]オンラインで試してみてください!
ジョナ

1
@ジョナありがとうございます!
ガレンイワノフ

5

PowerShell163 111 93バイト

param($w,$h,$s)'#'*$w+-join($s|% *ht($w*$h)|% t*y|sort{Random})+'#'*$w-replace".{$w}",'#$0#
'

オンラインでお試しください!

入力を$width として受け取り、$h$s idth 8、tring受け取ります。

#適切な$widthの文字列を構築し、それを何らかの計算で文字列に結合してから、同じ#文字列を再度作成します。計算入力を取ると開始$sトリング、および.padRigをやっhtまで$wでIDTH $h8本の長さ(すなわち、完全に長方形のスペースを占有する文字列が十分な長さにする。私たちは、その文字列に変換toCharArraをy、そしてsortそれRandomLY。与えます最後に、-replace同じ$widthのチャンクに分割し、それらのチャンクを#sで囲みます。

-52 AZTECCOからのインスピレーションのおかげ
-18バイトのmazzyのおかげ


You have 2 x random (12) while JS has one, he added spaces to fill M*N size and sorted, after that you still pay 21 for '$' unfortunately
AZTECCO

1
@AZTECCO Thanks for the inspiration!
AdmBorkBork

Thanks @mazzy - very clever with the -replace instead of splitting and joining.
AdmBorkBork

4

JavaScript (ES7), 125 bytes

Returns a string. Uses 0 as the frame character.

(s,h,w)=>(a=[...s.padEnd(w++*h++)].sort(_=>Math.random()-.5),g=x=>y+~h?(x%w&&y%h&&a.pop())+[`
`[x-w]]+g(x<w?x+1:!++y):a)(y=0)

Try it online!

Commented

(s, h, w) => (               // s = string; h = height; w = width
  a =                        // build an array a[] consisting of:
    [...s.padEnd(w++ * h++)] //   all original characters in s padded with spaces for a
    .sort(_ =>               //   total length of w * h, in a random order
      Math.random() - .5     //   (this is not guaranteed to be uniform, but it is not
    ),                       //   required to be)
  g = x =>                   // g is a recursive function taking x:
    y + ~h ?                 //   if we haven't reached the end of the grid:
      ( x % w &&             //     if we're not located on a vertical border
        y % h &&             //     nor on a horizontal border,
        a.pop()              //     extract the last character from a[]
      ) +                    //     (otherwise, append '0')
      [`\n`[x - w]] +        //     if we've reached the end of the row, append a linefeed
      g(                     //     append the result of a recursive call:
        x < w ? x + 1 : !++y //       using either (x+1, y) or (0, y+1)
      )                      //     end of recursive call
    :                        //   else (end of grid):
      a                      //     a[] is now empty and can be used as an empty string
)(y = 0)                     // initial call to g with x = y = 0

4

APL (Dyalog Extended), 23 bytesSBCS

Anonymous tacit infix function. Takes [M,N] as left argument and S as right argument.

'#',∘⌽∘⍉⍣4⊣⍴×/⍛(?⍨⍤⊣⊇↑)

Try it online!

×/⍛() apply the following function between the arguments, replacing the left argument with its product:

 take M×N characters from S, padding with spaces on the right

 reorder that to the following order:

?⍨⍤ the shuffled indices 1 through…
 the left argument (M×N)

reshape that to the following shape:

 the left argument (i.e. M rows and N columns)

'#'⍣4 apply the following function four times, each time with the hash character as left argument:
∘⍉ transpose the right argument
∘⌽ mirror the right argument
, concatenate a column of hashes to the left side of that


4

PHP 7.4, 107 99 94 characters

fn($s,$r,$c)=>_.chunk_split(($b=str_pad(_,$c,_)).str_shuffle(str_pad($s,$r*$c)),$c,"_
_").$b._

Thanks to:

  • Ismael Miguel for reminding me about PHP 7.4's arrow functions (-10 characters)
  • Night2 for efficiently reversing the concatenations and the join() (-8 characters)
  • Night2 for showing how to use chunk_split()'s $end parameter (-5 characters)

Try it online!

PHP 7.3, 117 112 108 characters

function s($s,$r,$c){echo _.chunk_split(($b=str_pad(_,$c,_)).str_shuffle(str_pad($s,$r*$c)),$c,"_
_").$b._;}

Thanks to:

  • Night2 for efficiently reversing the concatenations and the join() (-5 characters)
  • Night2 for showing how to use chunk_split()'s $end parameter (-4 characters)

Sample run:

php > function s($s,$r,$c){echo _.chunk_split(($b=str_pad(_,$c,_)).str_shuffle(str_pad($s,$r*$c)),$c,"_
php " _").$b._;}
php > s('HELLO', 4, 11);
_____________
_  L        _
_        L  _
_E          _
_    OH     _
_____________

Try it online!


1
I believe that fn($s,$r,$c)=>($b=str_repeat(9,$c+2))."\n9".join("9\n9".str_split(str_shuffle(str_pad($s,$r*$c)),$c))."9\n$b"; should work in PHP 7.4 (wiki.php.net/rfc/arrow_functions_v2), and a release canditate has been released (wiki.php.net/todo/php74), so, it is an available "compiler" that came before this challenge, and anyone can use it.
Ismael Miguel

1
Doh, you are right. Read about, but forgot. (Note to myself: next time not just read Night2's tip. Upvote it too, maybe helps remembering.)
manatwork


1
Thank you, @Night2. I can't imagine what I messed yesterday, as I tried moving more stuff inside the join(), but failed to reduce the size. ☹
manatwork

1
Got even a shorter one using chunk_split: 94 bytes I also removed the last semicolon as I believe it is not needed, you have written a function, so the code which is going to assign it to a variable shouldn't count.
Night2

3

MATL, 22 19 bytes

tZ"ibpyn&Z@(TT35&Ya

Try it online!

Thanks @LuisMendo for saving 3 bytes, so now it has the same bytecount as @flawr's answer, but sufficiently different to post anyway. High-level agorithm overview:

 Z"                  % Create n x m matrix of spaces
           (         % Index into this matrix:
   i                 %  The alphabet vermicelli (explicit input)
        &Z@          %  at a random locations (randperm), which are
      yn             %   length(S) numbers, ranging
t   bp               %   from 1 to n*m
            TT35&Ya  % And finally add a border

You can change Z}&O by Z", and that also allows you to remove the final c
Luis Mendo

@LuisMendo Oh that helps a lot! Come to think of it, I should've at least done 1$O.
Sanchises

3

Ruby, 121 bytes

Creates the bowl, queries the indices of all spaces within the bowl, samples a number of spaces equal to the size of the string, and fills them in. sample does not return a sorted list, so there is no need to shuffle. Searching indices up to 9*m*n (which almost certainly goes out of range) will still get all spaces and is 1 byte shorter than r.size.

->s,m,n{r=[t=?@*(n+2),*["@#{' '*n}@"]*m,t]*$/;i=-1;(0..9*m*n).select{|j|r[j]==' '}.sample(s.size).map{|j|r[j]=s[i+=1]};r}

Try it online!


3

Red, 120 116 114 112 bytes

-2 bytes thanks to @Kevin Cruijssen!

func[s m n][random pad s m * n insert/dup t: copy"00"0 n
print t loop m[print rejoin[0 take/part s n 0]]print t]

Try it online!


2
-2 bytes by getting rid of the + 1 and using to"""00"0 n instead.
Kevin Cruijssen

1
@KevinCruijssen Thanks! I replaced it with copy, for the same byte count.
Galen Ivanov

1
That indeed looks a bit cleaner! I don't know Red except for the answers I've seen from you, so I was just fiddling around a bit. ;) Would putting the t line as leading/trailing item before looping to save on the two loose print t be shorter? I doubt it, but since I don't know how to add items to a list I'm not sure.
Kevin Cruijssen

3

Perl 6, 74 67 bytes

-5 bytes thanks to Jo King

{0 X~0 x$^n,|comb($n,[~] $^s.comb[pick *,^$^m*$n]X//' '),0 x$n X~0}

Try it online!

Explanation

{                                                                 }
                                         ^$^m*$n  # Range 0 .. M*N-1
                                  pick *,  # Shuffle
                         $^s.comb  # Split S into chars
                                 [              ]  # Pick shuffled elements
                                                 X//' '  # undef to space
                     [~]  # Join
             # Split into n-character strings
             comb($n,                                  )
            |  # Flatten
     # Add top and bottom of bowl
     0 x$^n,                                            ,0 x$n
 # Add left and right of bowl
 0 X~                                                          X~0



3

k4, 32 28 bytes

{4{|+x,'"#"}/y#a?(a:-*/y)$x}

edit: -4 thanks to Galen Ivanov!

called like

f["hey";3 3]

explanation:

                 (a:-*/y)    / neg product of y and assign to a 
                         $x  / left pad x so we have char vector the length of the inner area
               a?            / take `a` random drawings. if a is negative, draw with no duplicates/replacements
             y#              / reshape to y's dimensions
 4{        }/                / do {} 4 times 
   |+x,'"#"                  / append "#" along right-side of x then transpose (+) and reverse (|)

1
I think you can save some bytes if you only append # at the end of each line and transpose/reverse 4 times, something like this.
Galen Ivanov

1
@GalenIvanov nice, updated!
scrawl

3

Java (JDK), 180 178 bytes

Not a single extra import:

(y,m,n)->{for(m*=n;y.length()<m;y+=" ");var s="";for(;m-->0;y=s)for(var c:y.split(s=""))s=Math.random()<.5?s+c:c+s;s="#".repeat(n);return(s+y+s).replaceAll(".{"+n+"}","\n#$0#");}

Try it online!

It was quite the struggle to get this golfed down. In particular, the imports involved with Collections.shuffle()/Arrays methods were too much to accept, so I had to create my own String shuffling algorithm (probably neither efficient nor uniformly distributed). Massive thanks to Steven for proving any set of positions can be generated from the algorithm.

Formatted (with explanation):

(y, m, n) ->                                                   // y = yummies in the soup,
{                                                              // m = height, n = width
    for (m *= n; y.length() < m; y += " ")                     // set m to m*n and
        ;                                                      // add spaces to y to fill up
    var s = "";                                                // the rest of the soup
    for (; m-- > 0; y = s)                                     // for m*n iterations, scramble y
        for (var c : y.split(s = ""))                          // with random appends
            s = Math.random() < .5 ? s + c : c + s;
    s = "#".repeat(n);                                         // create the top/bottom of the rim
    return (s + y + s).replaceAll(".{" + n + "}", "\n#$0#"); // add all sides of the rim
};

Nice answer! +1 from me. One small thing to golf: .replaceAll("(.{"+n+"})","\n#$1#") can become .replaceAll(".{"+n+"}","\n#$0#")
Kevin Cruijssen

@KevinCruijssen Thanks for the improvement :)
Avi

2

Charcoal, 27 bytes

NθNη↖B⁺²θ⁺²η#FS«W℅KKJ‽θ‽ηPι

Try it online! Link is to verbose version of code. Takes input in the order width, height, string. Explanation:

NθNη

Input the width and height.

↖B⁺²θ⁺²η#

Frame the bowl.

FS«

Loop over the characters in the string.

W℅KKJ‽θ‽η

Jump to a random position in the bowl until an empty spot is found.

Pι

Print the current character without moving the cursor.


Is that Move(:UpLeft) necessary? It works fine without it, but maybe you've added it for a reason I don't think about?
Kevin Cruijssen

1
@KevinCruijssen Without it I would never be able to write letters into the bottom row or rightmost column.
Neil

Ah, so that was it. That explains it, thanks!
Kevin Cruijssen

2

Japt -R, 21 18 bytes

úV*W ö¬òW ²Ô²û2W+2

Try it

úV*W ö¬òW ²Ô²û2W+2     :Implicit input of string U=S and integers V=M & W=N
úV*W                   :Right pad U with spaces to length V*W
     ö¬                :Random permutation
       òW              :Split to array of strings of length W
          ²            :Push 2
           Ô           :Reverse
            ²          :Push 2
             û2W+2     :Centre pad each element with "2" to length W+2
                       :Implicit output, joined with newlines

2

MATL, 29 27 19 bytes

pZ@iy~hw)1GeTT35&Ya

Try it online!

Thanks @LuisMendo for -8 bytes!

Explanation: p computes the number of soup-pixels. Then Z@ produces a random permutation of size of number of soup pixels. We will use this as indices to iy~h which is the input string with enough spaces added. w) swaps the two and indexes one with the other. We then reshape 1Ge the shape into the desired rectangle and #-pad it using TT35&Ya.


2
Clever! My attempt was 22 bytes
Sanchises

2
@Sanchises Go post it anyway!
flawr

2

T-SQL 2017, 232 bytes

Testing this online is an older version of sql-server costing another character. I posted the shorter version.

Golfed:

DECLARE @ varchar(max)=''SELECT top 999 @+=substring(@i,number+1,1)FROM spt_values
WHERE type='P'and number<@a*@b
ORDER BY newid()WHILE-@b<1SELECT @=stuff(@+' ',@b*@a+1,0,'#
#'),@b-=1PRINT stuff(replicate('#',2+2*@a),2+@a,0,trim(@))

Try it online

Ungolfed:

DECLARE @ varchar(max)=''

SELECT top 999 @+=substring(@i,number+1,1)
FROM spt_values
WHERE type='P'and number<@a*@b
ORDER BY newid()

WHILE-@b<1
SELECT @=stuff(@+' ',@b*@a+1,0,'#
#'),@b-=1
PRINT stuff(replicate('#',2+2*@a),2+@a,0,trim(@))

2

C (clang), 169 164 162 160 bytes

i,b;f(n,m,s)char*s;{char*a,o[b=i=-~++n*(m+=3)];for(srand(time(a=o));--i;)*a++=i%m?-~i%m<3|i<m|i>m*n?35:32:10;for(*a=0;*s;*a=*a-32?*a:*s++)a=o+rand()%b;puts(o);}

Try it online!

-2 putting a=o in time() call // for(srand(time(a=o));...

Saved 7 @ceilingcat suggestion to use -~variable and auto storage for string o plus many improvements.

Degolf :

char*a,// pointer for set operations 
*o=malloc(b=i=(m+=3)*(n+=2));  => o[b=i=(m+=3)*-~++n]
// before allocating for the whole bowl as a char array
// increments m by 3 (2 for rims and 1 for '\n') and n by one but allocates for 2(rims)
// and assigns bowl size to i and b.
srand(time(0));// seeds rand function 
for(// loop to make empty bowl 
a=o;// using pointer as iterator
 --i ;)//  i decremented as a counter

 *a=// sets every char to..
 i%m?// if(not) over right side of bowl (m+3)
   -~i%m<3|i<m|i>m*n-m?35// if on rim '#'//-~i == (i+1)
   :32 // else ' ' 
  :10;// i%m==0

for(*a=0;// before loop terminates bowl with \0
 *s;// for every letters(exit on '\n')
 *a=*a-32?*a:*s++)
 // puts letter if bowl at a is a space and
 // go to next letter

 a=o+rand()%b; 
 // sets a to o offsetted by random

puts(o);// prints bowl 

Suggest *a=--i;)*a++=i%m?-~i%m<3|i<m|i>m*n?35:32:10;for(; instead of --i;)*a++=i%m?-~i%m<3|i<m|i>m*n?35:32:10;for(*a=0;
ceilingcat

@ceilingcat it should work but for some reason it gives wrong output on the last 2 test cases
AZTECCO


1

Jelly, 16 bytes

P⁶ẋaẊs⁸ṪṾ€«”~ZƊ⁺

A dyadic Link accepting a list of integers, [M, N], on the left and a list of characters, S, on the right which yields a list of lists of characters, the lines. Uses the tilde character, ~, as the border.

Try it online!

All possible outputs have a non-zero chance of being yielded since we shuffle () a list of the characters of S along with the appropriate number of spaces.

The code Ṿ€«”~ZƊ⁺ saves the byte which I imagine would be required to join with newlines that full programs using an integer such as zero would need to employ (e.g. P⁶ẋaẊs⁸Ṫ;€0ZUƊ4¡Y or P⁶ẋaẊs⁸Ṫj@€Ø0Z$⁺Y). Maybe there's a way to save more...?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.