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 จากอาร์เรย์ของสตริงและในทางกลับกันสำหรับการที่มีคำขึ้นต้นด้วยjifg
  • เฉพาะคำgifและjifควรถูกแทนที่ (เช่น "jiffy" ไม่ควรเปลี่ยน) คำพูดเหล่านั้นไม่ได้ทำผิด
  • คุณจะรับประกันว่าอย่างน้อยหนึ่งคำในอาร์เรย์เริ่มต้นด้วยและอย่างน้อยหนึ่งเริ่มต้นด้วยgj
  • กรณีจะต้องได้รับการเก็บรักษาไว้ (เช่นGiF-> JiF)
  • คุณสามารถเขียนโปรแกรมหรือฟังก์ชั่น
  • ช่องโหว่มาตรฐานใช้
  • เราต้อง (ไม่) ยุติการอภิปรายอย่างรวดเร็ว โค้ดที่สั้นที่สุดในหน่วยไบต์ชนะ

ตัวอย่าง

อินพุตและเอาต์พุตคั่นด้วยบรรทัดเดียว:

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
รูปแบบการแลกเปลี่ยนยีราฟ )
มิคาอิล V

3
(The G เงียบอยู่)
David Conrad

6
เห็นได้ชัดว่าเป็น jif เหมือนกับใน Johan เช่นเดียวกับเสียงที่ทำให้ขนฟู
. ..

2
ล่อลวงให้โหวตเพราะออกเสียงด้วย ag และไม่ใช่ AJ
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ซึ่งคาดว่าอาร์กิวเมนต์แรก#จะเป็นประโยคที่จะแก้ไข (ใน) และอาร์กิวเมนต์ที่สอง#2เป็นสตริงคำที่คั่นด้วยเครื่องหมายจุลภาค

f[f@"g"="j"]="g";f[f@"G"="J"]="G"กำหนดฟังก์ชั่นfซึ่งจะมีตัวอักษรg, G, jและJเพื่อทดแทนที่เหมาะสมของพวกเขา มันสั้นกว่าf@"g"="j";f@"j"="g";f@"G"="J";f@"J"="G"นี้เล็กน้อย

ฉันยังตั้งค่าzเท่ากับIgnoreCase->Trueเนื่องจากฉันจะใช้มันสองครั้ง

x:"g"|"j"~~y:"if "เป็นStringExpressionที่ตรง"gif "หรือ"jif "การตั้งชื่อตัวอักษรตัวแรกและตัวละครทั้งสามที่ผ่านมาx yเนื่องจากตัวเลือกz(หรือเรียกอีกอย่างว่าIgnoreCase->True) จะถูกส่งผ่านไปยังStringReplaceตัวอักษรเหล่านี้จึงสามารถรวมกันเป็นตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก

จากนั้นฉันจะเปลี่ยนทุกแมทช์ด้วย

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

RandomChoice@StringCases[#2,f@x~~Except[","]..,z]สุ่มเลือกคำจากอาร์กิวเมนต์ที่สอง#2ซึ่งเริ่มต้นด้วยf[x]โดยไม่สนใจขนาดตัวพิมพ์เนื่องจากตัวเลือกzถูกกำหนด


3
ทำไมคุณถึงใช้ Mathematica ในเรื่องนี้? ว้าว.
Neil A.

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

1
@CalculatorFeline จริงผมยากแล้วTrueที่จะ1>0เพียงแค่ไม่ได้อยู่ในคำอธิบายของฉัน :)
ngenisis

คุณใช้รหัส sinppets ที่เล่นกอล์ฟได้ทุกที่อื่น ทำไมไม่ไปที่นั่น?
CalculatorFeline

1
@CalculatorFeline ฉันเดาเพราะในกรณีที่ผมไม่ได้แจ้งรหัสที่ผมอธิบายสิ่งที่มันทำซึ่งจะตั้งค่าตัวแปรเท่ากับz IgnoreCase->Trueฉันทำสิ่งเดียวกันภายหลัง: "ซึ่งเริ่มต้นด้วยf[x]" ¯\_(ツ)_/¯
ngenisis

