Das Lesen der Nachrichten ist langweilig. Helfen Sie mir!

22

Jeder weiß, dass die Nachrichten langweilig sind. Wirklich langweilig . Es sei denn, es geht um Politiker und ihre Skandale. Das macht Spaß! Aber leider können Politiker nur so viele Skandale begehen. Also beschäftige ich Sie, um die Nachrichten interessanter zu machen.

Ziel Führen Sie bei einem gegebenen HTML-Snippet alle hier gefundenen Ersetzungen aus , d. H. In diesem Bild:

ABER Sie sollten keine HTML-Tags selbst bearbeiten. Ich bezeichne ein gültiges Wort als jedes Wort, das in keinem HTML-Tag oder seinen Attributen gefunden wird. Das heißt, sollten Sie ersetzen nicht <div class="smartphone">iPhone</div>mit <div class="pokedex">iPhone</div>, sondern ersetzen <div>election</div>mit <div>eating contest</div>.

Parsing-Regeln

  • BEARBEITEN Sie sollten nur Wörter suchen, die durch ein Nicht-Wort abgegrenzt sind. Das heißt, Sie sollten nur vollständige Wörter finden. (ZB "Hallo Zeuge", aber nicht "Hellowitness", "Hellow itness" oder "Witnesspacelection".)
  • Wenn Sie das Zeichen nicht auf Ihrer Tastatur eingeben können, sollten Sie das nächstgelegene Äquivalent anzeigen. (ZB würde "Smartphone" wirklich "Pokedex" werden)
  • Groß- oder Kleinschreibung muss beibehalten werden. (ZB "Angeblich sind sie gestorben" wird zu "Ein bisschen wahrscheinlich, sie sind gestorben", "Sie sind angeblich gestorben" wird zu "Ein bisschen wahrscheinlich gestorben" und "DIE WAHL!" Wird zu "DER ESSWETTBEWERB!", Während "SPACE" wird Aus "Spaaace" und "New Study" wird "Tumblr Post")
  • Alle Fälle müssen übereinstimmen. (Dh, Sie müssen ein Wort unabhängig von seiner Groß- und Kleinschreibung suchen.)
  • Jeder Fall, in dem a <vowel>getroffen wird, sollte an <vowel>und umgekehrt werden . (ZB "Ein Senator" wird "Ein Elfenfürst") Sie müssen dies nicht für jeden Fall tun, sondern zumindest für Ihre eigenen Ersetzungen.
  • Jeder Plural muss auch die Pluralisierung in der Übersetzung beibehalten (z. B. "Smartphones" wird zu "Pokedex" und "Spaces" wird zu "Spaaaces").
  • Alles in einer bestimmten Zeit muss in der Übersetzung in dieser Zeit bleiben. (ZB "Rebuilt" wird "Avenged", "Rebuilds" wird "Avenges", etc.)
  • Alles im Singular muss in der Übersetzung singulär bleiben (zB "Kongressführer" wird zu "Flussgeist")
  • Wenn sich der Eintrag über mehrere HTML-Elemente erstreckt, sollten Sie ihn trotzdem abgleichen, aber Sie können alle Zwischenelemente "wegwerfen". (ZB S<b>pa</b>acesollte einfach "spaaace" werden). Wenn der Eintrag in einem einzelnen Element enthalten ist, sollte er ordnungsgemäß abgeglichen und das Tag beibehalten werden.
  • "Die Zeugen" sollten "Die Typen, die ich kenne" werden
  • "Zeuge" sollte "Dieser Typ, den ich kenne" werden
  • "Der Zeuge" sollte "Der Typ, den ich kenne" werden
  • "Konnte nicht für Kommentar erreicht werden" sollte werden "Ist schuldig und jeder weiß es"
  • "Kann nicht für Kommentar erreicht werden" sollte werden "Sind schuldig und jeder weiß es"

Boni

