猫叫“喵”


31

cat 去“喵”

我们都熟悉cat程序的概念。用户输入一些内容,它回显给用户。简单。但是cat到目前为止,我所见过的所有程序都遗漏了一个事实:cat“喵”。所以,你的任务是写一个程序,将所有STDINSTDOUT ,除非输入是cat,在这种情况下,你的程序应该输出cat goes "Meow"

计分

这是,因此得分是字节数,带有一些修饰符:

  • 如果您的程序适用于除cat(例如cow: cow goes "Moo")以外的其他任何动物,则对于每个其他动物:-10
  • 如果您的程序不使用“ cat”一词:-15
  • 如果您的程序响应fox“狐狸怎么说”:-25

动物和声音并存:

cow goes moo duck goes quack sheep goes baa bees go buzz frogs go croak

此列表上的任何其他内容均被允许。

规则

  • 适用标准漏洞
  • 你绝对不能写任何东西给 STDERR
  • 您可以使用单引号/无引号代替双引号。

排行榜

这是一个堆栈片段,用于按语言生成常规排行榜和获胜者概述。

为确保您的答案显示出来,请使用以下Markdown模板以标题开头。

## Language Name, N bytes

N您提交的文件大小在哪里。如果您提高了分数,则可以将旧分数保留在标题中,方法是将它们打掉。例如:

## Ruby, <s>104</s> <s>101</s> 96 bytes

如果要在标头中包含多个数字(例如,因为您的分数是两个文件的总和,或者您想单独列出解释器标志罚分),请确保实际分数是标头中的最后一个数字:

## Perl, 43 + 2 (-p flag) = 45 bytes

您还可以将语言名称设置为链接,然后该链接将显示在页首横幅代码段中:

## [><>](http://esolangs.org/wiki/Fish), 121 bytes


16
对于奖金:狐狸怎么说?
Stewie Griffin 2015年

1
对于奖金:每增加一只动物都可以是单数形式,还是像您的清单中的“蜜蜂”总是必须是复数形式?
ProgramFOX


1
您可以使用单引号代替双引号吗?另外,您可以输出到stderr吗?
蓝色

Answers:


17

Pyth,231-255 = -24个字节

-24 * 10个额外的动物,没有“ cat”字符串的-15个

pzI}zJv.Z"xÚ]Arà E¯âñMOÛ|°
Ø¢mÞ½`&ÉR¯'_ãPÍm1;ñÝ|,F ¹×z#½öÂ÷ÜAPúõMh#Ì©UOC *CѰk%¹ö´qÌzj,å<&{jàRFÖ(¥s    ñ`GÂ:çkô#ù\M+üqíéaw ÑuW6Lã,¶w/'87ö×_r]¢:jkz»ÚFÙ¦ÈcÅËØíëûÖOa¿Þµ´6 ø¡ãEþþ:"jk(" goes "N@JzN

链接到代码

伪码

Auto assign z to input
print z
J = decompress animal-sound dict
if z in J:
    print " goes ", J[z], '"'

它知道的动物:

{'hare': 'squeak', 'seal': 'bark', 'lion': 'growl', 'rook': 'hiss', 'sheep': 'baa', 'hamster': 'squeak', 'moose': 'bellow', 'grasshopper': 'chirp', 'rhinoceros': 'bellow', 'cat': 'meow', 'tiger': 'growl', 'stag': 'bellow', 'crow': 'caw', 'okapi': 'bellow', 'snake': 'hiss', 'cicada': 'chirp', 'badger': 'growl', 'dog': 'bark', 'cricket': 'chirp', 'tapir': 'squeak', 'bird': 'chirp', 'sparrow': 'chirp', 'lamb': 'baa', "frog": "croak", "raven": "croak"}

16
我觉得奖金应该是-10%,而不是-10个字节。这样会减少收益,以防止发生此类滥用行为。(而且每次都会乘以10%,而不是原始乘积的10%,否则无论代码多久,您只需要10只动物就可以得到0分。)
Darrel Hoffman

@DarrelHoffman对于将来的所有挑战,我都会牢记这一点。

好吧,您成功地使我的头部爆炸了,我不再知道狐狸在说什么。+1
kirbyfan64sos 2015年

乌鸦嘶哑?
魔术章

@carusocomputing据维基百科说。我认为他们squalk自己走了
Blue

