Зробіть мені місячний пиріг!


31

Фестиваль середини осені розпочався!

На жаль, всі мої торти були вкрадені - вони надто дорогі для маленьких людей, як я, і я побоююся, що цього року я не зможу їсти!

Тому я звертаюся до вас за допомогою. Чи зможете ви зробити мене?

Для тих, хто не знає, дозвольте мені навчити вас, як виглядає місячний торт.


Місячні пироги бувають різних розмірів!
Тож я дам вам свій внесок , n , коли я хочу його.

Ось кілька прикладів результату, який я хочу:

Місячний пиріг розміром n = 3:

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

Місячний пиріг розміром n = 6:

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

Тобто місячний пиріг розміром n дорівнює:

  • n рядків високо
  • 2n - 1 @ довжина
  • 2n + 1 символів (@ і дужки)

А вам краще не кидайте мені свої надто крихітні практичні місячні!
Припустимо, що вхід завжди буде n> = 3 .

Місячні торти також містять одне з наступних прикрас :

  • МФ
  • МАФ
  • HMF
  • JCJ
  • TTT
  • ZJ
  • НЧ
  • РФ
  • CF

Який із них не має значення - доки він вертикально та горизонтально по центру .
Це може бути написано і вертикально, або горизонтально!

Я хочу різноманітності!
Якщо ви дійсно збираєтеся зробити мені два однакових місячних торта, прикраса краще бути іншою!

Тобто багаторазове виконання вашої програми з точно однаковим входом не завжди повинно давати одне і те ж прикраса .

Я не можу чекати з'їсти торти з місяця, тому чим раніше я можу їх отримати ( чим коротший ваш код ), тим краще!

Щасти!


Для тих, хто цікавиться прикрасами:
вони є ініціалами всіх альтернативних назв фестивалю середини осені.
Список можна знайти на сторінці Вікіпедії, пов’язаній у верхній частині цієї публікації.


Роз'яснення:

Немає правил щодо пробілів та пробілів .
Майте стільки або так мало, як вам подобається!

Прикраси повинні бути в самому центрі вашого місячного торта!
Що стосується горизонтальних прикрас, це означає, що він повинен знаходитися на середній лінії вашого торта, а кількість символів, що знаходяться зліва та справа від рядка прикраси, має бути рівним.
На вертикальних прикрасах це означає, що він повинен знаходитися в середньому стовпчику вашого торта, а кількість символів вище та нижче прикраси має бути рівним.

Необхідно використовувати не всі прикраси!
Єдина вимога полягає в тому, що для будь-якого заданого вводу n повинно бути більше однієї можливості. Можливості також не повинні бути рівними.

Функції прийнятні.


2
Привіт, Ласкаво просимо до PPCG! Це виглядає як чудовий перший пост. зазвичай ми рекомендуємо використовувати пісочницю для запропонованих проблем . Там ви можете отримати зворотний зв’язок від інших та вдосконалити виклик тим, про що ви, можливо, не замислювалися, перш ніж розміщувати його тут. Якщо говорити, ваш виклик виглядає продуманим. +1 від мене. Хоча одне питання щодо вашого першого прикладу, чому він читається, MAFа ні MF? Я не бачу Aу ваших варіантах декорування.
Кевін Круїйсен

1
Спасибі! Вибачте, я не знав про пісочницю. Чи я вдається все-таки залишити саме цю? Щодо прикраси - то була помилка. Я додав МАФ до дозволених прикрас. Відгуки дуже вдячні!
Місячний кролик

1
Немає правил щодо провідних та кінцевих просторів. До вас!
Місячний кролик

3
Гей, мені потрібно вручну все це ввести в мою машинку для виготовлення місячних тортів, щоб отримати фактичні місячні пиріжки!
Місячний кролик

4
... в цьому випадку добре, що жодна з цих надуманих мов, які не мають ASCII наборів символів, не відросла голову, бо вони
набирають

Відповіді:


9

Pyth, 71 65 59 58 байт

Збережено 1 байт завдяки @StevenH.

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

Спробуйте в Інтернеті. Тестовий набір.

Стільки підкладки.


2
Нічого, наскільки ця відповідь відрізняється від тієї, що знаходиться під нею на тій же мові ...
Magic Octopus Urn

Ви можете зберегти один байт, замінюючи ?%Q2з @,(зворотний порядок двох варіантів) ... Q. Я (ab) багато що використовував у гольфі мою власну відповідь Pyth down.
Стівен Х.

@StevenH. Дякую, я завжди забуваю про модульну індексацію.
PurkkaKoodari

7

JavaScript ES6, 206 196 192 188 187 180 176 169 165 156 байт

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

Зламатися

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.

Моя перша спроба коду-гольфу. Це, ймовірно, може бути більше гольфу.

збережено 4 байти завдяки @ETHProductions

