Gato vai "miau"


31

cat vai "miau"

Todos conhecemos o conceito de um catprograma. O usuário digita algo, é ecoado de volta para o usuário. Fácil. Mas todos os catprogramas que eu vi até agora perderam um fato: um catvai "Meow". Portanto, sua tarefa é escrever um programa que copie tudo, STDINa STDOUT menos que a entrada seja cat; nesse caso, seu programa deverá ser exibido cat goes "Meow".

Pontuação

Isso é , então sua pontuação é sua contagem de bytes, com alguns modificadores:

  • Se o seu programa funcionar para outros animais além de cat(por exemplo cow: cow goes "Moo"), para cada animal adicional: -10
  • Se o seu programa não usar a palavra "gato": -15
  • Se o seu programa responder foxcom "O que a raposa diz": -25

Animais e sons que andam juntos:

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

Qualquer outra coisa nesta lista é permitida.

Regras

  • Aplicam-se brechas padrão
  • Você não deve escrever nada para STDERR
  • Você pode usar aspas simples / sem aspas, em vez de aspas duplas.

Entre os melhores

Aqui está um snippet de pilha para gerar uma classificação regular e uma visão geral dos vencedores por idioma.

Para garantir que sua resposta seja exibida, inicie-a com um título, usando o seguinte modelo de remarcação:

## Language Name, N bytes

onde Nestá o tamanho do seu envio. Se você melhorar sua pontuação, poderá manter as pontuações antigas no título, identificando-as. Por exemplo:

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

Se você quiser incluir vários números no cabeçalho (por exemplo, porque sua pontuação é a soma de dois arquivos ou você deseja listar as penalidades do sinalizador de intérpretes separadamente), verifique se a pontuação real é o último número no cabeçalho:

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

Você também pode transformar o nome do idioma em um link que será exibido no snippet do placar de líderes:

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


16
Pelos bônus: O que a raposa diz?
Stewie Griffin

1
Para os bônus: cada animal adicional pode ser singular ou as "abelhas" sempre precisam ser plurais, como na sua lista?
ProgramFOX


1
Em vez de aspas duplas, você pode usar aspas simples? Além disso, você pode enviar para stderr?
Azul

Respostas:


17

Pitão, 231-255 = -24 bytes

-24 * 10 animais extras, -15 para nenhuma corda "gato"

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

Link para código

Pseudo-código

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

Animais que conhece:

{'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
Eu sinto que o bônus deve ser de -10%, não de -10 bytes. Isso daria um retorno decrescente para evitar abusos como esse. (E isso é 10% multiplicado cada vez, e não 10% dos originais somaram, caso contrário, você só precisa de 10 animais para obter uma pontuação de 0 não importa quanto tempo o código estava ...)
Darrel Hoffman

@DarrelHoffman Vou ter isso em mente para todos os desafios futuros.

Bem, você fez minha cabeça explodir com sucesso e eu não sei mais o que a raposa diz. 1
kirbyfan64sos

O corvo vai coaxar?
Magic Octopus Urn

@carusocomputing De acordo com a wikipedia, ele faz. Eu acho que eles vão squalkeu mesmo #
Blue

7

TeaScript , 29 - 15 = 14 bytes

Não usa string cat .

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

"O que a raposa diz" (comprimento = 21) é maior do que o bônus vale.


O bônus da raposa agora vale a pena!

5

CJam, 12 bytes

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

O programa tem 27 bytes de comprimento e não usa a palavra cat( -15 bytes ).

Experimente em linha no intérprete CJam .

Como funciona

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
Eu gosto do emoticon:)
ETHproductions

4

APL (Dyalog) , 28 - 15 = 13 bytes

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

Entrada seguida por goes "Meow"se a entrada for equivalente atac invertida.

Experimente online!

{... } função anônima

⌽'tac' inverta a string (para obter o bônus de -15, evitando os caracteres cat)

⍵≡ Booleano para se o argumento é idêntico ao

' goes "Meow"'/⍨ use isso para filtrar a string (ou seja, retorna string vazia, se false)

⍵, anexar ao argumento



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)

Desvantagem: você deve escrever o nome do animal com a primeira letra em maiúscula e o restante em minúscula. Veja abaixo outra versão que corrige isso. Esta versão escapa do ain in com \x61e inclui código para os 22 animais extras dessa lista (todos os animais permitidos que tinham palavras curtas o suficiente para valer a pena):

zumbido de abelha 7
canto dos pássaros 8
gado moo 9
vaca moo 6
corvo caw 7
latido de cachorro 7
grasnado de pato 9
sapo coaxar 9
chiado de cavalo 9
porco porink 7
cordeiro baa 7
cotovia cantar 8
rugido de leão 8
boi baixo 5 boi de
pombo 9
gralha de gralha 7
casca de foca 8
ovelhas baa 8
silvo de cobra 9
choro de cisne 7
rugido de tigre 9
baleia canta 9

