Lire les nouvelles est ennuyeux. Aide moi!


22

Tout le monde sait que les nouvelles sont ennuyeuses. Vraiment ennuyeux . Sauf s'il s'agit de politiciens et de leurs scandales. C'est amusant! Mais hélas, les politiciens ne peuvent commettre que tant de scandales. Donc, je vous emploie pour rendre les nouvelles plus intéressantes.

Objectif Étant donné un extrait HTML, effectuez toutes les substitutions trouvées ici , c'est-à-dire dans cette image:

MAIS vous ne devez pas modifier les balises HTML elles-mêmes. J'appelle un mot valide tout mot qui ne se trouve dans aucune balise HTML ou leurs attributs. Autrement dit, vous ne devez pas remplacer <div class="smartphone">iPhone</div>par <div class="pokedex">iPhone</div>, mais devez remplacer <div>election</div>par <div>eating contest</div>.

Règles d'analyse

  • EDIT Vous ne devez faire correspondre que les mots délimités par un non-mot. Autrement dit, vous ne devez faire correspondre que des mots entiers. (Par exemple, faites correspondre "Bonjour témoin" mais pas "Hellowitness", "Hellow itness" ou "Witnesspacelection".
  • Si vous ne pouvez pas taper le caractère sur votre clavier, vous devez afficher l'équivalent le plus proche. (Par exemple, "Smartphone" deviendrait vraiment "Pokedex")
  • Les majuscules et les minuscules doivent être conservés. (Par exemple, "Ils seraient morts," deviendrait "Probablement, ils sont morts", "Ils seraient morts" devient "Ils sont probablement morts", et "L'ÉLECTION!" Devient "LE CONCOURS D'ALIMENTATION!", Tandis que "SpAcE" devient "Spaaace" et "NOUVELLE ÉTUDE" deviennent "tumblr post")
  • Tous les cas doivent être appariés. (C'est-à-dire que vous devez faire correspondre un mot, quelle que soit sa capitalisation.)
  • Toute instance dans laquelle il a <vowel>est satisfait doit devenir an <vowel>et vice versa . (Par exemple, "Un sénateur" devient "Un seigneur elfe") Vous n'avez pas à le faire pour chaque cas, mais au moins pour vos propres remplaçants.
  • Tout pluriel doit également conserver la pluralisation dans la traduction (par exemple, "Smartphones" devient "pokedex" et "Spaces" devient "Spaaaces")
  • Tout ce qui est dans un certain temps doit rester dans ce temps dans la traduction. (Par exemple, "Reconstruit" devient "Avenged", "Rebuilds" devient "Avenges", etc.)
  • Tout ce qui est au singulier doit rester singulier dans la traduction (par exemple, «chef du Congrès» devient «esprit fluvial»)
  • Si l'entrée couvre plusieurs éléments HTML, vous devez toujours la faire correspondre, mais vous pouvez "jeter" tous les éléments intermédiaires. (Par exemple, S<b>pa</b>acedevrait devenir simplement "spaaace"). Si l'entrée est autonome dans un seul élément, elle doit être correctement mise en correspondance et la balise conservée.
  • "Les témoins" devraient devenir "Ces mecs que je connais"
  • "témoin" devrait devenir "Ce mec que je connais"
  • "Le témoin" devrait devenir "Ce mec que je connais"
  • "Impossible à joindre pour commenter" devrait devenir "Est coupable et tout le monde le sait"
  • "Ne peut être joint pour un commentaire" devrait devenir "Sont coupables et tout le monde le sait"

Bonus

Si vous rencontrez un -N%bonus, votre new amount = (old amount) * (1 - N/100). Donc, si vous avez rencontré un -5%bonus avec un code de 500 octets, votre new amount = 500 * (1 - 5/100) = 500 * .95 = 475.

  • -5% de bonus si, pour chaque instance "d'espace" après le premier remplacement, un "a" supplémentaire est ajouté. Ainsi, le premier remplacement serait "spaaace", le second serait "spaaaace", le troisième serait "spaaaaace", etc.
  • -5% de bonus si, pour chaque numéro valide, vous remplacez ce numéro par un lien vers la bande dessinée XKCD respective. (Il ne doit pas encore exister). Si vous optez pour ce bonus, vous devez faire correspondre les numéros tels que 500, 3,000, 4 523, et 5.324. (Vous pouvez choisir de remplacer, à la place, le numéro par l'image de la bande dessinée. Si vous faites cela, au lieu d'un -5%bonus, vous obtiendrez un -15% bonus. Un autre -15%bonus supplémentaire si vous pouvez ajouter le texte du titre à l'image, le cas échéant .)
  • -25% de bonus si vous pouvez remplacer simultanément toutes les instances du côté droit de l'image par celles de gauche. (Par exemple, "spaaace" devient "espace", "concours de manger" devient "élection", etc.) Si vous optez pour l'un des bonus, vous devriez pouvoir les ramener à leurs entrées respectives. (Par exemple, http://www.xkcd.com/542devrait devenir "542" et "spaaaaaaaace" devrait devenir "espace".)
  • Vous pouvez choisir de faire un minimum de 6 substitutions, mais pour chaque substitution non effectuée (à l'exclusion des substitutions de bonus), vous recevrez une pénalité supplémentaire de + 10%.

Exemples d'OI (pas de bonus)

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

Il s'agit d'un , donc le programme le plus court en octets l'emporte.


Que devrait devenir "Witnessespace"?
lirtosiast

@ThomasKwa "Witnessespace". Ne correspond pas aux mots incomplets.
Conor O'Brien


3
Cela ressemble à un défi intéressant. Je vais devoir lui donner un coup de feu sous peu
Sam Weaver

1
@DomHastings Oui, je peux; il n'y aura aucune entrée invalide et aucune balise auto-fermée (par exemple <br/>)
Conor O'Brien

Réponses:


8

Perl 5 , 850

Beaucoup d'expressions régulières utilisées ou générées.
Le hachage% l est utilisé pour les mots répétés.

%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.$/

Tester

$ 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

Félicitations pour la première place!
Conor O'Brien du

9

JavaScript ES6, 954 octets

Je pensais que ça allait être beaucoup plus facile que ça ne l'était! À l'origine, j'utilisais JavaScript pour pouvoir facilement descendre uniquement dans les nœuds de texte et y remplacer le texte, mais ce n'était pas la question après, donc je me suis retrouvé avec cette monstruosité! Il passe tous les cas de test, sauf <b>g</b><i>oo</i><s>g</s><u>le</u> glass is terrible. :(lorsque la chaîne entière revient dans une <b>balise en raison de l'équilibrage des balises. La majeure partie du code est la table de recherche, et il me manque probablement encore des cas marginaux, mais je n'ai pas pu trouver une meilleure façon de gérer correctement le temps et je suis sûr que je pourrais compresser davantage, mais je je suis à court d'idées ... Je suis sûr que j'y reviendrai plus tard. J'aurais dû utiliser Perl, un meilleur choix @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])

J'ai appliqué un bonus pour 5% d'en spaaaceobtenir un supplémentaire aaprès chaque match réussi. Utilise alert()comme suggéré par @sysreq , merci!

Exemples

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.

Bonus: bookmarklet

Exécutez ceci dans votre console pour que le corps du texte soit mis à jour sur place:

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))

2
alertest plus court que console.logtant qu'il est exécuté dans un navigateur.
chat

La <b>balise "problem" est parfaitement acceptable, sinon plus acceptable. ET j'aime le dernier exemple. J'essayais de penser à celui qui en incorporait la plupart. Félicitations pour la première réponse! Je suis sûr que c'est compétitif;)
Conor O'Brien
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.