Robado de @Downgoat con permiso
El objetivo de este desafío es (no) resolver el debate sobre la pronunciación de "gif".
La pronunciación de gif se debate y, aunque se supone que es (y debería ser) pronunciada jif , todavía se discute comúnmente.
En este desafío, recibirás un conjunto de palabras que tienen un g o j , que representan el sonido con el que se pronuncia la palabra. También obtendrá un texto en el que debe corregir la ortografía incorrecta de gif .
Porque esto es internet y todos siempre están equivocados. Es (no) cortesía común corregirlos.
Un ejemplo de una pronunciación incorrecta sería:
Había un gif de un ratón comiendo un burrito
La ortografía incorrecta de gif ? ¡Inaceptable! Esto debe corregirse de inmediato:
Había un jif (como en el tarro) de un ratón comiendo un burrito
¿Terminamos? No, todavía estás equivocado.
Usted es siempre malo
Esto debe funcionar de otra manera:
En el jif, el gato llevaba un sombrero de gato
Este error ortográfico obvio debe corregirse, lo corregiremos para:
En el gif (como en el gráfico), el gato llevaba un sombrero de gato
Reglas
- La entrada es una cadena (la oración) y una matriz de cadenas (o cualquier alternativa razonable, como una cadena separada por comas) en cualquier orden
- Puedes tomar el
g
yj
palabras en cualquier orden. Se pueden tomar por separado. - Cada instancia de
gif
(en cualquier caso) en la oración debe ser reemplazada porjif (as in ___)
where___
es una palabra seleccionada aleatoriamente uniforme que comienza conj
desde el conjunto de cadenas, y viceversajif
con palabras que comienzan cong
. - SOLO las palabras
gif
yjif
deben ser reemplazadas (es decir, "jiffy" no deben cambiarse). Esas palabras no han hecho nada malo. - Se le garantiza que al menos una palabra en la matriz comienza con
g
y al menos una comienza conj
. - El caso debe conservarse (por ejemplo,
GiF
->JiF
). - Puedes escribir un programa o una función
- Se aplican lagunas estándar
- Necesitamos (no) resolver el debate rápidamente; el código más corto en bytes gana
Ejemplos
Entrada y salida separadas por una sola línea:
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;)Respuestas:
Mathematica,
164165 bytesEsto es una abominación, pero quiero que alguien comparta mi dolor.
Function
que espera que el primer argumento#
sea la oración a (in) corregida y el segundo argumento#2
a una cadena de palabras separadas por comas.f[f@"g"="j"]="g";f[f@"G"="J"]="G"
define una funciónf
que toma las letrasg
,G
,j
, yJ
a sus sustitutos apropiados. Esto es un poco más corto quef@"g"="j";f@"j"="g";f@"G"="J";f@"J"="G"
.También establecí
z
igual aIgnoreCase->True
ya que lo usaré dos veces.x:"g"|"j"~~y:"if "
es unaStringExpression
que coincide"gif "
o"jif "
nombra la primera letrax
y los últimos tres caracteresy
. Dado que la opciónz
(también conocida comoIgnoreCase->True
) se pasa aStringReplace
, estas letras pueden estar en cualquier combinación de mayúsculas y minúsculas.Luego reemplazo cada partido con
RandomChoice@StringCases[#2,f@x~~Except[","]..,z]
selecciona aleatoriamente una palabra del segundo argumento#2
que comienza conf[x]
, nuevamente ignorando mayúsculas y minúsculas porquez
se da la opción .fuente
IgnoreCase->True
=>IgnoreCase->1<2
True
a1>0
, pero no en mi explicación :)z
igual aIgnoreCase->True
. Hice lo mismo más tarde: "que comienza conf[x]
".¯\_(ツ)_/¯
Ruby ,
888791 bytes-1 byte de ETHproductions. +4 bytes porque las palabras que contienen "gif" o "jif" no deben reemplazarse. -2 bytes porque las listas de palabras de reemplazo se pueden tomar por separado ahora.
Pruébalo en línea!
fuente
([gj])
a(g|j)
? (Idk mucho Ruby pero sé regex)CJam , 78 bytes
Pruébalo en línea!
Requiere que la lista de caracteres de reemplazo esté separada por nada más que comas.
Explicación:
fuente
Python 3 , 237 bytes
Pruébalo en línea!
Esto es lo mejor que puedo hacer, podría ser alguna forma de hacerlo más rápido (probablemente con expresiones regulares), pero ahora me duele el cerebro.
Explicación:
q
es un mapeo de diccionario simple, espero que esté claro.s,g,j
son la cadena de entrada, la lista de palabras g y la lista de palabras j.' '.join
une la comprensión de la lista realizada, porfor w in s.split()
lo tanto, es para la lista de palabras en s.El bit del medio es la magia negra, que desglosaré por partes. En primer lugar, la condición:
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
comprueba que el primer carácter está en las claves de lasq
cuales están'g','G','j','J'
. La razón para separarnosq
como una variable es que también lo usamos como un dict / map más adelante.w[1:2]in ['i','I']
comprueba que el segundo carácter sea yo o yo. El: 2 es necesario porque solo ponerlow[1]
provocaría un bloqueo en las palabras de 1 letra, pero las porciones no lo hacen por alguna razón (¡pensé que lo hicieron, lo que sea!)w[2:3]in ['f','F']
es análogo Brevemente tuve esto como solo 2: ¡antes de darme cuenta de que necesitaba dar cuenta de gif o jif, seguido de puntuación!w[3:]in",;!?."
comprueba que los siguientes caracteres son signos de puntuación. Admito que mi código no funciona si alguien pone 'gif ?!' Pero no puedo ser perfecto. Alguien más puede asumir el desafío de abrir citas antes de gif o jif, también.False in(,,,)
es básicamente una gran NAND. En realidad, es el mismo bytecount que separar cuatro elementosand
e intercambiar los argumentos, pero esto se ve mejor y funciona mejor si tiene que extenderlo a una quintaand
edición.w if
significa que si False está en la lista condicional, simplemente devolvemos la palabra sin cambios; no cumple con nuestros criterios.else
, lo cambiamos a:q[w[0]]+w[1:3]+" (as in "+choice(g if w[0]in 'jJ'else j)+')'+w[3:]
OKAY.
q[w[0]]
sustituye la primera letra correctamente.w[1:3]
tachuelas en i o I y f o F,w[3:]
tachuelas en cualquier puntuación final. Eso deja el como en la cláusula." (as in "+choice(g if w[0]in 'jJ'else j)+')'
pone el literal de cadena obvio al comienzo y el paréntesis final, el bit interesante aquí es elchoice(g if w[0]in 'jJ'else j)
que elige aleatoriamenteg
oj
, dependiendo de siw[0]
está en'jJ'
. y me di cuenta de que tenía esto un poco al revés, así que lo solucioné todo.Ha sido un largo día.
choice
está en elrandom
módulo de ahí la importación. Creo que eso es todo.fuente
JavaScript (ES6), 142 bytes
Toma listas separadas
g
y dej
palabras.fuente
Javascript (ES6), 151 bytes
Probablemente pueda jugar golf por la parte ternaria más, pero no puedo pensar en cómo en este momento. Además, toma las palabras gyj por separado.
fuente