7

TeaScript29-15 = 14个字节

不使用string cat

xr(/^c\at$/,'$& goes "Meow"')

“狐狸怎么说”(长度= 21)长于奖金的价值。


狐狸奖金现在值得!

5

CJam,12个字节

q_:)"dbu"=" goes \"Meow\""*

该程序的长度为27个字节,不使用单词cat-15个字节)。

CJam解释器中内联尝试。

怎么运行的

q_                e# Read all input and push a copy.
:)                e# Increment all code points of the copy.
"dbu"=            e# Push 1/0 if the result is/isn't "dbu".
" goes \"Meow\""* e# Repeat the string that many times.

10
我喜欢笑脸:)
ETHproductions 2015年

4

APL(Dyalog)28-15 = 13个字节

{⍵,' goes "Meow"'/⍨⍵≡⌽'tac'}

输入,goes "Meow"如果输入等于tac反向。

在线尝试!

{} 匿名功能

⌽'tac' 反转字符串(通过避免字符来获得-15的奖励cat

⍵≡ 布尔值,用于确定参数是否与此相同

' goes "Meow"'/⍨ 使用它来过滤字符串(即,如果为false,则返回空字符串)

⍵, 附加到参数



3

JavaScript,45-15 = 30 /264-235 = 29

alert((s=(d='MeowBuzzSongMooMooCawBarkQuackCroakHissOinkBaaSingRoarLowCooCawBarkBaaHissCryRoarSingC\x61tBeeBirdCattleCowCrowDogDuckFrogHorseHogLambLarkLionOxPigeonRookSealSheepSnakeSwanTigerWhale'.split(/(?=[A-Z])/))[d.indexOf(i=prompt())-23])?i+' goes "'+s+'"':i)

缺点:您必须以第一字母大写,其余字母小写来写动物的名字。在下面查找可以解决此问题的另一个版本。此版本a使用\x61以下代码转义了in猫,并包括该列表中另外22种动物的代码(所有允许的动物,其单词的简短程度都值得):

蜜蜂嗡嗡声7
鸟之歌8

cow 9 牛mo 6
乌鸦7
狗吠7
鸭嘎嘎9
青蛙9
马嘶嘶声9
猪o 7
羔羊baa 7
百灵唱8
狮子吼8
牛低5
鸽子咕9
鸦鸦7
海豹皮8
羊ba 8
蛇嘶嘶声9
天鹅哭泣7
虎吼9
鲸鱼唱9

(感谢我的朋友帮助我完成了列出这份繁琐的任务)

取消程式码:

data = 'MeowBuzzSongMooMooCawBarkQuackCroakHissOinkBaaSingRoarLowCooCawBarkBaaHissCryRoarSingC\x61tBeeBirdCattleCowCrowDogDuckFrogHorseHogLambLarkLionOxPigeonRookSealSheepSnakeSwanTigerWhale'.split(/(?=[A-Z])/);

input = prompt();
index = data.indexOf(input);
sound = data[index-23];
result = sound ? input + ' goes "' + sound + '"' : input;
alert(result);

第一版,45字节-15奖励= 30

alert((i=prompt())=='\x63at'?i+' goes "Meow"':i)

是的我知道。所有这些额外的工作使我从30岁增加到29岁。好玩!

允许完全小写输入的版本,294字节-235奖励= 59

alert((s=(d='MeowBuzzSongMooMooCawBarkQuackCroakHissOinkBaaSingRoarLowCooCawBarkBaaHissCryRoarSingC\x61tBeeBirdCattleCowCrowDogDuckFrogHorseHogLambLarkLionOxPigeonRookSealSheepSnakeSwanTigerWhale'.split(/(?=[A-Z])/))[d.indexOf((i=prompt())[0].toUpperCase()+i.slice(1))-23])?i+' goes "'+s+'"':i)

我还尝试了使用删除数据数组中的大小写,.join().toLowerCase().split(',')但最终改为使用297个字符。


编辑:固定的引号和喵喵的大写字母(尽管问题与大写字母不一致)
Domino

而且...我的工作已经完成,证明-10奖金就足够了:)
多米诺骨牌


2

GNU sed,37-15 = 22字节

sed -r 's/^(\x63at)$/\1 goes "Meow"/'

