Alfabe çorbası ile bir kase doldurun


24

Biz görünüyor asla almak yorgun alfabe-ilişkili zorluklar ...


Yemek tarifi

verilmiş

  • bir dizi harf Sve
  • İki pozitif tamsayılar M, N,

mektupları ile bir alfabe çorbası üretmek Sişgal rasgele pozisyonları bir de dikdörtgen kase büyüklüğü M× N, çerçeveli kasenin kenarında temsil edecek bir alfabetik olmayan, sigara boşluk karakteriyle.

Harfler tarafından kullanılmayan pozisyonlar boşluk olarak gösterilmelidir. Bkz aşağıdaki örnekleri .

Ek kurallar

  • M× büyüklüğü kasenin içineN atıfta bulunur . Jant dahil beden ölçüsü × .M+2N+2
  • Her karakter kabın içinde bir kez , farklı bir konumdaS görünmelidir ; yani, bir karakter diğerinin üzerine yazamaz.
  • S kopya içerebilir . Örneğin S, ip 'abcc'ise çorba bir a, bir bve iki içermelidir c(hepsi farklı pozisyonlarda).
  • Girişler tatmin edecek kısıtlamaları M >= 1 , N >= 1, 1 <= length(S) <= M*N.
  • Çanağın kenarı, program çalışmaları ve girdi değerleri boyunca tutarlı olan alfabetik olmayan, boşluk içermeyen bir karakter olabilir .
  • Kasedeki harf konumları rasgeledir, bu nedenle program aynı girdilerle her çalıştırıldığında sonuç farklı olabilir.
  • Girdiler göz önüne alındığında, her olası harf konumu kümesi sıfır olmayan bir olasılık olmalıdır . Bu programın birkaç gerçekleştirilmesinden kontrol edilemediğinden, lütfen kodunuzun bunu nasıl yerine getirdiğini açıklayın.
  • Jant etrafındaki boşluğa veya boşluğa giden boşluklara izin verilir.
  • Siçerecektir sadece büyük harflerdir. Dilerseniz sadece küçük harf almayı seçebilirsiniz .
  • Giriş ve çıkış her zamanki gibi esnektir . Örneğin çıktı, yeni satırlı bir dize, 2B karakter dizisi veya satır listesi olabilir.
  • Herhangi bir programlama dilinde programlara veya fonksiyonlara izin verilir . Standart boşluklar yasaktır.
  • Bayt cinsinden en kısa kod kazanır.

Örnekler

Olarak Girişler gösterilmiştir S, [M N]burada, Msatır sayısı ve Nsütun sayısıdır. Karakter #jant için kullanılır.

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


Ne demek - < "kase Harf pozisyonları rastgele, [...] vardır" olabilir rastgele veya olmalıdır rastgele? Ve tüm çizgiler her zaman aynı sayıda karaktere sahip olabilir mi?
Ismael Miguel

@IsmaelMiguel Must . Ve her konfigürasyonun sıfır olma ihtimali olmayan bir oluşum olasılığı olmalıdır (zorlukta belirtilmiştir). Bu da her zaman aynı uzunluktaki yaklaşımı dışlıyor
Luis Mendo

Jant, program çalıştırmaları ve giriş değerleri arasında tutarlı olabilir, ancak birden çok harf içermeyen kullanabilirsiniz, örneğin bir ASCII sanat sınırını çizmek |+-?
Adám

@ Adám Hm Hayır diyeceğim, bu çok büyük bir değişiklik
Luis Mendo

Yanıtlar:


13

05AB1E , 20 18 16 15 14 bayt

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

Sırayla üç girdi alır: height, width, string. 2B karakter listesi olarak çıktı alın. Sınır olarak
kullanır 8, ancak herhangi bir rakam olabilir.

@Grimy sayesinde -1 bayt .

Çevrimiçi deneyin veya tüm test durumlarını doğrulayın . (TIO }}J», sonucu güzel bir şekilde yazdırmak için altbilgide bulunur; bunun yerine gerçek çıktı 2D karakter listesini görmek için çıkarmaktan çekinmeyin.)

Açıklama:

*               # 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 Aslında sadece 3 dakika önce mücadeleyi söylüyorum. ;) Oldukça yalındır bir uygulama. Buradan golf oynamaya çalışacağım.
Kevin Cruijssen

1
Çok güzel, düşünmedim *j! İşte miras için 13 , modern için çirkin 14 (2B karakter dizisini çıkarır).
Grimmy

1
@Grimy 13-byter girişi başarısız görünüyor 1,1,"O", bu yüzden mirası için 14-byter olması gerektiğini düşünüyorum. Yine de -1 için teşekkürler.
Kevin Cruijssen

7

