シュワルツマン教授のAcme Canine Decoder 2000


31

前書き

私たち-特にファンになりがちな私たちの間のオタク-はすべて、この古いファーサイドの漫画を覚えています:

おい! おい! おい!

明らかに、シュワルツマン教授は、発明を使用する前に、ほんの少しだけプログラミングスキルを磨いたかもしれません。しかし、あなたはそれを自分で複製できますか?可能な限り少ないバイトを使用して?

入力仕様

犬の音を適切にイントネーションされた「ヘイ」に変換するスクリプトを作成する必要があります。これは純粋なコードゴルフです。最も少ないバイト数が優先されます。

入力は、次のトークンのいくつかの組み合わせで構成されます。

  • BarkBaarkBaaarkBaaaark、...(すなわち、B*rk 少なくとも1でaアスタリスクを置換します)
  • WoofWooofWoooof、...(W*f少なくとも有する2つの o Sはアスタリスクを置換)
  • GrrGrrrGrrrr、...、(G少なくとも、続いて2 r秒)
  • 任意の数の.(ピリオド)、!(感嘆符)、および/または?(疑問符)文字

繰り返しますが、-basedトークンWoofGrr-basedトークンには、それぞれ少なくとも2つ oのsとrsが常に必要です。Wofおよび有効なトークンでGrはありません

トークンの長さには制限がありません(たとえば、トークンにいくつaのsを繰り返すことができるかBark)。ただし、デコーダーは、このチャレンジに合格するために、合計で最大10aのs、os、またはrsを持つ入力トークンに対してのみ正しく動作する必要があります。

出力仕様

シュワルツマンの設計に忠実に、犬のデコーダプログラムは次のようにそれを処理して出力テキストにする必要があります。

  • BarkWoof、とGrrなりますHey
  • BaarkWooof、とGrrrなりますHeyy
  • BaaarkWoooof、とGrrrrなりますHeyyy。等
  • すべてのBarkベースのトークンの場合、y出力Heyベースのトークンのas の数はs の数と等しくなければなりません。
  • すべてのWoofベースのトークンの場合、y出力Heyベースのトークンのs の数はs の数より1少ない必要がありますo
  • すべてのGrrベースのトークンの場合、y出力Heyベースのトークンのs の数はs の数より1少ない必要がありますr
  • すべての句読点(.!、とは?)変更されません。

sとsのみのy出力から1つを削除することを忘れないでください!8 秒の入力は、8 秒の一致セットでになります。ただし、7 秒でのみになります。WoofGrrBaaaaaaaark?aHeyyyyyyyy?yWoooooooof?Heyyyyyyy?y

繰り返しますが、無制限のサイズの入力トークンでプログラムを動作させることができる場合、それは素晴らしいことですが、このチャレンジの目的のために、プログラムは10文字以内の入力トークンで適切に動作することを確認するためにのみチェックされます。

入力内のすべてのBark-、Woof-、および- Grrベースのトークンは、大文字で始まると想定されます。そのため、変化やそれに類似したものを処理する必要はありませんBark grrrHey heyy

入力と出力の例

    • 入力: Bark. Bark! Bark!!
    • 出力: Hey. Hey! Hey!!
    • 入力:Baaaaaark?(6 as)
    • 出力:Heyyyyyy?(6 ys)
    • 入力:Grrrrrrrr...(8 r秒)
    • 出力:Heyyyyyyy...7 y秒)
    • 入力: ?...!
    • 出力: ?...!
    • 入力: Wooof Woof? Grrrr. Baaaark Grr!
    • 出力: Heyy Hey? Heyyy. Heyyyy Hey!

10
こんにちは、サイトへようこそ!ご存知のように、このサイトでは、最短の回答を受け入れるまでしばらく待つのが慣例です。受け入れた回答を受け入れず、この質問のアクティビティが終了するまで待ってから、最短の回答を受け入れることをお勧めします。これにより、より多くの回答が得られます。
DJMcMayhem


承認プロセスに関するヒントをお寄せいただきありがとうございます。私は実際に数時間ごとに回答のリストをチェックすることを計画していましたが、より良い回答がやってきたことに気付いたら、それを受け入れます。私はここまでの評判を否定したかもしれない誰にでもすみません。
A.ミラボー

5
@ A.Mirabeauそれは名誉であり、それが理想的に機能する方法ですが、一部の人々はそれほど注意を払っていないので、ほとんどの回答者は勝者がすでに選択されていると仮定するかもしれません。更新を計画している場合、すぐに勝者を選択しても何も問題はありませんが、不満といくつかの苦情が原因で回答が少なくなる可能性が高いため、通常は少なくとも1週間待つことをお勧めします。
マーティンエンダー

回答:


16

網膜24 18 17 16バイト

MT0の回答のアイデアに基づいて保存された1バイト。

\wf?k?
y
\byy
He

オンラインでお試しください!

説明

\wf?k?
y

これは単にすべての文字をに変換しますが、後に文字yが続くf場合kは、すぐに置き換えます。除去することによりfそしてk我々 「正規化」、彼らは今、すべての2以上持っているので、単語の長さはy、彼らが必要とするよりも、秒。

\byy
He

これyにより、すべての単語の最初の2つがに変わり、He変換が完了します。


これまでで最も効率的な答えは、よくやった。私はまだそれを受け入れるつもりはありませんが、あなたはCAT FUDに値することを伝えることができます。
A.ミラボー

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すべてのパターンの置換を実行し、置換をコードとして実行します。


古いバージョンは3方向検出を使用していましたが、Martin Enderは私が十分に攻撃的ではないことに気付き、10バイトを節約しました。

msh210は、文字列を引用符で囲む必要がないことを通知して、He2バイトを節約しました。


2
これまでで最高のもの、おめでとうございます。
A.ミラボー

1
@ A.Mirabeauありがたいことに、数分前にここに登録したばかりだから、ほめ言葉です!
パイプ

数時間前にここで登録したことを考えると、3つの解決策があることはやる気になります。
A.ミラボー

1
引用符は必要ありませんHe
msh210

@ 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


受け入れられた答えではありませんが、これは、必要な3つのドッグランゲージキーワードのみを変更する、最もバイト効率の高いソリューションであるという名誉ある言及に値します。
A.ミラボー

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

バイト56と51の@MartinEnderと、その他の削りくずのインスピレーションに感謝します。


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

@ msh210はい、可能です。解決策を更新しました。ありがとう
スターコーダー


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ʀᴋ素晴らしい、私はこれを知りませんでした
スターコーダー


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)])

置換可能な文字の出現を見つけるための正規表現の使用。

編集: findallの結果から値を取得する際に1バイトの空白と4バイトをゴルフしました。

Edit2:ゴルフ1バイト(Barkの「a」は正しくカウントされませんでした)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.