Đổ đầy bát với súp bảng chữ cái


24

Chúng tôi dường như không bao giờ có được mệt mỏi của những thách thức bảng chữ cái liên quan đến ...


Công thức

Được

  • một chuỗi các chữ cái S, và
  • hai số nguyên dương M, N,

tạo ra một súp bảng chữ cái với các chữ cái Schiếm vị trí ngẫu nhiên trong một bát hình chữ nhật có kích thước M× N, được đóng khung bởi một ký tự không phải là chữ cái, không gian để thể hiện vành của bát.

Vị trí không được sử dụng bởi các chữ cái nên được hiển thị dưới dạng khoảng trắng. Xem các ví dụ dưới đây .

Quy tắc mục đích

  • Kích thước M× Nđề cập đến nội thất của bát. Kích thước bao gồm cả vành là M+2× N+2.
  • Mỗi nhân vật từ Snên xuất hiện một lần trong bát, ở một vị trí khác nhau ; đó là, một ký tự không thể ghi đè lên một ký tự khác.
  • S có thể chứa các bản sao . Chẳng hạn, nếu Slà chuỗi 'abcc', súp phải chứa một a, một bvà hai c(tất cả ở các vị trí khác nhau).
  • Các đầu vào sẽ làm hài lòng những hạn chế M >= 1 , N >= 1, 1 <= length(S) <= M*N.
  • Vành của bát có thể là bất kỳ ký tự không chữ cái, không khoảng trắng , nhất quán trong các lần chạy chương trình và các giá trị đầu vào.
  • Vị trí chữ cái trong bát là ngẫu nhiên, do đó kết quả có thể khác nhau mỗi khi chương trình được chạy với cùng một đầu vào.
  • Với đầu vào, mọi tập hợp các vị trí chữ cái có thể có xác suất khác không . Vì điều này không thể được kiểm tra từ một vài nhận thức của chương trình, vui lòng giải thích cách mã của bạn đáp ứng điều này.
  • Khoảng trắng hàng đầu hoặc dấu xung quanh vành được cho phép.
  • Ssẽ chỉ chứa các chữ cái viết hoa . Nếu bạn muốn, bạn có thể chọn chỉ lấy các chữ cái viết thường .
  • Đầu vào và đầu ra linh hoạt như bình thường. Ví dụ: đầu ra có thể là một chuỗi có dòng mới, mảng ký tự 2D hoặc danh sách các dòng.
  • Các chương trình hoặc chức năng được cho phép, trong bất kỳ ngôn ngữ lập trình . Sơ hở tiêu chuẩn bị cấm.
  • Mã ngắn nhất tính bằng byte thắng.

Ví dụ

Các đầu vào được hiển thị dưới dạng S, [M N], Msố lượng hàng và Nsố cột. Các nhân vật #được sử dụng cho vành.

'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  #
###########################################


"Vị trí chữ cái trong bát là ngẫu nhiên, [...]" <- ý bạn là thể ngẫu nhiên hay phải ngẫu nhiên? Và tất cả các dòng có thể có cùng số ký tự, mọi lúc?
Ismael Miguel

@IsmaelMiguel Phải . Và mọi cấu hình phải có xác suất xảy ra khác không (được nêu trong thử thách). Vì vậy, loại trừ cách tiếp cận theo chiều dài cùng chiều
Luis Mendo

Vành có thể nhất quán giữa các lần chạy chương trình và các giá trị đầu vào, nhưng sử dụng nhiều chữ cái không, ví dụ: vẽ đường viền nghệ thuật ASCII bằng |+-?
Adám

@ Adám H'm Tôi sẽ nói không, đó là một sự thay đổi quá lớn
Luis Mendo

Câu trả lời:


13

05AB1E , 20 18 16 15 14 byte

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

Có ba đầu vào theo thứ tự: chiều cao, chiều rộng, chuỗi. Xuất ra dưới dạng danh sách 2D của các ký tự.
Sử dụng 8như đường viền, nhưng có thể là bất kỳ chữ số nào.

