コポドーペゴポロップホップ


15

言語:Oppification

次のプロセスを各単語に適用することで、おもしろい会話言語が作成されます。

  1. 置きop、各子音の後に。そうCodeなるCopodope

はい、それだけです。この課題のために、y常に子音です。

課題:脱偽装

不正な単語が与えられた場合、元の単語を返します。入力には文字のみが含まれます。最初の文字は大文字にすることができます。元の単語が空になることはなく、常に母音が含まれます。

テストケース:

Oppified      ->         Original 
a                        a
I                        I
itop                     it
opop                     op
Opop                     Op
popopop                  pop
Copopop                  Cop
opopopop                 opop
Kopicopkop               Kick
Asopia                   Asia
soptopopop               stop
hopoopopsop              hoops
hopoopopedop             hooped
ooooohop                 oooooh
aaaopopaaa               aaaopaaa
Popopopsopicoplope       Popsicle
gopaloplopopopinopgop    galloping
aopopbopopopcopopop      aopbopcop

8
どのテストケースにも母音とそれに続くが含まれていないopため、行に沿った答えreplace(/(.)op/, '\1')が失敗することはありません。hoopまたはloopedテストケースに単語を追加することをお勧めします。
ドアノブ

@ mbomb007さらにトリッキーなテストケースを追加しました。
-xnor

答えは、事前に選択された入力またはすべての入力に対してのみ機能する必要がありますか?
電卓

「oppified言葉を考える」@CalculatorFeline
mbomb007

2
テストケースとして「mopmopmopbopopop」を追加できますか?:)
user2390246

回答:


10

V12、5つのバイト

Í.“op

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

00000000: cd2e 936f 70                             ...op

入力は常にopopする必要があるため、母音をチェックする必要がないという@Xnorの認識のおかげで7バイトを節約しました。


うーん、これは...ビートに合わせて懸命に思える
エリックOutgolfer

4
進ダンプ:...op 私は難しく、それが必要以上に道を笑う作っている
nmjcman101

12

網膜、9バイト

(?!\G)op

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

先行する文字が子音であることを確認する代わりに、現在opの文字列が文字列の先頭または前の一致に隣接していないことを確認するだけです。間違ったものopと一致する可能性がある唯一のケースは、元の文字列にが含まれている場合ですop(結果としてopop)。ただし、その場合はop、2番目ではなく1番目を削除するだけで、結果は同じになります。


これは、次のような入力に対して誤った答えを与えませんloopか?
レオ

4
@Leo loopは有効な入力ではありません。別の単語をoppifyingすることで取得できません。
マーティンエンダー

@MartinEnderしかしlopoop((のバージョンのloop)は有効であり、に非対応にはなりません)loop
アイマス

@Imusいいえ、のバージョンはloopですlopoopop
マーティンエンダー

投稿して間もなく私の間違いも気づきました:)削除が遅すぎました。いい視点ね。
アイマス

10

Python、42バイト

lambda s:re.sub('(.)op',r'\1',s)
import re

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

私が間違っていなければ、母音を気にせずにすべて?opを置き換えることができます?。元の文字列にが含まれている場合op、それはopop、置換はそれを返し、それop以上は返しません。これは、パターン一致?opが重複できないため、1つだけopが削除されるためです。

非正規表現ソリューションは5バイト長くなります。

Python、47バイト

f=lambda s:s and s[0]+f(s[1+2*(s[1:3]=='op'):])

オンラインで試す


3
参照してre からインポートできます‽
Adám17年

4
@AdámPythonは、関数が定義されているときは呼び出されたときのみ評価します。
-xnor

4
うわー、だれかがインターロバンを使用するのを見てきてからしばらく経ちました。それはあなたのコメントを少しゴルフする方法だと思います。
ボールドリック

1
@Baldrickkしかし、バイト単位で、インターロバンは文字列「?!」より> =バイトあります。
MilkyWay90

5

Perl 5、10 + 1 = 11バイト

s/.\Kop//g

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

で実行 -p(1バイトのペナルティ)でます。ゴルフ言語は暗黙的なI / Oを自動的に行う場合がありますが、Perlにはオプションが必要です。

