Schwartzman教授的Acme犬解码器2000


31

介绍

我们-尤其是我们中间的极客,他们往往是粉丝-都记得这本古老的漫画《远方》

嘿!  嘿!  嘿!

显然,施瓦兹曼教授本可以稍稍提高一下自己的编程技能,然后再使用他的发明。但是您可以自己复制它吗...使用尽可能少的字节?

输入规格

您必须创建一个脚本,将狗的声音转换为适当的音调“嘿”。这是纯代码高尔夫;最低字节数获胜。

您的输入将包含以下标记的某种组合:

  • BarkBaarkBaaarkBaaaark,...(即,B*rk 具有至少1 a替换星号)
  • WoofWooofWoooof,...(W*f与至少2个 o小号替换星号)
  • GrrGrrrGrrrr,...,(G后面至少2个 r S)
  • 任何数量的.(句号),!(感叹号)和/或?(问号)字符,它们可能出现在输入中的任何位置

再次注意,Woof基于和Grr的令牌始终分别至少需要两个 o s和rs;WofGr不是有效的标记。

令牌可以持续多长时间没有限制(例如,令牌中可以有多少个重复的as Bark);但是,您的解码器只需要正确使用总s,s或s 最多10a的输入令牌即可通过此挑战。or

输出规格

忠于Schwartzman的设计,您的犬类解码器程序必须将其处理为以下输出文本:

  • BarkWoofGrr成为Hey;
  • BaarkWooofGrrr成为Heyy;
  • BaaarkWoooofGrrrr成为Heyyy; 等等
  • 对于所有Bark基于令牌的令牌,基于y输出Hey的令牌中的as 数量必须等于s 的数量;
  • 对于所有Woof基于令牌的令牌,基于y输出Hey的令牌中的s 数量必须o s 的数量少一
  • 对于所有Grr基于令牌的令牌,基于y输出Hey的令牌中的s 数量必须r s 的数量少一
  • 所有标点符号(.!?)均保持不变。

切记y仅从Woofs和Grrs 的输出中删除一个!Baaaaaaaark?8 a秒的输入将变为8 秒Heyyyyyyyy?的匹配集y。但是,Woooooooof?只有Heyyyyyyy?7 ys。

同样,如果您可以让您的程序适用于无限制大小的输入令牌,那很好,但是出于此挑战的目的,将仅检查您的程序以确保其对于不超过10个重复字母的输入令牌正常工作。

输入中所有基于Bark-,Woof-和- Grr的令牌都假定以大写字母开头。因此,没有必要办理转Bark grrrHey heyy或任何类似。

输入和输出示例

    • 输入: Bark. Bark! Bark!!
    • 输出: Hey. Hey! Hey!!
    • 输入:Baaaaaark?(6 a秒)
    • 输出:Heyyyyyy?(6 y秒)
    • 输入:(Grrrrrrrr...r秒)
    • 输出:Heyyyyyyy...7个 y S)
    • 输入: ?...!
    • 输出: ?...!
    • 输入: Wooof Woof? Grrrr. Baaaark Grr!
    • 输出: Heyy Hey? Heyyy. Heyyyy Hey!

10
您好,欢迎光临本站!大家知道,在本网站上习惯于等待最短的答案后再等待一段时间。我鼓励您不接受已接受的答案,并等待该问题的活动停止后再接受最短的答案。这也将鼓励更多答案。
DJMcMayhem


感谢您提供有关接受流程的提示。我实际上打算每隔几个小时检查一次答案列表,如果我发现出现了更好的答案,请接受它。对不起,我可能拒绝在此处享有声誉的任何人。
A. Mirabeau,2016年

5
@ A.Mirabeau这是很光荣的,并且在理想情况下它是如何工作的,但是有些人并不是那么专心,所以大多数回答者可能会认为赢家已经被选中。虽然如果您打算更新某个赢家,那么立即选择赢家没有,但由于它以及一些投诉,您可能会得到较少的答案,因此通常最好等待至少一周。
马丁·恩德

Answers:


16

视网膜24 18 17 16字节

根据MT0的答案保存了1个字节。

\wf?k?
y
\byy
He

在线尝试!

说明

\wf?k?
y

只是将所有字母都变成y,但是如果它们后面跟有f或,k我们也会立即将其替换。通过删除fk“标准化”单词的长度,以使它们现在y都比需要多两个。

\byy
He

这会将y每个单词的前两个变成He,从而完成转换。


