Сделай мне лунный пирог!


31

Праздник середины осени начался!

К сожалению, все мои лунные пирожные были украдены - они становятся слишком дорогими для маленьких людей, таких как я, и я боюсь, что я не смогу есть в этом году!

Поэтому я обращаюсь к вам за помощью. Вы могли бы сделать мне немного?

Для тех, кто не знает, позвольте мне рассказать вам, как выглядит лунный пирог.


Mooncakes бывают разных размеров!
Так что я собираюсь дать вам мой вход , н , когда я хочу один.

Вот несколько примеров вывода, который я хочу:

Лунный пирог размером n = 3:

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

Лунный пирог размером n = 6:

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

То есть лунный пирог размером n :

  • п строк высоко
  • 2n - 1 @s long
  • Длина 2n + 1 символов (@s и скобки)

И тебе лучше не бросать мне свои крошечные тренировочные лунные пирожные!
Предположим, что ввод всегда будет n> = 3 .

Mooncakes также содержат одно из следующих украшений :

  • MF
  • MAF
  • HMF
  • JCJ
  • ТТТ
  • ZJ
  • LF
  • РФ
  • CF

Какой, это не имеет значения - до тех пор, пока это вертикально и горизонтально по центру .
Это может быть написано вертикально или горизонтально тоже!

Я хочу разнообразия!
Если ты действительно собираешься сделать мне два одинаковых лунных пирога, украшения лучше будут отличаться!

То есть многократное выполнение вашей программы с одним и тем же вводом не всегда должно давать одинаковое оформление .

Я не могу дождаться, чтобы съесть твои лунные пирожные, поэтому чем раньше я получу их ( чем короче твой код ), тем лучше!

Удачи!


Для тех, кто интересуется декорациями:
они являются инициалами всех альтернативных названий фестиваля середины осени.
Список можно найти на странице Википедии, на которую есть ссылка в верхней части этого поста.


Разъяснения:

Нет никаких правил относительно пробелов в начале и в конце .
Имей столько, сколько хочешь!

Украшения должны быть в самом центре вашего лунного пирога!
На горизонтальных декорациях это означает, что он должен находиться на средней линии торта, а количество символов слева и справа от строки декорации должно быть одинаковым.
На вертикальных декорациях это означает, что он должен находиться в средней колонке вашего торта, а количество символов над и под декорацией должно быть одинаковым.

Не все украшения должны быть использованы!
Единственное требование состоит в том, что для любого заданного ввода n должно быть более одной возможности. Возможности также не должны быть четными.

Функции приемлемы.


2
Привет, добро пожаловать в PPCG! Это похоже на отличный первый пост. Обычно мы рекомендуем использовать Песочницу для предлагаемых испытаний . Там вы можете получить обратную связь от других, и решить проблему с вещами, о которых вы, возможно, не думали, прежде чем опубликовать его здесь. При этом ваш вызов выглядит хорошо продуманным. +1 от меня. Один вопрос относительно вашего первого примера, хотя, почему он читает, MAFа не MF? Я не вижу Aв твоих вариантах оформления.
Кевин Круйссен

1
Благодарность! Извините, я не знал о песочнице. Я могу оставить только этот? Насчет украшения - это было ошибкой. Я добавил MAF к разрешенным украшениям. Обратная связь очень ценится!
Лунный Кролик

1
Нет никаких правил относительно пробелов в начале и в конце. Вам решать!
Лунный кролик

3
Эй, мне нужно вручную ввести все это в мою машину Mooncake, чтобы получить настоящие Mooncakes!
Лунный Кролик

4
... в этом случае хорошо, что ни один из этих придуманных языков с наборами символов, не относящихся к ASCII, не поднял голову, потому что набирать их было
сложно

Ответы:


9

Pyth, 71 65 59 58 байт

Сохранено 1 байт благодаря @StevenH.

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

Попробуйте онлайн. Тестирование.

Так много прокладок.


2
Это чокнутый, насколько этот ответ отличается от ответа ниже на том же языке ...
Волшебная урна осьминога

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

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

Пиф очень плохо умеет делать струны. Или, может быть, я просто плохо играю в гольф.

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>

Вау круто! Я думаю, что это первый недетерминированный ответ VIM, который я видел! Пара мыслей: 1) Когда вы вводите ввод в «аргументы», а не «ввод», он предопределяет @aarg1, @barg2 и т. Д., Но это особенность V. Технически это не имеет значения, так как у вас есть "aDв начале, но я просто подумал, что укажу на это. 2) Вы могли бы снять один байт, если бы dd@apвместо этогоY@apdd
DJMcMayhem


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>

история

Rev 1: начальная версия; все размеры (включая крошечные пирожные), все украшения, все возможные направления

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

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

Откр. 4: Спасибо Йоргу за то, что он играл в гольф в части «рисованный пирог»; он снял удивительно (-31).
Еще -6 с моим дополнительным игрой в гольф и -27 за использование одной струны вместо массива струн.

Откр. 5: -7 байт в основном благодаря Christallkeks

сломать

Это становится стройнее с каждым часом. :)

// 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», играющий в гольф ваши деко ;-)
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.

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

Спасибо за представление! Позвольте мне уточнить, поскольку несколько пользователей пропустили это - не все украшения должны быть включены. Я пошел дальше и выделил это в разделе «разъяснения». Надеюсь, это сэкономит вам несколько байтов! Я считаю, что вы все равно сможете использовать тот же метод для выбора украшений.
Лунный кролик

4
Ха-ха, в том, что касается Java-игры в гольф, он может также включить все украшения;). +1, всегда, для тех, у кого есть яйца, чтобы вытащить Java-клюшки.
Волшебная Урна Осьминога

Почему "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

Ruby 2.3.1, 449 265 245 233 230 символов

Похоже, что должен быть ответ ruby, так что вот ответ ruby. Это действительно не так умно, надеюсь, кто-то еще здесь будет умнее;)

Гольф версия:

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

порт Lmis´ ответа

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

Питон 3, 318 301 297 285 272 байта

Сбил 17 байт с помощью DJMcMayhem

Сбил 4 байта благодаря mbomb007

Сбил ещё 12 байт благодаря DJMcMayhem

Сбил ещё 13 байтов благодаря mbomb007

Мой первый в мире гольф, так что это не так уж и здорово. Я использовал: aliasing 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)))

Интересно, что использование не побитовой версии этого все еще производит правильный вывод, однако, вывод отличается:

Non-побитовое:

(@@@@@@@)
(@     @)
(@  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 Большое спасибо! Я обновил свой ответ.
Л. Стир

Рад, что смог помочь! Еще одна вещь, которую вы, вероятно, могли бы сделать, это псевдоним, formatпоскольку вы часто это называете. Проблема в том, что я точно не знаю, как создать псевдоним для функции-члена (например str.format), поэтому вам придется немного поэкспериментировать. Я не уверен, что это будет короче, хотя.
DJMcMayhem

4
Хорошо сделано! Я рад, что вы получили что-то из этого упражнения :) Тем не менее, я хотел бы уточнить, что украшение должно быть в центре, чтобы соответствовать техническим требованиям. Решите ли вы изменить свой код, чтобы отразить это, могу ли я попросить вас сохранить текущий код в своем посте? Хорошее усилие стоит сохранить, даже если оно пренебрегает одним из правил.
Лунный Кролик

0

C # 448 байт

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

Проверьте это здесь

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);
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.