sed'/ ^ c [a] t $ / s / $ /转到“喵” /',节省了一些字节。但是新的5%奖金与没有“猫”的原始15字节奖金相比毫无价值。
Glenn Randers-Pehrson,2015年

@ GlennRanders-Pehrson再也没有了!

2

MATLAB,58-15 = 43字节

非常简单,不使用cat代码会带来一些好处:

x=input('');if isequal(x,'dbu'-1);x=[x ' goes "Meow"'];end;x

输入必须用单引号引起' '


在当前形式下,如果输入“ cat”作为输入,则无法正确输出。您可能在if语句中忘记了x =
slvrbld

但是,我还会给您一些技巧,以赢回这些字节以及额外的2:替换您的整个if语句为:if〜any(x-'dbu'+ 1)
slvrbld

@slvrbld,感谢您的注意,它是在我进行编辑后发生的。顺便说一句:您的建议不适用于非3个字符的输入。=)
Stewie Griffin 2015年

嗯,是的。我太专注于猫和狐狸,忘了剩下的。
slvrbld

2

Javascript,117个字节

for(c=0,s="bee.Buzz.bird.Song.c\at.Meow.cow.Moo.crow.Caw.dog.Bark.oxen.Low.owl.Who.rook.Caw.sheep.Baa.swan.Cry".split('.'),p=prompt(),a=![];c<s.length;c+=2){if(p==s[c])a=c}if(!a)alert(p=='fox'?'What does the fox say':p);else alert(s[a]+' goes "'+s[a+1]+'"')

我当然没有在这里赢过,但是我已经介绍了很多额外的动物。

Javascript,31个字节

p=prompt();alert(p=='c\at'?p+' goes "Meow"':p)

2

HALT,71-15 = 56字节

1 IF "cat" 2 ELSE 3
2 TYPE "MEOW";HALT
3 SET 0;NEXT
4 INCREMENT;STORE 0

HALT是我(@Downgoat)专为字符串处理而设计的一种语言,唯一的问题是它有点长

格式化的

1              IF "cat" 2 ELSE 3
2 TYPE "MEOW"; HALT
3 SET 0      ; GOTO 6
4 INCREMENT  ; STORE 0

2

Python 3,81 70 55 46-15 = 31个字节

感谢Stewie Griffin节省了15个字节

感谢grc节省了8个字节。

不使用字符串cat会产生-15个字节。

y=input()
print(y+' goes "Meow"'*(y=="ca""t"))


1

Perl,46-15 = 31

$_=join'',<>;s/(?<=^ca)t$/t goes "Meow"/;print

1

Ruby,49 46 50-15 = 35个字节

我猜很简单。不使用猫。