Редагувати я взяв на себе сміливість використовувати :Date.now()%2 new Date%2

багаторазове виконання вашої програми з точно однаковим входом не завжди має бути однаковою прикрасою

це дозволяє мені зберегти ще 7 байт +Math.random()>.5

зберегло ще 4 байти завдяки @Arnauld


Ласкаво просимо в PPCG, і чудова перша відповідь! Я вважаю, що ['MA','HA'][r]+'F'можна в гольф 'MH'[r]+'AF'.
ETHproductions

1
Ви можете зберегти два байти, замінивши [' R ',' C '][r]на " ${'RC'[r]} ", замінивши кожен "на зворотній вибір.
ETHproductions

1
І ['MA','HM'][r]+'F'насправді на два байти довше ['MAF','HMF'][r];)
ETHproductions

2
Ви можете використовувати ' @'[+!s]замість(s?' ':'@')
Арнольд

2
Також ви можете використовувати new Date%2замість Date.now()%2.
Арнольд

6

Pyth, 99 79 71 68 64 байт

Pyth дуже поганий, все гаразд у створенні рядків. А може, мені просто погано ставати краще в гольф з ними.

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

Можна створювати прикраси MAFі HMFгоризонтально, і прикраси, MFі CFвертикально.

Спробуйте в Інтернеті!


2
Ах, приємно бачити певну розробку персонажів у цій історії.
Місячний кролик

6

Vim, 118 байт

Вводиться як буфер (наприклад, файл із номером n як його вміст).

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

Ось це з недрукованими символами управління у форматі 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]..

Спробуйте в Інтернеті! (Як виявляється, інтерпретатор V працює чудово і для звичайного коду Vim.)

Пояснення

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

Вау приємно! Я думаю, це перша відповідь, яку я не бачив! Пара думок: 1) Коли ви вводите вхід в "аргументи", а не "введення", він визначає @aдо arg1, @bдо arg2 тощо, але це V особливість. Це технічно не має значення, оскільки у вас це було "aDна початку, але я просто думав, що це зазначу. 2) Ви можете зняти один байт, якщо зробили це dd@apзамістьY@apdd
DJMcMayhem

@DJMcMayhem на жаль dd@ap не працює .
Йорданія

dd@aPпрацює, але потім вимагає додаткової jта додаткової kнизхідній лінії.
Йорданія

5

PHP, 342 292 249 185 178 176 байт

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;

Подзвоніть з php -r '<code>' <size>

історія

Випуск 1: початкова версія; всі розміри (включаючи крихітні торти), всі прикраси, усі можливі напрямки

Rev. 2: вилучили крихітні торти (-36 байт), реструктуризовані варіанти декорування, видалили один предмет прикраси (-21) та один байт-гольф (-1).

Об’явлення 3: До чотирьох прикрас; (-17), лише горизонтальний для непарних розмірів (-18) плюс незначний гольф (-8).

Преподобність 4: Дякую Йоргу за те, що він заграв частину "фарбового торта"; він зняв дивовижний (-31).
Ще -6 з моїм додатковим гольфу, і -27 для використання однієї струни замість масиву струн.

Об’явлення 5: -7 байт здебільшого завдяки Крісталкексу

зламатися

Це стає худіше за годиною. :)

// 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örgHülsermann: Багато вдячності. Мені довелося прийняти подібний вираз !$i|$‌​i==$n-1?"@":" "; тернар просто не прийняв би ваше (на моїй машині), хоча це правильно.
Тит

спробуйте це, наприклад, на sandbox.onlinephpfunctions.com
Йорг Гюльсерманн

1
Це економить вам шість байт на торт фарби: for(;$i<$n=$argv[1];)$o.=str_pad("(@",2*$n-1," @"[$i++%($n-1)==0])."@)\n";Крім того , це виглядає , як ви отримали «MAD» Гра в гольф ваші DECOS ;-)
Christallkeks

4

Java 7, 399 349 байт

Оновлена ​​версія за допомогою @Dodge та @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',' '));}}

Спробуйте тут!

Нова версія набагато більш оптимізована та позбулася керування Stringмасивом. Крім того, як запропоновано, зараз є лише 4 прикраси: 2 для парних входів ( MF, ZJ) і 2 для непарних входів ( MAF, HMF), які об'єднані в єдиний String.

Безголовки:

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

Дякуємо за подання! Дозвольте уточнити, оскільки деякі користувачі пропустили це - не всі прикраси повинні бути включені. Я пішов вперед і відмітив це в розділі "Роз'яснення". Сподіваємось, це заощадить вам кілька байт! Я вірю, що ви все-таки зможете використовувати той самий метод для вибору прикрас.
Місячний кролик

4
Ха-ха, що стосується гольфу на Java, він також може включати всі прикраси;). +1, завжди, щоб хто-небудь з кульками вибивав Java-putter.
Чарівна восьминога урна

