text:
How could Stringy be improved?
I created a programming language for manipulating strings called Stringy. It's very different from other programming languages, since you only have one string (for manipulation) and some variables. With the various commands you can manipulate that one string. I created it because it might be useful for some challenges here. (challenged tagged string)
What could I add to this to make it better/more useful for challenges here?
Examples for the language can be found at GitHub at examples.txt. It might be a bit hard to understand though.

First, why not by default append any strings present and have commands to change order of appending (e.g. f sets it to front and b back). Second, if this is for code golf, you can really shorten your command names (there are a lot of characters to use up before you start going to more than single character commands). I'm on mobile right now but I'll try and voice my suggestions more coherently when I can.

What d'you mean, "text" for appending to text? f and b are excellent ideas, I'll try to implement those. The 2-character command names were just to make it easier to understand. I might change those too.

There is an ongoing discussion whether questions like this are on topic. I personally think they are way too broad and that we shouldn't use Stack Exchange as an issue tracker (and judging by how rapidly the new answer on the meta post has gained upvotes, that may or may not become consensus). However, as long as the votes don't show a clear consensus I'll refrain from voting to close this, because of my binding mod vote.

Yeah, sorry, I tried to clarify that in an edit - I'll write down my ideas and get back to you in a more nicely formatted post when I get to my computer.

@MartinBüttner I checked the meta and the most highly-voted comment in a question said that asking questions like this should be OK. And I don't think anybody downvoted the Pyth question...

@m654 As I said, I think it's an ongoing discussion. Since I posted the new answer two days ago, the top answer has lost four or five net votes and my new answer has gained 17, so I don't think the discussion is settled yet either way. (For reference, the Pyth question currently has three downvotes.)

@MartinBüttner Hmm, didn't know that.

@Cole Updated it and synced it to GitHub.

The semicolon command separator should be removed.

Better Docs. 'Nuff said.

@MartinBüttner Maybe codereview is better place for this question.

I think the consensus about asking for feature requests is fairly clear on meta now, so I'm closing this.

OK, I said I'd put my comments into a more comprehensible form so here they are.

Don't separate commands. Having to use ; every time you want to use a different command is costly. My recommendation on the interpreter side is to parse one character at a time and read more if the command necessitates it.
Add regex (to be honest, I don't know much regex -- it's somewhere on my list of things to learn -- but it seems logical to add it)
On the topic of not separating commands with ;, allow for whitespace to be removeable.
Add loops of some sort.
Add conditionals and conditional tests (equals, not, and, or, etc.)
Add a newline reserved character (n, perhaps?)
Add reserved characters for variables
You have uppercase and lowercase commands, why not add a capitalization one (one that capitalizes the string as if it were a sentence and maybe also capitalizes proper nouns that it can identify).
Add a command to count how many instances of a string are in another.
Add a length command to get the length of a string.
Add a terminate/break command.
Add an equivalent of Python's ord and chr functions.
Add a split at numerical value command (splits at a certain length), and add an alternative to that which splits at every multiple of the numerical value (e.g. for a string of length 10 at 3,6,9 if given the argument 3).
Add a duplication command (akin to Python's "String"*x)

You'll notice that some of these involve numbers -- I think that even for String challenges having a way of working with numbers is good. Perhaps have a stack for storing numbers that is accessed when certain commands are used (e.g. the length command pushes the length onto the number stack and then the split at numerical value uses this length to split the stack).
I'll add more ideas as I think of them, but I feel like my suggestions are pushing this in the direction of a more general-purpose golf language. Hopefully this input helps regardless of whether you use it or not.


text:
Primes of Ulam's Spiral
Ulam's spiral is a truly fascinating, yet puzzling, topic in mathematics. How it works in detail can be found here, but a short summary can be explained as so:
I start off by writing a one, then I write a two to the right of it. Above the two, I write a three, and to the left of that I write four. I continue this pattern of circling around 1 (and any numbers between me and 1) infinitely (or until told to stop), forming a spiral pattern. (see example below)
The Objective
Make a program that accepts n (will always be an odd number greater than zero) as an input that correlates with the number of rows, then prints out the values of the primes row by row of the Ulam spiral. The formatting can be any fashion, but must be human readable and obvious.
For example, given the input 3, your program should output 5,3,2,7, because 3 rows produces the following spiral:
5 4 3 <-- first row has the primes 5 and 3
6 1 2 <-- second row has the prime 2
7 8 9 <-- third row has the prime 7

As this is a code golf, the answer with the fewest bytes wins (no matter how inefficient)! Standard loopholes are not acceptable.

Is a trailing comma allowed? Or better still, space separated, e.g.      5     3     2     7

As long as it is human readable and can tell me the primes, feel free.

Pyth, 20 bytes
f}TPTsuC+R=hZ_GtyQ]]

