Gif - Jif, Jif - Gif


24

@Downgoat'tan izin alınarak çalındı

Bu zorluğun amacı, tartışmayı "gif" in telaffuzuna bırakmaktır.

Gif ve Jif"


Okunuşu gif tartışmalıdır ve olması gereken (ve olmalıdır) telaffuz ederken Cif , hala yaygın olarak tartışmalı oluyor.

Bu mücadelede , kelimenin telaffuz edildiği sesi temsil eden, g veya j olan bir dizi kelime verilecektir . Ayrıca, yanlış GIF yazımlarını düzeltmeniz gereken bir metin de alırsınız .

Çünkü bu internet ve herkes yanlış. Onları düzeltmek için ortak nezaket (değil).

Yanlış bir telaffuz örneği şöyle olabilir:

Bir yoktu gif bir börek yeme bir fare

GIF'in yanlış yazımı ? Kabul edilemez! Bu derhal düzeltilmelidir:

Burrito yiyen bir farenin bir jifi (kavanozdaki gibi) vardı .

Tamam mıyız? Hayır, hala yanılıyorsun.

Sen her zaman yanılıyorsun

Bu diğer şekilde çalışmalıdır:

Gelen jif kedi bir kedi şapka giydi

Bu açık yazım hatası düzeltilmeli, aşağıdakileri düzeltmeliyiz:

In (grafikte olduğu gibi) gif kedi bir kedi şapka giydi

kurallar

  • Giriş, herhangi bir sıradaki bir dize (cümle) ve dizeler dizisidir (veya virgülle ayrılmış bir dize gibi makul bir alternatif)
  • Sen alabilir gve jherhangi bir sırada kelime. Ayrı ayrı alınabilirler.
  • Her örnek gifcümledeki (her durumda) ile değiştirilmelidir jif (as in ___)burada ___ile başlayan bir eşit olarak rasgele seçilen kelime j için tersi şeritlerinin diziden ve yardımcısı jifkelime ile başlayan ile g.
  • SADECE kelimeleri gifve jifdeğiştirilmesi gerekir (yani "jiffy" değiştirilmemelidir). Bu kelimeler yanlış yapmadı.
  • Dizideki en az bir kelimenin başlayacağı gve en az birinin başlayacağı garanti edilir j.
  • Dava korunmalı (örn. GiF-> JiF).
  • Bir program veya işlev yazabilirsiniz
  • Standart boşluklar uygulanır
  • Tartışmayı hızlıca çözmemiz (istemememiz); bayt cinsinden en kısa kod kazanır

Örnekler

Tek bir satırla ayrılmış giriş ve çıkış:

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;)
Draco18,

15
Zürafa Değişim Biçimi :)
Mikhail V

3
(G sessiz.)
David Conrad

6
Belli ki Johan'da olduğu gibi jif. Kürklülerin ses çıkardığı gibi.
R. ..

2
Oy vermek için cazip çünkü ag ve NOT AJ ile telaffuz ediliyor
Stan Strum

Yanıtlar:


6

Mathematica, 164 165 bayt

Bu bir berbatlık, ama birisinin acımı paylaşmasını istiyorum.

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

Functionbu ilk argümanın #(in) düzeltilmiş cümle olmasını ve ikinci argümanın #2virgülle ayrılmış bir sözcük dizesi olmasını bekler .

f[f@"g"="j"]="g";f[f@"G"="J"]="G"bir işlevi tanımlar fharf alır g, G, jve Jbunların uygun değiştirimlere ilişkindir. Bu hiç olmadığı kadar kısa f@"g"="j";f@"j"="g";f@"G"="J";f@"J"="G".

Ayrıca iki kere kullanacağımdan beri zeşit olarak ayarlıyorum IgnoreCase->True.

x:"g"|"j"~~y:"if "Bir olduğu StringExpressionmaçları hangi "gif "veya "jif "ilk harfi adlandırma, xve son üç karakteri y. Seçeneğe z(olarak da bilinir IgnoreCase->True) geçildiği için StringReplace, bu harfler büyük ve küçük harflerin herhangi bir kombinasyonu halinde olabilir.

Sonra her eşleşmeyi değiştirdim.

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

RandomChoice@StringCases[#2,f@x~~Except[","]..,z]rastgele ikinci argüman tek kelime seçer #2ile başlayan f[x]seçeneği nedeniyle tekrar durumda göz ardı zverilir.


3
Neden bunun için Mathematica'yı kullandın? Vay.
Neil A.,

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

1
Aslında zaten kısaltılmış @CalculatorFeline Trueiçin 1>0değil sadece :) benim açıklamada,
ngenisis