5

Ruby , 88 87 91 ไบต์

-1 ไบต์จาก ETHproductions +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)เหรอ (idk มากทับทิม แต่ฉันรู้ regex)
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 ตามมา
Michael Boger

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

ลองออนไลน์!

นี่คือสิ่งที่ดีที่สุดที่ฉันสามารถทำได้ - อาจเป็นวิธีที่ทำได้เร็วกว่า (อาจเป็น regexes) แต่สมองของฉันเจ็บตอนนี้

คำอธิบาย: qเป็นแผนที่พจนานุกรมอย่างง่ายฉันหวังว่าชัดเจน s,g,jคือสตริงอินพุตรายการของคำศัพท์ g และรายการคำศัพท์ j ' '.joinรวมเข้าด้วยกันความเข้าใจของรายการที่ทำข้ามfor w in s.split()จึงเป็นรายการของคำใน

ตรงกลางเป็นเวทย์มนตร์ดำซึ่งฉันจะพังทลายลงมาเป็นชิ้น ๆ ก่อนเงื่อนไข: 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เป็นตัวแปรคือเรายังใช้เป็น dict / map ในภายหลัง

w[1:2]in ['i','I']ตรวจสอบว่าตัวละครตัวที่สองคือ i หรือ I ตัว: 2 เป็นสิ่งจำเป็นเพราะการใส่w[1]จะส่งผลให้เกิดความผิดพลาดในตัวอักษร 1 ตัว แต่ตัวแบ่งส่วนไม่ทำอย่างนั้นด้วยเหตุผลบางอย่าง (ฉันคิดว่าพวกเขาทำทุกอย่าง!)

w[2:3]in ['f','F']คล้ายกัน ฉันมีสิ่งนี้สั้น ๆ เป็นเพียง 2: ก่อนที่ฉันจะรู้ว่าฉันจำเป็นต้องมีบัญชีสำหรับ gif หรือ jif ตามด้วยเครื่องหมายวรรคตอน!

w[3:]in",;!?."ตรวจสอบว่าอักขระที่ตามมาเป็นเครื่องหมายวรรคตอน ฉันยอมรับรหัสของฉันไม่ทำงานหากมีคนใส่ 'gif ?!' แต่ฉันจะไม่สมบูรณ์แบบ คนอื่นสามารถรับความท้าทายของการเปิดคำพูดก่อน gif หรือ jif เช่นกัน

False in(,,,)โดยทั่วไปแล้วเป็น NAND ขนาดใหญ่ มันเป็นจริง bytecount เดียวกับแยกสี่รายการที่มีandและการแลกเปลี่ยนข้อโต้แย้ง แต่เย็นนี้ลักษณะและการทำงานที่ดีกว่าถ้าคุณมีการขยายไปยังหนึ่งในห้าandสิ่งที่เอ็ด

w ifหมายความว่าถ้า False อยู่ในรายการแบบมีเงื่อนไขเราเพียงแค่ส่งคืนคำที่ไม่เปลี่ยนแปลง - ซึ่งไม่เป็นไปตามเกณฑ์ของเรา elseเราเปลี่ยนเป็น:

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

ตกลง. q[w[0]]เปลี่ยนตัวอักษรตัวแรกอย่างถูกต้อง w[1:3]tacks บน i หรือ I และ f หรือ F, w[3:]tacks ที่เครื่องหมายวรรคตอนต่อท้าย ที่ทิ้งไว้ในข้อ

" (as in "+choice(g if w[0]in 'jJ'else j)+')'ทำให้ในตัวอักษรสตริงที่เห็นได้ชัดในช่วงเริ่มต้นและวงเล็บต่อท้ายบิตที่น่าสนใจที่นี่เป็นที่choice(g if w[0]in 'jJ'else j)ที่สุ่มเลือกจากgหรือjขึ้นอยู่กับว่าอยู่ในw[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])})`)

ใช้รายการแยกต่างหากgและjรายการคำ


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.