Кот мяукаяет"


31

cat идет "мяу"

Мы все знакомы с концепцией catпрограммы. Пользователь вводит что-то, оно возвращается пользователю. Легко. Но все catпрограммы, которые я видел до сих пор, пропустили один факт: cat«Мяу». Таким образом, ваша задача - написать программу, которая копирует все STDINв STDOUT БЕЗ входных данных cat, и в этом случае ваша программа должна выводить cat goes "Meow".

счет

Это , так что ваш счет - это количество ваших байтов с несколькими модификаторами:

  • Если ваша программа работает для любых дополнительных животных, кроме cat(например cow: cow goes "Moo"), для каждого дополнительного животного: -10
  • Если ваша программа не использует слово «кошка»: -15
  • Если ваша программа отвечает fox«Что говорит лиса»: -25

Животные и звуки, которые идут вместе:

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

Все остальное в этом списке разрешено.

правила

  • Применяются стандартные лазейки
  • Вы не должны ничего писать STDERR
  • Вы можете использовать одинарные кавычки / без кавычек вместо двойных кавычек.

Leaderboard

Вот фрагмент стека, который генерирует как регулярную таблицу лидеров, так и обзор победителей по языкам.

Чтобы убедиться, что ваш ответ обнаружен, начните его с заголовка, используя следующий шаблон уценки:

## 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
Для бонусов: что говорит лиса?
Стьюи Гриффин

1
Для бонусов: может ли каждое дополнительное животное быть единичным, или «пчелы» всегда должны быть во множественном числе, как в вашем списке?
ProgramFOX


1
Вместо двойных кавычек, можете ли вы использовать одинарные? Кроме того, вы можете вывести на stderr?
Синий

Ответы:


17

Pyth, 231-255 = -24 байта

-24 * 10 лишних животных, -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, независимо от длины кода ...)
Даррел Хоффман

@DarrelHoffman Я буду помнить это для всех будущих проблем.

Ну, ты успешно заставил мою голову взорваться, и я больше не знаю, что говорит лиса. +1
kirbyfan64sos

Ворон сходит с ума?
Волшебная Осьминог Урна

@carusocomputing Согласно википедии, это так. Я думаю, что они идут squalkсам
Синий

7

TeaScript , 29 - 15 = 14 байт

Не использует строку 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

4

APL (Dyalog) , 28 - 15 = 13 байт

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

За goes "Meow"входом следует, если вход эквивалентен tacобратному.

Попробуйте онлайн!

{} Анонимная функция

⌽'tac' переверните строку (чтобы получить бонус -15, избегая персонажей cat)

⍵≡ Boolean для того, идентичен ли аргумент этому

' 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и включает код для 22 дополнительных животных из этого списка (все разрешенные животные, у которых было достаточно коротких слов, чтобы оно того стоило):

жужжание пчел 7
песня птиц 8
рогатый скот муо 9
коровье муо 6
вороний рог 7
собака лает 7
утка кряк 9
лягушачий хрип 9
лошадь
шипит 9 свинья 7
ягненок баа 7
жаворонков поют 8
рев льва 8
бык низкий 5
голубь вор 9
ладья лава 7
кора лайка 8
баран овец 8
шипение змеи 9
крик лебедя 7
рык тигра 9
кит поет 9

(спасибо моему другу за помощь в утомительном задании составить этот список)

Ungolfed код:

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 было достаточно :)
Domino

3

JavaScript, 81 - 20 - 15 = 46 байт, 50 - 15 = 35 байт

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

Вы можете бросить двойные кавычки вокруг Мяу .
anotherdave

нет, это на самом деле часть вопроса
Domino

Как насчет 'c\at'вместо 'ca'+'t'?
Густаво Родригес

alert({'c\at':'c\at goes "Meow"',fox:'What does the fox say'}[a=prompt()]||a), Почему бы даже не сбросить предупреждение? Он уже возвращает результат в консоль.
Густаво Родригес

2

GNU sed, 37 - 15 = 22 байта

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

sed '/ ^ c [a] t $ / s / $ / идет "Мяу" / "сохраняет несколько байтов. Но новый 5% бонус бесполезен по сравнению с оригинальным 15 байтовым бонусом за отсутствие "кота".
Гленн Рандерс-Персон

@ GlennRanders-Pehrson Больше нет!

2

MATLAB, 58 - 15 = 43 байта

Довольно просто, с бонусом за неиспользование catв коде:

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

Входные данные должны быть приведены в одинарные кавычки: ' '.


В его текущей форме это не выводит правильно, если в качестве входных данных указан 'cat'. Вы, вероятно, забыли x = в операторе if.
slvrbld

Но я также дам вам совет отыграть эти байты плюс еще 2: замените весь ваш оператор if следующим образом
slvrbld

