Fammi un mooncake!


31

Il festival di metà autunno è iniziato!

Sfortunatamente, tutti i miei mooncake sono stati rubati - stanno diventando troppo costosi per i piccoli come me e temo di non poterne mangiare quest'anno!

Quindi mi rivolgo a te per chiedere aiuto. Potresti farmene un po '?

Per chi non lo sapesse, lascia che ti istruisca su come appare un mooncake.


I Mooncakes sono disponibili in diverse dimensioni!
Così sto andando darvi il mio ingresso , n , quando voglio uno.

Ecco alcuni esempi dell'output che voglio:

Mooncake di dimensioni n = 3:

    (@@@@@)  
    (@MAF@) 
    (@@@@@) 

Mooncake di dimensione n = 6:

    (@@@@@@@@@@@) 
    (@         @)
    (@    M    @) 
    (@    F    @)
    (@         @)
    (@@@@@@@@@@@) 

Vale a dire, un mooncake di taglia n è:

  • n righe alte
  • 2n - 1 @s di lunghezza
  • Lunghezza 2n + 1 caratteri (@s e parentesi)

E faresti meglio a non lanciarmi i tuoi mooncakes di pratica troppo piccoli!
Supponiamo che l'input sia sempre n> = 3 .

Mooncakes contiene anche una delle seguenti decorazioni :

  • MF
  • MAF
  • HMF
  • JCJ
  • TTT
  • ZJ
  • LF
  • RF
  • CF

Quale, non importa, purché sia centrato verticalmente e orizzontalmente .
Può essere scritto anche in verticale o in orizzontale!

Voglio varietà!
Se hai davvero intenzione di farmi due dello stesso mooncake, è meglio che la decorazione sia diversa!

Cioè, esecuzioni multiple del tuo programma con lo stesso input esatto non devono sempre produrre la stessa decorazione .

Non vedo l'ora di mangiare le tue torte lunari, quindi prima posso riceverle ( più breve è il tuo codice ), meglio è!

In bocca al lupo!


Per quelli che si chiedono le decorazioni:
sono le iniziali di tutti i nomi alternativi per il Mid-Autumn Festival.
Un elenco è disponibile nella pagina Wikipedia collegata nella parte superiore di questo post.


chiarimenti:

Non ci sono regole per quanto riguarda gli spazi bianchi iniziali e finali .
Avere tanto o poco quanto vuoi!

Le decorazioni devono essere al centro del tuo mooncake!
Sulle decorazioni orizzontali, ciò significa che deve trovarsi sulla linea centrale della torta e che il numero di caratteri a sinistra e a destra della stringa della decorazione deve essere uguale.
Sulle decorazioni verticali, ciò significa che deve risiedere nella colonna centrale della torta e che il numero di caratteri sopra e sotto la decorazione deve essere uguale.

Non tutte le decorazioni devono essere utilizzate!
L'unico requisito è che ci deve essere più di una possibilità per ogni dato input n . Inoltre, non è necessario che le possibilità siano pari.

Le funzioni sono accettabili


2
Ciao, benvenuto in PPCG! Sembra un ottimo primo post. di solito consigliamo di utilizzare Sandbox per le sfide proposte . Lì puoi ottenere feedback dagli altri e perfezionare la sfida con cose a cui potresti non aver pensato, prima di pubblicarlo qui. Detto questo, la tua sfida sembra ben ponderata. +1 da me. Una domanda riguardante il tuo primo esempio, perché legge MAFe no MF? Non vedo un Anelle tue opzioni di decorazione.
Kevin Cruijssen,

1
Grazie! Spiacente, non ero a conoscenza della sandbox. Sono in grado di lasciare solo questo comunque? Per quanto riguarda la decorazione, è stato un errore. Ho aggiunto MAF alle decorazioni consentite. Feedback molto apprezzato!
Moon Rabbit,

1
Non ci sono regole per quanto riguarda gli spazi iniziali e finali. Sta a te!
Moon Rabbit,

3
Ehi, devo digitare manualmente tutto questo nella mia macchina per mooncake per ottenere i mooncake effettivi!
Moon Rabbit,

4
... nel qual caso è bene che nessuno di quei linguaggi inventati con set di caratteri non ASCII abbia alzato la testa, perché è un dolore da digitare :)
GreenAsJade

