Leer las noticias es aburrido. ¡Ayúdame!

22

Todos saben que las noticias son aburridas. Muy aburrido . A menos que se trate de políticos y sus escándalos. ¡Esto es divertido! Pero, por desgracia, los políticos solo pueden cometer tantos escándalos. Entonces, te estoy empleando para que las noticias sean más interesantes.

Objetivo Dado un fragmento de HTML, realice todas las sustituciones que se encuentran aquí , es decir, en esta imagen:

PERO no debe editar ninguna etiqueta HTML. Llamo a una palabra válida cualquier palabra que no se encuentre dentro de ninguna etiqueta HTML o sus atributos. Es decir, no debe reemplazar <div class="smartphone">iPhone</div>con <div class="pokedex">iPhone</div>, pero debe reemplazar <div>election</div>con <div>eating contest</div>.

Reglas de análisis

  • EDITAR Solo debe hacer coincidir palabras delineadas por una no palabra. Es decir, solo debe coincidir con palabras completas. (Por ejemplo, haga coincidir "Hola testigo" pero no "Hellowitness", "Hellow itness" o "Witnesspacelection".
  • Si no puede escribir el carácter en su teclado, debe mostrar el equivalente más cercano. (Por ejemplo, "Smartphone" realmente se convertiría en "Pokedex")
  • Se debe conservar el caso de primera letra o el de todas las letras. (Por ejemplo, "Supuestamente, murieron" se convierte en "Probablemente murieron", "Supuestamente murieron" se convierte en "¡Probablemente murieron", y "¡LA ELECCIÓN!" Se convierte en "¡EL CONCURSO DE COMER!", Mientras que "ESPACIO" se convierte en "Spaaace" y "NUEVO ESTUDIO" se convierten en "publicación de tumblr")
  • Todos los casos deben coincidir. (Es decir, debe coincidir con una palabra, independientemente de su capitalización).
  • Cualquier instancia en la que a <vowel>se cumpla debe convertirse an <vowel>y viceversa . (Por ejemplo, "Un senador" se convierte en "Un señor elfo") No tiene que hacer esto para cada caso, sino al menos para sus propios reemplazos.
  • Cualquier cosa en plural también debe conservar la pluralización en la traducción (por ejemplo, "Smartphones" se convierte en "pokedex" y "Spaces" se convierte en "Spaaaces")
  • Cualquier cosa en cierto tiempo debe permanecer en ese tiempo en la traducción. (Por ejemplo, "Reconstruido" se convierte en "Avenged", "Rebuilds" se convierte en "Avenges", etc.)
  • Cualquier cosa en singular debe permanecer singular en la traducción (por ejemplo, "líder del Congreso" se convierte en "espíritu del río")
  • Si la entrada abarca varios elementos HTML, aún debe hacerla coincidir, pero puede "tirar" cualquier elemento intermedio. (Por ejemplo, S<b>pa</b>acedebería convertirse simplemente en "spaaace"). Si la entrada es autónoma dentro de un solo elemento, debe coincidir correctamente y la etiqueta debe conservarse.
  • "Los testigos" deberían convertirse en "Esos tipos que conozco"
  • "testigo" debería convertirse en "Este tipo lo sé"
  • "El testigo" debería convertirse en "Ese tipo que conozco"
  • "No se pudo contactar para hacer comentarios" debería convertirse en "Es culpable y todos lo saben"
  • "No se puede contactar para hacer comentarios" debería convertirse en "Son culpables y todos lo saben"

Bonos

Si cumple con un -N%bono, su new amount = (old amount) * (1 - N/100). Entonces, si conociste un -5%bono con un código de 500 bytes, tu new amount = 500 * (1 - 5/100) = 500 * .95 = 475.

  • -5% de bonificación si, por cada instancia de "espacio" después del primer reemplazo, se agrega una "a" adicional. Entonces, el primer reemplazo sería "spaaace", el segundo sería "spaaaace", el tercero sería "spaaaaace", etc.
  • -5% de bonificación si, por cada número válido, reemplaza ese número con un enlace al cómic XKCD respectivo. (Todavía no tiene que existir). Si tienes que ir a esta bonificación, debe coincidir con los números tales como 500, 3,000, 4 523, y 5.324. (En su lugar, puede optar por reemplazar el número con la imagen del cómic. Si hace esto, en lugar de un -5%bono, obtendrá un -15% bonus. Otro -15%bono extra si puede agregar el texto del título a la imagen, si corresponde .)
  • -25% de bonificación si puede reemplazar simultáneamente todas las instancias en el lado derecho de la imagen con las de la izquierda. (Por ejemplo, "spaaace" se convierte en "espacio", "concurso de comida" se convierte en "elección", etc.) Si opta por alguno de los bonos, debería poder revertirlos a sus respectivas entradas. (Por ejemplo, http://www.xkcd.com/542debería convertirse en "542" y "spaaaaaaaace" debería convertirse en "espacio").
  • Puede elegir hacer un mínimo de 6 sustituciones, pero por cada sustitución que no se realice (excluyendo las sustituciones de bonificación), recibirá una penalización adicional de + 10%.

Ejemplo de E / S (sin bonificaciones)

Input: Witnesses allegedly used their smartphones to commit the crime.
Output: These dudes I know kinda probably used their pokedex to commit the crime.

Input: Mayor Golfalot rebuilt the city after the fatal election.
Output: Mayor Golfalot avenged the city after the fatal eating contest.

Input: This <b>new study</b> shows that people in <span class="space">space</span> cannot be reached for comment.
Output: This <b>tumblr post</b> shows that people in <span class="space">spaaace</span> are guilty and everyone knows it.

Input: <b>g</b><i>oo</i><s>g</s><u>le</u> glass is terrible. :(
Output: virtual boy is terrible. :(

Input: Electric SMARTPHONES have been shown to be more productive when not used by Senators and when not used in cars.
Output: Atomic POKEDEX have been shown to be more productive when not used by Elf-lords and when not used in cats.

Input: Homeland Security has been established as an evil foundation, especially in space.
Output: Homestar runner has been established as an evil foundation, especially in spaaace.

Input: The congressional leaders are testy today.
Output: The river spirits are testy today.

Input: SPACE is not a Senator or a cAR.
Output: SPAAACE is not an Elf-lord or a cat.

Input: Mr. Biz is running for reelection.
Output: Mr. Biz is running for reelection.

Input: Google   glass !
Output: Virtual boy !

Input: New (or old) study
Output: New (or old) study

Este es un , por lo que gana el programa más corto en bytes.

Conor O'Brien
fuente
¿En qué debería convertirse "Witnessespace"?
lirtosiast
@ThomasKwa "Witnessespace". No combine palabras incompletas.
Conor O'Brien
¿Relacionado?
Beta Decay
3
Esto parece un desafío interesante. Tendré que
Sam Weaver
1
@DomHastings Sí, puedo; no habrá entradas no válidas ni etiquetas de cierre automático (por ejemplo <br/>)
Conor O'Brien

Respuestas:

8

Perl 5 , 850

Muchas expresiones regulares usadas o generadas.
El% l hash se usa para palabras repetidas.

%l=qw(A avenge B _be_reached_for_comment C could D dude E pokedex G google_glass I _I_know K river_spirit L congressional_leader P smartphone 4 rebuil N new_stud T tumblr_post V virtual_boy W witness Y _guilty_and_everyone_knows_it);$t="G,V;Ges,Vs;Ps,E;P,E;4d,A;4t,Ad;Nies,Ts;Ny,T;Wes,these DsI;W,this DI;allegedly,kinda probably;cannotB,areY;car,cat;cars,cats;Ls,Ks;L,K;C notB,isY;Cn'tB,isY;election,eating contest;electric,atomic;homeland Security,homestar runner;senator,elf-lord;senators,elf-lords;space,spaaace";$o=$s=$_;$s=~s/\s\s*/ /g;map{$t=~s/$_/$l{$_}/g}keys%l;$t=~s/_/ /g;@L=split/;/,$t;map{my@T=split/,/;push@W,\@T}@L;map{$e=$a=$W[$_][0];$b=$W[$_][1];$U=uc$a;$u=ucfirst$a;$s=~s/(?<![\w"])$U(?![\w"])/\U$b/g;$s=~s/(?<![\w"])$u(?![\w"])/\u$b/g;$s=~s/(?<![\w"])$a(?![\w"])/$b/gi;$e=~s@.@(<.*?>)?$&(</.*?>)?@g;$s=~s/$e /$b /ig;}0..@W;$_=$s.$/

Prueba

$ cat news.txt |perl -p readingnews.pl
These dudes I know kinda probably used their pokedex to commit the crime.
Mayor Golfalot avenged the city after the fatal eating contest.
This <b>tumblr post</b> shows that people in <span class="space">spaaace</span> are guilty and everyone knows it.
virtual boy is terrible. :(
Atomic POKEDEX have been shown to be more productive when not used by Elf-lords and when not used in cats.
Homestar runner has been established as an evil foundation, especially in spaaace.
The river spirits are testy today.
SPAAACE is not a Elf-lord or a cat.
Mr. Biz is running for reelection.
Virtual boy !
New (or old) study
LukStorms
fuente
¡Felicitaciones por el primer lugar!
Conor O'Brien el
9

JavaScript ES6, 954 bytes

¡Pensé que esto sería mucho más fácil de lo que era! Originalmente usé JavaScript para poder descender fácilmente solo a nodos de texto y reemplazar el texto allí, pero esa no era la pregunta que buscaba, ¡así que terminé con esta monstruosidad! Pasa todos los casos de prueba, excepto <b>g</b><i>oo</i><s>g</s><u>le</u> glass is terrible. :(donde toda la cadena vuelve a aparecer en una <b>etiqueta debido a que las etiquetas se equilibran. La mayor parte del código es la tabla de búsqueda, y probablemente todavía me faltan algunos casos extremos, pero no pude encontrar una mejor manera de manejar el tiempo correctamente y estoy seguro de que podría comprimirlo más, pero Me estoy quedando sin ideas ... Sin embargo, estoy seguro de que volveré a esto más tarde. Debería haber usado Perl, ¡mejor opción @LukStorms !

d=document.createElement`div`,u='toUpperCase'
d[i='innerHTML']=prompt``;`the ${w='witness'}es,those dudes I know|${w}es,these dudes I know|the ${w},this dude I know|${w},dude I know|allegedly,kinda probably|new study,tumblr post|new studies,tumblr posts|rebuild,avenge|rebuilt,avenged|space,spaaace|${g='google glass'},virtual boy|${g}es,virtual boys|smartphones,pokédex|smartphone,pokédex|electric,atomic|senator,elf-lord|car,cat|election,eating contest|congressional leader,river spirit|homeland security,homestar runner|could not ${b='be reached for comment'},is${g=' guilty and everyone knows it'}|couldn't be reached for comment,is${g}|cannot be reached for comment,are${g}`[v='split']`|`.map(w=>d[i]=d[i][r='replace'](eval(`/(<[^>]+)?\\b${(w=w[v]`,`)[0][v]``.join`(?:<\\/?[^>]+>)*`[r](/ /g,'\\s+')}(s?)\\b/gi`),(s,q,t)=>[q?s:((!s.match(/[^A-Z]/)?w[1][u]():s.match(/^[A-Z]/)?w[1][r](/^./,q=>q[u]()):w[1])+t),q?0:w[1]=w[1][r](/ce$/,'ace')][0])[r](/\ba(?= [aeiou])/gi,s=>s=="a"?"an":"AN"))
alert(d[i])

Apliqué un bono por el 5% de spaaaceobtener un adicional adespués de cada partida exitosa. Utiliza alert()según lo sugerido por @sysreq , ¡gracias!

Ejemplos

Input: <b>g</b><i>oo</i><s>g</s><u>le</u> glass is terrible. :(
Output: <b>virtual boy is terrible. :(</b>
Input: space. Space? Space! SPACE!
Output: spaaace. Spaaaace? Spaaaaace! SPAAAAAACE!
Input: Smartphones aren't really smart phones, but: SMARTPHONES!
Output: Pokédex aren't really smart phones, but: POKÉDEX!
Input: Senator John Doe was arrested today after attempting to write a new study on the danger of smartphones being used in the car, on his smartphone whilst driving his car. A witness testified to having seen the senator committing the crime. When questioned, Senator Doe "could not be reached for comment". It's unknown if his reputation can be rebuilt and this puts new doubts on the upcoming election. Congressional leaders have yet to comment.
Output: Elf-lord John Doe was arrested today after attempting to write a tumblr post on the danger of pokédex being used in the cat, on his pokédex whilst driving his cat. A dude I know testified to having seen the elf-lord committing the crime. When questioned, Elf-lord Doe "is guilty and everyone knows it". It's unknown if his reputation can be avenged and this puts new doubts on the upcoming eating contest. River spirits have yet to comment.

Bono: bookmarklet

Ejecute esto en su consola para tener el texto del cuerpo actualizado en el lugar:

d=document.body;`the ${w='witness'}es,those dudes I know|${w}es,these dudes I know|the ${w},this dude I know|${w},dude I know|allegedly,kinda probably|new study,tumblr post|new studies,tumblr posts|rebuild,avenge|rebuilt,avenged|space,spaaace|${g='google glass'},virtual boy|${g}es,virtual boys|smartphones,pokédex|smartphone,pokédex|electric,atomic|senator,elf-lord|car,cat|election,eating contest|congressional leader,river spirit|homeland security,homestar runner|could not ${b='be reached for comment'},is${g=' guilty and everyone knows it'}|couldn't be reached for comment,is${g}|cannot be reached for comment,are${g}`[v='split']`|`.map(w=>d[i='innerHTML']=d[i][r='replace'](eval('/(<[^>]+)?\\b'+(w=w[v]`,`)[0][v]``.join`(?:<\\/?[^>]+>)*`[r](/ /g,'\\s+')+'(s)?\\b/gi'),(s,q,t)=>[q?s:((s.match(/^[A-Z]+$/)?w[1].toUpperCase():s.match(/^[A-Z]/)?w[1][r](/^./,q=>q.toUpperCase()):w[1])+(t||"")),q?0:w[1]=w[1][r](/ce$/,'ace')][0])[r](/\ba ([aeiou])/gi,(s,t)=>s[0]=="a"?"an "+t:"AN "+t))
Dom Hastings
fuente
2
alertes más corto que el console.logtiempo que se ejecuta en un navegador.
gato
La <b>etiqueta "problema" es perfectamente aceptable, si no más aceptable. Y me encanta el último ejemplo. Estaba tratando de pensar en uno que incorporara la mayoría de ellos. ¡Felicitaciones por la primera respuesta! Estoy seguro de que es competitivo;)
Conor O'Brien