Skradzione z @Downgoat za pozwoleniem
Celem tego wyzwania jest (nie) rozstrzygnięcie debaty na temat wymowy „gif”.
Wymowa gif jest dyskutowana i chociaż powinna być (i powinna być) wymawiana jako jif , wciąż jest często kwestionowana.
W tym wyzwaniu otrzymasz zestaw słów, które mają g lub j , reprezentujących dźwięk, którym wymawia się to słowo. Otrzymasz również tekst, w którym musisz poprawić niepoprawną pisownię gif .
Ponieważ to jest internet i wszyscy zawsze się mylą. Ich (nie) powszechna uprzejmość polega na ich poprawianiu.
Przykładem złej wymowy jest:
Był tam gif myszy jedzącej burrito
Zła pisownia gif ? Gorszący! Należy to natychmiast poprawić:
Był tam wysięgnik (jak w słoiku) myszy jedzącej burrito
Skończyliśmy? Nie, nadal się mylisz.
Jesteś zawsze źle
To musi działać w drugą stronę:
W wysięgniku kot nosił kapelusz kota
Ten oczywisty błąd ortograficzny musi zostać naprawiony, poprawimy to, aby:
W gifie (jak w grafice) kot nosił kapelusz kota
Zasady
- Dane wejściowe to ciąg (zdanie) i tablica ciągów (lub dowolna rozsądna alternatywa, taka jak ciąg rozdzielany przecinkami) w dowolnej kolejności
- Możesz wziąć słowa
g
ij
w dowolnej kolejności. Można je brać osobno. - Każde wystąpienie
gif
(dowolnego przypadku) w zdaniu musi zostać zastąpione przezjif (as in ___)
gdzie___
jest jednolicie losowo wybrane słowo zaczynające sięj
od tablicy ciągów i odwrotnie wjif
przypadku słów rozpoczynających się odg
. - TYLKO słowa
gif
ijif
powinny zostać zastąpione (tzn. „Jiffy” nie powinno być zmieniane). Te słowa nie zrobiły nic złego. - Masz gwarancję, że co najmniej jedno słowo w tablicy zaczyna się od,
g
a co najmniej jedno zaczyna się odj
. - Sprawa musi zostać zachowana (np.
GiF
->JiF
). - Możesz napisać program lub funkcję
- Obowiązują standardowe luki
- Musimy (nie) szybko rozstrzygnąć debatę; najkrótszy kod w bajtach wygrywa
Przykłady
Wejścia i wyjścia oddzielone pojedynczym wierszem:
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.
The pronunciation of gif is debated and while it's supposed to be (and should be) pronounced **gif,** it's still commonly disputed.
FTFY;)Odpowiedzi:
Mathematica,
164165 bajtówTo obrzydliwość, ale chcę, żeby ktoś podzielił się moim bólem.
Function
który oczekuje, że pierwszy argument#
będzie (in) poprawiony, a drugi argument#2
będzie ciągiem znaków oddzielonych przecinkami.f[f@"g"="j"]="g";f[f@"G"="J"]="G"
definiuje funkcjęf
, która bierze literyg
,G
,j
orazJ
do ich odpowiednich zamienników. Jest to zawsze nieco krótsze niżf@"g"="j";f@"j"="g";f@"G"="J";f@"J"="G"
.Ustawiłem także na
z
równy,IgnoreCase->True
ponieważ będę go używał dwa razy.x:"g"|"j"~~y:"if "
to taki,StringExpression
który pasuje"gif "
lub"jif "
, nazywając pierwszą literęx
i ostatnie trzy znakiy
. Ponieważ opcjaz
(znana również jakoIgnoreCase->True
) jest przekazywana doStringReplace
, litery te mogą być w dowolnej kombinacji wielkich i małych liter.Następnie zastępuję każdy taki mecz
RandomChoice@StringCases[#2,f@x~~Except[","]..,z]
losowo wybiera słowo z drugiego argumentu,#2
który zaczyna się odf[x]
, ponownie ignorując wielkość liter, ponieważz
podano opcję .źródło
IgnoreCase->True
=>IgnoreCase->1<2
True
do1>0
, po prostu nie w moim wyjaśnieniem :)z
równąIgnoreCase->True
. Zrobiłem to samo później: „który zaczyna się odf[x]
”.¯\_(ツ)_/¯
Rubin ,
888791 bajtów-1 bajt z produkcji ETH. +4 bajty, ponieważ słowa zawierające „gif” lub „jif” nie powinny być zamieniane. -2 bajty, ponieważ listy słów zastępczych można teraz traktować osobno.
Wypróbuj online!
źródło
([gj])
na(g|j)
? (bardzo dużo Ruby, ale znam regex)CJam , 78 bajtów
Wypróbuj online!
Wymaga oddzielenia listy zastępczych znaków przecinkami.
Wyjaśnienie:
źródło
Python 3 , 237 bajtów
Wypróbuj online!
To najlepsze, co mogę zrobić - może to być jakiś sposób, aby zrobić to szybciej (prawdopodobnie z wyrażeniami regularnymi), ale mój mózg boli teraz.
Objaśnienie:
q
to proste mapowanie słownika, mam nadzieję, że jest jasne.s,g,j
są łańcuchem wejściowym, listą słów-słów i listą słów-słów.' '.join
łączy ze sobą zrozumienie listyfor w in s.split()
dla całej listy słów w s.Środkowy kawałek to czarna magia, którą podzielę na części. Pierwszy warunek:
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
Kontrole pierwszy znak jest w tonacjachq
, które są'g','G','j','J'
. Powodem wyodrębnieniaq
jako zmiennej jest to, że później używamy go jako dict / map.w[1:2]in ['i','I']
sprawdza, czy drugim znakiem jest albo i, albo I. The: 2 jest konieczne, ponieważ samo wstawieniew[1]
spowoduje awarię 1-literowych słów, ale plasterki z jakiegoś powodu tego nie robią (myślałem, że tak, cokolwiek!)w[2:3]in ['f','F']
jest analogiczny. Na krótko miałem to tylko 2: zanim zdałem sobie sprawę, że muszę wziąć pod uwagę gif lub jif, a następnie interpunkcję!w[3:]in",;!?."
sprawdza, czy kolejne znaki są interpunkcyjne. Przyznaję, że mój kod nie działa, jeśli ktoś wstawi „gif ?!” ale nie mogę być idealny. Ktoś inny może również podjąć wyzwanie otwarcia cytatów przed gif lub jif.False in(,,,)
jest w zasadzie dużym NAND. W rzeczywistości jest to ta sama liczba bajtów, co rozdzielenie czterech elementów za pomocąand
i zamiana argumentów, ale wygląda to fajniej i działa lepiej, jeśli musisz rozszerzyć go na piątąand
edycję.w if
oznacza, że jeśli False jest na liście warunkowej, zwracamy słowo bez zmian - nie spełnia ono naszych kryteriów.else
zmieniamy na:q[w[0]]+w[1:3]+" (as in "+choice(g if w[0]in 'jJ'else j)+')'+w[3:]
DOBRZE.
q[w[0]]
poprawnie podstawia pierwszą literę.w[1:3]
pinezki na i lub I oraz f lub F,w[3:]
pinezki na dowolnej interpunkcji końcowej. To pozostawia jak w klauzuli." (as in "+choice(g if w[0]in 'jJ'else j)+')'
wstawia oczywisty literał łańcuchowy na początku i końcowy nawias, interesujący jest tutaj fragment,choice(g if w[0]in 'jJ'else j)
który losowo wybiera zg
lubj
, w zależności od tego, czyw[0]
jest w'jJ'
. i właśnie zdałem sobie sprawę, że miałem ten kawałek do tyłu, więc naprawiłem to przez cały czas.To był długi dzień.
choice
jest wrandom
module, stąd import. Myślę, że to wszystko.źródło
JavaScript (ES6), 142 bajty
Pobiera osobne
g
ij
listy słów.źródło
JavaScript (ES6), 151 bajtów
Prawdopodobnie mogę bardziej zagrać w golfa w części trójskładnikowej, ale nie wiem, jak teraz. Ponadto bierze osobno słowa g i j.
źródło