APL (Dyalog Unicode) , 25 bayt SBCS

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

Çevrimiçi deneyin!

-22 @ngn sayesinde, -7 @ngn ve @ Adám sayesinde

Açıklama:

'#',∘⌽∘⍉⍣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 Genişletilmiş) , 21 bayt SBCS

Jantın açıları farklı karakterlerdir

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

Çevrimiçi deneyin!

Kutuyu görüntülemek için dfn'yi kullanın.


29: '#',∘⌽∘⍉⍣4⊢⍴∘(?⍨∘≢⊃¨⊂)↑⍨∘(×/) Çevrimiçi deneyin!
Adám

28: {'#',∘⌽∘⍉⍣4⊢⍵⍴⍺\⍨(≢⍺)>?⍨×/⍵}(veya yerine >eğer ⎕io=1)
ngn

aslında, 27:'#',∘⌽∘⍉⍣4{⍵⍴⍺\⍨(≢⍺)>?⍨×/⍵}
ngn

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


6

Python 3 , 110 bayt

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

Çevrimiçi deneyin!

Bir setanlama kullanarak rastgele ve 2B karakter dizisini döndürür.


Rastgele ayarlamak için küme anlayışının güzel kullanımı. +1. Ancak kodlarınız, fonksiyonun 'f' ismine dayanır. Bu nedenle lambda çözümünün geçerli olmadığını düşünüyorum ...
agtoever

1
@ agtoever Teşekkürler! İşlev özyinelemeli değildir, bu yüzden adsız olabilir. Parçayı mı kastediyorsunuz f'{s:{m*n}}'? Çünkü bu sadece rastlantısal olarak da bir ile başlayan biçimlendirilmiş bir dizgenin sözdizimidir f.
Jitse,

3
Bu kod, PEP 8'i çeşitli şekillerde ihlal ediyor gibi görünmektedir.
Christofer Ohlsson

1
@ Christofer-Ohlsson kesinlikle!
Jitse,

2
@ChristoferOhlsson Kod-golf, haha ​​dünyasına hoş geldiniz. ;) Herhangi bir yorum / belge yok; tek karakterli değişkenler / yöntemler (gereksiz) boşluk / yeni satır olmadan; potansiyel olarak yüzlerce derleyici uyarısı yok sayıyoruz; O (log (N)) 'den O (N ^ N)' e artan performans; Tek bir bayt bile kurtarabiliyorsa, hepsi iyi ve kodlama için tamamen buna değer. ;)
Kevin Cruijssen

5

Bash + coreutils, 139 125 karakter

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

Örnek çalışma:

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

Çevrimiçi deneyin!

Bash + coreutils + kutuları, 97 karakter

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

Örnek çalışma:

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

