Ler as notícias é chato. Me ajude!

22

Todo mundo sabe que as notícias são chatas. Realmente chato . A menos que seja sobre políticos e seus escândalos. Isso é divertido! Mas, infelizmente, os políticos podem cometer apenas tantos escândalos. Então, estou empregando você para tornar as notícias mais interessantes.

Objetivo Dado um snippet HTML, execute todas as substituições encontradas aqui , ou seja, nesta figura:

MAS você não deve editar nenhuma tag HTML. Chamo uma palavra válida de qualquer palavra que não seja encontrada em nenhuma tag HTML ou em seus atributos. Ou seja, você não deve substituir <div class="smartphone">iPhone</div>por <div class="pokedex">iPhone</div>, mas deve substituir <div>election</div>por <div>eating contest</div>.

Regras de análise

  • EDITAR Você deve corresponder apenas às palavras delineadas por uma não-palavra. Ou seja, você só deve combinar palavras completas. (Por exemplo, combine "Olá testemunha", mas não "Hellowitness", "Hellow itness" ou "Witnesspacelection".
  • Se você não conseguir digitar o caractere no teclado, deverá exibir o equivalente mais próximo. (Por exemplo, "Smartphone" realmente se tornaria "Pokedex")
  • O caso de primeira letra ou de todas as letras deve ser mantido. (Por exemplo, "Alegadamente, eles morreram" se torna "Provavelmente, eles morreram", "Eles supostamente morreram" se tornam "Eles meio que provavelmente morreram" e "A ELEIÇÃO!" Se torna "O CONCURSO DE COMER!", Enquanto "SpAcE" se torna "Spaaace" e "novo estudo" se tornam "post no Tumblr")
  • Todos os casos devem ser correspondidos. (Ou seja, você deve corresponder a uma palavra, independentemente da capitalização.)
  • Qualquer instância que a <vowel>seja atendida deve se tornar an <vowel>e vice-versa . (Por exemplo, "um senador" se torna "um senhor dos elfos"). Você não precisa fazer isso em todas as instâncias, mas pelo menos para suas próprias substituições.
  • Qualquer coisa no plural também deve reter a pluralização na tradução (por exemplo, "Smartphones" se torna "pokedex" e "Spaces" se torna "Spaaaces")
  • Qualquer coisa em um certo tempo deve permanecer nesse tempo na tradução. (Por exemplo, "Reconstruído" torna-se "Vingado", "Reconstrói" torna-se "Vingador" etc.)
  • Qualquer coisa no singular deve permanecer singular na tradução (por exemplo, "líder do Congresso" se torna "espírito do rio")
  • Se a entrada abranger vários elementos HTML, você ainda deverá correspondê-la, mas poderá "jogar fora" quaisquer elementos intermediários. (Por exemplo, S<b>pa</b>acedeve se tornar simplesmente "spaaace"). Se a entrada for independente em um único elemento, ela deverá corresponder adequadamente e a tag retida.
  • "As testemunhas" devem se tornar "Esses caras que eu conheço"
  • "testemunha" deve se tornar "Esse cara que eu conheço"
  • "A testemunha" deve se tornar "Aquele cara que eu conheço"
  • "Não foi possível entrar em contato para comentar" deve se tornar "É culpado e todo mundo sabe disso"
  • "Não pode ser encontrado para comentar" deve se tornar "É culpado e todo mundo sabe disso"

Bónus

Se você encontrar um -N%bônus, seu new amount = (old amount) * (1 - N/100). Portanto, se você encontrou um -5%bônus com um código de 500 bytes, seu new amount = 500 * (1 - 5/100) = 500 * .95 = 475.

  • -5% de bônus se, para cada instância de "espaço" após a primeira substituição, um "a" extra for adicionado. Assim, o primeiro substituto seria "spaaace", o segundo seria "spaaaace", o terceiro seria "spaaaace", etc.
  • Bônus de -5% se, para cada número válido, você substituir esse número por um link para o respectivo quadrinho do XKCD. (Ainda não precisa existir). Se você vai para este bônus, você deve coincidir com números, como 500, 3,000, 4 523, e 5.324. (Você pode optar por substituir, em vez disso, o número pela imagem dos quadrinhos. Se você fizer isso, em vez de um -5%bônus, receberá um -15% bonus. Outro -15%bônus extra se você puder adicionar o texto do título à imagem, se houver .)
  • Bônus de -25% se você puder substituir simultaneamente todas as instâncias do lado direito da imagem pelas do lado esquerdo. (Por exemplo, "spaaace" se torna "espaço", "concurso de comida" se torna "eleição" etc.) Se você optar por qualquer um dos bônus, poderá revertê-los para suas respectivas entradas. (Por exemplo, http://www.xkcd.com/542deve se tornar "542" e "spaaaaaaaace" deve se tornar "espaço".)
  • Você pode optar por fazer no mínimo 6 substituições, mas para cada substituição não realizada (excluindo as substituições de bônus), você receberá uma multa adicional de + 10%.

Exemplos de veiculação (sem bônus)

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

Este é um , portanto o programa mais curto em bytes vence.

Conor O'Brien
fonte
O que "espaço de testemunha" deve se tornar?
procurando
@ThomasKwa "Espaço de testemunha". Não combine palavras incompletas.
Conor O'Brien
Relacionado?
Beta Decay
3
Parece um desafio interessante. Eu vou ter que dar um tiro pouco
Sam Weaver
1
@DomHastings Sim, eu posso; não haverá entrada inválida e sem etiquetas auto-fechado (por exemplo <br/>)
Conor O'Brien

Respostas:

8

Perl 5 , 850

Muita regex usada ou gerada.
O% l hash é usado para palavras repetidas.

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

Teste

$ 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
fonte
Parabéns pelo primeiro lugar!
Conor O'Brien
9

JavaScript ES6, 954 bytes

Eu pensei que isso seria muito mais fácil do que era! Originalmente, usei JavaScript para poder facilmente descer apenas para nós de texto e substituí-lo, mas não era assim que a pergunta era, então acabei com essa monstruosidade! Ele passa em todos os casos de teste, exceto no <b>g</b><i>oo</i><s>g</s><u>le</u> glass is terrible. :(caso em que toda a cadeia retorna em uma <b>tag devido ao equilíbrio das tags. A maior parte do código é a tabela de pesquisa, e provavelmente ainda estou perdendo alguns casos extremos, mas não consegui encontrar uma maneira melhor de lidar com o tempo corretamente e tenho certeza de que poderia comprimir isso mais, mas Estou ficando sem idéias ... Tenho certeza de que voltarei a isso mais tarde. Deveria ter usado Perl, melhor escolha @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])

Apliquei um bônus por 5% para spaaaceobter um adicional aapós cada partida bem-sucedida. Usa alert()como sugerido por @sysreq , obrigado!

Exemplos

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.

Bônus: bookmarklet

Execute isso no seu console para atualizar o texto do corpo no local:

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
fonte
2
alerté mais curto do console.logque contanto que seja executado em um navegador.
cat
A <b>tag "problem" é perfeitamente aceitável, se não mais aceitável. E eu amo o último exemplo. Eu estava tentando pensar em um que incorporasse a maioria deles. Parabéns pela primeira resposta! Eu tenho certeza que é competitiva;)
Conor O'Brien