Riempi una ciotola con la zuppa dell'alfabeto


24

Sembra che non ci stanchiamo mai delle sfide legate all'alfabeto ...


La ricetta

Dato

  • una stringa di lettere Se
  • due interi positivi M, N,

produrre una zuppa di alfabeto con le lettere di Soccupare posizioni casuali in una ciotola rettangolare di dimensioni M× N, incorniciata da un carattere non alfabetico, non spaziale per rappresentare il bordo della ciotola.

Le posizioni non utilizzate dalle lettere devono essere visualizzate come spazi. Vedi gli esempi di seguito .

Regole Adizionali

  • La dimensione M× si Nriferisce all'interno della ciotola. La dimensione compreso il bordo è M+2× N+2.
  • Ogni personaggio di Sdovrebbe apparire una volta nella ciotola, in una posizione diversa ; cioè un personaggio non può sovrascriverne un altro.
  • S può contenere duplicati . Ad esempio, se Sè la stringa 'abcc', la zuppa deve contenere uno a, uno be due c(tutti in posizioni diverse).
  • Gli ingressi in grado di soddisfare le restrizioni M >= 1 , N >= 1, 1 <= length(S) <= M*N.
  • Il bordo della ciotola può essere qualsiasi carattere non alfabetico, non spaziale , coerente tra le esecuzioni del programma e i valori di input.
  • Le posizioni delle lettere nella ciotola sono casuali, quindi il risultato può variare ogni volta che il programma viene eseguito con gli stessi input.
  • Dato l'input, ogni possibile insieme di posizioni delle lettere dovrebbe avere una probabilità diversa da zero . Dal momento che questo non può essere verificato da alcune realizzazioni del programma, si prega di spiegare come il codice soddisfa questo.
  • Sono ammessi spazi bianchi iniziali o finali attorno al bordo.
  • Sconterrà solo lettere maiuscole . Se lo desideri, puoi scegliere di prendere solo lettere minuscole .
  • Ingresso e uscita sono flessibili come al solito. Ad esempio, l'output può essere una stringa con newline, una matrice di caratteri 2D o un elenco di righe.
  • Programmi o funzioni sono consentiti, in qualsiasi linguaggio di programmazione . Sono vietate le scappatoie standard .
  • Vince il codice più breve in byte.

Esempi

Gli input sono mostrati come S, [M N], dove Mè il numero di righe e il Nnumero di colonne. Il personaggio #è usato per il bordo.

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


"Le posizioni delle lettere nella ciotola sono casuali, [...]" <- vuoi dire può essere casuale o deve essere casuale? E tutte le righe possono avere sempre lo stesso numero di caratteri?
— Ismael Miguel,

@IsmaelMiguel Must . E ogni configurazione deve avere una probabilità diversa da zero (dichiarata nella sfida). Quindi questo esclude l'approccio sempre uguale
— Luis Mendo il

Il bordo può essere coerente tra le esecuzioni del programma e i valori di input, ma utilizzare più non lettere, ad esempio disegnando un bordo artistico ASCII |+-?
— Adám,

@ Adám Hm sto per dire di no, è un cambiamento troppo grande
— Luis Mendo il

Risposte:


13

05AB1E , 20 18 16 15 14 byte

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

Accetta tre input nell'ordine: altezza, larghezza, stringa. Output come un elenco 2D di caratteri.
Utilizza 8come bordo, ma potrebbe essere qualsiasi cifra.

-1 byte grazie a @Grimy .

Provalo online o verifica tutti i casi di test . (TIO contiene }}J»nel piè di pagina per stampare graziosamente il risultato; sentiti libero di rimuoverlo per vedere invece l'effettivo elenco di caratteri 2D in uscita).

Spiegazione:

*               # 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 In realtà dico solo la sfida 3 minuti fa. ;) È un'implementazione piuttosto semplice. Proverò a golf giù da qui.
— Kevin Cruijssen,

1
Molto bello, non ci ho pensato *j! Ecco 13 per l'eredità , o un brutto 14 per il moderno (genera un array di caratteri 2D).
— Grimmy,

1
@Grimy Il 13-byte sembra non riuscire per l'input 1,1,"O", quindi penso che debba essere il 14-byter anche per l'eredità. Grazie per -1 però.
— Kevin Cruijssen,

7

APL (Dyalog Unicode) , SBCS da 25 byte

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

Provalo online!