Çevrimiçi deneyin! (Kısmen, boxesTIO'da kurulu olmadığı için.)



5

PowerShell , 163 111 93 bayt

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

Çevrimiçi deneyin!

Girdiyi $width, $hsekiz, $string olarak alır.

#Uygun $widdeden bir string oluşturur , string bir hesaplama ile #tekrar birleştirir ve aynı stringi tekrar bağlar. Girişini alarak hesaplama başlar $sbir .padRig tring ve yaparak htkadar $wtarafından IDþ $hsekiz uzunluğu (yani biz o dize dönüştürmek. Yeterince uzun tamamen dikdörtgen yer kaplar için bir dize yapmak toCharArra yve sorto Randomly. Yani verir karışık orta kısmı bize, nihayetinde -replaceeşit $widollü parçalara ayırdık ve bu parçalara #s ile sarıldık .

-52 AZTECCO'dan ilham alarak mazzy
sayesinde -18 bayt


JS'de bir tane varken 2 tane rasgele (12) var, o da M * N boyutunu doldurmak için boşluk ekledi ve sıraladı, daha sonra maalesef '$' için 21 ödeme
yaptınız

1
@AZTECCO İlham için teşekkürler!
AdmBorkBork

Thanks @mazzy - -replacebölmek ve katılmak yerine çok akıllıca .
AdmBorkBork

4

JavaScript (ES7), 125 bayt

Bir dize döndürür. 0Çerçeve karakteri olarak kullanır .

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

Çevrimiçi deneyin!

Yorumlananlar

(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 Genişletilmiş) , 23 bayt SBCS

Anonim tam yapıştırma işlevi. Alır [M,N]sol argüman olarak ve Ssağ argüman olarak.

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

Çevrimiçi deneyin!

×/⍛() Argümanlar arasına aşağıdaki işlevi uygulayın, sol argümanı ürünü ile değiştirin:

M× Nkarakteri  al S, sağda boşlukla doldur

 Bunu aşağıdaki sıraya göre yeniden sıralayın:

?⍨⍤ karıştırılan endeksler 1 ila…
 sol argüman ( M× N)

R , aşağıdaki şekle bu eshape:

 sol argüman (yani Msatırlar ve Nsütunlar)

'#'⍣4 Her seferinde sol argüman olarak hash karakteriyle aşağıdaki işlevi dört kez uygulayın:
∘⍉ sağ argüman
∘⌽ aynasını
,çevir


4

PHP 7.4, 107 99 94 karakter

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

Sayesinde:

  • Ismael Miguel , PHP 7.4'ün ok işlevlerini hatırlattığı için (-10 karakter)
  • Birleşmeleri ve join()(-8 karakterleri) etkin bir şekilde ters çevirmek için
  • Night2 nasıl kullanılacağını göstermek için chunk_split()sitesindeki $endparametre (-5 karakter)

Çevrimiçi deneyin!

PHP 7.3, 117 112 108 karakter

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

Sayesinde:

  • Birleşmeleri ve join()(-5 karakterleri) etkin bir şekilde ters çevirmek için
  • Night2 nasıl kullanılacağını göstermek için chunk_split()sitesindeki $endparametre (-4 karakter)

Örnek çalışma:

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

Çevrimiçi deneyin!


1
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";PHP 7.4'te çalışması gerektiğine inanıyorum ( wiki.php.net/rfc/arrow_functions_v2 ) ve bir sürüm adayı piyasaya sürüldü ( wiki.php.net/todo/php74 ) Bu meydan okumadan önce ve herkes kullanabilir.
Ismael Miguel

1
Doh, haklısın. Hakkında oku, ama unuttum. (Kendime Not: sadece okumak değil dahaki sefere night2 'ın ucu çok, belki hatırlamak yardımcı olur upvote..)
manatwork


1
Teşekkürler, @ Night2. İçimde daha fazla şey taşımayı denediğimden join()ancak neyi küçültemediğim için dün neyi karıştırdığımı hayal edemiyorum . ☹
manatwork

1
Kullanmadan daha da kısa bir tane var chunk_split: 94 bayt Ayrıca, gerekmediğine inandığım için son noktalı virgülü de kaldırdım, bir işlev yazdınız, bu nedenle onu bir değişkene atayacak kodun sayılmaması gerekiyor.
Gece2

3

MATL , 22 19 bayt

tZ"ibpyn&Z@(TT35&Ya

Çevrimiçi deneyin!

Teşekkür yani artık @ flawr en aynıdır ByteCount sahiptir, 3 bayt kaydetmek için @LuisMendo cevap ama yeterince farklı neyse göndermek için. Üst düzey agoritmaya genel bakış:

 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

Değişebilirsin Z}&Otarafından Z"ve ayrıca nihai kaldırmasına olanak tanır oc
Luis Mendo

@LuisMendo Oh bu çok yardımcı olur! Bir düşün, en azından yapmalıydım 1$O.
Sanchises,

3

Ruby , 121 bayt

Kaseyi oluşturur, kasenin içindeki tüm alanların indekslerini sorgular, telin boyutuna eşit sayıda boşluk örnekler ve bunları doldurur. sampleSıralı bir liste döndürmez, bu yüzden karıştırmaya gerek yoktur. Endeksleri 9*m*n(neredeyse kesinlikle aralık dışına çıkar) aramak , tüm boşlukları almaya devam edecektir ve 1 bayt daha kısadır 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}

Çevrimiçi deneyin!


3

Kırmızı , 120 116 114 112 bayt

@Kevin Cruijssen! Sayesinde -2 bayt!

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]

Çevrimiçi deneyin!


