首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >给我做个月饼!

给我做个月饼!
EN

Code Golf用户
提问于 2016-09-15 07:07:31
回答 3查看 3.6K关注 0票数 31

中秋节已经开始了!

不幸的是,我所有的月饼都被偷了--对像我这样的小人物来说,月饼太贵了,我恐怕今年吃不下了!

所以我求助于你。你能给我做一些吗?

对于那些不知道的人,让我教你月饼是什么样子的。

月饼有很多种大小!

所以当我想要的时候,我会给你我的意见。

下面是我想要的输出的一些例子:

大小月饼n= 3:

代码语言:javascript
复制
    (@@@@@)  
    (@MAF@) 
    (@@@@@) 

大小月饼n= 6:

代码语言:javascript
复制
    (@@@@@@@@@@@) 
    (@         @)
    (@    M    @) 
    (@    F    @)
    (@         @)
    (@@@@@@@@@@@) 

也就是说,大小为n的月饼是:

  • N线高
  • 2N-1 @s龙
  • 2n +1个字符长(@s和括号)

你最好别把你的小月饼扔给我!

假设输入总是n >= 3。

月饼还包括下列装饰之一:

  • MF
  • MAF
  • HMF
  • JCJ
  • TTT
  • ZJ
  • LF
  • 射频
  • CF

哪个不重要,只要它是垂直的和水平的中心。

它可以是垂直的也可以是水平的!

我要多样化!

如果你真的要给我做两个同样的月饼,装饰最好是不同的!

也就是说,具有完全相同输入的程序的多次执行不一定总是产生相同的装饰。

我等不及要吃你的月饼了,所以我越早收到它们(你的代码越短)越好!

祝好运!

对于那些对这些装饰品感到好奇的人:

它们是中秋节所有其他名字的首字母.

在这篇文章的顶部链接的维基百科页面上可以找到一个列表。

Clarifications:

没有关于前导和尾随空格的规则。

想吃多少就吃多少!

这些装饰品一定在你月饼的正中!

在水平装饰品上,这意味着它必须在蛋糕的中线上,装饰字符串左右的字符数必须相等。

在垂直装饰上,这意味着它必须驻留在蛋糕的中间栏中,并且装饰上面和下面的字符数必须相等。

不是所有的装饰品都必须使用!

唯一的要求是,对于任何给定的输入,必须有一种以上的可能性。这些可能性也不需要是偶数。

功能是可以接受的。

EN

回答 3

Code Golf用户

发布于 2016-09-15 18:56:17

C,233 Bytes

从这里开始应该可以把这个打下去.

代码语言:javascript
复制
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++);}

巨大的挑战,这是困难和丑陋的代码。

用这个主要功能运行;

代码语言:javascript
复制
main(c,v)char**v;
{
    f(atoi(v[1]));
}
票数 3
EN

Code Golf用户

发布于 2016-09-15 19:27:46

批处理,386字节

代码语言:javascript
复制
@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
EN

Code Golf用户

发布于 2016-09-20 11:48:57

C# 448字节

高尔夫球:

代码语言:javascript
复制
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);

测试它这里

未高尔夫球:

代码语言:javascript
复制
        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);
票数 0
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/93288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档