(obrigado ao meu amigo por me ajudar com a tarefa tediosa de fazer essa lista)

Código não destruído:

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

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

Primeira versão, 45 bytes - 15 bônus = 30

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

Sim eu conheço. Eu fui de 30 para 29 com todo esse trabalho extra. Foi divertido!

Versão que permite entrada minúscula completa, 294 bytes - 235 bônus = 59

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

Também tentei remover a caixa do conjunto de dados, .join().toLowerCase().split(',')mas acabou tendo 297 caracteres.


edit: corrigido aspas e de capital em miau (embora a questão não é consistente com capitais)
Domino

E ... meu trabalho aqui está feito, provando que o bônus -10 foi apenas o suficiente :)
Domino

3

JavaScript, 81 - 20 - 15 = 46 bytes 50 - 15 = 35 bytes

(o=prompt()=="ca"+"t")&&o+=' goes "Meow"';alert(o)

Você pode soltar as aspas duplas em torno do Meow .
precisa

não, isso é realmente parte da pergunta
Domino

Que tal em 'c\at'vez de 'ca'+'t'?
Gustavo Rodrigues

alert({'c\at':'c\at goes "Meow"',fox:'What does the fox say'}[a=prompt()]||a). Por que nem soltar o alerta? Ele já retorna o resultado ao console.
Gustavo Rodrigues

2

GNU sed, 37 - 15 = 22 bytes

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

sed '/ ^ c [a] t $ / s / $ / vai "Miau" /' salva alguns bytes. Mas o novo bônus de 5% não vale nada comparado ao bônus original de 15 bytes por não ter "gato".
Glenn Randers-Pehrson

@ GlennRanders-Pehrson Não existe mais!

2

MATLAB, 58 - 15 = 43 bytes

Bem direto, com bônus por não usar catno código:

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

Entrada deve ser dada dentro de aspas simples: ' '.


Em sua forma atual, isso não será exibido corretamente se 'cat' for fornecido como entrada. Você provavelmente esqueceu x = dentro da instrução if.
slvrbld

Mas eu também vou te dar uma dica para reconquistar esses bytes mais um adicional de 2: substituir o seu inteiro se-declaração: se ~ qualquer (x-'dbu '+ 1)
slvrbld

@slvrbld, obrigado por perceber, isso aconteceu depois que eu fiz uma edição. BTW: sua sugestão não funciona para entradas que não têm três caracteres. =)
Stewie Griffin

Ah, você está correto. Eu estava muito focado no gato e na raposa e esqueci o resto.
slvrbld

2

Javascript, 117 bytes

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]+'"')

Definitivamente não ganhei aqui, mas cobri muitos animais extras.

Javascript, 31 bytes

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

2

HALT , 71 - 15 = 56 bytes

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

HALT é uma linguagem que eu (@Downgoat) elaborada para o processamento de strings, o único problema é que é um pouco longo

Formatado

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 bytes

Agradecimentos a Stewie Griffin por salvar 15 bytes

Obrigado ao grc por salvar 8 bytes.

Não usar a string catfornece -15 bytes.

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

1

JavaScript, 48 - 15 = 33 bytes

Usa \x61como um substituto para o ain cat.

i=prompt();alert(i=="c\x61t"?i+' goes "Meow"':i)

1

Perl, 46 - 15 = 31

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

1

Ruby, 49 46 50 - 15 = 35 bytes

Bem direto, eu acho. Não está usando gato.

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

Edit: Obrigado por @ w0lf por salvar 3 bytes!


aparentemente, não há nenhuma necessidade de chop: ideone.com/lTpShD
Cristian Lupascu

@ w0lf "cat \ n" = "gato" (Pelo menos ele não funciona para mim) Eu estou supondo STDIN desse ideone não tem uma nova linha de fuga!
Peter Lenkefi

Justo, vejo onde meu exemplo estava errado. Então você pode considerar fazer isso para reduzir o código.
Cristian Lupascu 1/11

@ PeterLenkefi, ainda existem alguns gatos no seu código ... Você esqueceu de atualizá-lo ou ...?
Stewie Griffin

@StewieGriffin Porra, eu fiz! Minha multitarefa não está no topo hoje. No entanto, em 5 minutos, eu o atualizarei novamente.
Peter Lenkefi

1

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

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

Eu uso uma matriz compactada json codificada em gz de sons de animais. Isso significa que ele funciona com todos os 65 animais permitidos, mas meu script é enorme. Também funciona com raposa e não possui a palavra gato.


1

MATLAB, 46 bytes

regexprep(input(''),'^cat$','cat goes "Meow"')

É certo que é trivial. A entrada deve ser fornecida entre aspas simples.