2
-2 bayt yerine kurtulup + 1kullanarak to"""00"0 n.
Kevin Cruijssen

1
@KevinCruijssen Teşekkürler! copyAynı bayt sayısı için değiştirdim .
Galen Ivanov

1
Bu gerçekten biraz daha temiz görünüyor! Senden gördüğüm cevaplar dışında Red'i tanımıyorum, bu yüzden biraz etrafı karıştırdım. ;) tDönüşten önce iki gevşekten tasarruf etmek için çizgiyi öncü / iz bırakan öğe olarak koymak print tdaha kısa sürer mi? Bundan şüpheliyim, ancak listeye nasıl öğe ekleyeceğimi bilmediğimden emin değilim.
Kevin Cruijssen

3

Perl 6 , 74 67 bayt

Jo King sayesinde -5 bayt

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

Çevrimiçi deneyin!

açıklama

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

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

düzenleme: -4 Galen Ivanov için teşekkürler!

gibi denir

f["hey";3 3]

açıklama:

                 (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
Ben size keşke ekleme bazı bayt kurtarabilir miyiz #/ her satırı ve devrik sonunda 4 kez, ters böyle bir şey .
Galen Ivanov

1
@GalenIvanov güzel, güncellendi!
6'da

3

Java (JDK) , 180 178 bayt

Tek bir ekstra içe aktarma değil:

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

Çevrimiçi deneyin!

Bu golf oynamak için oldukça zordu. Özellikle, Collections.shuffle () / Arrays yöntemleriyle ilgili ithalat kabul edilemeyecek kadar fazlaydı, bu yüzden kendi String karıştırma algoritmamı oluşturmak zorunda kaldım (muhtemelen ne verimli ne de düzgün bir şekilde dağıtıldı). Algoritmadan elde edilebilecek herhangi bir pozisyonun kanıtlanabilmesi için Steven'a teşekkür ederiz .

Biçimlendirilmiş (açıklama ile):

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

Güzel cevap! Benden +1. Golf için küçük bir şey: .replaceAll("(.{"+n+"})","\n#$1#")olabilir.replaceAll(".{"+n+"}","\n#$0#")
Kevin Cruijssen

@KevinCruijssen Gelişimin için teşekkürler :)
Avi

2

Kömür , 27 bayt

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

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı bir versiyonudur. Sıra genişliği, yüksekliği, dizgisine girdi alır. Açıklama:

NθNη

Genişliği ve yüksekliği girin.

↖B⁺²θ⁺²η#

Kaseyi çerçeveleyin.

FS«

Dizedeki karakterlerin üzerine gelin.

W℅KKJ‽θ‽η

Boş bir nokta bulunana kadar kase içinde rastgele bir konuma atlayın.

Pι

İmleci hareket ettirmeden geçerli karakteri yazdır.


Bu Move(:UpLeft)gerekli mi? Onsuz iyi çalışıyor, ama belki de düşünmedim bir nedenden dolayı eklediniz?
Kevin Cruijssen

1
@KevinCruijssen onsuz asla alt satırda veya en sağdaki sütuna mektup yazamazdım.
Neil

Ah, öyleydi. Bu açıklar, teşekkürler!
Kevin Cruijssen

2

Japt -R , 21 18 bayt

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

Dene

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

pZ@iy~hw)1GeTT35&Ya

Çevrimiçi deneyin!

-8 bayt için @LuisMendo teşekkürler!

Açıklama: pçorba-piksel sayısını hesaplar. Daha sonra Z@, çorba piksellerinin büyüklüğünde rastgele bir permütasyon üretir. Bunu, iy~hyeterli boşluk eklenmiş giriş dizesi olan indeksler olarak kullanacağız . w)ikisini değiştirir ve birini diğeriyle endeksler. Daha sonra 1Geşekli istenen dikdörtgenin içine yeniden şekillendiriyoruz ve #kullanarak -pad'i kullanıyoruz TT35&Ya.


2
Zeki! Benim girişimi olduğunu 22 byte
Sanchises

2
@Sanchises Git yine de gönder!
kusur

2

T-SQL 2017, 232 bayt

Bunu çevrimiçi olarak test etmek, başka bir karaktere mal olan eski bir sql sunucusudur. Kısa versiyonunu yayınladım.

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

Çevrimiçi deneyin

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 bayt

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

Çevrimiçi deneyin!

-2 koyarak time () çağrısı a = o (srand (time (a = o)); ...

Dize o - değişken için otomatik değişken - ~ kullanmak için 7 @ceilingcat öneri kaydedildi.

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 

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

@ceilingcat çalışması gerekir, ancak bazı nedenlerden dolayı son 2 test vakasında yanlış çıktı veriyor
AZTECCO


1

Jöle , 16 bayt

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

[M, N]Solda ve bir karakter listesinde, sağda tamsayıların bir listesini kabul eden , karakterlerin Sbir listesini, satırlarını veren bir çift yönlü Bağlantı. ~Kenarlık olarak tilde karakterini kullanır .

Çevrimiçi deneyin!

Tüm olası çıktılar , uygun sayıda boşluk ile birlikte karakterlerin bir listesini karıştırdığımızdan ( ) , sıfır olmayan bir sonuç verme şansına sahiptir S.

Kod Ṿ€«”~ZƊ⁺, sıfır gibi bir tamsayı kullanan tam programların kullanması gereken (örneğin P⁶ẋaẊs⁸Ṫ;€0ZUƊ4¡Yveya P⁶ẋaẊs⁸Ṫj@€Ø0Z$⁺Y) yeni satırlara katılmak için gerekli olduğunu düşündüğüm baytı kaydeder . Belki daha fazla tasarruf etmenin bir yolu vardır?

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.