Try it online: Demonstration
This code generates the fully Ulam's spiral, connects all lines and filters for primes.
Explanation:
f}TPTsuC+R=hZ_GtyQ]]   implicit: Z = 0
      u           ]]   reduce, start with G = [[]]
               tyQ     for H in [0, 1, ..., 2*input-2] do:
             _G           reverse the order of the lines
        +R=hZ             append Z + 1 at the end of each line,
                          updating Z each time with the new value Z + 1
       C                  update G with the transposed of ^
                       this gives the Ulam's spiral
     s                 combine all lines to a big list of numbers
f                      filter for numbers T, which satisfy:
 }TPT                    T appears in the prime-factorization of T
                         (<==> T is prime)

MATLAB, 48
a=fliplr(spiral(input(''))');disp(a(isprime(a)))

Basically this creates a spiral of the required size (requested from user), then arranges it so that it appears in the correct row order. This is stored in a. Next it displays all values in a which are prime.
As you said any readable format, I saved a byte and went for the default output of disp() which is (in your test case, n=3):
 5
 3
 2
 7

As an added bonus, this works for any n>0, including even numbers. For example, the output for n=10 is:
97
61
59
37
31
89
67
17
13
 5
 3
29
19
 2
11
53
41
 7
71
23
43
47
83
73
79

Very nice! Good to know that spiral function

CJam, 42 33 bytes
Xali(2*{_W%zY@,Y+:Y,>a+}*e_{mp},`

Try it online
The latest version includes substantial improvements suggested by @Martin.
The method for building the spiral is to, in each step, rotate the matrix we have so far by 90 degrees, and add a row with additional numbers. This is repeated (n / 2) * 4 times.
The values in the resulting matrix are then filtered for being primes.
Explanation:
Xa    Push initial matrix [1].
li    Get input and convert to int.
(2*   Calculate 2*(n-1), which is the number of rotations and row additions needed.
{     Start rotation loop.
  _     Copy current matrix for getting number of rows later.
  W%    Reverse the order of the rows...
  z     ... and transpose the matrix. The combination produces a 90 degree rotation.
  Y     Get next value from variable Y (which is default initialized to 2).
  @,    Rotate previous matrix to top, and get number of rows. This is the number
        of columns after the 90 degree rotation, meaning that it's the length of
        the row to be added.
  Y+    Add first value to row length to get end value.
  :Y    Save it in Y. This will be the first value for next added row.
  ,     Create list of values up to end value.
  >     Slice off values up to start value, leaving only the new values to be added.
  a+    Wrap the new row and add it to matrix.
}*    End of rotation loop.
e_    Flatten matrix into list.
{mp}, Filter list for primes.
`     Convert list to string for output.

Could 2/4* be replaced by 2*, or have you left it like that on purpose?

@ETHproductions That's not equivalent because it's an integer division. For example, for input 3, the result needs to be 4. Actually, now that I think about it, I believe there is a byte to be saved. (2* should be correct.

Mathematica 223
This appropriates Kuba's code for an Ulam spiral.  That's why I'm submitting it as a community wiki.  I merely golfed it and selected out the primes, which are listed by the row in which they reside.
r=Range;i=Insert;t=Transpose;s@n_:=#~Select~PrimeQ&/@Nest[With[{d=Length@#,l=#[[-1,-1]]},
Composition[i[#,l+3d+2+r[d+2],-1]&,t@i[t@#,l+2d+1+r[d+1],1]&,i[#,l+d+r[d+1,1,-1],1]&,
t@i[t@#,l+r[d,1,-1],-1] &][#,15]]&,{{1}},(n-1)/2]

Example
 s{15]

{{197, 193, 191}, {139, 137}, {199, 101, 97, 181}, {61, 59,
    131}, {103, 37, 31, 89, 179}, {149, 67, 17, 13}, {5, 3, 29}, {151,
    19, 2, 11, 53, 127}, {107, 41, 7}, {71, 23}, {109, 43, 47, 83,
    173}, {73, 79}, {113}, {157, 163, 167}, {211, 223}}

To improve the display:
 %// MatrixForm

Mathematica, 118 bytes
f=Permute[Range[#*#],Accumulate@Take[Join[{#*#+1}/2,Flatten@Table[(-1)^j i,{j,#},{i,{-1,#}},{j}]],#*#]]~Select~PrimeQ&

This generates the Ulam spiral in linear form by noting that the position of each subsequent number can be accumulated as
{(n*n + 1)/2, +1, -n, -1, -1, +n, +n, +1, +1, +1, -n, -n, -n, ...}

i.e. start from the centre, then move 1 right, 1 up, 2 left, 2 down, 3 right, 3 up, ...
Output:
In[515]:= f[5]
Out[515]= {17,13,5,3,19,2,11,7,23}

Javascript, 516 363 304 276 243 240 Bytes
My solution does not create a dense matrix with the Spiral, instead it returns the index that corresponds to the given number in the Ulam's Matrix of the given order.
So it iterates through the numbers between 2 and M*M and creates an array of primes with the idx given by the fn ulamIdx
M=15;
$=Math;
_=$.sqrt;
/**
 * Return M*i+j (i.e. lineal or vector idx for the matrix) of the Ulam Matrix for the given integer
 *
 * Each Segment (there are 4 in each round) contains a line of consecutive integers that wraps the
 * inner Spiral round. In the foCowing example Segments are: {2,3}, {4,5},
 * {6,7}, {8,9}, {a,b,c,d}, {e,f,g,h}, {i,j,k,l}, {m,n,o,p}
 *
 *    h g f e d
 *    i 5 4 3 c
 *    j 6 1 2 b
 *    k 7 8 9 a
 *    l m n o p
 *
 * @param n integer The integer which position in the Matrix we want.
 * @param M integer Matrix Order.
 */
/*
 * m: modulus representing step in segment in current spirtal round
 * v: Step in current spiral round, i.e. n - (inner spirals greatest num.)
 * s: the current Segment one of [1, 2, 3, 4] that represents the current spiral round
 * L: Segment Length (Current spiral round Order - 1)
 * B: inner Spiral Order, for trib¿vial case 1 it's -1 special case handled differently.
 * C: relative line (row or column) corresponding to n in current spiral Round
 * R: relative line (column or row) corresponding to n in current spiral Round
 * N: Curren (the one that contains n) Spiral (matrix) round Order
 * D: Difference between M and the current Spiral round order.
 */

/**
 * Runs the loop for every integer between 2 and M*M
 * Does not check sanity for M, that should be odd.
 */
r=[];
for (x = 2; x < M * M; x++) {
    p=1;
    // Is Prime?
    for (k = 2; p&&k <= _(x); k++)
        if (x % k==0) p=0;
    if (p) {
        B = $.floor(_(x - 1));
        B=B&1?B:B-1;
        N = B + 2;
        D = (M - N) / 2;
            v = x - B * B;
            L = B + 1;
            s = $.ceil(v / L);
            m = v % L || L;
            C = D + (s < 3 ? N - m : 1 + m);
            R = s&2 ? D + 1 : D + N;
            w= s&1 ? M * C + R : M * R + C;
        // /*uncomment to debug*/ console.log("X:" + x + ": " + ((s&1) ? [C, R].join() : [R, C].join()));
        r[w] = x;
    }
}
alert(r);

Minified looks like this:
for(M=15,$=Math,_=$.sqrt,r=[],x=2;x<M*M;x++){for(p=1,k=2;p&&k<=_(x);k++)x%k==0&&(p=0);p&&(B=$.floor(_(x-1)),B=1&B?B:B-1,N=B+2,D=(M-N)/2,v=x-B*B,L=B+1,s=$.ceil(v/L),m=v%L||L,C=D+(s<3?N-m:1+m),R=2&s?D+1:D+N,w=1&s?M*C+R:M*R+C,r[w]=x)}alert(r);

For input 15 the output is:
,,,,,,,,,,,,,,,,197,,,,193,,191,,,,,,,,,,,,,,,,139,,137,,,,,,199,,101,,,,97,,,,,,,,181,,,,,,,,61,,59,,,,131,,,,103,,37,,,,,,31,,89,,179,,149,,67,,17,,,,13,,,,,,,,,,,,5,,3,,29,,,,,,151,,,,19,,,2,11,,53,,127,,,,107,,41,,7,,,,,,,,,,,,71,,,,23,,,,,,,,,,109,,43,,,,47,,,,83,,173,,,,73,,,,,,79,,,,,,,,,,113,,,,,,,,,,,,157,,,,,,163,,,,167,,,,211,,,,,,,,,,,,223

That was quite a bit of compression. Can you explain your original code and your changes?

I removed some useless brackets. And realized that uI() had 4 conditionals with similar blocks. Each with 3 lines that generated Row and Collumn for the current segment (see main docblock) so I replacef thos 4 blocks by ll&llt lines and the return line decides if llt is row or column. S&2 is true for s in (3,2) (upper & left segments); s <3 , for s in (1,2) right & upper. S&1, for s in (1,3) will determine if the values in ll & llt are row & col or col&row and M (spiral order) × row +col preventes overlaping indexes (like rectifying matrix but with wrong lineal idx, correctness would need ll-1

In the main loop (run ()) only if i is prime (which fn was reduced as never need to test for <2 nor %1 ) it asks for i's index (ll,llt) in the spiral, which cames rectified. Then just print the result array.

There are 3 conceptually important matrices. Inner, curret & M. Useful for calculating absolute row & col.  Substracting inner to n leaves uss with a relative int in current (the one in which n falls ) spiral round. And  the diff between M's and current's order plays as offset for row and col in current round to get absolutes ones.

364 -> 240 by writing fn logic inline and removing unused tests.

source: Stack Exchange

license: Creative Commons - Attribution Share-Alike - https://creativecommons.org/licenses/by-sa/3.0/

sort: votes


text:
Reading the news is boring. Help me out!
Everyone knows that the news is boring. Really boring. Unless if it's about Politicians and their scandals. That is fun! But alas, Politicians can commit only so many scandals. So, I am employing you to make the news more interesting.
Objective Given an HTML snippet, perform all the substitutions found here, that is, in this picture:
BUT you should not edit any HTML tags themselves. I call a valid word any word that is not found within any HTML tag or their attributes. That is, you shouldn't replace
iPhone
 with
iPhone
, but should replace
election
 with
eating contest
.
Parsing rules

EDIT You should only match words delineated by a non-word. That is, you should only match full words. (E.g., match "Hello witness" but not "Hellowitness", "Hellow itness", or "Witnesspacelection."
If you can't type out the character on your keyboard, you should display the closest equivalent. (E.g., "Smartphone" would really become "Pokedex")
First-letter case or all-letter case must be retained. (E.g., "Allegedly, they died" becomes "Kinda probably, they died", "They allegedly died" becomes "They kinda probably died", and "THE ELECTION!" becomes "THE EATING CONTEST!", while "SpAcE" becomes "Spaaace" and "nEW STUDY" becomes "tumblr post")
All cases must be matched. (I.e., you must match a word, regardless of its capitalization.)
Any instance in which a <vowel> is met should become an <vowel> and vice versa. (E.g., "A senator" becomes "An elf-lord") You do not have to do this for every instance, but at least for your own replacements.
Anything plural must also retain pluralization in the translation (E.g., "Smartphones" becomes "pokedex" and "Spaces" becomes "Spaaaces")
Anything in a certain tense must remain in that tense in the translation. (E.g., "Rebuilt" becomes "Avenged", "Rebuilds" becomes "Avenges", etc.)
Anything in the singular must remain singular in the translation (E.g., "Congressional leader" becomes "River spirit")
If the entry spans multiple HTML elements, you should still match it, but you may "throw away" any intermediate elements. (E.g., Spaace should become simply "spaaace"). If the entry is self-contained within a single element, it should be matched properly and the tag retained.
"The witnesses" should become "Those dudes I know"
"witness" should become "This dude I know"
"The witness" should become "That dude I know"
"Couldn't be reached for comment" should become "Is guilty and everyone knows it"
"Cannot be reached for comment" should become "Are guilty and everyone knows it"

Bonuses
If you meet a -N% bonus, your new amount = (old amount) * (1 - N/100). So, if you met a -5% bonus with a 500 byte code, your new amount = 500 * (1 - 5/100) = 500 * .95 = 475.

-5% bonus if, for every instance of "space" after the first replacement, an extra "a" is added. So, the first replacement would be "spaaace", the second would be "spaaaace", the third would be "spaaaaace", etc.
-5% bonus if, for every valid number, you replace that number with a link to the respective XKCD comic. (It doesn't have to yet exist). If you do go for this bonus, you should match numbers such as 500, 3,000, 4 523, and 5.324. (You may opt to replace, instead, the number with the image of the comic. If you do this, instead of a -5% bonus, you will get a -15% bonus. Another extra -15% bonus if you can add the title-text to the picture, if any.)
-25% bonus if you can replace simultaneously all instances on the right side of the image with those on the left. (E.g., "spaaace" becomes "space", "eating contest" becomes "election", etc.) If you opt for any of the bonuses, you should be able to revert those to their respective entries. (E.g., http://www.xkcd.com/542 should become "542", and "spaaaaaaaace" should become "space".)
You may choose to do a minimum of 6 substitutions, but for each substitution not done (exclusive of bonus substitutions), you will receive an additional +10% penalty.

Example IOs (no bonuses)
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 new study shows that people in space cannot be reached for comment.
Output: This tumblr post shows that people in spaaace are guilty and everyone knows it.

Input: goo<s>g</s>le 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

This is a code-golf, so the shortest program in bytes wins.

What should "Witnessespace" become?

@ThomasKwa "Witnessespace". Don't match incomplete words.

Related?

@BetaDecay Related, except is open to all languages and is more solutions, also focusing on grammar.

What kind of whitespace should delimit words, then?

@ThomasKwa Revised.

What should "witness@" become? "witness@allegedly"? What are the plurals of "pokedex", "could not be reached for comment", and do we need to match "pokédex"?

@ThomasKwa Think of boundaries with the \b in RegEx. Plural of Pokedex is Pokedex, there is no plural for the second that you have to match, and the other I have said that If you can't type out the character on your keyboard, you should display the closest equivalent. (E.g., "Smartphone" would really become "Pokedex")

@TessellatingHeckler 5 000 is another way to say 5000. Should is correct; no, the string "space" is interrupted by valid characters.

This looks like an interesting challenge. I'll have to give it a shot shortly

Can you confirm that valid HTML will be passed in?

@DomHastings Yes, I can; there will be no invalid input and no self-closed tags (e.g.
)

Perl 5, 850
Lots of regex used or generated.
The %l hash is used for repeated words.
%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.$/

Test
$ 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 tumblr post shows that people in spaaace 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

Congratulations on first place!

JavaScript ES6, 954 bytes
I thought this was going to be a lot easier than it was! I originally used JavaScript so I could easily descend only into text nodes and replace the text there, but that wasn't what the question was after, so I've ended up with this monstrosity! It passes all the test cases except for goo<s>g</s>le glass is terrible. :( where the whole string comes back in a  tag due to the tags getting balanced. The bulk of the code is the lookup table, and I'm probably still missing some edge cases, but I couldn't come up with a nicer way to handle the tense correctly and I'm sure I could compress that more, but I'm running out of ideas... I'm sure I'll come back to this later though. Should've used Perl, better choice @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])

I applied one bonus for 5% of spaaace getting an additional a after each successful match. Uses alert() as suggested by @sysreq, thanks!
Examples
Input: goo<s>g</s>le glass is terrible. :(
Output: virtual boy is terrible. :(

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
Run this in your console to have the body text updated in-place:
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))

alert is shorter than console.log as long as it's run in a browser.

The  tag "problem" is perfectly acceptable, if not more acceptable. AND I love the last example. I was trying to think of one that incorporated most of them. Congratulations on the first answer! I'm sure it's competitive ;)

all_licenses: Creative Commons - Attribution Share-Alike - https://creativecommons.org/licenses/by-sa/3.0/