Gif-Jif, Jif-Gif


24

@Downgoat에서 권한을 가지고 도난

이 과제의 핵심은 "gif"의 발음에 대한 토론을 해결하지 않는 것입니다.

지프 vs. 지프"


gif 의 발음에 대해서는 토론이 이루어지고 jif 로 발음되어야 하지만 여전히 논쟁의 여지가 있습니다.

이 도전에서는 단어가 발음되는 소리를 나타내는 g 또는 j 가있는 단어 세트가 제공됩니다. gif 의 잘못된 철자를 수정해야하는 텍스트도 있습니다 .

이것은 인터넷이며 모두가 항상 틀리기 때문입니다. 수정하는 것이 일반적인 예의는 아닙니다.

잘못된 발음의 예는 다음과 같습니다.

부리또를 먹는 쥐 의 gif 가 있었다

gif 의 잘못된 철자 ? 용납 할 수 없습니다! 즉시 수정해야합니다.

부리또를 먹는 마우스 의 jif (병과 같이) 가있었습니다

다 했습니까? 아뇨, 당신은 여전히 잘못입니다.

항상 틀렸어

이것은 다른 방식으로 작동해야합니다.

에서 JIF 고양이는 고양이의 모자를 착용

이 철자가 틀린 것은 반드시 수정해야합니다. 다음과 같이 수정합니다.

에서 (그래픽에서와 같이) GIF 고양이는 고양이의 모자를 착용

규칙

  • 입력은 임의의 순서로 문자열 (문장) 및 문자열 배열 (또는 쉼표로 구분 된 문자열과 같은 합리적인 대안)입니다.
  • gj단어는 어떤 순서로든 가져갈 수 있습니다 . 별도로 가져갈 수 있습니다.
  • gif문장에서 (어떤 경우 든) 의 모든 인스턴스는 문자열 배열에서 시작하여 균일하게 무작위로 선택된 단어가있는 jif (as in ___)곳 으로 대체되어야 하며 그 반대의 경우도로 시작해야 합니다.___jjifg
  • 단어 만 gif하고 jif(변경되지 않아야 즉, "순간") 교체해야합니다. 그 말은 잘못이 없습니다.
  • 배열에서 적어도 하나의 단어는로 시작 g하고 적어도 하나는로 시작해야 j합니다.
  • 대소 문자를 유지해야합니다 (예 : 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
Giraffical Interchange Format :)
Mikhail V

3
(G는 침묵합니다.)
David Conrad

6
Johan과 마찬가지로 분명히 jif입니다. 소리가 나는 모피처럼.
R ..

2
이 AG와 발음 및 NOT AJ 있기 때문에 downvote 유혹
스탠 스트 럼

답변:


6

매스 매 티카, 164165 바이트

이것은 가증스러운 일이지만 누군가가 내 고통을 나누기를 원합니다.

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) 수정 된 문장이고 두 번째 인수 #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 "xyzIgnoreCase->TrueStringReplace

그런 다음 모든 일치 항목을

{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 난 실제로 내 설명 True1>0, 그냥 약어 로 이미 약어 :)
ngenisis

다른 곳에서는 완전히 골프 코드를 사용합니다. 왜 없습니까?
CalculatorFeline

1
@CalculatorFeline 나는 경우에 나는 코드를 인용되지 않았기 때문에, 나는 변수를 설정이었다, 그것은 무엇을했는지 설명했다 추측 z같음 IgnoreCase->True. 나는 나중에 같은 것을했다 : "로 시작하는 f[x]". ¯\_(ツ)_/¯
ngenisis 2016 년

5

루비 , 88 87 91 바이트

ETH 프로덕션에서 -1 바이트 "gif"또는 "jif"를 포함하는 단어는 교체하지 않아야하므로 +4 바이트 대체 단어 목록을 지금 별도로 가져올 수 있으므로 -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 많은 루비지만 정규식을 알고 있습니다)
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 뒤에 쉼표가있는 예에서는 작동하지 않습니다.
Michael Boger

1

파이썬 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변수로 분리하는 이유는 나중에 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입니다. 실제로 4 개의 항목을 분리 and하고 인수를 바꾸는 것과 동일한 바이트 수 이지만 5 번째 버전으로 확장 해야하는 경우 더 멋지게 보이고 더 잘 작동합니다 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]i 또는 I 및 f 또는 F w[3:]에 대한 압정 , 후행 구두점에 대한 압정. 그것은 as in 절을 남깁니다.

" (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'. 방금이 비트가 거꾸로되어 있다는 것을 깨달았습니다.

긴 하루였습니다. choicerandom따라서 수입 모듈. 나는 그것이 전부라고 생각합니다.


0

자바 스크립트 (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

자바 스크립트 (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.