Читання новин нудне. Допоможи мені!


22

Всім відомо, що новини нудні. Дійсно нудно . Якщо тільки мова не йде про політиків та їхні скандали. Це весело! Але, на жаль, політики можуть вчинити лише стільки скандалів. Отже, я наймаю вас, щоб зробити новини цікавішими.

Мета Дано фрагмент HTML, виконайте всі знайдені тут заміни , тобто на цьому малюнку:

Але НЕ слід редагувати жодні теги HTML. Я називаю дійсним словом будь-яке слово, яке не знайдено в жодному тезі HTML або їх атрибутах. Тобто, ви не повинні замінити <div class="smartphone">iPhone</div>з <div class="pokedex">iPhone</div>, але слід замінити <div>election</div>з <div>eating contest</div>.

Правила розбору

  • EDIT Ви повинні відповідати лише словам, позначеним несловом. Тобто вам слід відповідати лише повним словам. (Наприклад, відповідність "Привіт свідок", але не "Привітність", "Відверта приналежність" або "Вибір простору свідків".
  • Якщо ви не можете ввести символ на клавіатурі, вам слід відобразити найближчий еквівалент. (Наприклад, "Смартфон" справді стане "Pokedex")
  • Справа першої літери або справ з усієї літери має бути збережено. (Наприклад, "Нібито, вони померли" стає "Ніби, мабуть, вони померли", "Вони нібито померли", стають "Вони начебто померли", а "ВИБОРИ!" Перетвориться на "ХАРЧОВИЙ КОНКУРС!", Тоді як "СПАКЕ" стає "Spaaace" та "nEW STUDY" перетворюються на "tumblr post")
  • Усі випадки повинні відповідати. (Тобто, ви повинні відповідати слову, незалежно від його великої літери.)
  • Будь-який екземпляр, в якому a <vowel>зустрічається, повинен стати an <vowel>і навпаки . (Наприклад, "Сенатор" стає "Ельфом-лордом") Не потрібно робити це для кожного примірника, а принаймні для власних замін.
  • Усі множини також повинні зберігати плюралізацію в перекладі (наприклад, "Смартфони" стають "pokedex", а "Spaces" стає "Spaaaces")
  • Все, що є в певному часі, повинно залишатися в такому часі в перекладі. (Наприклад, "Перебудований" стає "Месним", "Відновлений" стає "Месним" тощо)
  • Все в однині повинно залишатися в однині в перекладі (наприклад, "Лідер Конгресу" стає "Річковим духом")
  • Якщо запис охоплює кілька елементів HTML, ви все одно повинні відповідати, але ви можете "викинути" будь-які проміжні елементи. (Наприклад, S<b>pa</b>aceмає стати просто "spaaace"). Якщо запис є автономним у межах одного елемента, він повинен бути відповідним чином, а тег - збереженим.
  • "Свідками" мають стати "Ті чуваки, яких я знаю"
  • "свідком" повинен стати "Цей чувак, якого я знаю"
  • "Свідком" повинен стати "Цей чувак, якого я знаю"
  • "Неможливо отримати коментар", він повинен стати "Винен, і всі це знають"
  • "Неможливо отримати коментар", це повинно стати "Винні, і всі це знають"

Бонуси

Якщо ви зустрінете -N%бонус, ваш new amount = (old amount) * (1 - N/100). Отже, якщо ви зустріли -5%бонус із кодом 500 байт, ваш new amount = 500 * (1 - 5/100) = 500 * .95 = 475.

  • -5% бонус, якщо для кожного примірника «місця» після першої заміни додається додаткове «а». Отже, перша заміна буде "spaaace", друга - "spaaaace", третя - "spaaaaace" тощо.
  • -5% бонус, якщо за кожне дійсне число ви заміните це число посиланням на відповідний комікс XKCD. (Це ще не повинно існувати). Якщо ви йдете на цей бонус, ви повинні відповідати номерам , таким як 500, 3,000, 4 523, і 5.324. (Ви можете замінити номер замість номера комічного. Якщо ви це зробите, замість -5%бонуса, ви отримаєте:. -15% bonusЩе один додатковий -15%бонус, якщо можете додати текст заголовка до малюнка, якщо такий є .)
  • -25% бонус, якщо ви зможете одночасно замінити всі екземпляри з правого боку зображення на ліві. (Наприклад, "spaaace" стає "простором", "змагання з їжею" перетворюються на "вибори" тощо). Якщо ви виберете будь-який із бонусів, ви зможете повернути їх у відповідні записи. (Наприклад, http://www.xkcd.com/542має стати "542", а "spaaaaaaaace" має стати "простором".)
  • Ви можете зробити як мінімум 6 замін, але за кожну заміну, яку не здійснено (за винятком бонусної заміни), ви отримаєте додатковий + 10% неустойки.

Приклад IO (без бонусів)

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

Це , тому виграє найкоротша програма в байтах.


Яким має стати "Простір свідків"?
lirtosiast

@ThomasKwa "Простір свідків". Не збігайтесь із неповними словами.
Conor O'Brien


3
Це виглядає як цікавий виклик. Невдовзі мені доведеться його зняти
Сем Вівер

1
@DomHastings Так, я можу; не буде недійсного введення та не закритих тегів (наприклад <br/>)
Conor O'Brien

Відповіді:


8

Перл 5 , 850

Багато регексу, що використовується або генерується.
Хеш% l використовується для повторних слів.

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

Тест

$ 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

Вітаємо з першим місцем!
Conor O'Brien

9

JavaScript ES6, 954 байти

Я думав, що це буде набагато простіше, ніж це було! Я спочатку використовував JavaScript, тому я міг легко спускатися лише до текстових вузлів і замінювати текст там, але після цього питання не було, тому я закінчив цю жахливість! Він проходить усі тестові випадки, за винятком випадків, <b>g</b><i>oo</i><s>g</s><u>le</u> glass is terrible. :(коли вся <b>тега повертається в тег через теги, що врівноважуються. Основна частина коду - це таблиця пошуку, і я, мабуть, все ще пропускаю деякі крайові випадки, але я не міг придумати кращий спосіб правильно впоратися з напругою, і я впевнений, що міг би стиснути це більше, але я У мене не вистачає ідей ... Я впевнений, що повернусь до цього пізніше. Треба було використовувати Perl, кращий вибір @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])

Я застосував один бонус для 5% spaaaceотримання додаткового aпісля кожного успішного матчу. Використовує, alert()як запропонував @sysreq , дякую!

Приклади

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.

Бонус: закладка

Запустіть це у своїй консолі, щоб текст тіла оновлювався на місці:

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
alertкоротше, ніж console.logвін працює в браузері.
кіт

<b>Тег «проблема» цілком прийнятна, якщо не більше прийнятна. І я люблю останній приклад. Я намагався придумати той, який включав більшість із них. Вітаємо з першою відповіддю! Я впевнений, що він конкурентоспроможний;)
Conor O'Brien
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.