-1 byte nhờ @Grimy .

Hãy thử trực tuyến hoặc xác minh tất cả các trường hợp thử nghiệm . (TIO chứa }}J»trong phần chân trang để in kết quả đẹp; vui lòng xóa nó để xem danh sách các ký tự 2D đầu ra thực tế thay thế.)

Giải trình:

*               # 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 Tôi thực sự chỉ nói thử thách 3 phút trước. ;) Đó là một triển khai khá đơn giản. Sẽ cố gắng đánh golf nó từ đây.
Kevin Cruijssen

1
Rất tuyệt, tôi đã không nghĩ về *j! Đây là 13 cho di sản , hoặc 14 xấu cho hiện đại (xuất ra một mảng ký tự 2D).
Grimmy

1
@Grimy 13 -terter dường như không thành công cho đầu vào 1,1,"O", vì vậy tôi nghĩ rằng nó cũng phải là 14 -ter cho di sản. Cảm ơn cho -1 mặc dù.
Kevin Cruijssen

7

APL (Dyalog Unicode) , 25 byte SBCS

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

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

-22 cảm ơn @ngn, -7 cảm ơn @ngn và @ Adám

Giải trình:

'#',∘⌽∘⍉⍣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 byte SBCS

Các góc của vành là các nhân vật khác nhau

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

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

Sử dụng dfn để hiển thị hộp.


29: '#',∘⌽∘⍉⍣4⊢⍴∘(?⍨∘≢⊃¨⊂)↑⍨∘(×/) Hãy thử trực tuyến!
Adám

28: {'#',∘⌽∘⍉⍣4⊢⍵⍴⍺\⍨(≢⍺)>?⍨×/⍵}(hoặc thay vì >nếu ⎕io=1)
ngn

thật ra, 27:'#',∘⌽∘⍉⍣4{⍵⍴⍺\⍨(≢⍺)>?⍨×/⍵}
ngn

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


6

Python 3 , 110 byte

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

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

Chọn ngẫu nhiên bằng cách sử dụng một sự sethiểu biết và trả về một mảng ký tự 2D.


Sử dụng tốt các thiết lập hiểu để ngẫu nhiên. +1. Nhưng mã của bạn dựa vào tên 'f' của hàm. Do đó, tôi nghĩ rằng giải pháp lambda không hợp lệ ...
bất chấp

1
@agtoever Cảm ơn! Hàm không được đệ quy, vì vậy nó có thể ẩn danh. Bạn đang đề cập đến f'{s:{m*n}}'một phần? Bởi vì đó là cú pháp cho một chuỗi được định dạng, điều này cũng tình cờ bắt đầu bằng một chuỗi f.
Jitse

3
Mã này dường như vi phạm PEP 8 theo nhiều cách.
Christofer Ohlsson

1
@ Christofer-Ohlsson hoàn toàn!
Jitse

2
@ChristoferOhlsson Chào mừng bạn đến với thế giới của môn đánh gôn, haha. ;) Không có ý kiến ​​/ tài liệu nào; các biến / phương thức ký tự đơn mà không có khoảng trắng / dòng mới (không cần thiết); có khả năng hàng trăm cảnh báo trình biên dịch mà chúng tôi đơn giản bỏ qua; tăng hiệu suất từ ​​O (log (N)) lên O (N ^ N); v.v ... Nếu nó có thể tiết kiệm ngay cả một byte, tất cả đều ổn và hoàn toàn xứng đáng với việc chơi gôn. ;)
Kevin Cruijssen

5

Bash + coreutils, 139 125 ký tự

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

Chạy mẫu:

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

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

Bash + coreutils + hộp, 97 ký tự

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

Chạy mẫu:

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

Hãy thử trực tuyến! (Một phần, như boxeschưa được cài đặt trên TIO.)



5

PowerShell , 163 111 93 byte

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

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

Đưa đầu vào là $width, $htám, $string.

