Membaca berita itu membosankan. Bantu aku!

22

Semua orang tahu bahwa berita itu membosankan. Sangat membosankan . Kecuali jika itu tentang Politisi dan skandal mereka. Itu menyenangkan! Namun sayang, Politisi hanya bisa melakukan begitu banyak skandal. Jadi, saya mempekerjakan Anda untuk membuat berita lebih menarik.

Sasaran Diberikan cuplikan HTML, lakukan semua penggantian yang ditemukan sini , yaitu, dalam gambar ini:

TETAPI Anda seharusnya tidak mengedit sendiri tag HTML apa pun. Saya menyebut kata yang valid kata apa pun yang tidak ditemukan dalam tag HTML atau atributnya. Artinya, Anda tidak harus mengganti<div class="smartphone">iPhone</div> dengan <div class="pokedex">iPhone</div>, tetapi harus mengganti<div>election</div> dengan <div>eating contest</div>.

Aturan parsing

  • EDIT Anda hanya harus mencocokkan kata-kata yang digambarkan oleh non-kata. Artinya, Anda hanya harus mencocokkan kata-kata penuh. (Misalnya, cocokkan "Halo saksi" tetapi tidak "Saksi di bawah", "Dialah", atau "Pemilihan saksi."
  • Jika Anda tidak bisa mengetikkan karakter di papan ketik, Anda harus menampilkan padanan terdekat. (Misalnya, "Smartphone" akan benar-benar menjadi "Pokedex")
  • Kasus huruf pertama atau huruf besar semua harus dipertahankan. (Misalnya, "Diduga, mereka mati" menjadi "Agak mungkin, mereka mati", "Mereka diduga mati" menjadi "Mereka agaknya mungkin mati", dan "PEMILU!" Menjadi "KONTES MAKAN!", Sedangkan "SpAcE" menjadi "Spaaace" dan "nEW STUDY" menjadi "tumblr post")
  • Semua kasing harus dicocokkan. (Yaitu, Anda harus mencocokkan sebuah kata, terlepas dari huruf kapitalnya.)
  • Setiap contoh yang a <vowel>harus dipenuhi harus menjadi an <vowel>dan sebaliknya . (Misalnya, "Seorang senator" menjadi "Tuan elf") Anda tidak harus melakukan ini untuk setiap contoh, tetapi setidaknya untuk penggantian Anda sendiri.
  • Apa pun yang jamak juga harus mempertahankan pluralisasi dalam terjemahan (Misalnya, "Smartphone" menjadi "pokedex" dan "Spaces" menjadi "Spaaaces")
  • Segala sesuatu dalam bentuk tertentu harus tetap dalam bentuk itu dalam terjemahan. (Misalnya, "Dibangun Kembali" menjadi "Dibalas", "Dibangun Kembali" menjadi "Pembalas", dll.)
  • Apa pun dalam bentuk tunggal harus tetap tunggal dalam terjemahan (Misalnya, "Pemimpin Kongres" menjadi "Roh Sungai")
  • Jika entri mencakup beberapa elemen HTML, Anda harus tetap mencocokkannya, tetapi Anda dapat "membuang" elemen perantara. (Misalnya, S<b>pa</b>aceharus menjadi sekadar "spaaace"). Jika entri mandiri dalam satu elemen, itu harus dicocokkan dengan benar dan tag dipertahankan.
  • "Para saksi" harus menjadi "Orang-orang itu, aku tahu"
  • "Saksi" harus menjadi "Bung ini aku tahu"
  • "Saksi" harus menjadi "Bung itu aku tahu"
  • "Tidak dapat dihubungi untuk berkomentar" harus menjadi "Bersalah dan semua orang tahu itu"
  • "Tidak dapat dihubungi untuk berkomentar" harus menjadi "Bersalah dan semua orang tahu itu"

Bonus

Jika Anda memenuhi -N%bonus, Anda new amount = (old amount) * (1 - N/100). Jadi, jika Anda bertemu -5%bonus dengan kode 500 byte, Anda new amount = 500 * (1 - 5/100) = 500 * .95 = 475.

  • -5% bonus jika, untuk setiap instance "spasi" setelah penggantian pertama, "a" tambahan ditambahkan. Jadi, penggantian pertama adalah "spaaace", yang kedua adalah "spaaaace", yang ketiga adalah "spaaaaace", dll.
  • -5% bonus jika, untuk setiap nomor yang valid, Anda mengganti angka itu dengan tautan ke masing-masing komik XKCD. (Itu belum harus ada). Jika Anda pergi untuk bonus ini, Anda harus mencocokkan nomor seperti 500, 3,000, 4 523, dan 5.324. (Anda dapat memilih untuk mengganti, sebaliknya, nomor dengan gambar komik. Jika Anda melakukan ini, bukannya -5%bonus, Anda akan mendapatkan -15% bonus. -15%Bonus tambahan lain jika Anda dapat menambahkan teks-judul ke gambar, jika ada .)
  • -25% bonus jika Anda dapat mengganti secara bersamaan semua contoh di sisi kanan gambar dengan yang di sebelah kiri. (Misalnya, "spaaace" menjadi "ruang", "kontes makan" menjadi "pemilihan", dll.) Jika Anda memilih salah satu bonus, Anda harus dapat mengembalikannya ke entri masing-masing. (Misalnya, http://www.xkcd.com/542harus menjadi "542", dan "spaaaaaaaace" harus menjadi "ruang".)
  • Anda dapat memilih untuk melakukan minimal 6 pergantian, tetapi untuk setiap pergantian yang tidak dilakukan (tidak termasuk pergantian bonus), Anda akan menerima penalti tambahan + 10%.

Contoh IO (tidak ada 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

Ini adalah , jadi program terpendek dalam byte menang.

Conor O'Brien
sumber
Apa yang harus menjadi "Witnessespace"?
lirtosiast
@ThomasKwa "Witnessespace". Jangan mencocokkan kata-kata yang tidak lengkap.
Conor O'Brien
Terkait?
Beta Decay
3
Ini terlihat seperti tantangan yang menarik. Saya harus mencobanya sebentar lagi
Sam Weaver
1
@HomHastings Ya, saya bisa; tidak akan ada input yang tidak valid dan tidak ada tag yang ditutup sendiri (mis. <br/>)
Conor O'Brien

Jawaban:

8

Perl 5 , 850

Banyak regex yang digunakan atau dihasilkan.
% L hash digunakan untuk kata-kata yang diulang.

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

Uji

$ 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
sumber
Selamat di tempat pertama!
Conor O'Brien
9

JavaScript ES6, 954 byte

Saya pikir ini akan menjadi jauh lebih mudah daripada sebelumnya! Saya awalnya menggunakan JavaScript sehingga saya bisa dengan mudah turun ke node teks dan mengganti teks di sana, tapi bukan itu pertanyaannya, jadi saya berakhir dengan keganjilan ini! Itu melewati semua kasus uji kecuali untuk di <b>g</b><i>oo</i><s>g</s><u>le</u> glass is terrible. :(mana seluruh string kembali dalam <b>tag karena tag menjadi seimbang. Sebagian besar kode adalah tabel pencarian, dan saya mungkin masih melewatkan beberapa kasus tepi, tapi saya tidak bisa menemukan cara yang lebih baik untuk menangani tegang dengan benar dan saya yakin saya bisa mengompres lebih banyak, tetapi saya Saya kehabisan ide ... Saya yakin saya akan kembali lagi nanti. Seharusnya menggunakan Perl, pilihan yang lebih baik @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])

Saya menerapkan satu bonus sebesar 5% untuk spaaacemendapatkan tambahan asetelah setiap pertandingan yang berhasil. Penggunaan alert()seperti yang disarankan oleh @sysreq , terima kasih!

Contohnya

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

Jalankan ini di konsol Anda untuk memperbarui teks tubuh di tempat:

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
sumber
2
alertlebih pendek dari console.logselama dijalankan di browser.
kucing
The <b>tag "masalah" bisa diterima, jika tidak lebih diterima. DAN saya suka contoh terakhir. Saya mencoba untuk memikirkan satu yang menggabungkan sebagian besar dari mereka. Selamat atas jawaban pertama! Saya yakin ini kompetitif;)
Conor O'Brien