$<.map{|l|puts l==?c+'at
'??c+'at goes "Meow"':l}

编辑:感谢@ w0lf保存3个字节!


显然不需要chopideone.com/lTpShD
Cristian Lupascu 2015年

@ w0lf“ cat \ n”!=“ cat”(至少对我不起作用)我猜测ideone的STDIN没有尾随换行符
Peter Lenkefi

公平地说,我知道我的例子错了。那么你可以考虑做这个缩短的代码。
Cristian Lupascu 2015年

@PeterLenkefi,您的代码中还剩下几只猫……您忘了更新吗?
Stewie Griffin

@StewieGriffin该死的我做到了!我的多任务处理今天不是最重要的。但是5分钟后,我会再次更新。
彼得·伦克菲

1

PHP,1204-(10 * 64)-15-20 = 529字节

<?php $i = $argv[1];$s = json_decode(gzuncompress(hex2bin("78da555351b2db200cbc8a27dfee057a1b192bc018104f40dcbccebb7b25d9499d8fcc588b10abddcddf1b64e4e8a04c3bd1eac86db7df3774e136dfa0744c5451805688bb400bac1e5900cfb42703ba1e3bc6e3ce82dabe8cef6f2d22af52b910b95ad93b72d173a22c8083f4d0f63bc75c131aa2e332d2ae45886e43ed7769082f438afc52027df46b20182af457b83c24537ad2c199484b99f6fe669dd9afcd6cc70ef67972a03bb8c10915abb12aa995bc7206deac48555818a9e80ea46cf8142020fe0aa0ccd761327e0db00e046f745426d0c531610d22af609d47aea8dade91d998ad447aebcef6aef0b32d7d64b8df4ddd84a0173c436b816a35475efbf8110bc254a3bf6a1420b76e7d1788f1a346ceb14f8e61b98c0bc44ddb0a46afe284582b55ea9087e1af2004236b3999278a452726c8cb8bef3c2d0086b14ad362f1f3b4032fe67b8aa59cae88742744aab26ccff3f47a2583af11ad0f344c0a1119910553b2d864929562270577b14a87d10635ea351a3e0895572ffd11f0f8ac0867fadf36898668249c65a732448e387de481c1c96931272598863c8ed09ec6b17020874c5792ac1e5bea8ee234c7c238df1a42faff449360552b55c05660d3d5426c4dcb0a7c26f874ac75f0d7a7da0e079da7145d74f848418fc71f5a75d652947a4e1edd469715fae023e29e96c3b0c748027e847a87c4ef4cc893820438722f666bc9a6cb69facf3f28e87499")));echo array_key_exists($i,$s)?"$i goes {$s->$i}":($i=="fox"?"What does the $i say":$i);

我使用动物声音的json编码gz压缩数组。这意味着它可以与所有65种允许的动物一起使用,但是我的脚本非常庞大。也适用于狐狸,并且没有cat这个词。



1

Beam208206-15 = 191字节

这不是竞争性的参赛作品,但是有点有趣。它针对来检查输入的字母的第一个字母cat。如果不匹配,它将快捷方式转到标准cat程序。如果匹配,它将追加goes "Meow"

'''''''''>`\/n@>`)'''>`++\
/++++++++++/r /SP''+(++++/
\+)'PSrn@--S/ \rn@`>`)rn'''''>`++++++)++@P'p++++@'p-----@`p++@'p-@``p@++@'''''>`+++++++++)--@'p++@'p-----@++++++++@``p++@H
/@<  (`<     < `<    ''<
>ruH

1

Java = 222字节(压缩)

public class A {public static void main(String[] args) {Scanner a=new Scanner(System.in);for(;;){String b=a.nextLine();if(!b.equalsIgnoreCase("cat"))System.out.println(b);else {System.out.println("meow");System.exit(0);}}}

或者我可以解压缩它。

批次= 52字节

set /p k=
if "k"=="cat" (echo cat) ELSE (echo %k%)

1

Javascript:48个字符,48个字节

function(s){return (s=="cat")?"cat goes meow":s}

测试

=>“狗”

<=“狗”

=>“猫”

<=“猫叫”


干得好!您可以在圆括号中加上括号s=="cat"。而且,猫的弦应该是cat goes "Meow",因此'function(s){return s=="cat"?'cat goes "Meow"':s}完全有效。
ETHproductions 2015年

如果您想节省更多,可以使用ES6:s=>s=="cat"?s+' goes "Meow"':s(30字节)
ETHproductions 2015年

@ETHproductions哦,太好了!我不知道这种语法,也许是链接?
Fuzzyzilla 2015年

@Fuzzyzilla它是JavaScript新版本“ ES6”的一部分,链接到新函数的语法概述。这里也为ES6技巧JavaScript的一般技巧
Downgoat

1

Haskell,52-15 = 37字节

c"\99at"="\99at goes \"Meow\""
c s=s
main=interact c

使用\99如“猫”针对c替代品,从而获得15个字节的奖金。


1

O22 16 14字节

29个字节-15

Q“ tac”`J = J“是\”喵\“” + Q?

很长,可以打更多的高尔夫球



1

Pyth,82-95 = -13个字节

+z*}zKc."atÜiÃ'4ãl¾Eªîiû<-È&e"\jjk[d"goes"dNr@c."bw««[áÅ3ÏB"\c%x`Kz3 3N

我终于开始将新的功能性Python 2条目转换为Pyth。它没有击败最高竞争者。事实证明,与将动物与声音巧妙地关联在一起相比,将更多的动物拉到更大的词典中可以更快地降低得分。除猫外,这还支持8种动物:犀牛,霍加api,驼鹿,狮子,老虎,badge,河马和鹿。

在线尝试


1

Japt,25-15 = 10 24-15 = 9个字节

第一次尝试Japt:

N¦`¯t`?N:`¯t goƒ \"´ow\"

ƒ应替换为不可打印字符U+0083 编译为:

N!="cat"?N:"cat goes \"meow\""

旧解决方案:

N¥`¯t`?`¯t goƒ \"´ow\"`:N

在这里尝试


挺好的!抱歉,反斜杠是必需的,我以为我已经解决了。
ETHproductions 2013年

由于代码包含Markdown丢弃的不可打印字符,请您添加一个链接?
ETHproductions 2016年

添加了链接,以及为什么会U+0083被替换U+0192ƒ运行此代码段的原因:"\u0083".charCodeAt()
通用用户

I have no clue. I can't seem to reproduce this.
ETHproductions

1

Pyth, 26-15 (no "cat") = 11 bytes

My first ever Pyth program!

Iqz_"tac"+z" goes meow";Ez

Try it here

Explaination

   _"tac"                   # Reverse the string "tac"
Iqz                         # If the input equals "tac" reversed
         +z" goes meow";    # Append " goes meow"
                        Ez  # Else, use the input.
                            # Implicit: print the input, if it's used.

1

C++11, 316 - 11*10 - 15 = 191 bytes

#include <map>
#define t(a,b){#a,#b},
using s=std::string;int main(){std::map<s,s>m{t(cow,moo)t(crow,caw)t(dog,bark)t(hog,oink)t(lark,sing)t(lion,roar)t(oxen,low)t(rook,caw)t(seal,bark)t(sheep,baa)t(swan,cry){"c""at","meow"}};s l;while(int i=~getchar())l+=~i;printf("%s",(m[l]==""?l:l+" goes \""+m[l]+'"').c_str());}

使用VisualStudio可以很好地编译。海湾合作委员会希望我#include <string>#include <cstdio>。如果我不申请奖金,那会更短一些,但我仍然希望作者能修改奖金。我想不出语言在哪里定义cow -> moo or so is way way shorter than 10bytes. Mine cost 3+key+value bytes for additional animal and flat 22+17 bytes for defining structure and so.

不打高尔夫球

#include <map>

#define t(a, b) { #a, #b },
using s = std::string;
int main()
{
    std::map<s, s> m{
        t(cow,moo)
        t(crow,caw)
        t(dog,bark)
        t(hog,oink)
        t(lark,sing)
        t(lion,roar)
        t(oxen,low)
        t(rook,caw)
        t(seal,bark)
        t(sheep,baa)
        t(swan,cry)
        { "c""at", "meow" }
    };
    s l;
    while (int i = ~getchar())
        l += ~i;
    printf("%s", (m[l] == "" ? l : l + " goes " + m[l]).c_str());
}

"t(crow,caw)" has a length of 11. So getting rid of that to "t(swan,cry)" would drop 14 bytes. And admittedly make it less fun :(
Noodle9

@user, As I said, I still hope author revises bonuses.
Zereges

You should state C++11 in the headline. Python 2 and 3 are also always distinct noted. While the using is no big deal, the initializer list is.
Karl Napf

@KarlNapf Thanks for pointing that out.
Zereges

You can also change #include <map> to #import<map> for -2 bytes. The space before < can be omitted and #import throws some warnings but is accepted be GCC and MSVC
Karl Napf

0

Pyth, 31 - 15 = 16 bytes

You can try it out here

In+C99"at"zz;E+z" goes \"Meow\"

Explaination:

I                                # If-statement
 n                               # not equal
  +C99"at"                       # Adds the char 99 with the string "at" = "cat"
          z                      # z, the user input
           z                     # Print the user input
            ;                    # Ends all open parentheses
             E                   # Else-statement
              +z" goes \"Meow\"  # Adds ' goes "Meow"' to z and prints the result

1
C99 can be replaced with \C. It's still +\C"at", so you can keep the bonus.
clap

0

C, 76 bytes

main(){char a[99];gets(a);printf("%s%s",a,strcmp(a,"cat")?"":" goes meow");}

0

PHP, 70-15 = 55 bytes

<?=$l=rtrim(stream_get_contents(STDIN),~òõ),$l==~œž‹?~ߘšŒßݲšˆÝ:'';

(saved as ISO-8859-1)

Uses inverted undefined constants as string literals:

  • ~òõ == "\r\n"
  • ~œž‹ == 'cat'
  • ~ߘšŒßݲšˆÝ == ' goes "Meow"'

Everything is combined in a single echo statement, shorthanded with <?=

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.