-22 grazie a @ngn, -7 grazie a @ngn e @ Adám

Spiegazione:

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

Gli angoli del bordo sono personaggi diversi

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

Provalo online!

Utilizzo di dfn per visualizzare la casella.


29: '#',∘⌽∘⍉⍣4⊢⍴∘(?⍨∘≢⊃¨⊂)↑⍨∘(×/) provalo online!
— Adám,

28: {'#',∘⌽∘⍉⍣4⊢⍵⍴⍺\⍨(≢⍺)>?⍨×/⍵}(o ≥invece di >if ⎕io=1)
— ngn

in realtà, 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)]

Provalo online!

Randomizza usando una setcomprensione e restituisce una matrice di caratteri 2D.


Bel uso della comprensione degli insiemi per randomizzare. +1. Ma i tuoi codici si basano sul nome 'f' della funzione. Perciò penso che la soluzione lambda non è valido ...
— agtoever

1
@agtoever Grazie! La funzione non è ricorsiva, quindi può essere anonima. Ti riferisci alla f'{s:{m*n}}'parte? Perché questa è la sintassi di una stringa formattata, che per coincidenza coincide anche con una f.
— Jitse il

3
Questo codice sembra violare PEP 8 in diversi modi.
— Christofer Ohlsson,

1
@ Christofer-Ohlsson assolutamente!
— Jitse il

2
@ChristoferOhlsson Benvenuti nel mondo del code-golf, ahah. ;) Nessun commento / documento di sorta; variabili / metodi a carattere singolo senza spazi / newline (non necessari); potenzialmente centinaia di avvisi del compilatore che semplicemente ignoriamo; aumento delle prestazioni da O (log (N)) a O (N ^ N); ecc. Se riesce a salvare anche un solo byte, va tutto bene e ne vale assolutamente la pena per giocare a golf. ;)
— Kevin Cruijssen il

5

Bash + coreutils, 139 125 caratteri

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

Esecuzione di esempio:

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

Provalo online!

Bash + coreutils + box, 97 caratteri

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

Esecuzione di esempio:

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