Her yerde tamamen golf kodu sinppets kullanıyorsunuz. Neden orada değil?
Hesap MakinesiFeline

1
@CalculatorFeline Sanırım koddan alıntı yapmadığım için, değişkene zeşit olacak şekilde ne yaptığını açıklıyordum IgnoreCase->True. Aynı şeyi daha sonra yaptım: "ile başlayan f[x]". ¯\_(ツ)_/¯
ngenis

5

Ruby , 88 87 91 bayt

ETHproductions'tan -1 bayt. +4 bayt çünkü "gif" veya "jif" içeren kelimelerin değiştirilmemeleri gerekir. -2 bayt çünkü yedek kelime listeleri artık ayrı ayrı alınabiliyor.

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

Çevrimiçi deneyin!


6
Değiştirmek Could ([gj])için (g|j)? (çok fazla
Idk

3

CJam , 78 bayt

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

Çevrimiçi deneyin!

Değiştirilecek karakterlerin listesinin virgül dışında hiçbir şeyle ayrılmamasını gerektirir.


Açıklama:

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'in virgül izlediği örnek üzerinde çalışmaz.
Michael Boger

1

Python 3 , 237 bayt

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

Çevrimiçi deneyin!

Bu yapabileceğimin en iyisi - daha hızlı yapmanın bir yolu olabilir (muhtemelen regex'lerle) ama beynim şimdi acıyor.

Açıklama: qbasit bir sözlük haritalama, umarım açıktır. s,g,jgiriş dizesi, g kelimelerinin listesi ve j kelimelerinin listesidir. bu nedenle bir ' '.joinaraya getirilenler arasında yapılan kavrama bir araya gelerek for w in s.split()s kelimelerinin listesi içindir.

Ortadaki bit kara büyüdür, ki bu parçayı parçalayacağım. İlk olarak, koşul: 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İlk karakterin qhangi tuşların içinde olduğunu kontrol eder 'g','G','j','J'. qBir değişken olarak ayrılmanın nedeni, onu daha sonra bir dikt / harita olarak kullanmamızdır.

w[1:2]in ['i','I']ikinci karakterin ya i ya da I olduğunu kontrol eder: 2 gereklidir, çünkü sadece koymak w[1]1 harfli kelimelerde çarpışmayla sonuçlanacaktır, ancak dilimler bunu bir nedenden ötürü yapmazlar (her şeyi yaptığını düşündüm!).

w[2:3]in ['f','F']benzerdir. Bunu sadece 2 olarak kısaca yaptım: fark etmeden önce, gif ya da jif'i hesaba katmam gerektiğinin farkına vardım, ardından noktalama işareti!

w[3:]in",;!?."sonraki karakterlerin noktalama işaretleri olup olmadığını kontrol eder. Biri 'gif ?!' koyarsa kodumun işe yaramadığını itiraf ediyorum ama ben mükemmel olamam. Başka biri de, gif veya jif'den önce tırnak açma zorluğunu üstlenebilir.

False in(,,,)temelde büyük bir NAND. Aslında bu, dört öğeyi ayırmak andve argümanları değiştirmekle aynı bayt sayımıdır , ancak bu, daha havalı görünür ve eğer beşinci bir andşeye genişletmeniz gerekirse daha iyi çalışır .

w ifEğer False koşullu listede ise, sadece kelimesini değiştirmeden geri göndeririz - bu kriterlerimize uymuyor demektir. else, biz onu değiştiririz:

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

TAMAM. q[w[0]]ilk harfi doğru şekilde yerleştirir. w[1:3]i veya I ve f veya F üzerindeki yazılar, w[3:]izleyen herhangi bir noktalama işaretiyle ilgili. Bu maddede olduğu gibi bırakır.

" (as in "+choice(g if w[0]in 'jJ'else j)+')'Baştaki kelimenin tam anlamıyla bariz dizgeyi ve izleyen parantezi koyar, buradaki ilginç bit , içinde olup olmadığına bağlı olarak choice(g if w[0]in 'jJ'else j)rastgele seçen gveya seçen şeydir . ve farkettim ki, bu parçayı geriye doğru aldım, bu yüzden bunu düzeltdim, bitti.jw[0]'jJ'

Uzun bir gün oldu. choiceolduğu randomböylece modül ithalat. Bence her şey bu.


0

JavaScript (ES6), 142 bayt

(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])})`)

Ayrı gve jkelime listeleri alır.


0

Javascript (ES6), 151 bayt

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

Muhtemelen üçlü kısmı daha fazla golf oynayabilirim ama şu an nasıl olduğunu düşünemiyorum. Ayrıca, g ve j kelimelerini ayrı ayrı alır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.