Risposte:


9

Pyth, 71 65 59 58 byte

Salvato 1 byte grazie a @StevenH.

jjRc"(@@)"2++J*KtytQ\@m.[Kd;.[ttQ@,,O"MC"\F]Oc"MAFHMF"3QkJ

Provalo online. Suite di test.

Tanta imbottitura.


2
È pazzesco quanto sia diversa questa risposta da quella sottostante nella stessa lingua ...
Magic Octopus Urn

È possibile salvare un byte sostituendo ?%Q2con @,(invertire l'ordine delle due scelte) ... Q. Ho abusato molto nel golfare la mia risposta Pyth in giù.
Steven H.

@StevenH. Grazie, mi dimentico sempre dell'indicizzazione modulare.
PurkkaKoodari,

7

JavaScript ES6, 206 196 192 188 187 180 176 169 165 156 byte

g=(n,r=new Date%2,a=(s,x,b=' @'[+!s].repeat(n-3+!x))=>`(@${b+(s||'@')+b}@)
`,l=a` `.repeat(n/2-2+n%2))=>a()+l+(n%2?a(r?'MAF':'HMF',1):a('RC'[r])+a`F`)+l+a()

Abbattersi

r=new Date%2                           // Sometimes 0, sometimes 1

// Function to create lines of the cake of the form `(@@@@@@@@@)` or `(@  ${s}  @)`
a=(s,x,b=' @'[+!s].repeat(n-3+!x))=>`(@${b+(s||'@')+b}@)
`

// Cake parts
a()                                    // Top of the cake.
l=a` `.repeat(n/2-2+n%2)               // Undecorated inner part.
a(r?'MAF':'HMF',1)                     // Decoration for uneven sized cakes.
a('RC'[r])+a`F`                        // Decoration for even sized cakes.
l                                      // Undecorated inner part.
a()                                    // Bottom part.

Il mio primo tentativo di code-golf. Questo probabilmente può essere giocato a golf di più.

salvato 4 byte grazie a @ETHProductions

Modifica Mi sono preso la libertà di usare per soddisfare:Date.now()%2 new Date%2

esecuzioni multiple del tuo programma con lo stesso input esatto non devono sempre produrre la stessa decorazione

questo mi permette di salvare altri 7 byte +Math.random()>.5

salvato altri 4 byte grazie a @Arnauld


Benvenuti in PPCG e ottima prima risposta! Credo che si ['MA','HA'][r]+'F'possa giocare a golf 'MH'[r]+'AF'.
ETHproductions

1
È possibile salvare due byte sostituendoli [' R ',' C '][r]con " ${'RC'[r]} ", sostituendo ciascuno "con un backtick.
ETHproductions

1
Ed ['MA','HM'][r]+'F'è in realtà due byte più lungo di ['MAF','HMF'][r];)
ETHproductions

2
Puoi usare ' @'[+!s]invece di(s?' ':'@')
Arnauld il

2
Inoltre, puoi usare new Date%2invece di Date.now()%2.
Arnauld,

6

Pyth, 99 79 71 68 64 byte

Pyth è pessimo nel creare stringhe. O forse sto solo male nel migliorare il loro golf.

jmj.[-yQ3@,k@,@,O"MC"\FgydQOc"MAFHMF"3Q>2ahydQ@" @"sIcdtQc2"(@@)

Può creare le decorazioni MAFe in HMForizzontale, e le decorazioni MFe in CFverticale.

Provalo online!


2
Ahh, è bello vedere un po 'di sviluppo del personaggio in questa storia.
Moon Rabbit,

6

Vim, 118 byte

Accetta l'input come buffer (ad es. Un file con il numero n come contenuto).

"aDi()<Esc>@ai@<Esc>.xY@apddll<C-v>G$k3hr @=@a/2-1
j@=@a-2-@a%2
l:let r=abs(reltime()[1])%2
@=@a%2?r?"RJCJ":"3rT":"rFkr"."ML"[r]
<Esc>

Eccolo con i caratteri di controllo non stampabili in formato xxd:

0000000: 2261 4469 2829 1b40 6169 401b 2e78 5940  "aDi().@ai@..xY@
0000010: 6170 6464 6c6c 1647 246b 3368 7220 403d  apddll.G$k3hr @=
0000020: 4061 2f32 2d31 0a6a 403d 4061 2d32 2d40  @a/2-1.j@=@a-2-@
0000030: 6125 320a 6c3a 6c65 7420 723d 6162 7328  a%2.l:let r=abs(
0000040: 7265 6c74 696d 6528 295b 315d 2925 320a  reltime()[1])%2.
0000050: 403d 4061 2532 3f72 3f22 524a 434a 223a  @=@a%2?r?"RJCJ":
0000060: 2233 7254 223a 2272 466b 7222 2e22 4d4c  "3rT":"rFkr"."ML
0000070: 225b 725d 0a1b                           "[r]..

Provalo online! (A quanto pare, anche l'interprete V funziona bene per il normale codice Vim.)

Spiegazione

"aD                   " Delete the number and store it in @a
i()<Esc>              " Insert empty parentheses
@ai@<Esc>.x           " Insert @a '@' characters between the parentheses twice; delete 1
Y@apdd                " Copy the line and paste it @a times; delete 1
ll<C-v>G$k3hr<Space>  " Replace the inner area with spaces
@=@a/2-1<CR>j         " Go down @a/2-1 lines
@=@a-2-@a%2<CR>l      " Go right @a-2-@a%2 columns
:let r=reltime()[1]%2<CR>  " Get a random 1 or 0 based on the time (this may be OS-dependent)
@=@a%2?
   r?"RJCJ":"3rT"     " For odd @a, replace the next 3 characters with "JCJ" or "TTT"
  :"rFkr"."ML"[r]     " For even @a, replace this character with "F" and the above with "M" or "L"
<CR><Esc>

Wow carino! Penso che questa sia la prima risposta vim non deterministica che abbia mai visto! Un paio di pensieri: 1) Quando metti l'input in "argomenti" piuttosto che in "input", predeterminano @aarg1, @barg2, ecc. Ma questa è una caratteristica specifica V. Tecnicamente non ha importanza dal momento che hai "aDall'inizio, ma ho pensato di segnalarlo. 2) Potresti togliere un byte se dd@apinvece diY@apdd
DJMcMayhem

@DJMcMayhem dd@ap non funziona del tutto purtroppo.
Giordania,

dd@aPfunziona, ma richiede quindi un ulteriore je un ulteriore kdown the line.
Giordania,

5

PHP, 342 292 249 185 178 176 byte

for(;$i<$n=$argv[1];)$o.=str_pad("(@",2*$n-1," @"[$i++%($n-1)<1])."@)
";$p=F.[M,AM,R,MH][rand()&2|$d=$n&1];$f=$n*($n+$d)-2;for($i=2+$d;$i--;$f+=$d?:2*$n+2)$o[$f]=$p[$i];echo$o;

Chiama con php -r '<code>' <size>

storia

Rev 1: versione iniziale; tutte le dimensioni (comprese le piccole torte), tutte le decorazioni, tutte le direzioni possibili

Rev. 2: rimosse piccole torte (-36 byte), opzioni di decorazione ristrutturate, rimosso un elemento di decorazione (-21) e un golf a byte singolo (-1).

Rev. 3: fino a quattro decorazioni; (-17), solo orizzontale per dimensioni dispari (-18) più golf minore (-8).

Rev. 4: Grazie a Jörg per aver giocato a golf nella parte "torta di vernice"; si è tolto un fantastico (-31).
Un altro -6 con il mio golfing aggiuntivo e -27 per l'utilizzo di una singola stringa anziché una matrice di stringhe.

Rev. 5: -7 byte principalmente grazie a Christallkeks

abbattersi

Questo sta diventando più sottile di ora in ora. :)