Чому "MAF"повторюється?
Cyoce

@carusocomputing Дуже вірно. На всякий випадок, хоча, я думав, що це згадаю. Приємно!
Місячний кролик

Дякую за відгук :) Правда, Java не дуже оптимальна для гри в гольф, але це дуже цікаво: P. Можливо, я міг би ефективніше використовувати петлі та ініціалізацію прикраси char[]та надалі обробляти інші речі. @Cyoce я дублював, MAFтому що тоді я маю всі прикраси для парного введення в індексах 0,2,4,6,8і всі прикраси для непарного введення в індексах 1,3,5,7,9. Це полегшує обчислення випадкового індексу для даного введення. Math.random()*5дає випадкове число з 0-4. *2поширює його на 0,2,4,6,8. +n%2додає 1для отримання непарних входів 1,3,5,7,9.
QBrute

3

Пакетна, 386 байт

@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%

Виводить лише HMF, MAF, MF або CF у відповідних випадках. Примітка: певні лінії закінчуються в пробілі. Змінні:

  • n Вхідний параметр (читати з STDIN)
  • fПрефікси прикраси (суфікс Fмається на увазі)
  • oНезвичайність n(використовується лише один раз, але ifвисловлювання не приймають вирази)
  • lРядок верхнього вертикального символу або 0для горизонтального декору
  • uРяд нижнього вертикального символу або 0для горизонтального декору
  • h Рядок горизонтального декору (перезаписується вертикальним декором)
  • d Індекс декору в префіксі декору (0/1 для горизонтального або 1/3 для вертикального)
  • cРядок n-3пробілів
  • s Вихідний рядок для кожного рядка
  • %1Номер рядка, але також встановлений nдля першого рядка, так що перший і останній рядки використовують @s замість пробілів.

3

C, 233 байт

Повинен би звідси трохи по гольфу ...

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

Великий виклик, це було важко і некрасиво кодувати.

Виконати з цим головним функцією;

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

2

Рубін 2.3.1, 449 265 245 233 230 символів

Схоже, має бути рубінова відповідь, тому ось рубінова відповідь. Це насправді не так розумно, сподіваюся, хтось тут стане розумнішим;)

Версія для гольфу:

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

Гольф-хитрощі:

  • замініть декларацію методу стабільною рядковою інтерполяцією
  • $ globals не потрібно # {global}, лише # $ global
  • === для діапазонів коротше, ніж .covers?

Читаема версія

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

Тестування

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

Я повторно доповнив без використання масиву, схоже, що всі так роблять.
Роб

1

Мені було нудно ... ось ще дві версії:

PHP, 193 байт

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

порт відповіді Лміса

PHP, 191 байт

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)]?:" ":"@":")
":"(";

друк символу торта за символом в одній петлі

зламатися

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 байт

Збив 17 байт за допомогою DJMcMayhem

Збив 4 байти завдяки mbomb007

Збив ще 12 байт завдяки DJMcMayhem

Збив ще 13 байт завдяки mbomb007

Мій перший гольф коли-небудь, тому це не все так здорово. Я використовував: псевдонім math.ceil як y і str.format як z, вкладення форматів, імпорт однієї лінії, лямбда та бітові операції плюс деякі інші речі, щоб отримати таке, як воно є.

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

Невикористана версія (роздільний імпорт, без псевдонімів та без побітної операції):

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

Цікаво, що використання небітової версії цієї версії все ще дає правильний вихід, однак вихід відрізняється:

Небітові:

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

Побіт:

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

ви можете перемістити імпорт із функції та змінити їх на from ... import*тип імпорту, щоб зберегти кілька байт
Blue

Приємна відповідь і ласкаво просимо на сайт! Кілька порад: 1. лямбда-функції коротші та 2. ви можете import math;y=math.ceilзняти два байти. Це дасть вам на 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)))13 байт коротше.
DJMcMayhem

@DJMcMayhem Дякую велике! Я оновив свою відповідь.
L. Steer

Радий, що можу допомогти! Ще одна річ, яку ви, напевно, могли б зробити, це псевдонім, formatоскільки ви її дуже називаєте. Проблема в тому, що я точно не знаю, як псевдонім до функції члена (наприклад str.format), тому вам доведеться трохи експериментувати. Я не впевнений, що було б коротше.
DJMcMayhem

4
Хороша робота! Я радий, що у вас щось вийшло з цієї вправи :) Однак я хотів би уточнити, що прикраса має бути в центрі, щоб відповідати специфікаціям виклику. Незалежно від того, чи вирішили ви змінити свій код, щоб це відобразити - чи можу я попросити вас зберегти поточний код і у своїй посаді? Хороших зусиль варто дотримуватися, навіть якщо воно нехтує одним із правил.
Місячний кролик

0

C # 448 байт

Гольф:

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

Перевірте це тут

Безголовки:

        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);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.