Xây dựng một chuỗi #$w idth thích hợp , chuỗi kết hợp với một số tính toán, và sau đó cùng một #chuỗi. Việc tính toán bắt đầu bằng việc lấy $string đầu vào và thực hiện .padRig htlên tới $width bằng $htám chiều dài (nghĩa là tạo một chuỗi đủ dài để chiếm hoàn toàn không gian hình chữ nhật. Sau đó, chúng tôi chuyển đổi chuỗi đó toCharArra ysortRandomly. cho chúng tôi phần giữa hỗn hợp. Cuối cùng, chúng tôi -replacechia thành các phần bằng nhau $w, và bao quanh các phần đó với #s.

-52 nhờ vào cảm hứng từ AZTECCO
-18 byte nhờ mazzy


Bạn có 2 x ngẫu nhiên (12) trong khi JS có một, anh ta đã thêm khoảng trắng để điền kích thước M * N và sắp xếp, sau đó bạn vẫn phải trả 21 cho '$' không may
AZTECCO

1
@AZTECCO Cảm ơn đã truyền cảm hứng!
admBorkBork

Cảm ơn @mazzy - rất thông minh với việc -replacethay vì chia tách và tham gia.
admBorkBork

4

JavaScript (ES7), 125 byte

Trả về một chuỗi. Công dụng0 làm nhân vật khung.

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

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

Đã bình luận

(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 byte SBCS

Chức năng ẩn danh ẩn danh. Đưa ra [M,N]như đối số trái và Snhư đối số phải.

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

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

×/⍛(... ) áp dụng các chức năng sau đây giữa các đối số, thay thế các lập luận trái với sản phẩm của mình:

 lấy M× Nký tự từ S, đệm với khoảng trắng ở bên phải

 Sắp xếp lại theo thứ tự sau:

?⍨⍤ các chỉ số được xáo trộn từ 1 đến lượt
 đối số bên trái ( M× N)

r eshape mà đến hình dạng sau:

 đối số bên trái (tức là Mhàng vàN cột)

'#'Cách ⍣4 áp dụng hàm sau bốn lần, mỗi lần với ký tự băm là đối số bên trái:
∘⍉ hoán chuyển đối số
∘⌽ bên phải, đối số bên phải
,nối một cột băm sang bên trái của điều đó


4

PHP 7.4, 107 99 94 ký tự

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

Nhờ vào:

  • Ismael Miguel đã nhắc tôi về các hàm mũi tên của PHP 7.4 (-10 ký tự)
  • Đêm2 để đảo ngược hiệu quả các phép nối và join()(-8 ký tự)
  • Night2 cho thấy làm thế nào để sử dụng chunk_split()'s $endtham số (-5 ký tự)

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

PHP 7.3, 117 112 108 ký tự

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

Nhờ vào:

  • Night2 để đảo ngược hiệu quả các kết nối vàjoin() (-5 ký tự)
  • Night2 cho thấy làm thế nào để sử dụng chunk_split()'s $endtham số (-4 ký tự)

Chạy mẫu:

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     _
_____________

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


1
Tôi tin rằng nó 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";nên hoạt động trong PHP 7.4 ( wiki.php.net/rfc/arrow_fifts_v2 ) và một bản phát hành đã được phát hành ( wiki.php.net/todo/php74 ), vì vậy, nó là một "trình biên dịch" có sẵn trước thử thách này, và bất cứ ai cũng có thể sử dụng nó.
Ismael Miguel

1
Doh, bạn đúng. Đọc về, nhưng quên mất. (Lưu ý đến bản thân mình: lần sau không chỉ đọc Night2 's tip upvote nó quá, có thể giúp ghi nhớ..)
manatwork


1
Cảm ơn bạn, @ Night2. Tôi không thể tưởng tượng những gì tôi đã làm hỏng ngày hôm qua, khi tôi đã cố gắng di chuyển nhiều thứ hơn bên trong join(), nhưng không thể giảm kích thước. ☹
manatwork

1
Thậm chí còn có một đoạn ngắn hơn bằng cách sử dụng chunk_split: 94 byte Tôi cũng đã xóa dấu chấm phẩy cuối cùng vì tôi tin rằng nó không cần thiết, bạn đã viết một hàm, vì vậy mã sẽ gán nó cho một biến không nên đếm.
Đêm 2

3

MATL , 22 19 byte

tZ"ibpyn&Z@(TT35&Ya

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

Cảm ơn @LuisMendo vì đã lưu 3 byte, vì vậy bây giờ nó có cùng một câu trả lời giống như câu trả lời của @ flawr , nhưng đủ khác nhau để đăng. Tổng quan về agorithm cấp cao:

 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

Bạn có thể thay đổi Z}&Otheo Z"và điều đó cũng cho phép bạn xóa trận chung kếtc
Luis Mendo

@LuisMendo ơi giúp được nhiều lắm! Nghĩ về nó, tôi nên làm ít nhất là xong 1$O.
Sanchises

3

Hồng ngọc , 121 byte

Tạo bát, truy vấn các chỉ số của tất cả các khoảng trắng trong bát, lấy mẫu một số khoảng trắng bằng kích thước của chuỗi và điền chúng vào. sampleKhông trả về danh sách đã sắp xếp, do đó không cần xáo trộn. Các chỉ mục tìm kiếm lên đến 9*m*n(gần như chắc chắn nằm ngoài phạm vi) vẫn sẽ nhận được tất cả các khoảng trắng và ngắn hơn 1 byte 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}

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