// paint cake
for(;$i<$n=$argv[1];)$o.=str_pad("(@",2*$n-1," @"[$i++%($n-1)<1])."@)\n";

// add deco
$p=F.[M,AM,R,MH][rand()&2|$d=$n&1];
$f=$n*($n+$d)-2;
for($i=2+$d;$i--;$f+=$d?:2*$n+2)$o[$f]=$p[$i];

// output
echo$o;

1
for($i=0;$i<$n=$argv[1];$i++){$o[]=str_pad("(@",2*$n-1,!$i|$i==$n-1?"@":" ")."@)";}
Jörg Hülsermann,

@ JörgHülsermann: Mille grazie. Ho dovuto prendere un'espressione simile per !$i|$‌​i==$n-1?"@":" "; il ternario non accetterebbe il tuo (sulla mia macchina), anche se è corretto.
Tito,


1
Questo ti fa risparmiare sei byte sulla vernice per torte: for(;$i<$n=$argv[1];)$o.=str_pad("(@",2*$n-1," @"[$i++%($n-1)==0])."@)\n";Inoltre, sembra che tu abbia "MAD" giocando a golf con le tue decorazioni ;-)
Christallkeks,

4

Java 7, 399 349 byte

Versione aggiornata con l'aiuto di @Dodge e @Kevin Cruijssen:

void m(int n){int i=2,r=n%2,x=2*n,u=r+2,y=r*4+(int)(Math.random()*2)*u,z=y+u;String t="MFZJMAFHMF".substring(y,z);char[][]c=new char[n][x+1];while(i<x-1)c[0][i]=c[n-1][i++]=64;for(i=0;i<u;)c[(n-1)/2+(1-r)*i][r*(i-1)+n]=t.charAt(i++);for(i=0;i<n;){c[i][0]=40;c[i][1]=c[i][x-1]=64;c[i][x]=41;System.out.println(new String(c[i++]).replace('\0',' '));}}

void m(int n){String[]s={"MF","MAF","ZJ","HMF","LF","JCJ","RF","TTT","CF","MAF"};char[]d=s[((int)(Math.random()*5))*2+(n%2)].toCharArray(),c[]=new char[n][2*n+1];int i=2;while(i<2*n-1)c[0][i]=c[n-1][i++]='@';i=0;while(i<d.length)c[(n-1)/2+(1-(n%2))*i][(n%2)*(-1+i)+n]=d[i++];i=0;while(i<n){c[i][0]='(';c[i][1]=c[i][2*n-1]='@';c[i][2*n]=')';System.out.println(new String(c[i++]).replace('\0',' '));}}

Provalo qui!

La nuova versione è molto più ottimizzata e si è sbarazzata della Stringgestione dell'array. Inoltre, come suggerito, ora ci sono solo 4 decorazioni: 2 per input pari ( MF, ZJ) e 2 per input dispari ( MAF, HMF) che sono combinati in un singolo String.

Ungolfed:

void m(int n){
    int i=2,
    r=n%2,
    x=2*n,
    u=r+2, // length of the decoration string
    y=r*4+(int)(Math.random()*2)*u, // random starting index of string (0, 2, 4, 7)
    z=y+u; // exclusive end index of string (2, 4, 7, 10)
    String t="MFZJMAFHMF".substring(y,z);
    char[][]c=new char[n][x+1];
    while(i < x-1) {
        c[0][i]=c[n-1][i++]=64; // '@'
    }
    for(i=0; i<u;) {
        c[(n-1)/2+(1-r)*i][r*(i-1)+n]=t.charAt(i++); // Depending on even/odd, fills the center column/row respectively with the decoration
    }
    for(i=0; i<n;) {
        c[i][0]=40; // '('
        c[i][1]=c[i][x-1]=64; // '@'
        c[i][x]=41; // ')'
        System.out.println(new String(c[i++]).replace('\0',' ')); // Print all
    }
}

Grazie per l'invio! Vorrei chiarire, poiché alcuni utenti l'hanno perso - non tutte le decorazioni devono essere incluse. Sono andato avanti e ho coraggioso questo nella sezione "chiarimenti". Spero che questo ti farà risparmiare qualche byte! Credo che saresti ancora in grado di utilizzare lo stesso metodo per selezionare le decorazioni.
Moon Rabbit,

4
Haha, per quanto riguarda il golf di Java, potrebbe anche includere tutte le decorazioni;). +1, sempre, per chiunque abbia le palle per tirare fuori il putter Java.
Magic Octopus Urn,

Perché si "MAF"ripete?
Cyoce,

@carusocomputing Molto vero. Nel caso, però, ho pensato di menzionarlo. Bello!
Moon Rabbit,

