Gif-Jif、Jif-Gif


24

許可を得て@Downgoatから盗まれた

この課題のポイントは、「gif」の発音に関する議論を解決する(しない)ことです。

Gif対Jif


gifの発音は議論されており、それはjifと発音されるべきであり、そうである必要がありますが、それでも一般的に議論されています。

このチャレンジでは、単語が発音される音を表すgまたはjを持つ単語のセットが与えられます。また、gifの誤ったスペルを修正する必要のあるテキストも取得します。

これはインターネットであり、誰もが常に間違っているからです。それらを修正するのは一般的ではありません(そうではありません)。

間違った発音の例は次のとおりです。

ブリトーを食べるネズミのGIFがありました

gifのスペルが間違っていますか?受け入れられない!これはすぐに修正する必要があります。

ありました(瓶のように)JIFブリトーを食べマウスは、

終わった?いいえ、あなたはまだ間違っています。

あなたはいつも間違っています

これは他の方法で動作する必要があります。

JIF猫は猫の帽子を身に着けていました

この明らかなスペルミスは修正する必要があります。これを次のように修正します。

(グラフィックのように)GIF猫は猫の帽子を身に着けていました

ルール

  • 入力は、任意の順序の文字列(文)および文字列の配列(またはコンマ区切りの文字列などの合理的な代替)です。
  • あなたはかかりますgし、j任意の順序で単語を。それらは別々に取られるかもしれません。
  • すべてのインスタンスgif文に(どのような場合には)と交換しなければならないjif (as in ___)場所___で始まる一様にランダム選択された単語であるj ためその逆文字列の配列から、副jif単語が始まるとg
  • 言葉ONLY gifjif交換する必要があります(つまり、「ちょっとの間には、」変更しないでください)。それらの言葉は間違っていません。
  • 配列内の少なくとも1つの単語がで始まり、少なくとも1つの単語がで始まることが保証されてgjます。
  • 大文字と小文字を区別する必要があります(例GiF-> JiF)。
  • プログラムまたは関数を書くことができます
  • 標準的な抜け穴が適用されます
  • 議論を迅速に解決する(しない)必要があります。バイト単位の最短コードが勝つ

1行で区切られた入力と出力:

graphic, jar, jam, gram
I saw a jif of how to pronounce gif that showed gif is pronounced jif

I saw a gif (as in graphic) of how to pronounce jif (as in jar) that showed jif (as in jam) is pronounced gif (as in gram)


gravy, jeff
G is for gIf, h is for JiF, i is for gIF, j is for JIf

G is for jIf (as in jeff), h is for GiF (as in gravy), i is for jIF (as in jeff), j is for JIf (as in gravy)

joke, june, gorilla, great
Jiffy should not be treated as a GIF or JIF, like gifted.

Jiffy should not be treated as a JIF (as in june) or GIF (as in great), like gifted.

3
The pronunciation of gif is debated and while it's supposed to be (and should be) pronounced **gif,** it's still commonly disputed.FTFY;)
Draco18s

15
Giraffical Interchange Format :)
ミハイルV

3
(Gは黙っています。)
デビッドコンラッド

6
ヨハンのように明らかにjifです。毛皮の音がするように。
R ..

2
AJではなくagで発音されているため、ダウン票を引き付けようとしました
Stan Strum

回答:


6

Mathematica、164 165バイト

これは憎むべきことですが、誰かに私の痛みを共有してもらいたいです。

