Читать новости скучно. Выручи меня!


22

Все знают, что новости скучные. Действительно скучно . Если только речь не идет о политиках и их скандалах. Это весело! Но, увы, политики могут совершить столько скандалов. Итак, я использую вас, чтобы сделать новости более интересными.

Цель С учетом фрагмента кода HTML выполните все найденные здесь замены , то есть на этом рисунке:

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

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

  • РЕДАКТИРОВАТЬ Вы должны соответствовать только слова, обозначенные не словом. То есть вы должны соответствовать только полные слова. (Например, соответствует «Привет свидетель», но не «Hellowitness», «Hellowitness» или «Witnesspacelection».
  • Если вы не можете набрать символ на клавиатуре, вы должны отобразить ближайший эквивалент. (Например, «Смартфон» действительно станет «Pokedex»)
  • Случай первой буквы или все буквы должны быть сохранены. (Например, «Предположительно, они умерли» становится «Видимо, они умерли», «Они якобы умерли» становится «Они вроде бы умерли», а «ВЫБОР!» Становится «КОНКУРСОМ ЕДЫ!», В то время как «ПРОСТРАНСТВО» становится «Spaaace» и «NEW STUDY» становятся «Tumblr post»)
  • Все случаи должны быть сопоставлены. (То есть вы должны соответствовать слову, независимо от его заглавных букв.)
  • Любой случай, в котором a <vowel>встречается, должен стать an <vowel>и наоборот . (Например, «сенатор» становится «эльфийским лордом»). Вам не нужно делать это для каждого экземпляра, но, по крайней мере, для собственных замен.
  • Все множественное число в переводе также должно сохранять плюрализм (например, «Смартфоны» становятся «pokedex», а «Пробелы» становятся «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%, если для каждого экземпляра «пробел» после первой замены добавляется дополнительный «а». Итак, первая замена будет "spaaaace", вторая будет "spaaaace", третья будет "spaaaaace" и т. Д.
  • Бонус -5%, если для каждого действительного номера вы заменяете этот номер ссылкой на соответствующий комикс XKCD. (Это еще не должно существовать). Если вы идете на этот бонус, вы должны соответствовать номерам , таким как 500, 3,000, 4 523, и 5.324. (Вместо этого вы можете заменить номер изображением комикса. Если вы сделаете это, вместо -5%бонуса вы получите a -15% bonus. Еще один дополнительный -15%бонус, если вы можете добавить текст заголовка к изображению, если таковой имеется. .)
  • Бонус -25%, если вы можете одновременно заменить все экземпляры справа и слева. (Например, «spaaace» становится «пробелом», «конкурс еды» становится «выборами» и т. Д.) Если вы выберете какой-либо из бонусов, вы сможете вернуть их в соответствующие записи. (Например, http://www.xkcd.com/542должно стать «542», а «spaaaaaaaace» должно стать «пространство».)
  • Вы можете выбрать как минимум 6 замен, но за каждую незавершенную замену (исключая бонусные замены) вы получите дополнительный штраф + 10%.

Пример ввода / вывода (без бонусов)

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 "Свидетели Пространства". Не сопоставляйте неполные слова.
Конор О'Брайен


3
Это выглядит как интересный вызов. Я должен дать ему выстрел в ближайшее время
Сэм Уивер

1
@DomHastings Да, я могу; не будет недопустимого ввода и самозакрывающихся тегов (например <br/>)
Конор О'Брайен

Ответы:


8

Perl 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

Поздравляем с первым местом!
Конор О'Брайен

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>Тег «проблема» вполне приемлема, если не более приемлемая. И я люблю последний пример. Я пытался придумать тот, который включил большинство из них. Поздравляю с первым ответом! Я уверен, что это конкурентоспособно;)
Конор О'Брайен
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.