Roubado de @Downgoat com permissão
O objetivo deste desafio é (não) resolver o debate sobre a pronúncia de "gif".
A pronúncia de gif é debatida e, embora deva ser (e deva ser) pronunciada jif , ainda é geralmente contestada.
Neste desafio, você receberá um conjunto de palavras com g ou j , representando o som com o qual a palavra é pronunciada. Você também receberá um texto no qual precisará corrigir as grafias incorretas do gif .
Porque esta é a internet e todos estão sempre errados. É (não) cortesia comum corrigi-los.
Um exemplo de pronúncia incorreta seria:
Havia um gif de um rato comendo um burrito
A grafia errada de gif ? Inaceitável! Isso deve ser corrigido imediatamente:
Havia um jif (como no pote) de um rato comendo um burrito
Nós terminamos? Não, você ainda está errado.
Você está sempre errado
Isso deve funcionar de outra maneira:
No jif o gato usava um chapéu de gato
Esse erro ortográfico óbvio deve ser corrigido. Vamos corrigir isso para:
No gif (como no gráfico) o gato usava um chapéu de gato
Regras
- Entrada é uma sequência (a frase) e uma matriz de sequências (ou qualquer alternativa razoável, como uma sequência separada por vírgula) em qualquer ordem
- Você pode pegar as palavras
g
ej
em qualquer ordem. Eles podem ser tomados separadamente. - Cada instância de
gif
(em qualquer caso) na sentença deve ser substituída porjif (as in ___)
onde___
está uma palavra selecionada uniformemente aleatória, iniciada com aj
partir da matriz de cadeias de caracteres e vice-versa, porjif
palavras iniciadas porg
. - APENAS as palavras
gif
ejif
devem ser substituídas (ou seja, "instável" não deve ser alterado). Essas palavras não fizeram nada errado. - Você tem a garantia de que pelo menos uma palavra na matriz começa com
g
e pelo menos uma começa comj
. - A caixa deve ser preservada (por exemplo,
GiF
->JiF
). - Você pode escrever um programa ou uma função
- Aplicam-se brechas padrão
- Precisamos (não) resolver o debate rapidamente; o menor código em bytes ganha
Exemplos
Entrada e saída separadas por uma única linha:
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;)Respostas:
Mathematica,
164165 bytesIsso é uma abominação, mas quero que alguém compartilhe minha dor.
Function
que espera que o primeiro argumento#
seja a sentença a ser (in) corrigida e o segundo argumento#2
seja uma sequência de palavras separada por vírgula.f[f@"g"="j"]="g";f[f@"G"="J"]="G"
define uma funçãof
que leva as letrasg
,G
,j
, eJ
para seus substitutos adequados. Isso é sempre um pouco mais curto quef@"g"="j";f@"j"="g";f@"G"="J";f@"J"="G"
.Também defino
z
igual a,IgnoreCase->True
já que o usarei duas vezes.x:"g"|"j"~~y:"if "
é umStringExpression
que corresponde"gif "
ou"jif "
, nomeando a primeira letrax
e os três últimos caracteresy
. Como a opçãoz
(também conhecida comoIgnoreCase->True
) é passada paraStringReplace
, essas letras podem estar em qualquer combinação de maiúsculas e minúsculas.Em seguida, substituo cada partida por
RandomChoice@StringCases[#2,f@x~~Except[","]..,z]
seleciona aleatoriamente uma palavra do segundo argumento#2
que começa comf[x]
, novamente ignorando maiúsculas e minúsculas porque a opçãoz
é dada.fonte
IgnoreCase->True
=>IgnoreCase->1<2
True
para1>0
, não apenas em minha explicação :)z
igual aIgnoreCase->True
. Fiz a mesma coisa mais tarde: "que começa comf[x]
".¯\_(ツ)_/¯
Ruby ,
888791 bytes-1 byte de ETHproductions. +4 bytes porque as palavras que contêm "gif" ou "jif" não devem ser substituídas. -2 bytes porque as listas de palavras de substituição podem ser obtidas separadamente agora.
Experimente online!
fonte
([gj])
para(g|j)
? (idk muito Rubi mas eu sei regex)CJam , 78 bytes
Experimente online!
Requer que a lista de caracteres de substituição seja separada por nada além de vírgulas.
Explicação:
fonte
Python 3 , 237 bytes
Experimente online!
É o melhor que posso fazer - pode ser uma maneira de fazê-lo mais rápido (provavelmente com regexes), mas meu cérebro está doendo agora.
Explicação:
q
é um mapeamento de dicionário simples, espero que esteja claro.s,g,j
são a sequência de entrada, a lista de palavras-g e a lista de palavras-j.' '.join
une a compreensão da lista feita,for w in s.split()
portanto, é para a lista de palavras em s.A parte intermediária é a magia negra, que eu vou dividir por partes. Em primeiro lugar, a condição:
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
verifica o primeiro caractere está nas chaves doq
que são'g','G','j','J'
. A razão para separarq
como uma variável é que também a usamos como um dict / map mais tarde.w[1:2]in ['i','I']
verifica se o segundo caractere é i ou I. O: 2 é necessário porque apenas a inserçãow[1]
resultaria em um travamento nas palavras de uma letra, mas as fatias não o fazem por algum motivo (eu pensei que eles fizeram, o que seja!)w[2:3]in ['f','F']
é análogo. Eu tive brevemente isso como apenas 2: antes que eu percebesse que precisava dar conta de gif, ou jif, seguido de pontuação!w[3:]in",;!?."
verifica se os caracteres subsequentes são pontuação. Admito que meu código não funcionará se alguém colocar 'gif ?!' mas eu não posso ser perfeito. Outra pessoa também pode aceitar o desafio de abrir aspas antes de gif ou jif.False in(,,,)
é basicamente uma grande NAND. Na verdade, é o mesmo valor que separar quatro itensand
e trocar os argumentos, mas isso parece mais interessante e funciona melhor se você precisar estendê-lo para uma quintaand
edição.w if
significa que, se False estiver na lista condicional, retornamos a palavra inalterada - ela não atende aos nossos critérios.else
, alteramos para:q[w[0]]+w[1:3]+" (as in "+choice(g if w[0]in 'jJ'else j)+')'+w[3:]
ESTÁ BEM.
q[w[0]]
substitui a primeira letra corretamente.w[1:3]
tachas no i ou I ef ou F,w[3:]
tachas em qualquer pontuação à direita. Isso deixa a cláusula as." (as in "+choice(g if w[0]in 'jJ'else j)+')'
coloca a string óbvia literal no início e o parêntese à direita, a parte interessante aqui é achoice(g if w[0]in 'jJ'else j)
que escolhe aleatoriamenteg
ouj
, dependendo de sew[0]
estiver'jJ'
. e acabei de perceber que tinha um pouco para trás, então resolvi isso o tempo todo.Tem sido um longo dia.
choice
está norandom
módulo, portanto, a importação. Eu acho que é tudo.fonte
JavaScript (ES6), 142 bytes
Toma listas separadas
g
e dej
palavras.fonte
Javascript (ES6), 151 bytes
Provavelmente posso jogar mais na parte ternária, mas não consigo pensar em como agora. Além disso, leva as palavras g e j separadamente.
fonte