@slvrbld, спасибо, что заметили, это произошло после того, как я сделал правку. Кстати, ваше предложение не работает для вводов, которые не 3 символов. =)
Стьюи Гриффин

Ах, ты прав. Я был слишком сосредоточен на кошке и лисе и забыл об остальном.
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

JavaScript, 48 - 15 = 33 байта

Использование в \x61качестве замены для aин cat.

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


1

Рубин, 49 46 50 - 15 = 35 байт

Полагаю, довольно просто. Не используя кошку.

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

Редактировать: Спасибо за @ w0lf за сохранение 3 байта!


очевидно нет необходимости chop: ideone.com/lTpShD
Кристиан Лупаску

@ w0lf "cat \ n"! = "cat" (по крайней мере, у меня это не работает) Я предполагаю, что у STDIN идеона нет завершающего перевода строки
Питер Ленкефи

Справедливо, я вижу, где мой пример был неверным. Тогда вы можете сделать это, чтобы сократить код.
Кристиан Лупаску

@PeterLenkefi, в вашем коде еще осталось несколько кошек ... Вы забыли обновить его или ...?
Стьюи Гриффин

@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. Это означает, что он работает со всеми 65 разрешенными животными, но мой сценарий огромен. Также работает с лисой и не имеет слова кошка.


1

MATLAB, 46 байтов

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

По общему признанию тривиальный. Входные данные должны быть указаны в одинарных кавычках.


Я не уверен, но я думаю, что ans = .. это вообще не принято, если задача состоит в том, чтобы напечатать что-то. Я не уверен, что это консенсус, но он довольно распространен dispили что-то подобное.
Стьюи Гриффин

+1, хотя, за то, что короче, чем у меня =)
Стьюи Гриффин

1

Луч , 208 206 - 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

Если вы хотите сэкономить еще больше, вы можете использовать ES6: s=>s=="cat"?s+' goes "Meow"':s(30 байт)
ETHproductions

@ETHproductions Оооо, это хорошо! Я не знаю такой синтаксис, может быть, ссылка?
Fuzzyzilla

@Fuzzyzilla - это часть новой версии JavaScript под названием «ES6», ссылка на новый синтаксис функции и обзор . Вот также советы для ES6 и советы для JavaScript в целом
Downgoat

1

Haskell, 52-15 = 37 байт

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

Использование \99вместо c в «cat» для получения бонуса в 15 байт.


1

O , 22 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 животных в дополнение к кошке: носорог, окапи, лось, лев, тигр, барсук, бегемот и олень.

Попробуйте онлайн


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

Поскольку код содержит непечатаемый символ, который отбрасывает Markdown, не могли бы вы добавить ссылку?
ETHproductions

Добавлена ​​ссылка, также почему происходит U+0083замена U+0192или ƒкогда вы запускаете этот фрагмент:"\u0083".charCodeAt()
Generic User

Я понятия не имею. Я не могу воспроизвести это.
ETHproductions

1

Pyth, 26-15 (без "кота") = 11 байт

Моя первая в мире программа Pyth!

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

Попробуй здесь

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

#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. GCC хочет, чтобы я #include <string>и #include <cstdio>. Было бы короче, если бы я не пошел на бонусы, но я все еще надеюсь, что автор пересматривает бонусы. Я не могу думать о языке, где определение cow -> mooили так намного короче, чем 10 байтов. Мои 3+key+valueбайты стоимости для дополнительных животных и плоских 22+17байтов для определения структуры и так далее.

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 (crow, caw)» имеет длину 11. Таким образом, избавление от этого для «t (swan, cry)» приведет к уменьшению 14 байтов. И по общему признанию сделайте это менее забавным :(
Noodle9

@user, как я уже сказал, я все еще надеюсь, что автор пересматривает бонусы.
Zereges

Вы должны указать C ++ 11 в заголовке. Python 2 и 3 также всегда четко отмечены. Пока usingнет ничего сложного, список инициализаторов есть.
Карл Напф

@KarlNapf Спасибо за указание на это.
Zereges

Вы также можете изменить #include <map>в #import<map>течение -2 байт. Пробел перед этим <может быть опущен и #importвыдает некоторые предупреждения, но принимается GCC и MSVC
Карл Напф

0

Pyth, 31 - 15 = 16 байт

Вы можете попробовать это здесь

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можно заменить на \C. Это все еще +\C"at", так что вы можете сохранить бонус.
хлопнуть


0

PHP, 70-15 = 55 байт

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

(сохранено как ISO-8859-1)

Использует инвертированные неопределенные константы как строковые литералы:

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

Все объединено в одном эхо-утверждении, сокращенно <?=

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