@xnorの答えを見たとき、Perl固有の正規表現機能を使用して改善できることに気付きました。s/a\Kb/c/gと同等ですs/ab/ac/g(つまり、s///最初のの後のものだけが置き換えられます\K)。これがPerlでの表示です。




3

ハスケル(93 62 61バイト)

a(x:'o':'p':r)|notElem x"aeiouAEIOU"=x:a r
a(x:r)=x:a r
a x=x

コメントの@nimi提案に感謝します!


2
いくつかのヒント:使用vしているときにo一度だけ、インライン化できます。notElemはより短いですnot(...elem...)&&ガード内のをに置き換えることができ,ます。の最後のケースaはと書くことができますa x=x。必要はありません()の中でx:(a r)
-nimi

1
...ああ、テスト=="op"はリテラルパターンマッチに置き換えることができます:a(x:'o':'p':r)|notElem x"aeiouAEIOU"=x:a r
-nimi

更新しました。感謝の@nimi
ダヴィデSpataro

1
もう一つのバイトが保存する:あなたは、間にスペースを省略することができますxし、"
-nimi

3

PHP、36バイト

<?=preg_replace("#.\Kop#","",$argn);

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


これはどのように実行されるはずですか?
タイタス

最初の2つのテストケースでは失敗します。preg_replace修正に使用します。
タイタス

変数を任意の1文字、たとえば$ aに名前変更することで3バイトを節約できます
-junkfoodjunkie

@junkfoodjunkieは$argnPHPを使用して実行されたときにavailbaleで予約変数である-Rコマンドラインからオプション
イェルクHülsermann

ああ、わかりませんでした。オンラインテスターはそれを考慮しません。:
junkfoodjunkie


1

JavaScript(ES6)、35バイト

f=最初に追加して、のように呼び出しf(arg)ます。

s=>s.replace(/([^aeiou])op/gi,"$1")

誰もまだJavaScriptソリューションを投稿していないことに驚いています。...

テストスニペット

let f=
s=>s.replace(/([^aeiou])op/gi,"$1")

console.log("a" + " -> " + f("a"));
console.log("I" + " -> " + f("I"));
console.log("itop" + " -> " + f("itop"));
console.log("opop" + " -> " + f("opop"));
console.log("Opop" + " -> " + f("Opop"));
console.log("popopop" + " -> " + f("popopop"));
console.log("Copopop" + " -> " + f("Copopop"));
console.log("opopopop" + " -> " + f("opopopop"));
console.log("Kopicopkop" + " -> " + f("Kopicopkop"));
console.log("Asopia" + " -> " + f("Asopia"));
console.log("soptopopop" + " -> " + f("soptopopop"));
console.log("hopoopopsop" + " -> " + f("hopoopopsop"));
console.log("hopoopopedop" + " -> " + f("hopoopopedop"));
console.log("ooooohop" + " -> " + f("ooooohop"));
console.log("aaaopopaaa" + " -> " + f("aaaopopaaa"));
console.log("Popopopsopicoplope" + " -> " + f("Popopopsopicoplope"));
console.log("gopaloplopopopinopgop" + " -> " + f("gopaloplopopopinopgop"));
console.log("aopopbopopopcopopop" + " -> " + f("aopopbopopopcopopop"));



0

///、18バイト

/op/.//../o\p//.//

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

このスニペットを置き換えるために望んでいることを注意opして.、しかしどこ交換が定義されている、後にop文字列にバックを入れています。その第2の命令が持っているでしょうopに置き換え.(ひいては挿入し.、私が使ってきたので、最終的な結果に)\の間opパターンを破ります。



0

クリスタル、39バイト

def o(s)s.gsub(/([^aeiou])op/,"\\1")end

使い方

各子音を検索し、その後にシーケンスを続けますop。その場合、そのシーケンスを前に見つかった子音のみで置き換えます([^aeiou])

オンラインで試す




0

sed、22バイト

sed -E 's/(.)op/\1/g'

EOFまでSTDINから読み取り、非正規化された文字列を出力します@xnorのPythonの回答
と同じ長さの短縮手法を使用


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