StringReplace[f[f@"g"="j"]="g";f[f@"G"="J"]="G";z=IgnoreCase->1>0;#,x:"g"|"j"~~y:"if ":>{f@x,y,"(as in ",RandomChoice@StringCases[#2,f@x~~Except[","]..,z]}<>") ",z]&

Functionこれは、最初の引数#が(in)correctedである文であり、2番目の引数#2がコンマで区切られた単語の文字列であることを期待しています。

f[f@"g"="j"]="g";f[f@"G"="J"]="G"機能定義f文字を取りgGj、及びJその適切な代替品に。これはこれよりも少し短いですf@"g"="j";f@"j"="g";f@"G"="J";f@"J"="G"

また、2回使用zするIgnoreCase->Trueので、等しく設定します。

x:"g"|"j"~~y:"if "は、StringExpression一致"gif "する"jif "、または、最初の文字xと最後の3文字に名前を付けyます。オプションz(とも呼ばれますIgnoreCase->True)はに渡されるためStringReplace、これらの文字は大文字と小文字の任意の組み合わせにすることができます。

次に、そのようなすべてのマッチを

{f@x,y,"(as in ",RandomChoice@StringCases[#2,f@x~~Except[","]..,z]}<>") " 

RandomChoice@StringCases[#2,f@x~~Except[","]..,z]オプションが指定されているため、大文字と小文字を無視し#2f[x]、で始まる2番目の引数から単語をランダムに選択しますz


3
なぜこれにMathematicaを使用するのですか?ワオ。
ニールA.

1
IgnoreCase->True=>IgnoreCase->1<2
CalculatorFeline

1
@CalculatorFeline私は実際にはすでに短縮True1>0れていますが、説明ではありません:)
ngenisis

他のすべての場所で、完全にゴルフされたコードシンペットを使用します。なぜないの?
電卓

1
@CalculatorFelineその場合、私はコードを引用していないので、それが何をしたかを説明していzましたIgnoreCase->True。後で同じことをしました:「で始まるf[x]」。¯\_(ツ)_/¯
-ngenisis

5

ルビー88 87 91バイト

ETHproductionsから-1バイト。+4バイト。「gif」または「jif」を含む単語は置き換えられないためです。-2バイト。置換ワードリストを個別に取得できるためです。

->s,g,j{s.gsub(/\b(g|j)if\b/i){$&.tr("GgJj","JjGg")+" (as in #{($1[/g/i]?j:g).sample})"}}

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


6
に変更([gj])してもらえます(g|j)か?(多くのRubyを知っていますが、正規表現は知っています)
ETHproductions

3

CJam、78バイト

l',%:A;lS%{_ela"gifjif"3/&{_V=_el:B'g=1W?Z*+V\t" (as in "A{V=elB=!},mR')}O?S}%

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

置換文字のリストは、コンマのみで区切る必要があります。


説明:

l',%                        e# read line of input and split at commas
    :A;                     e# store in var A and pop off the stack
       lS%{...}%            e# for each word in the next line of input so:

_ela"gifjif"3/&             e#   intersection of ["gif" "jif"] and [lowercase(word)]
               {...}O?      e#   if set it non-empty, run block below, otherwise do nothing (push empty string)
                      S     e#   push space

_V=                         e#     extract first char
   _el:B                    e#     duplicate to lowercase and store in var B
        'g=1W?Z*+           e#     convert g/G <=> j/J
                 V\t        e#     store back to word
" (as in "                  e#     push string
           A{V=elB=!},      e#     filter replacements by words starting with the same char (case insensitive)
                      mR    e#     select random element
                        ')  e#     push ')' char

gif / jifの後にコンマが続く例では機能しません。
マイケルボガー

1

Python 3、237バイト

lambda s,g,j:' '.join([(w if False in(w[0]in q,w[1:2]in['i','I'],w[2:3]in['f','F'],w[3:]in",;!?.")else q[w[0]]+w[1:3]+" (as in "+choice(g if w[0]in 'jJ'else j)+')'+w[3:])for w in s.split()])
from random import*
q=dict(zip("gGjJ","jJgG"))

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

これは私ができる最善の方法です-(おそらく正規表現で)より速くそれを行う方法かもしれませんが、私の脳は今痛いです。

説明: q単純な辞書マッピングです。それが明確であることを願っています。 s,g,j入力文字列、gワードのリスト、jワードのリストです。 したがって、' '.join全体for w in s.split()で行われるリストの理解は、s内の単語のリストに対して結合されます。

真ん中の部分は黒魔術です。これを部分的に分解します。最初に、条件:False in(w[0]in q,w[1:2]in['i','I'],w[2:3]in['f','F'],w[3:]in",;!.")

w[0]in qは、最初の文字がキーにqあるかをチェックします'g','G','j','J'q変数として分離する理由は、後で辞書/マップとしても使用するためです。

w[1:2]in ['i','I']2番目の文字がiまたはIのいずれかであることを確認します。:2が必要なのは、置くだけw[1]で1文字の単語がクラッシュするからです。しかし、スライスは何らかの理由でそれを行いません。

w[2:3]in ['f','F']似ています。私は簡単にこれを2つだけとしていました:gifまたはjifを説明する必要があることに気付く前に、句読点が続きました!

w[3:]in",;!?."後続の文字が句読点であることを確認します。誰かが「gif ?!」と入力すると、コードが機能しないことを認めます。しかし、私は完璧にすることはできません。他の人も、gifまたはjifの前に引用符を開くという課題に取り組むことができます。

False in(,,,)基本的に大きなNANDです。実際には、4つの項目をand引数で区切って交換するのと同じバイト数ですが、5つ目のanded に拡張する必要がある場合、これはよりクールに見え、より適切に機能します。

w ifつまり、Falseが条件リストにある場合、単語を変更せずに返すだけで、基準を満たしていません。 else、次のように変更します。

q[w[0]]+w[1:3]+" (as in "+choice(g if w[0]in 'jJ'else j)+')'+w[3:]

OK。 q[w[0]]最初の文字を正しく置き換えます。 w[1:3]iまたはIおよびfまたはFにw[3:]タックし、末尾の句読点にタックします。それはas in節を残します。

" (as in "+choice(g if w[0]in 'jJ'else j)+')'は、開始と末尾の括弧に明白な文字列リテラルを入れます。ここで興味深いのは、if がinに応じてor choice(g if w[0]in 'jJ'else j)からランダムに選択されることです。そして、私はこれを少し後方に持っていることに気付いたので、それを修正しました。gjw[0]'jJ'

長い一日でした。 choiceであり、randomしたがってモジュールのインポート。それがすべてだと思います。


0

JavaScript(ES6)、142バイト

(s,g,j,r=l=>l[Math.random()*l.length|0])=>s.replace(/\b[gj]if\b/gi,w=>`GJgj`[l=`JGjg`.search(w[0])]+w.slice(1)+` (as in ${r([g,j,g,j][l])})`)

別の受け取りgj単語のリストを。


0

Javascript(ES6)、151バイト

f=(s,g,j)=>s.replace(/\b(g|j)(if)\b/ig,(m,p,c)=>`${a=g,p=="j"?"g":p=="J"?"G":(a=j,p=="g"?"j":"J")}${c}(as in ${a[Math.floor(Math.random()*a.length)]})`)

私はおそらく三分の一の部分をもっとゴルフすることができますが、今どのように考えることができません。また、gとjの単語を別々に取ります。

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