Provalo online! (Parzialmente, poiché boxesnon è installato su 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#
'

Provalo online!

Accetta input come $width, $hotto, $string.

Costruisce una stringa di idth #appropriata $w, stringa-unisce quella con un po 'di calcolo e quindi quella stessa #stringa di nuovo. Il calcolo inizia con il prendere la $sstringa di input e fare un .padRig htfino al $wminimo di $hotto lunghezze (cioè, fare una stringa abbastanza a lungo da occupare completamente lo spazio rettangolare. Quindi convertiamo quella stringa toCharArra y, e sortquesto Random. noi la parte centrale confusa . Alla fine, la -replacetrasformiamo in pezzi di uguale $widio, e circondiamo quei pezzi con #s.

-52 grazie all'ispirazione di AZTECCO
-18 byte grazie a mazzy


Hai 2 x casuali (12) mentre JS ne ha uno, ha aggiunto spazi per riempire la dimensione M * N e ordinato, dopo che purtroppo paghi ancora 21 per '$'
— AZTECCO il

1
@AZTECCO Grazie per l'ispirazione!
— AdmBorkBork

Grazie @mazzy - molto intelligente con -replaceinvece di dividere e unire.
— AdmBorkBork,

4

JavaScript (ES7), 125 byte

Restituisce una stringa. Utilizza 0come carattere cornice.

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

Provalo online!

Commentate

(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

Funzione anonimo di tacita infissione. Prende [M,N]come argomento sinistro eS come argomento giusto.

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

Provalo online!

×/⍛(...)  applica la seguente funzione tra gli argomenti, sostituendo l'argomento sinistro con il suo prodotto:

 ↑ prendere M×N caratteri da S, riempimento con spazi a destra

 ⊇ riordinalo nel seguente ordine:

 ?⍨⍤ gli indici mescolati da 1 a ...
 ⊣ l'argomento di sinistra ( M× N)

⍴ r eshape che per la forma seguente:

⊣ l'argomento sinistro (cioè Mrighe e Ncolonne)

'#'... ⍣4 applica la seguente funzione quattro volte, ogni volta con il carattere hash come argomento sinistro:
 ∘⍉ trasponi l'argomento destro
 ∘⌽ rispecchia l'argomento destro
 ,concatena una colonna di hash sul lato sinistro di quello


4

PHP 7.4, 107 99 94 caratteri

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

Grazie a:

  • Ismael Miguel per avermi ricordato le funzioni freccia di PHP 7.4 (-10 caratteri)
  • Night2 per invertire efficacemente le concatenazioni e iljoin() (-8 caratteri)
  • Night2 per mostrare come usare chunk_split()il $endparametro (-5 caratteri)

Provalo online!

PHP 7.3, 117 112 108 caratteri

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

Grazie a:

  • Night2 per invertire efficacemente le concatenazioni e i join()(-5 caratteri)
  • Night2 per mostrare come usare chunk_split()il $endparametro (-4 caratteri)

Esecuzione di esempio:

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

Provalo online!


1
Credo che 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";dovrebbe funzionare in PHP 7.4 ( wiki.php.net/rfc/arrow_functions_v2 ), ed è stato rilasciato un rilascio canditate ( wiki.php.net/todo/php74 ), quindi è arrivato un "compilatore" disponibile prima di questa sfida e chiunque può usarla.
— Ismael Miguel,

1
Doh, hai ragione. Leggi, ma dimenticato. (Nota a me stesso: la prossima volta, non appena letto Notte2 's punta Upvote troppo, forse aiuta a ricordare..)
— manatwork


1
Grazie, @ Night2. Non riesco a immaginare cosa ho fatto un casino ieri, poiché ho provato a spostare più cose all'interno join(), ma non sono riuscito a ridurne le dimensioni. ☹
— Manatwork

1
Ne ho anche uno più corto usando chunk_split: 94 byte Ho anche rimosso l'ultimo punto e virgola poiché credo che non sia necessario, hai scritto una funzione, quindi il codice che lo assegnerà a una variabile non dovrebbe essere conteggiato.
— Night2

3

MATL , 22 19 byte

tZ"ibpyn&Z@(TT35&Ya

Provalo online!

Grazie @LuisMendo per aver salvato 3 byte, quindi ora ha lo stesso numero di byte della risposta di @ flawr , ma sufficientemente diverso da pubblicare comunque. Panoramica sull'agoritmo di alto livello:

 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

Puoi cambiare Z}&Oda Z", e ciò ti consente anche di rimuovere la finalec
— Luis Mendo,

@LuisMendo Oh, questo aiuta molto! Vieni a pensarci bene, avrei dovuto almeno farlo 1$O.
— Sanchises,

3

Rubino , 121 byte

Crea il bowl, interroga gli indici di tutti gli spazi all'interno del bowl, campiona un numero di spazi uguale alla dimensione della stringa e li riempie. sampleNon restituisce un elenco ordinato, quindi non è necessario mescolare. La ricerca di indici fino a 9*m*n(che quasi certamente va oltre l'intervallo) otterrà comunque tutti gli spazi ed è 1 byte più breve di 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}

Provalo online!


3

Rosso , 120 116 114 112 byte

-2 byte grazie a @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]

Provalo online!