Não tenho certeza, mas acho que ans = .. geralmente não é aceito, se o desafio é imprimir alguma coisa. Não tenho certeza se é um consenso, mas é bastante comum usar dispalgo semelhante.
Stewie Griffin

+1, no entanto, por ser mais baixo que o meu =)
Stewie Griffin

1

Feixe , 208 206 - 15 = 191 bytes

Não é uma entrada competitiva, mas um pouco de diversão para fazer. Ele verifica o primeiro quanto a letras da entrada cat. Se houver uma incompatibilidade, será atalho para o programa padrão do gato. Se corresponder, será anexadogoes "Meow"

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

1

Java = 222 bytes (compactado)

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

Ou eu poderia descompactá-lo.

Lote = 52 bytes

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

1

Javascript: 48 caracteres, 48 ​​bytes

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

Teste

=>"Cachorro"

<="Cachorro"

=>"gato"

<="gato mia"


Bom trabalho! Você pode soltar os parênteses s=="cat". Além disso, a string do gato deve ser cat goes "Meow", portanto, 'function(s){return s=="cat"?'cat goes "Meow"':s}é completamente válida.
ETHproductions

Se você quiser economizar ainda mais, você poderia usar ES6: s=>s=="cat"?s+' goes "Meow"':s(30 bytes)
ETHproductions

@ETHproductions OOooh, isso é bom! Eu não conheço esse tipo de sintaxe, talvez um link?
Fuzzyzilla

O @Fuzzyzilla faz parte de uma nova versão do JavaScript chamada "ES6", link para a nova sintaxe e visão geral das funções . Aqui estão também dicas para ES6 e dicas para JavaScript em geral
Downgoat 09/11/15

1

Haskell, 52-15 = 37 bytes

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

Utilizando \99como substituto de c em "cat" para obter o bônus de 15 bytes.


1

O , 22 16 14 bytes

29 bytes - 15

Q "tac" `J = J" vai \ "Meow \" "+ Q?

É longo e pode ser jogado mais



1

Pitão, 82-95 = -13 bytes

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

Eu finalmente consegui converter minha nova entrada funcional do Python 2 em Pyth. Não supera o principal concorrente. Acontece que juntar mais animais em um dicionário maior reduz a pontuação mais rapidamente do que associar animais com sons. Além disso, ele suporta 8 animais: rinoceronte, ocapi, alce, leão, tigre, texugo, hipopótamo e veado.

Experimente online


1

Japt, 25-15 = 10 24-15 = 9 bytes

Primeira vez que experimenta o Japt:

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

ƒdeve ser substituído pelo caractere não imprimível U+0083 Compila para:

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

Solução antiga:

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

Experimente aqui


Muito bom! Desculpe as barras invertidas são necessárias, pensei que tinha corrigido isso.
ETHproductions

Como o código contém um caractere não imprimível, descartado pelo Markdown, você poderia adicionar um link?
ETHproductions

Adicionado o link, também porque é que é U+0083substituído U+0192ou ƒquando você executa esse trecho:"\u0083".charCodeAt()
Usuário genérico

Eu não tenho idéia. Não consigo reproduzir isso.
ETHproductions

1

Pitão, 26 a 15 (sem "gato") = 11 bytes

Meu primeiro programa Pyth!

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

Experimente aqui

Explicação

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

Compila bem com o VisualStudio. O GCC quer que eu #include <string>e #include <cstdio>. Seria mais curto se eu não aceitasse bônus, mas ainda espero que o autor revise os bônus. Não consigo pensar em uma linguagem em que definir algo cow -> mooassim seja bem menor que 10 bytes. 3+key+valueBytes de custo da mina para animais e planos adicionais22+17 para definir a estrutura e assim por diante.

Ungolfed

#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 (corvo, caw)" tem um comprimento de 11. Portanto, livrar-se disso para "t (cisne, chorar)" diminuiria 14 bytes. E reconhecidamente torná-lo menos divertido :(
Noodle9 /

@ usuário, como eu disse, ainda espero que o autor revise os bônus.
Zereges 2/11

Você deve indicar C ++ 11 no título. Python 2 e 3 também são sempre notáveis. Enquanto isso usingnão é grande coisa, a lista de inicializadores é.
22816 Karl Napf

@KarlNapf Obrigado por apontar isso.
Zereges

Você também pode alterar #include <map>a #import<map>para -2 bytes. O espaço antes <pode ser omitido e #importlança alguns avisos, mas é aceito seja GCC e MSVC
Karl Napf

0

Pitão, 31 - 15 = 16 bytes

Você pode experimentar aqui

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

Explicação:

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
C99pode ser substituído por \C. Ainda é +\C"at", para que você possa manter o bônus.
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==~œž‹?~ߘšŒßݲšˆÝ:'';

(salvo como ISO-8859-1)

Usa constantes indefinidas invertidas como literais de string:

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

Tudo é combinado em uma única declaração de eco, abreviada com <?=

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.