Grazie per il tuo feedback :) È vero, Java non è molto ottimale per giocare a golf, ma è abbastanza divertente farlo: P. Forse potrei usare i loop e l'inizializzazione della decorazione in modo char[]più efficiente e golf altre cose ulteriormente. @Cyoce Ho duplicato MAFperché poi ho tutte le decorazioni per un input uniforme negli indici 0,2,4,6,8e tutte le decorazioni per un input dispari negli indici 1,3,5,7,9. Ciò semplifica il calcolo dell'indice casuale per un determinato input. Math.random()*5dà un numero casuale da 0-4. *2lo diffonde a 0,2,4,6,8. +n%2aggiunge 1per ottenere input dispari 1,3,5,7,9.
QBrute,

3

Lotto, 386 byte

@echo off
set/pn=
set f=HMAC
set/ao=n%%2,u=n/2,l=h=u+1,d=%random%%%2*2+1
if %o%==1 set/al=u=0,d/=2
set c=
for /l %%i in (4,1,%n%) do call set c= %%c%%
call:l %n%
for /l %%i in (2,1,%n%) do call:l %%i
exit/b
:l
set s=   
if %1==%h% call set s=%%f:~%d%,2%%F
if %1==%u% call set s= %%f:~%d%,1%% 
if %1==%l% set s= F 
set s=(@%c%%s%%c%@)
if %1==%n% set s=%s: =@%
echo %s%

Produrrà solo HMF, MAF, MF o CF come appropriato. Nota: alcune linee terminano con uno spazio bianco. variabili:

  • n Parametro di input (letto da STDIN)
  • fPrefissi di decorazione (il suffisso Fè implicito)
  • oStranezza di n(usato solo una volta, ma le ifdichiarazioni non accettano le espressioni)
  • lFila del carattere verticale superiore, o 0per una decorazione orizzontale
  • uFila del carattere verticale inferiore, o 0per una decorazione orizzontale
  • h Fila della decorazione orizzontale (viene sovrascritta da una decorazione verticale)
  • d Indice di decorazione nel prefisso della decorazione (0/1 per orizzontale o 1/3 per verticale)
  • cStringa di n-3spazi
  • s Stringa di output per ogni riga
  • %1Numero di riga, ma impostato anche su nper la prima riga, in modo che sia la prima che l'ultima riga utilizzino @s anziché gli spazi.

3

C, 233 byte

Dovrebbe essere in grado di giocare a golf un po 'da qui ...

A="HMFMAFCF";i,j,k,t;f(n){t=time();char*S=n&1?t&1?A:A+3:t&1?A+1:A+6;for(;i<n;i++,puts(")"))for(j=0,k=2*n-1,putchar(40);j<k;putchar(0==i*j|i==n-1|j==k-1?64:n&1&i==n/2&j>n-3&j<n+1?*S++:n&1?32:(i==n/2-1|i==n/2)&j>n-2&j<n?*S++:32),j++);}

Grande sfida, questo è stato difficile e brutto da programmare.

Esegui con questa funzione principale;

main(c,v)char**v;
{
    f(atoi(v[1]));
}

2

Ruby 2.3.1, 449 265 245 233 230 caratteri

Sembra che ci dovrebbe essere una risposta rubino, quindi ecco una risposta rubino. Non è poi così intelligente, si spera che qualcun altro qui sia più intelligente;)

Versione golfizzata:

def m(n)
d,s=n.odd?? [[%w{MAF HMF}.sample],n/2]:[%w{RF LF}.sample.chars,(n-2)/2]
r=->f{l=f.size;q=($i-l)/2;($c=' '*$i)[q...l+q]=f;puts "(@#$c@)"}
$i=2*n-1;a='@'*$i
r[a]
(1..n-2).map{|x|(s...s+d.size)===x ?r[d[x-s]]:r['']}
r[a]
end

Trucchi per il golf:

  • sostituire la dichiarazione del metodo con un'interpolazione della stringa di stabby di
  • $ globals non ha bisogno di # {global}, solo # $ global
  • === per gli intervalli è inferiore a .covers?

Versione leggibile