3

Màu đỏ , 120 116 114 112 byte

-2 byte nhờ @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]

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


2
-2 byte bằng cách loại bỏ + 1và sử dụng to"""00"0 nthay thế.
Kevin Cruijssen

1
@KevinCruijssen Cảm ơn! Tôi đã thay thế nó bằng copy, cho cùng một số byte.
Galen Ivanov

1
Điều đó thực sự trông sạch sẽ hơn một chút! Tôi không biết Red ngoại trừ những câu trả lời tôi đã thấy từ bạn, vì vậy tôi chỉ loay hoay một chút. ;) Việc đặt tdòng dưới dạng mục hàng đầu / dấu trước khi lặp để lưu trên hai phần lỏng lẻo print tsẽ ngắn hơn? Tôi nghi ngờ điều đó, nhưng vì tôi không biết cách thêm các mục vào danh sách nên tôi không chắc.
Kevin Cruijssen

3

Perl 6 , 74 67 byte

-5 byte nhờ Jo King

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

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

Giải trình

{                                                                 }
                                         ^$^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 byte

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

chỉnh sửa: -4 cảm ơn Galen Ivanov!

gọi như

f["hey";3 3]

giải trình:

                 (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
Tôi nghĩ bạn có thể lưu một số byte nếu bạn chỉ nối #vào cuối mỗi dòng và hoán chuyển / đảo ngược 4 lần, đại loại như thế này .
Galen Ivanov

1
@GalenIvanov đẹp, cập nhật!
nguệch ngoạc

3

Java (JDK) , 180 178 byte

Không phải là một lần nhập thêm:

(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#");}

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

Đó là khá khó khăn để có được golf này xuống. Cụ thể, việc nhập liên quan đến các phương thức Collections.shuffle () / Mảng là quá nhiều để chấp nhận, vì vậy tôi phải tạo thuật toán xáo trộn Chuỗi của riêng mình (có thể không hiệu quả cũng không được phân phối đồng đều). Rất cảm ơn Steven vì đã chứng minh bất kỳ tập hợp các vị trí có thể được tạo ra từ thuật toán.

Được định dạng (có giải thích):

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

Câu trả lời tốt đẹp! +1 từ tôi. Một điều nhỏ đối với golf: .replaceAll("(.{"+n+"})","\n#$1#")có thể trở thành.replaceAll(".{"+n+"}","\n#$0#")
Kevin Cruijssen

@KevinCruijssen Cảm ơn bạn đã cải thiện :)
Avi

2

Than , 27 byte

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

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Đưa đầu vào theo thứ tự chiều rộng, chiều cao, chuỗi. Giải trình:

NθNη

Nhập chiều rộng và chiều cao.

↖B⁺²θ⁺²η#

Khung bát.

FS«

Lặp lại các ký tự trong chuỗi.

W℅KKJ‽θ‽η

Nhảy đến một vị trí ngẫu nhiên trong bát cho đến khi tìm thấy một chỗ trống.

Pι

In ký tự hiện tại mà không di chuyển con trỏ.


Move(:UpLeft)cần thiết không? Nó hoạt động tốt mà không có nó, nhưng có lẽ bạn đã thêm nó vì một lý do tôi không nghĩ đến?
Kevin Cruijssen

1
@KevinCruijssen Nếu không có nó, tôi sẽ không bao giờ có thể viết các chữ cái vào hàng dưới cùng hoặc cột ngoài cùng bên phải.
Neil

À, vậy thôi. Điều đó giải thích nó, cảm ơn!
Kevin Cruijssen

2

Japt -R , 21 18 byte

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

Thử nó

ú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 byte

pZ@iy~hw)1GeTT35&Ya

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

Cảm ơn @LuisMendo cho -8 byte!

Giải thích: ptính số lượng súp-pixel. Sau đó Z@tạo ra một hoán vị ngẫu nhiên về kích thước của số lượng pixel súp. Chúng tôi sẽ sử dụng điều này như các chỉ số iy~hlà chuỗi đầu vào có đủ khoảng trắng được thêm vào. w)hoán đổi hai và lập chỉ mục một với nhau. Sau đó chúng tôi định hình lại 1Gehình dạng thành hình chữ nhật mong muốn và #sử dụng nó TT35&Ya.


2
Tài giỏi! Nỗ lực của tôi là 22 byte
Sanchises

2
@Sanchises Đi đăng nó nào!
flawr

2

T-SQL 2017, 232 byte

Kiểm tra trực tuyến này là một phiên bản cũ hơn của máy chủ sql có giá một nhân vật khác. Tôi đăng phiên bản ngắn hơn.

Chơi gôn

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

Dùng thử trực tuyến

Ung dung:

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 (tiếng kêu) , 169 164 162 160 byte

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

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

-2 đặt a = o trong thời gian () gọi // for (srand (time (a = o)); ...

Đã lưu 7 đề xuất @ceilingcat để sử dụng - ~ lưu trữ biến và tự động cho chuỗi o cộng với nhiều cải tiến.

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 

Đề xuất *a=--i;)*a++=i%m?-~i%m<3|i<m|i>m*n?35:32:10;for(;thay vì--i;)*a++=i%m?-~i%m<3|i<m|i>m*n?35:32:10;for(*a=0;
trần mèo

@ceilingcat nó sẽ hoạt động nhưng vì một số lý do, nó cung cấp đầu ra sai cho 2 trường hợp thử nghiệm gần nhất
AZTECCO


1

Thạch , 16 byte

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

Một liên kết dyadic chấp nhận một danh sách các số nguyên, [M, N]ở bên trái và một danh sách các ký tự S, ở bên phải, nơi đưa ra một danh sách các danh sách các ký tự, các dòng. Sử dụng ký tự dấu ngã ~, làm đường viền.

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

Tất cả các kết quả đầu ra có thể có cơ hội mang lại khác không kể từ khi chúng tôi xáo trộn ( ) một danh sách các ký tự Scùng với số lượng khoảng trắng thích hợp.

Ṿ€«”~ZƊ⁺lưu byte mà tôi tưởng tượng sẽ được yêu cầu để tham gia với các dòng mới mà các chương trình đầy đủ sử dụng một số nguyên như số 0 sẽ cần sử dụng (ví dụ P⁶ẋaẊs⁸Ṫ;€0ZUƊ4¡Yhoặc P⁶ẋaẊs⁸Ṫj@€Ø0Z$⁺Y). Có lẽ có cách nào để tiết kiệm hơ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.