迄今为止最有效的答案,做得很好。我暂时不会接受它,但是我可以告诉您,您值得拥有CAT FUD。
A. Mirabeau,2016年

10

Perl,51 41 39字节

s/(G.|[BW]..)(\w+)/He."y"x length$2/ge

用法

perl -pE 's/(G.|[BW]..)(\w+)/He."y"x length$2/ge'

输入值

Bark. Bark! Bark!!
Baaaaaark?
Grrrrrrrr...
?...!
Wooof Woof? Grrrr. Baaaark Grr!

输出量

Hey. Hey! Hey!!
Heyyyyyy?
Heyyyyyyy...
?...!
Heyy Hey? Heyyy. Heyyyy Hey!

怎么运行的

使用自动打印进行简单的正则表达式替换-p,将计数增加1个字节。/ge对每个模式执行替换,并将替换作为代码运行。


较旧的版本使用三向检测,但马丁·恩德(Martin Ender)注意到我不够积极,为我节省了10个字节。

msh210告诉我,您不需要在字符串两端加上引号He,从而节省了两个字节。


2
恭喜,到目前为止是最好的。
A. Mirabeau,2016年

1
@ A.Mirabeau谢谢,考虑到我几分钟前刚刚在这里注册,这真是个称赞!
管道

考虑到我几个小时前刚刚在这里注册,拥有三种解决方案非常有动力。
A. Mirabeau,2016年

1
您不需要引号He
msh210 '16

@ msh210有趣的是,不知道您被允许在那里省略它们!

5

Python,106个字节

f=lambda s,a="B,He,Gr,He,Wo,He,a,y,r,y,o,y,f,,yk,".split(","):s if a==[]else f(s.replace(a[0],a[1]),a[2:])

演示版

https://repl.it/C6Rr


尽管这不是公认的答案,但是它是最字节有效的解决方案,更改了三个必要的狗语言关键字,因此值得一提。
米拉波

4

JavaScript(ES6)-57 55 52 51字节

f=s=>s.replace(/\wk?f?/g,'y').replace(/\byy/g,'He')

测试:

f=s=>s.replace(/\wk?f?/g,'y').replace(/\byy/g,'He');

[
  'Bark. Bark! Bark!!',
  'Baaaaaark?',
  'Grrrrrrrr...',
  '?...!',
  'Wooof Woof? Grrrr. Baaaark Grr!'
].forEach( s=>{console.log( f(s) );} );

感谢@MartinEnder提供了字节56和51,以及其他一些刨花的灵感。


4

Vimscript,51 39 37 33 32 29 28字节,

%s/\hk\?f\?/y/g|%s/\<yy/He/g

正则表达式归功于多剃了9个字节:MT0,Martin Ender,msh210

航天员 演示版

说明:

                               1. Normalize words to same length & replace letters with ys 

%s                             Regex search and replace 
  /                            Regex search begin
   \hk\?f\?                    Find any letter (\h) optionally followed by k or f
           /                   Regex search end and replace start
            y                  Replace with y
             /                 Replace end
              g                Replace globally

               |               New command

                               2. Overwrite first two y of every word with He

                %s             Regex search and replace
                  /            Regex search begin
                   \<yy        Find yy at a word's beginning
                        /      Regex search end and replace start
                         He    replace with He
                           /   Replace end
                            g  Replace globally

1
我不了解Vimscript,但是您可以使用\<yy代替\<\hy吗?
msh210 '16

@ msh210是的,有可能,我更新了解决方案,谢谢
starcorder


2

Javascript,72 66 64字节

f=
t=>t.replace(/k|f/g,'').replace(/\w/g,'y').replace(/\byy/g,'He')

编辑:分离f=和功能+减少的字节数


1
您不需要f=(作为PPCG的默认设置),因此64字节有效。
Rɪᴋᴇʀ

@EᴀsᴛᴇʀʟʏIʀᴋ太好了,我不知道这一点
starcorder


1

Python 3中,140个 135 134字节

from re import*
f=lambda s:''.join('He'+'y'*len(x)+y for x,y in[(a+b+c,d)for a,b,c,d in findall('(?:Wo(o+)f|Gr(r+)|B(a+)rk)(\W+)',s)])

使用正则表达式查找可替换字符的出现。

编辑:高尔夫1字节空白和4字节从findall结果获取值。

Edit2:打高尔夫球1个字节(Bark的“ a”未正确计数)

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.