Wenn Sie einen -N%Bonus treffen , ist Ihr new amount = (old amount) * (1 - N/100). Wenn Sie also einen -5%Bonus mit einem 500 - Byte - Code erhalten haben, ist Ihr new amount = 500 * (1 - 5/100) = 500 * .95 = 475.

  • -5% Bonus, wenn für jede Instanz von "space" nach dem ersten Ersetzen ein zusätzliches "a" hinzugefügt wird. Der erste Ersatz wäre also "spaaace", der zweite wäre "spaaaace", der dritte wäre "spaaaace" usw.
  • -5% Bonus, wenn Sie diese Nummer für jede gültige Nummer durch einen Link zum jeweiligen XKCD-Comic ersetzen. (Es muss noch nicht existieren). Wenn Sie sich für diesen Bonus gehen Sie, sollten Sie Zahlen übereinstimmen, wie 500, 3,000, 4 523, und 5.324. (Sie können stattdessen die Zahl durch das Bild des Comics ersetzen. Wenn Sie dies tun, erhalten Sie anstelle eines -5%Bonus einen -15% bonusweiteren zusätzlichen -15%Bonus, wenn Sie den Titeltext zum Bild hinzufügen können, falls vorhanden .)
  • -25% Bonus, wenn Sie alle Instanzen auf der rechten Seite des Bildes gleichzeitig durch die auf der linken Seite ersetzen können. (ZB "spaaace" wird zu "space", "eating contest" wird zu "choice" usw.) Wenn Sie sich für einen der Boni entscheiden, sollten Sie in der Lage sein, diese auf die jeweiligen Einträge zurückzusetzen. (ZB http://www.xkcd.com/542sollte "542" werden und "spaaaaaaace" sollte "space" werden.)
  • Sie können sich für mindestens 6 Auswechslungen entscheiden, aber für jede nicht durchgeführte Auswechslung (ohne Bonus-Auswechslungen) erhalten Sie eine zusätzliche Strafe von + 10%.

Beispiel IOs (keine Boni)

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

Dies ist ein , also gewinnt das kürzeste Programm in Bytes.

Conor O'Brien
quelle
Was soll "Zeugenraum" werden?
Lirtosiast
@ThomasKwa "Zeugenraum". Passen Sie nicht zu unvollständigen Wörtern.
Conor O'Brien
Verbunden?
Beta Decay
3
Das sieht nach einer interessanten Herausforderung aus. Ich muss es gleich versuchen
Sam Weaver
1
@ DomHastings Ja, ich kann; Es gibt keine ungültigen Eingaben und keine selbstgeschlossenen Tags (z. B. <br/>)
Conor O'Brien

Antworten:

8

Perl 5 , 850

Viel Regex verwendet oder generiert.
Der% l-Hash wird für wiederholte Wörter verwendet.

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

Prüfung

$ 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
quelle
Herzlichen Glückwunsch zum ersten Platz!
Conor O'Brien
9

JavaScript ES6, 954 Bytes

Ich dachte, das wird viel einfacher als es ist! Ich habe ursprünglich JavaScript verwendet, damit ich problemlos nur in Textknoten absteigen und den Text dort ersetzen konnte, aber das war nicht das, wonach die Frage lautete, also bin ich zu dieser Monstrosität gekommen! Es besteht alle Testfälle, mit Ausnahme der Fälle, in <b>g</b><i>oo</i><s>g</s><u>le</u> glass is terrible. :(denen die gesamte Zeichenfolge in einem <b>Tag zurückkommt, weil die Tags ausgeglichen werden. Der Großteil des Codes ist die Nachschlagetabelle, und ich vermisse wahrscheinlich noch einige Randfälle, aber ich konnte mir keine schönere Möglichkeit einfallen lassen, um die Zeitform richtig zu handhaben, und ich bin sicher, dass ich das mehr komprimieren könnte, aber ich Ich bin mir sicher, dass ich später darauf zurückkommen werde. Hätte Perl verwenden sollen, bessere Wahl bei 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])

Ich habe einen Bonus für 5% des spaaaceGewinns eines zusätzlichen anach jedem erfolgreichen Match angewendet . Verwendet alert()wie von @sysreq vorgeschlagen , danke!

Beispiele

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: Lesezeichen

Führen Sie dies in Ihrer Konsole aus, um den Nachrichtentext direkt zu aktualisieren:

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
quelle
2
alertist kürzer als console.logso lange es in einem Browser ausgeführt wird.
Katze
Das <b>Stichwort „Problem“ ist durchaus akzeptabel, wenn nicht mehr akzeptabel. UND ich liebe das letzte Beispiel. Ich habe versucht, an einen zu denken, der die meisten von ihnen beinhaltete. Herzlichen Glückwunsch zur ersten Antwort! Ich bin sicher, es ist wettbewerbsfähig;)
Conor O'Brien