首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >“我的世界”

“我的世界”
EN

Code Golf用户
提问于 2015-07-27 17:57:08
回答 8查看 7.3K关注 0票数 50

我是卡尔文。只是想得到20个代表,这样这个用户就可以在PPCG迷你服务器聊天室中聊天了。

编写接受正整数的程序或函数。

如果整数为偶数(2,4,6,.),则打印或返回精确的ASCII艺术字符串:

代码语言:javascript
运行
复制
                       __    __   __             __  ___
  /\  /\    |  |\  |  |     /    |  |     /\    |     |
 /  \/  \   |  | \ |  |--  |     |--\    /__\   |--   |
/        \  |  |  \|  |__   \__  |   \  /    \  |     |

如果整数是奇数(1,3,5,.),则打印或返回这个精确的ASCII艺术字符串:

代码语言:javascript
运行
复制
                       __    __
\        /  |  |  /|  |     /    |   /  \ __ /  |     |
 \  /\  /   |  | / |  |--  |     |--/    \  /   |--   |
  \/  \/    |  |/  |  |__   \__  |__|     \/    |__  _|_

您可以假设输入始终是正整数。

在这两种输出情况下,都可能有任意数量的尾随空格到每一行"T“的右侧,和/或一条拖尾换行符。注意每个字母之间有两列空格。

以字节为单位的最短代码获胜.

EN

回答 8

Code Golf用户

发布于 2015-07-28 07:28:43

Pyth-182字节

使用基本编码方法。因为在Pyth中索引是模块化的,所以我甚至不需要为偶数做任何事情,只需将其按正确的顺序排列,并使用@Q。作为一种奖励,这也适用于负数。

代码语言:javascript
运行
复制
@mjbcs@L"_| /\\-"jCd6 56,"EWbòH\x00B)þK٣ĭIOõìæ«FFãbÐÄBØ\«¼,vã<RN>­º:w÷ò¾<éifP9e|ÉWf!FÔèà""EWbòH\x00B)þOHÿ$@ËþçX'D[¾«Â?°´=&£üá ¹»ázHׯz3äkÕg{`!|ðY!ðGV"Q

我只尝试编码第一行,然后翻转和切换斜杠,但第一行和最后一行太难了。

我可以通过在代码中添加实际的空字节来保存6个字节,但这太麻烦了。

在网上试一试

因为输出框太小,所以在网上看起来很糟糕。我建议修改开发控制台,并将col-md-5更改为col-md-7

票数 10
EN

Code Golf用户

发布于 2015-07-28 22:37:51

C,251个字节

代码语言:javascript
运行
复制
k(w){char*f="_-/\\|]^^^\0<&*&)&3&(&&WX&J&*&\0t_&/&3&\0`);35)I5M\0a).@7).8-;./.-\0j()(0(1+4()(*+4+4()(04+",*o=f+4,m[229]="",i=7,c=10,p;for(memset(m,32,228);i;c=*f++^(w%2&i--/2==2)*115)for(p=0;*++o;m[(w%2?4-i/6-p/57:p/57)*57+p%57]=c)p+=*o-37;printf(m);}

这是一个函数k,它接收一个参数并将消息打印到stdout

一个更易读的版本:

代码语言:javascript
运行
复制
k(w)
{
    char*f="\n_-/\\|", // characters to fill in
        *o= " "// for each character, the list of positions to put it in, difference-encoded
        "]%%^^^\0"                  // for '\n' (newline)
        "<&*&)&3&(&&WX&J&*&\0"      // for '_' (underscore)
        "t_&/&3&\0"                 // for '-' (minus)
        "`);35)I5M\0"               // for '/' or '\' (slashes)
        "a).@7).8-;./.-\0"          // for '\' or '/' (slashes)
        "j()(0(1+4()(*+4+4()(04+",  // for '|' (vertical bar)
        m[229]="",  // message to generate
        i, // index of character, running 7...1
        c, // current character to fill in
        p, // where to place the character
        y; // y-coordinate of the character

    memset(m,32,228); // fill the message with spaces
    for(i=7;--i;)
    {
        c=*f++;
        c^=~w%2|i/2^1?0:115; // flip the direction of slashes, if needed
        for(p=0;*++o;)
        {
            p+=*o-37; // jump to next position
            y=p/57; // extract the y-coordinate
            y=w%2?4-i/5-y:y; // flip the y-coordinate, if needed
            m[y*57+p%57]=c; // place the character
        }
    }
    printf(m); // print the message
}

首先,它准备一个空消息(填充空格)。对于每个字符(例如|-),它都有一个位置列表来放置该字符。

对于每个位置,如果应该打印颠倒版本,则位置将被翻转。也就是说,将其垂直坐标y替换为4-y3-y (取决于该字符是否为下划线)。另外,斜杠的方向被翻转--这是由带有XOR115执行的。

这种控制结构也被用来放置换行符--在列表中增加4个坐标似乎比写一个显式循环更有效。

这个系统有一些小故障。首先,在翻转版本中,最后一个字母T看起来有点不同:

代码语言:javascript
运行
复制
___ 
 |    |
 |    |
 |   _|_

要正确输出它,代码必须将|字符放在_字符之后。

此外,为了确保控制字符串只包含ASCII字符,我对其进行了编码:

  • 它记录了位置之间的差异,而不是位置本身--这缩小了范围。
  • 字符串中的数字添加了37,以将它们转换为ASCII范围32.127。我可以添加一个较小的数字,但是37避免了像"\这样的字符,这些字符必须在字符串文本中转义。
  • 其中两个数字大于127,例如,第一个-字符出现在137号位置。为了说明这一点,我在另一个位置( 79 )添加了一个人工-字符,该字符后来被覆盖--字符|也出现在位置79。

另一件有趣的事情是,我不能使用puts输出字符串-这将产生额外的尾随换行符。所以我用printf代替。

此外,数字57在金色代码中出现了4次--看似冗长的表达式(w%2?4-i/6-p/57:p/57)*57+p%57使消除变量y成为可能,从而使代码更短。

票数 3
EN

Code Golf用户

发布于 2015-07-28 07:31:43

CJAM,206

这两个ascii图片是基-216编码,一个字节=3个字符。

代码语言:javascript
运行
复制
" _\/|-":A;S7*"!D!D"+:B;qi2%{B"h  °°¤8 2 °2,J° °"",4# °³8=Ô° Ó\"# Ó °""\"z °Â89D-D·° z ·!¶"}{B"'    '!J"+"#h °¼88 2 °°  ° °""2/\" °²8=Ô° Óh#L Ó °""  h°°9D-D°,2 h° °"}?]{{i32-__36/A=@6/6%A=@6%A=}/N}/

测试它这里

票数 2
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

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

复制
相关文章

相似问题

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