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.