def row(inner_width, fillchar='')
  padding = ( inner_width - fillchar.size) / 2
  (center =(' ' * inner_width))[padding...fillchar.size+padding]=fillchar
  puts "(@"+center+"@)"
end

def mooncake(n)
  decoration = n.odd?? [%w{ MAF HMF JCJ TTT }.sample] : %w{ ZJ LF RF CF }.sample.chars
  start_row = n.odd?? (n/2) : (n - 2) / 2
  inner_width = 2 * n - 1
  row(inner_width,'@'*inner_width)
  (1...(n-1)).each do |row|
    if (start_row ... start_row + decoration.size).include? row 
      row(inner_width,decoration[row - start_row])      
    else
      row(inner_width)      
    end
  end
  row(inner_width,'@'*inner_width)
end

analisi

mooncake(3)
mooncake(4)
mooncake(5)
mooncake(6)

Ho reimplementato senza usare l'array, sembra che tutti lo stiano facendo.
Rob,

1

Ero annoiato ... ecco altre due versioni:

PHP, 193 byte

function p($s){global$n;return"(@".str_pad($s,2*$n-3,$s?" ":"@",2)."@)
";}$p=[M,MA,R,HM][rand()&2|1&$n=$argv[1]];echo p(""),$e=str_repeat(p(" "),($n+$n%2)/2-2),$n&1?p($p.F):p($p).p(F),$e,p("");

una porta della risposta di Lmis

PHP, 191 byte

for($p=[M,MA,R,HM][rand()&2|1&$n=$argv[1]].F;$i<$n*$w=2*$n+1;$i++)echo($x=$i%$w)?$w-1-$x?($y=$i/$w|0)%($n-1)&&1-$x&&$w-2-$x?$p[$n&1?$n>>1!=$y?9:$x-$n+1:($n-$x?9:$y-$n/2+1)]?:" ":"@":")
":"(";

stampa il carattere della torta per carattere in un singolo ciclo

abbattersi

for(
    $p=[M,MA,R,HM][rand()&2|1&$n=$argv[1]].F;   // pick decoration
    $i<$n*$w=2*$n+1;$i++)       // loop $i from 0 to $n*width-1:
echo                                // print ...
    $w-1-($x=$i%$w)                 // 1. not last column
        ?$x                         // 2. not first column
            ?
                ($y=$i/$w|0)%($n-1) // 3. not first or last line
                && 1-$x%($w-3)      // and not second or (width-2)th column
                ?$p[$n&1
                    ?$n>>1!=$y?3:1+$x-$n
                    :($n-$x?3:1+$y-$n/2)
                ]   ?               // 4. decoration character
                    :" "            // 4. else: blank
                :"@"                // 3. else: "@"
            :"("                    // 2. else: "("
        :")\n"                      // 1. else: ")"+newline
    ;

0

Python 3, 318 301 297 285 272 byte

Chiuso 17 byte con l'aiuto di DJMcMayhem

Chiuso 4 byte grazie a mbomb007

Chiuso altri 12 byte grazie a DJMcMayhem

Chiuso altri 13 byte grazie a mbomb007

Il mio primo golf in assoluto, quindi non è poi così eccezionale. Ho usato: aliasing math.ceil come y e str.format come z, formati di nidificazione, importazioni a riga singola, lambda e operazioni bit a bit più alcune altre cose per ottenere questo come è.

def f(n):import random,math;y=math.ceil;z=str.format;i=y(2*n-5>>1);j=y(n-3>>1);return z("{a}{}{a}",z("{d}(@{}{b}F{c}@)\n{e}"," "*i,b=random.sample(["L","R"],1)[0],c=" "*(2*n-5-i),d=z("(@{}@)\n"," "*(2*n-3))*j,e=z("(@{}@)\n"," "*(2*n-3))*(n-3-j)),a=z("({})\n","@"*(2*n-1)))

Versione non golfata (importazioni separate, nessun alias e nessuna operazione bit a bit):

def f(n):
    import random;
    import math;
    return "{a}{}{a}".format(
        "{d}(@{}{b}F{c}@)\n{e}".format(
            " "*(math.ceil((2*n-5)/2)),
            b=random.sample(["L","R"],1)[0],
            c=" "*((2*n)-(5+math.ceil((2*n-5)/2))),
            d="(@{}@)\n".format(" "*(2*n-3))*math.ceil((n-3)/2),
            e="(@{}@)\n".format(" "*(2*n-3))*(n-(3+(math.ceil((n-3)/2))))),
        a="({})\n".format("@"*(2*n-1)))

È interessante notare che l'utilizzo della versione non bit per bit produce comunque un output corretto, tuttavia l'output è diverso:

Non-bit a bit:

(@@@@@@@)
(@     @)
(@  LF @)
(@@@@@@@)

bit a bit:

(@@@@@@@)
(@ LF  @)
(@     @)
(@@@@@@@)

è possibile spostare le importazioni fuori dalla funzione e modificarle per from ... import*digitare le importazioni per salvare alcuni byte
Blu

Bella risposta, e benvenuta nel sito! Un paio di suggerimenti: 1. le funzioni lambda sono più brevi e 2. si potrebbe fare import math;y=math.ceilper togliere due byte. Questo ti darebbe import random;import math;y=math.ceil;lambda n:"{a}{}{a}".format("{d}(@{}{b}F{c}@)\n{e}".format(" "*(y((2*n-5)/2)),b=random.sample(["L","R"],1)[0],c=" "*((2*n)-(5+y((2*n-5)/2))),d="(@{}@)\n".format(" "*(2*n-3))*y((n-3)/2),e="(@{}@)\n".format(" "*(2*n-3))*(n-(3+(y((n-3)/2))))),a="({})\n".format("@"*(2*n-1)))che è di 13 byte in meno.
DJMcMayhem

@DJMcMayhem Grazie mille! Ho aggiornato la mia risposta.
L. Steer

Sono contento di poterti aiutare! Un'altra cosa che probabilmente potresti fare è alias, formatdato che la chiami molto. Il problema è che non so esattamente come fare alias di una funzione membro (come str.format), quindi dovresti sperimentare un po '. Non sono sicuro che sarebbe più breve però.
DJMcMayhem

4
Bel lavoro! Sono contento che tu abbia tratto qualcosa da questo esercizio :) Tuttavia, vorrei chiarire che la decorazione deve essere centrata per adattarsi alle specifiche della sfida. Che tu decida o meno di cambiare il tuo codice per riflettere questo - posso chiederti di mantenere anche il codice attuale nel tuo post? Vale la pena fare un buon sforzo, anche se trascura una delle regole.
Moon Rabbit

0

C # 448 byte

golfed:

var v=n%2==0;int l=n+n-3,h=n-2,e=v?0:1,c=e+2;var c2=v?"MFZJLFRFCF":"MAFHMFJCJTTT";var r=new Random().Next(3+e);var f=new String(c2.Skip(c*r).Take(c).ToArray());var mc="";for (var i=0;i < h;i++) {var x="";if (!v && i==((h / 2))) { x=f;} else if (v && ((i==h / 2) || (i==(h/2)-1))) { x +=f[i%2==1?0:1];} var es=x.PadLeft((l/2)+1+e,' ').PadRight(l,' ');mc +="(@"+es+"@)\n";}var b="("+"".PadLeft(l+2, '@')+")";mc=b+"\n"+mc+ b; Console.WriteLine(mc);

Provalo qui

Ungolfed:

        var v = n % 2 == 0;
        int l = n + n - 3, h = n - 2, e = v ? 0 : 1, c = e + 2;
        var c2 = v ? "MFZJLFRFCF" : "MAFHMFJCJTTT";
        var r = new Random().Next(3 + e);
        var f = new String(c2.Skip(c * r).Take(c).ToArray());
        var mc = "";
        for (var i = 0; i < h; i++)
        {
            var x = "";
            if (!v && i == ((h / 2)))
            {
                x = f;
            }
            else if (v && ((i == h / 2) || (i == (h / 2) - 1)))
            {
                x += f[i % 2 == 1 ? 0 : 1];
            }
            var emptySpace = x.PadLeft((l / 2) + 1 + e, ' ').PadRight(l, ' ');
            mc += "(@" + emptySpace + "@)\n";
        }
        var b = "(" + "".PadLeft(l + 2, '@') + ")";
        mc = b + "\n" + mc + b;
        Console.WriteLine(mc);
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.