2
-2 byte eliminando + 1e usando to"""00"0 ninvece.
— Kevin Cruijssen,

1
@KevinCruijssen Grazie! L'ho sostituito con copy, per lo stesso numero di byte.
— Galen Ivanov,

1
Sembra davvero un po 'più pulito! Non conosco Red tranne le risposte che ho visto da te, quindi stavo solo scherzando un po '. ;) Mettere la tlinea come elemento iniziale / finale prima del loop per risparmiare sui due allentati print tsarebbe più breve? Ne dubito, ma dal momento che non so come aggiungere elementi a un elenco non sono sicuro.
— Kevin Cruijssen,

3

Perl 6 , 74 67 byte

-5 byte grazie a Jo King

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

Provalo online!

Spiegazione

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

Perl 5 -lF , 99 97 byte

-2 byte per gentile concessione di @NahuelFouilleul

%k=map{$_=>$F[$_]||$"}0..($m=<>)*($n=<>)-1;say+($p='#'x($n+1)),map"#
#"x!($i++%$n).$_,values%k,$p

Provalo online!


($i++%$n==0)potrebbe essere modificato da!($i++%$n)
— Nahuel Fouilleul il

3

k4, 32 28 byte

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

modifica: -4 grazie a Galen Ivanov!

chiamato come

f["hey";3 3]

spiegazione:

                 (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
Penso che puoi salvare alcuni byte se aggiungi solo #alla fine di ogni riga e trasponi / inverti 4 volte, qualcosa del genere .
— Galen Ivanov,

1
@GalenIvanov bello, aggiornato!
— scarabocchio

3

Java (JDK) , 180 178 byte

Non una singola importazione extra:

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

Provalo online!

È stata abbastanza difficile riuscire a sminuire il gioco. In particolare, le importazioni coinvolte con i metodi Collections.shuffle () / Arrays erano troppo da accettare, quindi ho dovuto creare il mio algoritmo di shuffling String (probabilmente né efficiente né distribuito uniformemente). Un enorme ringraziamento a Steven per aver dimostrato che qualsiasi serie di posizioni può essere generata algoritmo dall'algoritmo.

Formattato (con spiegazione):

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

Bella risposta! +1 da me. Una piccola cosa al golf: .replaceAll("(.{"+n+"})","\n#$1#")può diventare.replaceAll(".{"+n+"}","\n#$0#")
— Kevin Cruijssen il

@KevinCruijssen Grazie per il miglioramento :)
— Avi

2

Carbone , 27 byte

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

Provalo online! Il collegamento è alla versione dettagliata del codice. Accetta input in ordine larghezza, altezza, stringa. Spiegazione:

NθNη

Inserisci la larghezza e l'altezza.

↖B⁺²θ⁺²η#

Incornicia la ciotola.

FS«

Passa sopra i caratteri nella stringa.

W℅KKJ‽θ‽η

Salta in una posizione casuale nella ciotola fino a quando non viene trovato un punto vuoto.

Pι

Stampa il carattere corrente senza spostare il cursore.


È Move(:UpLeft)necessario? Funziona bene senza, ma forse l'hai aggiunto per un motivo a cui non penso?
— Kevin Cruijssen,

1
@KevinCruijssen Senza di essa non sarei mai in grado di scrivere lettere nella riga inferiore o nella colonna più a destra.
— Neil,

Ah, così è stato. Questo lo spiega, grazie!
— Kevin Cruijssen,

2

Japt -R , 21 18 byte

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

Provalo

ú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

Provalo online!

Grazie @LuisMendo per -8 byte!

Spiegazione: pcalcola il numero di pixel della zuppa. Quindi Z@produce una permutazione casuale delle dimensioni del numero di pixel della zuppa. Useremo questo come indici a iy~hcui è la stringa di input con abbastanza spazi aggiunti. w)scambia i due e indicizza l'uno con l'altro. Quindi rimodelliamo 1Gela forma nel rettangolo desiderato e la #premiamo usando TT35&Ya.


2
Intelligente! Il mio tentativo è stato di 22 byte
— Sanchises il

2
@Sanchises Vai a postarlo comunque!
— flawr

2

T-SQL 2017, 232 byte

Il test online è una versione precedente di sql-server che costa un altro personaggio. Ho pubblicato la versione più breve.

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

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

Provalo online!

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

Salvato 7 suggerimenti di @ceilingcat da usare - ~ variabile e memorizzazione automatica per la stringa o più molti miglioramenti.

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 

Suggerisci *a=--i;)*a++=i%m?-~i%m<3|i<m|i>m*n?35:32:10;for(;invece di--i;)*a++=i%m?-~i%m<3|i<m|i>m*n?35:32:10;for(*a=0;
— ceilingcat il

@ceilingcat dovrebbe funzionare ma per qualche motivo fornisce un output errato sugli ultimi 2 casi di test
— AZTECCO


1

Gelatina , 16 byte

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

Un collegamento diadico che accetta un elenco di numeri interi, [M, N]a sinistra e un elenco di caratteri S, a destra che produce un elenco di elenchi di caratteri, le linee. Utilizza il carattere tilde ~, come bordo.

Provalo online!

Tutte le possibili uscite hanno una probabilità diversa da zero di essere cedute poiché mescoliamo ( Ẋ) un elenco dei caratteri Sinsieme al numero appropriato di spazi.

Il codice Ṿ€«”~ZƊ⁺salva il byte che immagino sarebbe necessario unire con le nuove righe che i programmi completi che utilizzano un numero intero come zero dovrebbero impiegare (ad esempio P⁶ẋaẊs⁸Ṫ;€0ZUƊ4¡Yo P⁶ẋaẊs⁸Ṫj@€Ø0Z$⁺Y). Forse c'è un modo per risparmiare di più ...?

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.