text:
Is it a prime? w/o math
Write a program or function in any language that tells if the input is a prime number.

The input is a string representing a natural number in base-10.
The output is one of the two strings "Prime" or "Not!!" which correctly identifies the input.
Arithmetic operators, bit-wise operators, numeric variables and constants, "math-stuff" in general, etc... are not allowed anywhere in your program.  You should use string operations to do all necessary "calculations".
You can compare string lengths (which are numbers) - but -10 to your score if you don't.
Your program should work on any length input (given enough memory and time).
Lowest byte count (UTF-8) wins.

What are the bounds on the number? Can it be negative? Zero? Can it contain a decimal point?

If it has bonus points, it isn't [tag:code-golf]

Added "natural" to specify bounds on the input.

I was hoping to get surprised with some crazy explicit string manipulation (I was personally thinking about writing code to "decrement" a string so I could loop - and I was torn between string long division and repeated string subtraction...), instead I was surprised with that cool little regex unary prime matcher!  Perhaps I need to ask the question again disallowing regex to see if I get even more wonderful stuff?  But I don't think anything will be able to come close to the brevity of that regex.

To get "more wonderfull stuff" maybe you could try making it a [tag:popularity-contest]. Changing the  question itself is generally frowned upon though. And I'm not sure you should make a new question or change anything just because someone came up with something that you didn't think of -- I think that happens quite often here. Also, rule bending is part of the sport :)

Hmm, can you speak without opening your mouth?

This is... underspecified to say the least. What's a "string" operation?

Ruby, 64 - 10 = 54
puts ('1
'..gets).map{?1}*''=~/^1?$|^(11+?)\1+$/?'Not!!': :Prime

This iterates from the string '1' (plus a newline) to the input string, using Ruby's built in string iteration method which looks an awful lot like adding 1, but which doesn't technically create a high-level numeric variable at any point. It uses the fact that there will be n iterations for an input of n to create an n-length string, then uses a regular expression to determine if that string can be grouped into identical substrings.

Is the "1" in the "map{?1}" a Fixnum? - if so, you might have to change it to "map('1')?  I can't find any documentation on the expression ?1 except some hints that in older versions of Ruby it returned ASCII codes and now it returns a string.

?1 is the same as '1', it's a 1-character string literal. I could replace all instances of 1 but the first with any other character.

Ok - I just couldn't find that construction well described anywhere!

I choose this as "the winner" since it goes out of the way to avoid even a hint of mathematics.

No hat tip to Abigail? For shame. This is afaict a straight port of the 1998 perl solution: http://www.catonmat.net/blog/perl-regex-that-matches-prime-numbers/

Ruby: 52 - 10 = 42
Using a variation of that famous prime-matching regex.
puts ?_*gets.to_i=~/^(_|(__+?)\2+)$/?"Not!!":"Prime"

Just to be clear: ?_*gets.to_i is a string operation that appends "_" to itself n times, where n is the input number. As I see it no string lengths are compared, so that should satisfiy the 10 character bonus criterium.

I'm not that familiar with Ruby, so correct me if I'm wrong, but doesn't the "to_i" convert the string to an integer?  Not that I don't love the brillient prime checker in unary…

@Wally I don't think "convert" is not the right word, but the method returns an int, yes. Still, I don't use any of the following Arithmetic operators, bit-wise operators, numeric variables and constants, and you can't really classify calling a method as "math-stuff" in general..?

@daniero Sounds reasonable - perhaps right at the edge of the spec.

Perl 52-10=42
Implementation
print((('-'x$ARGV[0])=~/^.$|^(..+?)\1+$/)?Not:Prime)

Demo
$ seq 1 10|xargs -I{} bash -c "echo -n '{} '  && perl Prime.pl {} && echo"
1 Not
2 Prime
3 Prime
4 Not
5 Prime
6 Not
7 Prime
8 Not
9 Not
10 Not

1 isn't really a prime.

Uses a numerical array index - so at the edge of the spec.

Use pop instead of $ARGV[0], save 4 chars, remove numerical array index

ECMAScript 6, 159 - 10 = 149
Sounds like a task for regex.  I/O with prompt/alert as usual.
for(s=prompt(u=""); /[^0]/.test(s); )
  s=s.replace(/(.)(0*)$/,(_,d,t)=>u+="x"," 012345678"[d]+t.replace(/0/g,"9"))
alert(/^((xx+)\2+|x?)$/.test(u)?"Not!!":"Prime")

The while loop decrements the decimal number by one each iteration purely by regex.  The final regex matches a string consisting of a composite number of x's, by first matching one factor, then another by repeating the first factor one for the rest of the string.

I like the string decrement function - clear and concise.

Javascript 266
function N(a){function b(a){return P.every(function(b){if(n=b,i=a.length,j=b.length,j>i) return;if(j==i) return 1;while(n.length<i)n+=b;return n.length!=i})}if(q=A,A!=a)for(;q.length.toString()!=a;)b(q)&&P.push(q),q+=A;console.log(b(q)?"Prime":"Not!!")}A="0",P=[A+A]

Creates a function called N which will print the desired result. The unminified version looks like this. I did a hand minify to clean up some variables and then ran that through uglify and then hand minified that again.
// A a string of "0" for using to generate long strings
// P is the store for all known primes
A="0", P=[A+A];
function N(val) {
  function _isPrime(str) {
    // go through all the known primes and return true
    // if we don't match on any of them
    return P.every(function(prime) {
      // prime is some known string whose length is a prime number
      tsr = prime, strlen = str.length, primelen = prime.length;
      // if the string we're checking has fewer chars than
      // this then it's not a prime
      if(strlen < primelen) return 0;
      // if the string we're checking has the same number of chars
      // as the the prime we're checking against then it is a prime
      if(primelen == strlen) return 1;
      // Keep incrementing our temporary string with the prime we're
      // checking. we'll break out of the loop once the temporary string
      // is greater than or equal to the string we're testing
      while(tsr.length < strlen) {
        tsr += prime;
      }
      return !(tsr.length == strlen)
    });
  }
  // start with a string of one unit
  nstr = A
  if(A!=val) {
    // keep incrementing the string so that we can compile a list
    // of known primes smaller than this value
    while(nstr.length.toString() !== val) {
      if(_isPrime(nstr)) {
        P.push(nstr);
      }
      nstr += A;
    }
  }
  console.log(_isPrime(nstr) ? "Prime" : "Not!!");
}

Tested it using this snippet:
for(var X=0;X<10;X++) {
  console.log('checking: ' + X);
  N(X.toString());
}

I'm not sure I see how this works, but I do see a numeric variable (i) and an arithmetic operator (i++).

Oh, didn't realise that I couldn't do a for loop like that.. will rewrite it tonight.

Basically I'm producing an array of strings whose lengths are primes. So when I get an input I keep adding characters to a string until the length value for the string matches the input. I then take this string and see if I can evenly divide it by any of the known primes. If I can't then it must be a prime. And by divide I mean I take the known prime string and keep adding it to itself the the length of the string is either equal to or larger than the string in question.

I've updated the code, it actually reduces the number of chars slightly :)

Cool.  It looks like the same idea as the regex, but more efficient and explicitly showing the actual logic.

Bash 66 - 10 = 56
Implementation
[[ -z `printf %$1s|grep -P "^(..+?)\1+$"` ]]&&echo Prime||echo Not

Demo
$ seq 1 10|xargs -I{} bash -c "echo -n '{} '  && ./Prime.sh {}"
1 Prime
2 Prime
3 Prime
4 Not
5 Prime
6 Not
7 Prime
8 Not
9 Not
10 Not

As above, 1 is not prime.

Python 3, 109-10 = 89
print(['Not','Prime'][(lambda i:not any(' '*i==(' '*u)*v for u in range(i)for v in range(i)))(int(input()])

Not comparing string lengths, but string inclusion. Cross posted from duplicate Determine if a number is prime without using arithmetic

source: Stack Exchange

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

sort: votes


text:
Find words containing every vowel
Your program must find all the words in this wordlist that contain all the vowels (a e i o u y). There are easy ways to do this, but I am looking for the shortest answer. I will take any language, but I'd like to see Bash.
Here is an example (could be much improved):
cat wordlist.txt | grep "a" | grep "e" | grep "i" | grep "o" | grep "u" | grep "y"

Your score is the length of the code.
-5 points for counting all occurrences of the word.
Lowest score wins.

such profile. many picture. very doge. wow.

17 answers and counting! I'd like to see more questions like yours on cg, doc.  Often I'll see something interesting here, but don't have the several hours of time needed to produce a decent solution...

"-5 points for counting all occurrences of the word." --> what exactly does this mean? We have to give the number of times that the SAME word shown up or the number of words?

If it were the second option, I would have to change all my scores. Just to be sure.

@IsmaelMiguel - i mean count all the words it finds

Then i have to fix all my scores.

@TheDoctor You say your score is the "length of the code". Does that include the size of the interpreter for scripted languages?

@JasonC - what do you mean by interpreter? do you mean the code calling your program?

@TheDoctor You can write a short program in Perl but to execute it you need the Perl interpreter; thousands of lines of code with a few hundred kB binary.

Ok, the interpreter doesn't count!

@TheDoctor So, then technically I can invent my own language and write an interpreter for it and that doesn't count?

Yes, but it can't be a language dedicated to finding vowels.

@TheDoctor Shakes fist

By the way, sort of related, for anybody that's never seen this: http://www.99-bottles-of-beer.net/ Code in 1500+ languages to print the 99 bottles of beer song.

@JasonC Check out perldoc perlcompile regarding how much the perl interpreter is needed. ;)

if it has a bonus, then it isn't code-golf. Use code-challenge instead.

GolfScript, 20 chars − 5 = 15 points
n%{'aeiouy'\-!},.,+`

Based on Howard's solution, but using a shorter test (\-! saves one char over &,6=), shorter length-appending (.,+ = 3 chars) and shorter output formatting (nobody said the output had to be newline-separated, so ` saves one char over n*).
Here's the output, given the lowercase word list as input (linebreaks inserted for readability):
["abstemiously" "authoritatively" "behaviourally" "consequentially" "counterrevolutionary"
"disadvantageously" "educationally" "encouragingly" "eukaryotic" "evolutionarily"
"evolutionary" "exclusionary" "facetiously" "gregariously" "heterosexuality" "homosexuality"
"importunately" "inconsequentially" "instantaneously" "insurrectionary" "intravenously"
"manoeuvrability" "neurologically" "neurotically" "ostentatiously" "pertinaciously"
"precariously" "precautionary" "questionably" "revolutionary" "simultaneously"
"supersonically" "tenaciously" "uncomplimentary" "uncontroversially" "unconventionally"
"undemocratically" "unemotionally" "unequivocally" "uninformatively" "unintentionally"
"unquestionably" "unrecognisably" 43]

(Ps. Technically, given that the challenge only says the code has to work for this specific input, n%{'aeiouy'\-!},`43 would be one character shorter yet.  I consider that cheating, though.)

Explanation:

n% splits the input on newlines into an array.
{ }, is a "grep" operator, executing the code between the braces for each element of the array and selecting those for which it returns a true value.

Inside the loop, 'aeiouy'\- takes the literal string aeiouy and removes from it every character found in the candidate word.  The ! then logically negates the resulting string, yielding 1 (true) if the string is empty and 0 (false) if it's not.

.,+ makes a copy of the filtered array, counts the number of words in it, and appends the result to the original array.
Finally, ` un-evals the array, converting it into a string representation of its contents.  (Without it, the words in the array would simply be concatenated in the output, yielding an unreadable mess.)

Congrats!! smallest answer!!!!

abstemiously and facetiously are the only word with all 6 vowels in order. Just thought I'd share that with you. I found it cool.

GolfScript, 19 characters
n%{'aeiouy'&,6=},n*

Usage:
golfscript vowels.gs < wordlist.txt

Output:
abstemiously
authoritatively
behaviourally
[...]
uninformatively
unintentionally
unquestionably
unrecognisably

If you also want to output the count at the end you can use
n%{'aeiouy'&,6=},.n*n@,

which is four characters longer.

I like it! It may be 4 chars longer, but that gets you a -5 pt bonus

Python - 46 characters
filter(lambda x:set(x)>=set("AEIOUY"),open(f))

Readable version: It's already pretty readable :-)

Ruby 38
Edit 34: Best so far (from @O-I):
a.split.select{|w|'aeiouy'.count(w)>5}

Edit 1: I just noticed the question asked for 'y' to be included among the vowels, so I've edited my question accordingly.  As @Nik pointed out in a comment to his answer, "aeiouy".chars is one character less than %w[a e i o u y], but I'll leave the latter, for diversity, even though I'm risking nightmares over the opportunity foregone.
Edit 2: Thanks to @O-I for suggesting the improvement:
s.split.select{|w|'aeiouy'.delete(w)==''}

which saves 11 characters from what I had before.
Edit 3 and 3a: @O-I has knock off a few more:
s.split.select{|w|'aeiouy'.tr(w,'')==''}

then
s.split.reject{|w|'aeiouy'.tr(w,'')[1]}

and again (3b):
a.split.select{|w|'aeiouy'.count(w)>5}

I am a mere scribe!
Here are two more uncompettive solutions:
s.split.group_by{|w|'aeiouy'.delete(w)}['']       (43)
s.gsub(/(.+)\n/){|w|'aeiouy'.delete(w)==''?w:''} (48)

Initially I had:
s.split.select{|w|(w.chars&%w[a e i o u y]).size==6}

s is a string containing the words, separated by newlines.  An array of words from s that contains all five vowels is returned. For readers unfamiliar with Ruby, %w[a e i o u y] #=> ["a", "e", "i", "o", "u", "y"] and & is array intersection.
Suppose
s = "abbreviations\nabduction\n"
s.split #=> ["abbreviations", "abduction"]

In the block {...}, initially
w             #=> "abbreviations"
w.chars       #=> ["a", "b", "b", "r", "e", "v", "i", "a", "t", "i", "o", "n", "s"]
w.chars & %w[a e i o u y] #=> ["a", "e", "i", "o"]
(w.chars & %w[a e i o u y]).size == 6 #=> (4 == 6) => false,

so "abbreviations" is not selected.
If the string s may contain duplicates, s.split.select... can be replaced by s.split.uniq.select... to remove duplicates.
Just noticed I could save 1 char by replacing size==6 with size>5.

...size=5 is a bug - should be ...size==5

Thanks, @Uri, for pointing out the typo in the first line, which I've fixed (not a bug--see line above 'so "abbreviations" is not selected').

@CarySwoveland You can save yourself 11 characters by doing this: s.split.select{|w|'aeiouy'.delete(w)==''}

That's great, @O-I. I've done an edit and found a place that in the grey cells.

@CarySwoveland This will save 1 more character: s.split.select{|w|'aeiouy'.tr(w,'')==''}. I'm pretty sure you can get this under 40 characters if you use nil logic and the 'right' String method. Still looking...

Down to 39: a.split.reject{|w|'aeiouy'.tr(w,'')[1]}. I'm still convinced there is a really elegant way to do this using Enumerable#grep, but @daniero found some flaws in my regex.

This is about all I can squeeze it down to without attacking the problem differently. 38 characters: a.split.select{|w|'aeiouy'.count(w)>5}

APL, 21 - 5 = 16
(,≢)w/⍨∧⌿'aeiouy'∘.∊w

Expects to find the list of words as w. Returns a list of the words that contain all the vowels, plus their count. Tested with ngn apl. Here's an example.
Explanation
         'aeiouy'∘.∊w   # generate a truth table for every vowel ∊ every word
       ∧⌿               # reduce with ∧ along the rows (vowels)
    w/⍨                 # select the words that contain all the vowels
(,≢)                    # hook: append to the list its own tally

Ruby - 28 characters (or 27 if y is excluded from vowels)
("ieaouy".chars-s.chars)==[]

The complete command to run is (48 chars):
ruby -nle 'p $_ if ("ieaouy".chars-$_.chars)==[]'

EDIT: replaced puts with p as suggested by @CarySwoveland

Nice one, @Nik. %w[a e i o u] would save 1 char, p for puts, 3 more.

Thanx, @CarySwoveland! I forgot about p, i rarely use it. As for %w[], if y is included in the set of vowels, the version with chars is still shorter.

@NikO'Lai "aeiouy".delete(s)=='' might save you a few characters.

Very nice! Post it as ur own solution, @O-I. I will upvote it

Haskell - 67
main=interact$unlines.filter(and.flip map "aeiouy".flip elem).lines

This is [tag:code-golf] , you should try to make the code shorter, for instance, by removing whitespace...

AWK - 29
/a/&&/e/&&/i/&&/o/&&/u/&&/y/
To run:
Save the lowercase word list to wordlist.txt. Then, do:
mawk "/a/&&/e/&&/i/&&/o/&&/u/&&/y/" wordlist.txt
If your system does not have mawk, awk can be used as well.
You can also run it from a file by saving the program to program.awk and doing mawk or awk -f program.awk.

Choosing right order accelerate the job: '/y/&&/u/&&/i/&&/o/&&/a/&&/e/' !!

Python, 45 characters
[w for w in open(f) if set('aeiouy')<=set(w)]

Javascript/JScript 147(152-5), 158(163-5) or 184(189-5) bytes:
Here is my Javascript and JScript horribly "ungolfyfied" version (164 152 152-5=147 bytes):
function(s,k,z,x,i,c,r){c='aeiouy'.split('');r=[];for(k in s=(s+'').split(/\b/)){i=0;for(z in c)i+=s[k].indexOf(c[z])>=0;i==6&&(r[r.length]=s[k]);}return r;}
function(s,k,z,x,i,c,r){c='aeiouy'.split('');r=[];for(k in s=(s+'').split(/\b/)){i=6;for(z in c)i-=!!s[k].search(c[z]);i&&(r[r.length]=s[k]);}return r;}
Thank you @GaurangTandon for the search() function, which saved me a byte!
RegExp based with HORRIBLE performance, but support both upper and lowercase (163-5=158 bytes):
function(s,k,z,x,i,c,r){c='aeiouy'.split('');r=[];for(k in s=(s+'').split(/\b/)){i=0;for(z in c)i+=RegExp(c[z],'i').test(s[k]);i==6&&(r[r.length]=s[k]);}return r;}
RegExp based with BETTER performance, BUT takes a lot more bytes (189-5=184 bytes):
function(s,k,z,x,i,c,r,l){l=[];r=[];for(z in c='aeiouy'.split(''))l[z]=RegExp(c[z],'i');for(k in s=(s+'').split(/\b/)){i=0;for(z in c)i+=l[z].test(s[k]);i==6&&(r[r.length]=s[k]);}return r;}

This one if just for the fun (175-5 bytes) and won't count as an answer:
function(s,k,z,x,i,c,r){c='aeiouy'.split('');r=[];for(k in s=(s+'').split(/\b/)){i=0;for(z in c)i+=s[k].indexOf(c[z])>=0;i==6&&(r[r[r.length]=s[k]]=1+(r[s[k]]||0));}return r;}
It's based on the 1st answer, but has a 'twist': You can know how many times a word has been found.
You simply do like this:
var b=(function(s,k,z,x,i,c,r){c='aeiouy'.split('');r=[];for(k in s=(s+'').split(/\b/)){i=0;for(z in c)i+=s[k].indexOf(c[z])>=0;i==6&&(r[r[r.length]=s[k]]=1+(r[s[k]]||0));}return r;})('youaie youaie youaie youaie a word');
b.youaie //should be 4
Since that length doesn't have all vowels, it wont be deleted and still would be an answer for the bonus.

How do you call it?
"Simple": You wrap the function inside () and then add ('string goes here'); to the end.
Like this:
(function(s,k,z,x,i,c,r){c='aeiouy'.split('');r=[];for(k in s=(s+'').split(/\b/)){i=0;for(z in c)i+=s[k].indexOf(c[z])>=0;i==6&&(r[r.length]=s[k]);}return r;})('a sentence youyoy iyiuyoui yoiuae oiue oiuea');
This example will return an array only with 1 string: yoiuae
I know that this is the worst solution, but works!

Why am i counting -5?
Well, Javascript/JScript arrays have a property (length) in arrays which tells the number of elements that it have.
After being confirmed in the question, the bonus of -5 is for telling the number of words.
Since the number of words is in that property, automatically I have the score of -5.

Might be interested in search() instead of indexOf() saves 1 char.

Further,  As far as I can see, in your shortest version, you do not need the .split() on "aeiouy". JS loops over an array and string in the same way. (Removing it saves you ~10 chars)

k [22-5=17 chars]
I have renamed the file "corncob_lowercase.txt" to "w"
Count the words [22 chars]
+/min'"aeiouy"in/:0:`w

Output
43

Find all words [25 chars]
x@&min'"aeiouy"in/:x:0:`w

Overall 43 words containing all the vowels (a e i o u y)
Output
"abstemiously"
"authoritatively"
"behaviourally"
..
..
"unintentionally"
"unquestionably"
"unrecognisably"

Mathematica (65 or 314)
Two very different approaches, the better one was proposed by Belisarius in the comments to my initial response. First, my brutish effort, which algorithmically generates every possible regular expression that matches a combination of six vowels (including "y"), and then checks every word in the target wordlist against every one of these 720 regular expressions. It works, but it's not very concise and it's slow.
b = Permutations[{"a", "e", "i", "o", "u","y"}]; Table[
 Select[StringSplit[
  URLFetch["http://www.mieliestronk.com/corncob_lowercase.txt"]],
  StringMatchQ[#, (___ ~~ b[[i]][[1]] ~~ ___ ~~
      b[[i]][[2]] ~~ ___ ~~ b[[i]][[3]] ~~ ___ ~~
      b[[i]][[4]] ~~ ___ ~~ b[[i]][[5]]~~ ___ ~~ b[[i]][[6]] ~~ ___)] &], {i, 1,
  Length[b]}]

~320 characters. A few could be saved through using alternate notation, and additional characters are lost preparing the dictionary file as a list of strings (the natural format for the dictionary in Mathematica. Other languages may not need this prep, but Mathematica does). If we omit that step, presuming it to have been handled for us, the same approach can be done in under 250 characters, and if we use Mathematica's built-in dictionary, we get even bigger savings,
Map[DictionaryLookup[(___ ~~ #[[1]] ~~ ___ ~~ #[[2]] ~~ ___ ~~ #[[3]]
~~ ___ ~~ #[[4]] ~~ ___ ~~ #[[5]]~~ ___ ~~ #[[6]] ~~ ___) .., IgnoreCase -> True] &,
 Permutations[{"a", "e", "i", "o", "u","y"}]]

Under 200 characters. Counting the number of words found requires only passing the result to Length[Flatten[]], which can be added around either block of code above, or can be done afterwards with, for example, Length@Flatten@%. The wordlist specified for this challenge gives 43 matches, and the Mathematica dictionary gives 64 (and is much quicker). Each dictionary has matching words not in the other. Mathematica finds "unprofessionally," for example, which is not in the shared list, and the shared list finds "eukaryotic," which is not in Mathematica's dictionary.
Belisarius proposed a vastly better solution. Assuming the wordlist has already been prepared and assigned to the variable l, he defines a single test based on Mathematica's  StringFreeQ[] function, then applies this test to the word list using the Pick[] function. 65 characters, and it's about 400 times faster than my approach.
f@u_ := And @@ (! StringFreeQ[u, #] & /@ Characters@"aeiouy"); Pick[l,f /@ l]

In 65 chars: f@u_:=And@@(!StringFreeQ[u,#]&/@Characters@"aeiouy");Pick[l,f/@l] Where lis the words list

That's because you forgot to consider the yas a vowel (as per the OP requirements!)

@belisarius yep, I notice that after making my comment. I'm checking my results with that fixed.

@belisarius confirmed -- your solution is much more concise and quicker than mine. Why don't you post it as its own solution? I'll up vote it.

Thanks! If you like it, edit your answer including it. For me it's all about finding short solutions with the language, not accumulating rep:)

Javascript - Score = 124 - 5 = 119 !!!
Edit: 17/02/14
function(l){z=[],l=l.split("\n"),t=0;while(r=l[t++]){o=0;for(i in k="aeiouy")o+=!~r.search(k[i]);if(o==0)z.push(r)}return z}

Big thanks to @Ismael Miguel for helping me cut off ~12 chars!
I removed the fat arrow notation function form because though I have seen it begin used, it doesn't work. No idea why...

To make it work:
Pass all the words separated by newline as an argument to the function  as shown below.

Test:
// string is "facetiously\nabstemiously\nhello\nauthoritatively\nbye"

var answer = (function(l){z=[],l=l.split("\n"),t=0;while(r=l[t++]){o=0;for(i in k="aeiouy")o+=!~r.search(k[i]);if(o==0)z.push(r)}return z})("facetiously\nabstemiously\nhello\nauthoritatively\nbye")

console.log(answer);
console.log(answer.length);

/* output ->
    ["facetiously", "abstemiously", "authoritatively"]
    3 // count
*/

Syntax error at line 1: expected expression, got '>'
c=(s,j)=>{k="aeiouy".split("

You can reduce if by moving k="aeiouy".split("") to be inside the for(i in k) loop. Using ; instead of new lines saves some bytes in Windows. And yet, I don't see how it will handle a list of words. And how to make it work.

@IsmaelMiguel I know it (fat arrow notation) does not work. But since I had seen it being used here so I used it because it saves chars. But I removed it. And I do not understand your tip, thanks though for examining code. Incorporated your bytes tip. And my new program should might clear your both doubts. Thanks for reading. :)

Instead of k="aeiouy";o=0;for(i in k), try o=0;for(i in k='aeiouy'). and using the saves bytes, you can use them to change o+=RegExp(k[i]).test(s) into o+=RegExp(k[i],'i').test(s), taking up one more byte, but working with both upper and lowercase.

Updated with better algorithm. Though I now understand your idea, but I do not understand why it works here and not here. Please help! Thanks :)

The 1st function (c()) should be replaced with this to work: function c(s){o=0;for(i in k="aeiouy")o+=s.search(k[i]);return o>5}. Solution: You are checking if o>20, when the maximum of o is 6.

I was using a different approach. I was adding up the indexes of the characters. So, aeguy would sum to 0 + 1 + 3 + 4 = 8  and fail the condition. But I soon realized that something like ggggggaeiou would do 6+7+8+9+10=42 and pass the condition without a y. So, I had removed the program. 2) I have introduced a new program which has a single function (edit of 17/02 having 139 chars). I wonder which version you are seeing .... (I have removed that c() function to be precise). Thanks for reading though.

And suddenly, the k="aeiouy" has worked! Saves me 2 chars ! Thanks :)

I'm glad it worked. I forgot to mention i was referring to the version you used in the jsbin.com website. And I've learned that I don't need the .split(), but I won't mess anymore with my already confusing answer.

And you can replace o+=r.search(k[i])+1?1:0 with o+=!!~r.search(k[i]). The ~ operator inverts the 'signal bit' (-1 becomes 0, 1 becomes -2, 0 becomes -1). The !! turns it into a boolean. All non-zero numbers are evaluated as true. Boolean values can be used in arithmetic operators and they will be casted to number (1 for true, 0 for false). And I saved you more 3 bytes.

@IsmaelMiguel Cool trick! Thanks !!! Both JS programmers helping out each other :D

You can cut down even more and have the bonus if you put all the results inside an array. It will be much more useful. and you have to use 0 bytes to have the number of words. And you are welcome, I like to help.

I will try this array tip tomorrow. Other than that, I already have the -5 bonus (I return the count of words). "and you have to use 0 bytes to have the number of words." What does that mean?

It means that you won't have to use counters to know the number of words. You can use like array.push() to add elements and return the array. Since the array has the length property, you automatically get the bonus without making any code.

Thanks a ton! And I made a spin-off of your !!~ approach. Instead, of checking o==6 it checks o==0 and reduces !! to !.

I'm not entirely sure why, but this code doesn't work on Opera 12.16. But you really have a nice answer. The only change I would make is that lost t++ almost at the end. Put it in the while loop, replacing it from while(r=l[t]) to while(r=l[t++]), saving another byte. And you will have a 120 bytes solution!

--2 Bytes :) And I do not know why it does not work on Opera. Not a problem, as it still works on at least Chrome :)

I really don't know why too. But i saw you are doing if(o==0)z.push(r). Try !o&z.push(r).

And you have my name misspelled.

@IsmaelMiguel Oops! Really sorry ! Hope you don't mind :) And I have already golfed up the code so much that I don't want to mess with it now :) Thanks for the idea though !

That's alright. Thanks for correcting the spelling of my name.

Ruby 39 38
Currently the shortest Ruby entry when counting the whole program including input and output.
Saved a char by using map instead of each:
$<.map{|w|w*5=~/a.*e.*i.*o.*u/m&&p(w)}

Another version, 39 characters with prettier output:
puts$<.select{|w|w*5=~/a.*e.*i.*o.*u/m}

Both programs take input from stdin or as a file name passed as a command line argument:
$ ruby wovels.rb wordlist.txt
It costs 3 extra characters to inclyde y as a wovel.

Anyway to use Enumerable#grep to shorten this? e.g., s.split.grep /a*e*i*o*u*y/ assuming s is a string of the words separated by newlines.

@O-I An interesting idea, but it would need some fiddling because the regex has the wovels in a fixed order. That's why i repeat the string 5 times before matching it, with .* between the wovels.

Could you clarify? Suppose s = "aeiouy\neiouay\nyuaioe\n". Then s.split.grep /a*e*i*o*u*y/ returns ["aeiouy", "eiouay", "yuaioe"] for me. Testing in pry Ruby 2.0.0. Great solution, by the way.

@O-I Oh wow, I assumed that grep used the =~ operator, but apparently it uses ===. My suspicion  was that it would also match strings not containing all wovels, because for instance /e*a*i*o*u*y/=~"eioy" works. I really don't understand what the === between a regex and an operator actually does. Great find; I'd suggest you post it as an answer yourself. edit I was right: try with for instance "heya".

I think you are right that the regex needs tweaking, though. I'm finding edge cases that don't contain all vowels that are leaking through. Maybe too good to be true.

Perl 6 - 35 characters
Inspired by @CarySwoveland 's Ruby solution:
say grep <a e i o u y>⊆*.comb,lines

This selects (greps) each line that returns True for <a e i o u y> ⊆ *.comb, which is just a fancy way of asking "is the Set ('a','e','i','o','u','y') a subset (⊆) of the Set made up of the letters of the input (*.comb)?"
Actually, both <a e i o u y> and *.comb only create Lists: ⊆ (or (<=) if you're stuck in ASCII) turns them into Sets for you.
To get the number of lines printed, this 42 character - 5 = 37 point script will output that as well:
say +lines.grep(<a e i o u y>⊆*.comb)».say

C - 96 bytes
 char*gets(),*i,j[42];main(p){while(p=0,i=gets(j)){while(*i)p|=1<<*i++-96;~p&35684898||puts(j);}}

I saved several bytes of parentheses thanks to a fortunate coincidence of operator precedence.

Bash (grep) - 36 bytes
g=grep;$g y|$g u|$g o|$g i|$g a|$g e

Note the order of vowels tested, least frequent first.
For the test case, this runs about 3 times as fast as
testing in order a e i o u y. That way the first test
removes a larger number of words so subsequent tests have
less work to do. Obviously this has no
effect on the length of the code.
Many of the other solutions posted here would benefit
similarly from doing the tests in this order.

Why wc, aren't we finding, not counting? Also, do we count input code into character count?

I don't really understand the bonus, "-5 points for counting all occurrences of the word".  If it really means "reporting all occurrences of the word", that's what my scripts do, without the "|wc".  I'm not using any "input code" because grep reads standard input, so "grep" is the "input code" and I counted it.  I'll remove the "|wc" now.

I've disclaimed the bonus.

Bash + coreutils, 39
eval cat`printf "|grep %s" a e i o u y`

Takes input from stdin.

This looks eligible for the 5-point bonus.

@GlennRanders-Pehrson That bonus makes no sense to me at all ;-)

Whether it makes sense or not, you correctly emit 86 lines when processing a file containing two copies of the wordlist.  Solutions that sort and only report 43 would not get the bonus, as I understand it.

sed 29 chars
/y/{/u/{/o/{/i/{/a/{/e/p}}}}}

Order choosed from Letter frequency on wikipedia to speed check.
On my host:
time sed -ne '/a/{/e/{/i/{/o/{/u/{/y/p}}}}}' </usr/share/dict/american-english >/dev/null
real    0m0.046s

and
time sed -ne '/y/{/u/{/i/{/o/{/a/{/e/p}}}}}'</usr/share/dict/american-english >/dev/null
real    0m0.030s

Nice (+1), but I think you need to include "sed -n " in the script, for a count of 36 bytes.

JavaScript - 95 bytes
Here's my golf.
function f(s){return[var a=s.match(/^(?=.*a)(?=.*e)(?=.*i)(?=.*o)(?=.*u)(?=.*y).*/),a.length];}

And I would also like to point out that your golf doesn't seem to find all occurrences of vowels.
Ungolfed:
function countVowels(string) {
  var regex   = /^(?=.*a)(?=.*e)(?=.*i)(?=.*o)(?=.*u)(?=.*y).*/;
  var matches = string.match(regex);
  var length  = matches.length;
  return [matches, length];

Read the spec more carefully. He's looking for words which---like facetiously---contain all the vowels in a single word. Though he does not insist that they are contained in order as in facetiously.

Your regex is wrong. All the look-ahead are effectively checking whether the first character is a vowel. You need (?=.*a) to check whether a is somewhere in the string.

@dmckee That's why I used lookaheads. They don't require any specific order.

D - 196
import std.regex,std.stream;void main(string[]a){auto f=new File(a[1]);while(!f.eof)if(!(a[0]=f.readLine.idup).match("(?=.*a)(?=.*e)(?=.*i)(?=.*o)(?=.*u)(?=.*y).*").empty)std.stdio.writeln(a[0]);}

Un-golfed:
import std.regex, std.stream;

void main( string[] a )
{
    auto f = new File( a[1] );

    while( !f.eof )
        if( !( a[0] = f.readLine.idup ).match( "(?=.*a)(?=.*e)(?=.*i)(?=.*o)(?=.*u)(?=.*y).*" ).empty )
            std.stdio.writeln( a[0] );
}

Usage: C:\>rdmd vowels.d wordlist.txt
wordlist.txt must contain the lowercase list words.

Rebol (104 chars)
remove-each w d: read/lines %wordlist.txt[6 != length? collect[foreach n"aeiouy"[if find w n[keep n]]]]

Un-golfed:
remove-each w d: read/lines %wordlist.txt [
    6 != length? collect [foreach n "aeiouy" [if find w n [keep n]]]
]

d now contains list of found words.  Here is an example from Rebol console:
>> ; paste in golf line.  This (REMOVE-EACH) returns the numbers of words removed from list

>> remove-each w d: read/lines %wordlist.txt[6 != length? collect[foreach n"aeiouy"[if find w n[keep n]]]]
== 58067

>> length? d
== 43

Bash
Not as short as the OP's , but one line in Bash:
while read p; do if [ $(sed 's/[^aeiouy]//g' <<< $p | fold -w1 | sort | uniq | wc -l) -eq 6 ] ; then echo $p; fi; done < wordlist.txt

You could save four bytes by replacing  "sort | uniq" with "sort -u"

Also you can remove the spaces from " | " and "; " to save a few more bytes

sort + uniq + sed
This one does not match repeated occurrences of a word. It also does not match the letter 'y' if is occurs at the beginning of a word.
sort wordlist.txt | uniq | sed -n '/a/p' | sed -n '/e/p' | sed -n '/i/p' | sed -n '/o/p' | sed -n '/u/p' | sed -nr '/^[^y]+y/p'

As in your other answer, replace "sort wordlist.txt | uniq" with "sort -u wordlist.txt" to save 4 bytes.

Smalltalk (36/57 chars)
'corncob_lowercase.txt' asFilename contents select:[:w | w includesAll:'aeiouy']

to get the count, send #size to the resulting collection.
The result collection contains 43 words ('abstemiously' 'authoritatively' ... 'unquestionably' 'unrecognisably')
The code above has 77 chars, but I could have renamed the wordlist file to 'w', so I count the filename as 1 which gives a score of 57.
Is reading the file part of the problem or not? If not (see other examples), and the list of words is already in a collection c, then the code reduces to:
c select:[:w | w includesAll:'aeiouy']

which is 36 chars (with omittable whitespace removed).

updated: unnecessary spaces removed
Very slow but in bash (81 chars):
while read l;do [ `fold -w1<<<$l|sort -u|tr -dc ieaouy|wc -m` = 6 ]&&echo $l;done

EDIT: echo $l|fold -w1 replaced with fold -w1<<<$l as suggested by @nyuszika7h

This is code golf, you might want to minify your code a bit more. Start by removing unneeded whitespace. ;)

You can further minify the code by using fold -w1<<<$l instead of echo $l|fold -w1. Note: The current code is 84 characters, you shouldn't count the trailing newline.

Till today I knew nothing about <<<. Thank you again, @nyuszika7h. Can you tell me, where it is explained.

http://mywiki.wooledge.org/BashGuide/InputAndOutput#Heredocs_And_Herestrings

 Mathematica - 136 102
Fold[Flatten@StringCases@## &,
Flatten@Import@"http://bit.ly/1iZE9kY",
___ ~~ # ~~ ___ & /@ Characters@"aeiouy"]

The shortened link goes to http://www.mieliestronk.com/corncob_lowercase.txt

Save 28 characters with http://bit.ly/1iZE9kY.

Save two characters with Characters["aeiou"] or more if you include y.

C-Sharp
I've never done this before and I'm not exactly sure what the posting procedures are. But this is what i came up with:
185 bytes
Action<string>x=(s=>s.Split('\n').ToList().ForEach(w=>{if("aeiouy".All(v=>w.Contains(v)))Console.Write(w);}));using(var s=new StreamReader(@"C:\corncob_lowercase.txt"))x(s.ReadToEnd());

wordList = a List<string> of all the words.
if you want to display a total:
219 - 5 = 214 bytes
Action<string>x=(s=>{var t=0;s.Split('\n').ToList().ForEach(w=>{if("aeiouy".All(v=>w.Contains(v))){Console.Write(w);t++;}});Console.Write(t);});using(var s=new StreamReader(@"C:\corncob_lowercase.txt"))x(s.ReadToEnd());

Expanded
// init
var words = "";
var vowels = "aeiouy";
var total = 0;

using (var stream = new StreamReader(@"C:\corncob_lowercase.txt"))
{
    // read file
    words = stream.ReadToEnd();

    // convert word to List<string>
    var wordList = words.Split('\n').ToList();

    // loop through each word in the list
    foreach (var word in wordList)

        // check if the current word contains all the vowels
        if(vowels.All (w => word.ToCharArray().Contains(w)))
        {
            // Count total
            total += 1;
            // Output word
            Console.Write(word);
        }

    // Display total
    Console.WriteLine(total);
}

Generally if the question asks for a "program", you should post your complete program including loading/initialization, etc. Great work otherwise!

Oh ok. So in the minified version i should include everything not just the line that achieves the requirement? I thought it was the latter judging by other answers as they lacked the code to load/read the txt file.

You'll see a variation of approaches, and given the age of the answer curation is likely not to be as strong on new answers, but in general if the question asks for a "program" it should be compilable and runnable as posted. Take the example in the question itself -- that is a complete, executable solution, that stands alone.

ahh right. well, in that case i've updated the 2 shortened versions to be standalone.

Great! Be sure to update the text of your answer (you mention "without loading/reading") and compute your score.

This is still missing some of the "ceremony"; you need a main, you need a class etc. You might want to take a look at my entry for a complete example.

Oh, and also: your entry should contain the "score" in the "title". Yours would (currently) be: "C-Sharp - 251" but since the "program" doesn't run as posted this is not the final score.

Also, using variable-names like stream and total will ofcourse hurt your score as opposed to s and t; stuff like total += 1 could ofcourse be written as total++ and things like new char[] {'a','e','i','o','u','y'}; are (mostly) overkill when "aeiouy" will do fine (remember: a string is a char-array in essence; see my entry for that too).

@RobIII re: char[] - should have thought of that lol. Anyways, I've updated mine. re: 'ceremony', if you run mine as-is in linqpad (c# statements), it works :D
also +1'd your answer. totally different approach to mine + very concise

I suppose we can argue if running in LinqPad can be considered "a program" as stated in the contest. Thanks for the upvote though ;-)

C# - 170
using System.Linq;class P{static void Main(string[]a){System.Console.Write(string.Join(",",System.IO.File.ReadAllLines(a[0]).Where(w=>"aeiouy".All(c=>w.Contains(c)))));}}

Formatted:
using System.Linq;
class P
{
    static void Main(string[] a) {
        System.Console.Write(
            string.Join(",", System.IO.File.ReadAllLines(a[0])
                .Where(w => "aeiouy".All(c => w.Contains(c)))));
    }
}

Not in the mood right now to implement counting  but should be easy.
The path to the (lower-case version of the) wordlist should be passed to the program as first argument:
program.exe D:\foo\bar\corncob_lowercase.txt

Output:
abstemiously,authoritatively,behaviourally,consequentially,counterrevolutionary,
disadvantageously,educationally,encouragingly,eukaryotic,evolutionarily,evolutio
nary,exclusionary,facetiously,gregariously,heterosexuality,homosexuality,importu
nately,inconsequentially,instantaneously,insurrectionary,intravenously,manoeuvra
bility,neurologically,neurotically,ostentatiously,pertinaciously,precariously,pr
ecautionary,questionably,revolutionary,simultaneously,supersonically,tenaciously
,uncomplimentary,uncontroversially,unconventionally,undemocratically,unemotional
ly,unequivocally,uninformatively,unintentionally,unquestionably,unrecognisably

I took the liberty of outputting and comma-separating the words; neither of which is specified in the rules (which state "must find all the words", not how (and IF) to output).
Including count (+output): 192 - 5 = 187
using System.Linq;class P{static void Main(string[]a){var r=System.IO.File.ReadAllLines(a[0]).Where(w=>"aeiouy".All(c=>w.Contains(c)));System.Console.Write(string.Join(",",r)+" "+r.Count());}}

Output:
abstemiously,authoritatively,behaviourally,consequentially,counterrevolutionary,
disadvantageously,educationally,encouragingly,eukaryotic,evolutionarily,evolutio
nary,exclusionary,facetiously,gregariously,heterosexuality,homosexuality,importu
nately,inconsequentially,instantaneously,insurrectionary,intravenously,manoeuvra
bility,neurologically,neurotically,ostentatiously,pertinaciously,precariously,pr
ecautionary,questionably,revolutionary,simultaneously,supersonically,tenaciously
,uncomplimentary,uncontroversially,unconventionally,undemocratically,unemotional
ly,unequivocally,uninformatively,unintentionally,unquestionably,unrecognisably 4
3

(Note the count at the end: 43)
No output ("must find all the words"): 137 - 5 = 132
using System.Linq;class P{static void Main(string[]a){var r=System.IO.File.ReadAllLines(a[0]).Where(w=>"aeiouy".All(c=>w.Contains(c)));}}

(Bending the rules a bitm then again: not really) This finds all the words and the count is available by executing r.Count().

vb.net (Score 91 = 96c - 5)*0
*0 +49c min
This creates an enumeration contain all of the words which contain all of the vowels.
Dim r=IO.File.ReadLines(a(0)).Where(Function(w)"aeiou".Intersect(w).Count=5)
Dim c=r.Count

Your program must find all the words in this wordlist. This is a) not a program but a snippet of a program and b) doesn't read/use the wordlist.

@RobIII vb.net has a minimum 49c for a basic console program. The arguments to the program (in this case the wordlist) are the array a. Plus as some others have pointed out it is valid program in LinqPad.

Batch - 52 Bytes
if you're not worried about the original word list -
@for %%a in (a e i o u)do @find "%%a" %1>f&type f>%1

This outputs the new list to a file called f, preserving the original word list - 66 bytes -
@type %1>f&for %%a in (a e i o u)do @find "%%a" f>f%%a&type f%%a>f

If you want it to clean up the files it leaves around, just add &del f%%a to the end for an extra 9 bytes.
Takes list of words as input.
H:\uprof>vowles.bat wordlist.txt

Old solution - 162 Bytes
@echo off&setLocal enableDelayedExpansion&for /f %%a in (%1) do (set a=%%a&set t=&for %%b in (a e i o u) do if "!a:%%b=!"=="!a!" set t=1)&if "!t!" NEQ "1" echo %%a

JavaScript - 118 bytes
function(a){r=[];for(k in a=a.split("\n")){c=0;for(b in s="aeiouy")c+=!!~a[k].search(s[b]);c>5&&r.push(a[k])}return r}

Paste this into the console to test it:
(function(a){r=[];for(k in a=a.split("\n")){c=0;for(b in s="aeiouy")c+=!!~a[k].search(s[b]);c>5&&r.push(a[k])}return r})(document.getElementsByTagName('pre')[0].innerText)

Bash (sed) - 36 bytes
s=/!d\;;sed /y$s/u$s/o$s/i$s/a$s/e$s

As in my bash (grep) solution, I changed the order of tests
to make the job run about 40 percent faster for the given
input file.

Pure bash 86 chars
t=aeuoiy;while read w;do v=${w,,};r=${v//*([^$t])};[ "${t//*([$r])}" ] || echo $w;done

Demo:
t=aeuoiy
while read w;do
    v=${w,,}
    r=${v//*([^$t])}
    [ "${t//*([$r])}" ] || echo $w
  done < /usr/share/dict/american-english
Aureomycin
Aureomycin's
Byelorussia
Byelorussia's
ambidextrously
authoritatively
...

I like this because there is no and. The job is done in a different way!

Javascript (ES6) - 60 - 5 (Bonus) = 55 Characters
x.filter(s=>s.replace(/[^AEIOUY]|(.)(?=.*\1)/g,'').length>5)

Assumes the variable x contains an array of upper-case words.
Filters the array to find all the strings when if you replace all non-vowels and duplicate characters it has a length greater than 5.
[Counting the bonus -5 as Firefox (which is the only browser to support ES6 arrow function syntax) outputs the result of an expression in the console and will output the length property of an array alongside all the elements.]
An aside
To get the word list into a JavaScript array format:

Save the upper-case file linked in the question as Words.txt
run gawk -F: '{ print "\"" $1 "\"," }' Words.txt > Words2.txt to add surrounding quotes and trailing commas to each line.
Open Words2.txt and manually add x=[ before the first line and replace the comma on the last line with a closing bracket ].
Then you can copy/paste the entire thing into the firefox console (it might take a while to generate a 58,000 row array but it managed it for me).

Perl command line - 45 - 5 = 40
perl -ne 'print if /a/&/e/&/i/&/o/&/u/&/y/;' wordlist.txt

It's 45 characters not including the file name, and I think it qualifies for the bonus. Fairly readable as well. :)
Nice question!

Python 65 bytes
def count(word): return False not in [j in word for j in 'aeiou']

C# (49c)
Getting the file lines will be the hard to golf aspect of the challenge for C#.
var r=l.Where(w=>"aeiou".Intersect(w).Count==5);

This will be an enumeration of all the words containing all the vowels.
Just wanting the count then use.
var r=l.Count(w=>"aeiou".Intersect(w).Count==5);

Seriously? Translating vb.net to C# (or vice versa) and submitting as two answers? Okay... well, actually, be my guest but see my comment in your other answer.

Go - 186 (or 215)
Go's not much for code golf. (The designers like explicit code, and, heck, we're talking about a language where standard style is usually gofmt-enforced.) Nonetheless, 186 decidedly unidiomatic bytes:
package main
import (."bufio"
."os")
func main(){f:=NewReader(Stdin)
for{l,d:=f.ReadBytes(13)
s,n:=0,17842449
for _,c:=range l{s|=1<<(c-97)}
if s&n==n{Stdout.Write(l)}
if d!=nil{break}}}

Some \n's could be ;'s, but it wouldn't affect the byte count. You can see a formatted version.
I sort of like this variant, though, which is longer, but just reads bytes from stdin without even having line splitting done for it (formatted):
package main
import ."os"
func main(){var b,w[1024]byte
s,i,m:=0,0,17842449
for{n,e:=Stdin.Read(b[:])
for _,c:=range b[:n]{s|=1<<(c-97)
w[i]=c
i++
if c==13{if s&m==m{Stdout.Write(w[:i])}
s,i=0,0}}
if e!=nil{break}}}

Python
file = open('wordlist.txt', 'r')
for word in file:
    if 'a|e|i|o|u' in word:
        print(word)

authors: n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

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


text:
Create a simple math calculator +-/* accepting only Chinese characters
The task:
Build a calculator that takes a simple math equation in Chinese and outputs the correct answer(To the equation from the users input) in Chinese.

Scope:

Any programming language can be used.
Input must be in Chinese otherwise an error message will be displayed .
Output must be in Chinese.
Only input and output of whole numbers between 0-999 will be in scope (this is meant to be a simple calcaulation).
The full original input must be included prior to equals then the answer.
Display answer with no decimal points.
Long number form output is mandatory.
Input must accept Long number form, inclusion of short form is optional.

Sample input/output:

二乘以八  (2*8)
  二乘以八等于十六 (2*8=16)

Cheat Sheet:

零 or 〇 → 0 (either form or both, you choose)
  一 → 1
  二 → 2
  三 → 3
  四 → 4
  五 → 5
  六 → 6
  七 → 7
  八 → 8
  九 → 9
  十 → 10
  百 → 100
  加 → + Operator
  减 → - Operator
  乘以 → * Operator
  除以 → / Operator
  等于 → = Operator
Chinese numbering is basic 333 is just 3 100 3 10 3 三百三十三 only exception is 十 where you don't need 一十 to say 10 (but you might to), but you do need 一百 to say 100 (i.e., can't say just 百).

Useful link: http://www.mandarintools.com/numbers.html
If you can't see the chinese symbols, you may see them here.
Get creative and happy coding!

Can I use 零 for zero? Otherwise how could I write 101 (一百零一)?

@Victor 一百〇一 :) Cheat sheet updated

Is it 〇 as in your comment or 零 as in the cheat sheet?

Either or, it's a cheat sheet not a definitive guide :) both 零 and 〇 are technically Chinese for zero. You can include capital numbers if you really want to :)

you said "you don't need 一十to say 10" does this mean that it is not acceptable to use it?

Fine to use either way

@user689 I edited the question to make it clear about 一十.

Do you use 一百十六 or 一百一十六 for 116? Or can it be both?

@JoeZ. I think that it must be 一百一十六. The 十 without the 一 prefix should be used only in the start of the number. But I can't say that I am sure about this.

@Victor That would be 一百十六.

The interesting thing about this question is that there are two ways of saying numbers in Mandarin: this way, and listing off the numerals. Just like how in English we often say two two five six for 2256, in Mandarin, that can be said as 二二五六

@Quincunx Quoting http://www.mandarintools.com/numbers.html : [[One-hundred is "one hundred". One-hundred and one is "one hundred zero one". One hundred and eleven is "one hundred one ten one". Notice that for eleven alone, you only need "ten one" and not "one ten one", but when used in a larger number (such as 111), you must add the extra "one".]]

@Victor refering to my first comment, I just told you how it would normally be said. If you paste that into your tool, you'll see that it comes out the same.

@quincunx that is true for room numbers, building numbers, ect... but never seen the shorthand used in math

@50-3 I haven't heard it used much for math, mainly for telephone numbers, room numbers, etc. However, according to http://www.mandarintools.com/numbers.html, 987654321 is 九億八千七百六十五萬四千三百二十一. If I wanted to say that, I'd definitely say 九八七六五四三二一 and make sure that the listeners understand from the context that it is a number.

@50-3 You should specify if we should choose to handle the short or the long form or both, or if the long form is obligatory and the short optional (I recommend this), or if both are obligatory.

Java
It parses the equation as a context-free language, using these productions for that:
U1 = [一-九]                 (i.e. [1-9])
D1 = U1 十 U1?
DO = U1? 十 U1?
CDN = 〇 U1 | D1
C1 = U1 百 CDN?
F = C1 | DO | U1 | 〇
F2 = 負? F
OP = 加 | 减 | 乘以 | 除以    (i.e., + | - | * | / )
EQ = F2 (OP F2)*

The DO and D1 productions are handled in the same method, diferentiated by a parameter. The other productions take one method each. The EQ is the grammar main symbol. Before starting the parse, it replaces 零 for 〇, so it need to handle just 〇 after that.
The 負 is for negative numbers. It can handle numbers from -999 to 999 (or 負九百九十九 to 九百九十九).
Further, to make it much more chinese, all the identifiers are in chinese. The only exception is the class name (using international characters there may cause problems) that is a chinese name transliterated to latin characters.
For the input I had to use a JOptionPane. Sorry for that, but I had trouble about encodings using other input methods. If you don't like this method of input, you can use the 解方程 method directly, it takes the input formula and produce the output equation (or error message).
import javax.swing.JOptionPane;

public class ZhongguoJisuanQi {

    private final String 文字输入;
    private int 源指数;

    public ZhongguoJisuanQi(String 文字输入) {
        this.文字输入 = 文字输入.replace("零", "〇");
        this.源指数 = 0;
    }

    public static void main(String... 参数) {
        String 方程 = 解方程(读取文本行());
        System.out.println(方程);
        JOptionPane.showMessageDialog(null, 方程, "答案是", JOptionPane.INFORMATION_MESSAGE);
    }

    private static String 读取文本行() {
        return JOptionPane.showInputDialog(null, "输入数学公式", "输入数学公式", JOptionPane.QUESTION_MESSAGE);
    }

    public static String 解方程(String 数学公式) {
        if (数学公式 == null) return "错误：给定的数学公式的格式不正确。";
        ZhongguoJisuanQi 计算器 = new ZhongguoJisuanQi(数学公式);
        Integer 结果 = 计算器.解析并解决了式();
        if (结果 == null) return "错误：给定的数学公式的格式不正确。";
        return 数学公式 + "等于" + 整数转换为文本(结果);
    }

    private boolean 找到字符(char 字符, int 指数) {
        return 指数 < 文字输入.length() && 文字输入.charAt(指数) == 字符;
    }

    private Integer 解析生产一() {
        int 数 = "一二三四五六七八九".indexOf(文字输入.charAt(源指数));
        if (数 == -1) return null;
        源指数++;
        return 数 + 1;
    }

    private Integer 解析生产十(boolean 必须带有前缀) {
        int 原始来源索引 = 源指数;
        Integer 第一个数字 = 解析生产一();
        if (第一个数字 == null && 必须带有前缀) return null;
        if (!找到字符('十', 源指数)) {
            源指数 = 原始来源索引;
            return null;
        }
        源指数++;
        Integer 第二个数字 = 解析生产一();
        return (第一个数字 == null ? 1 : 第一个数字) * 10 + (第二个数字 == null ? 0 : 第二个数字);
    }

    private Integer 解析生产或零十() {
        int 原始来源索引 = 源指数;
        if (找到字符('〇', 源指数)) {
            源指数++;
            Integer 数 = 解析生产一();
            if (数 == null) {
                源指数 = 原始来源索引;
                return null;
            }
            return 数;
        }
        return 解析生产十(true);
    }

    private Integer 解析生产百() {
        int 原始来源索引 = 源指数;
        Integer 第一个数字 = 解析生产一();
        if (第一个数字 == null) return null;
        if (!找到字符('百', 源指数)) {
            源指数 = 原始来源索引;
            return null;
        }
        源指数++;
        Integer 第二个数字 = 解析生产或零十();
        return 第一个数字 * 100 + (第二个数字 == null ? 0 : 第二个数字);
    }

    private Integer 解析生产数无符号() {
        Integer 数 = 解析生产百();
        if (数 != null) return 数;
        数 = 解析生产十(false);
        if (数 != null) return 数;
        数 = 解析生产一();
        if (数 != null) return 数;
        if (找到字符('〇', 源指数)) {
            源指数++;
            return 0;
        }
        return null;
    }

    private Integer 解析该生产号() {
        boolean 负 = false;
        if (找到字符('負', 源指数)) {
            源指数++;
            负 = true;
        }
        Integer 数 = 解析生产数无符号();
        return 数 == null ? null : 负 ? -数 : 数;
    }

    private String 解析算术运算符() {
        if (找到字符('加', 源指数)) { 源指数++; return "加"; }
        if (找到字符('减', 源指数)) { 源指数++; return "减"; }
        if (找到字符('乘', 源指数) && 找到字符('以', 源指数 + 1)) { 源指数 += 2; return "乘以"; }
        if (找到字符('除', 源指数) && 找到字符('以', 源指数 + 1)) { 源指数 += 2; return "除以"; }
        return null;
    }

    public Integer 解析并解决了式() {
        Integer 第一个数字 = 解析该生产号();
        while (true) {
            String 算术运算符 = 解析算术运算符();
            if (算术运算符 == null) return 源指数 == 文字输入.length() ? 第一个数字 : null;
            Integer 第二个数字 = 解析该生产号();
            if (第二个数字 == null) return null;
            switch (算术运算符) {
                case "加": 第一个数字 += 第二个数字; break;
                case "减": 第一个数字 -= 第二个数字; break;
                case "乘以": 第一个数字 *= 第二个数字; break;
                case "除以": 第一个数字 /= 第二个数字; break;
                default: throw new AssertionError();
            }
        }
    }

    private static String 整数转换为文本(int 参数) {
        if (参数 == 0) return "〇";
        StringBuilder 字符串生成器 = new StringBuilder(7);
        int 数 = 参数;
        if (数 < 0) {
            字符串生成器.append("負");
            数 = -数;
        }
        if (数 >= 1000) return null;
        if (数 >= 100) {
            字符串生成器.append("〇一二三四五六七八九".charAt(数 / 100)).append("百");
            数 %= 100;
            if (数 >= 1 && 数 <= 9) 字符串生成器.append("〇");
            if (数 >= 10 && 数 <= 19) 字符串生成器.append("一");
        }
        if (数 >= 20) 字符串生成器.append("〇一二三四五六七八九".charAt(数 / 10));
        if (数 >= 10) 字符串生成器.append("十");
        数 %= 10;
        字符串生成器.append("〇一二三四五六七八九".charAt(数));
        return 字符串生成器.toString();
    }
}

Compile with:
javac -encoding UTF8 ZhongguoJisuanQi.java

Run with:
java ZhongguoJisuanQi

Cheat sheet for identifiers names, accordingly to google translator:
(english original text) -> (chinese text) -> (english text back from chinese)
chinese calculator -> 中国计算器 (Zhōngguó jìsuàn qì) -> china calculator
text input -> 文字输入 -> text input
source index -> 源指数 -> source index
original source index -> 原始来源索引 -> original source index
Enter the mathematical formula -> 输入数学公式 -> Enter mathematical formulas
mathematical formula -> 数学公式 -> mathematical formulas
Error: The given mathematical formula is malformed. -> 错误：给定的数学公式的格式不正确。 -> Error: The given mathematical formula is not correct.
character -> 字符 -> character
read a text line -> 读取文本行 -> read a line of text
arguments -> 参数 -> parameter
equation -> 方程 -> equation
index -> 指数 -> index
find character at -> 找到字符 -> find characters
parse the production -> 解析生产 -> resolve the production
parse the production or zero -> 解析生产或零 -> resolve the production or zero
parse the production number -> 解析该生产号 -> resolve the production number
parse the production number without sign -> 解析生产数无符号 -> resolve production unsigned
parse and solve the formula -> 解析并解决了式 -> parse and resolve the formula
parse an arithmetic operator -> 解析算术运算符 -> parsing arithmetic operators
arithmetic operator -> 算术运算符 -> arithmetic operators
must be prefixed -> 必须带有前缀 -> must be prefixed with
calculator -> 计算器 -> calculators
solve the equation -> 解方程 -> solving equations
result -> 结果 -> result
number -> 数 -> number
minus -> 负 -> minus
first number -> 第一个数字 -> the first number
second number -> 第二个数字 -> second number
string builder -> 字符串生成器 -> string builder
convert integer to text -> 整数转换为文本 -> integer is converted to text
the answer is -> 答案是 -> the answer is

Haskell
Here is a solution in Haskell with custom made parser combinators. No library is required, all pure functional power. :)
The grammar in the middle of the file describes the structure of the expressions that will be parsed. The grammar itself is the parser, and it is build from terminal parsers, with parser combinators to put them in sequence (<:>,<::>) or as alternatives (|||). Each of the terminal parsers parses a certain string or character, such as an operator or a digit. The evaluation combinator (==>) then transforms and calculates the expression.
Some inspiration I found
in this blog, but mainly I learned this when I worked with a DSL embedded in Haskell that uses the same approach (ADP, Algebraic Dynamic Programming, I wrote a typechecker for it), here we can even solve optimization problems with dynamic programming!
Also there is a nice paper by G.Hutton about parsing with combinators in Haskell.
This was a really fun problem, thanks for suggesting it!
The calc_own_combi.hs file:
type Parser a = String -> Maybe (a, String)

dict = [('零', 0) ,('〇', 0) ,('一', 1) ,('二', 2) ,('三', 3) ,('四', 4) ,('五', 5) ,('六', 6) ,('七', 7) ,('八', 8) ,('九', 9), ('十',10), ('百',100)]

-- parse 1 character
char :: Parser Char
char [] = Nothing
char (x:xs) = Just(x, xs)

-- parse a chinese digit
cndigit :: Parser Char
cndigit = char <== isCNdigit
  where isCNdigit c = elem c $ map fst dict

-- parse a string literal
literal :: String -> Parser String
literal s [] = Nothing
literal s xs = if (head==s) then Just(head, tail)
                            else Just("", xs)
  where (head,tail) = splitAt (length s) xs

-- parse and evaluate the following terminal symbols
digit = cndigit ==> cnDigitToInt
  where cnDigitToInt d = head [snd x | x <- dict, fst x==d]
add  = literal "加"   ==> (\_ -> (+))
subt = literal "减"   ==> (\_ -> (-))
mult = literal "乘以" ==> (\_ -> (*))
divi = literal "除以" ==> (\_ -> div)
tens = literal "十"   ==> (\_ -> t)
  where t a b = a * 10 + b
hndrds = literal "百" ==> (\_ -> h)
  where h a b = a * 100 + b

-- inject a 1 into the parse in case people underspecify tens
inject1 :: Parser Integer
inject1 s = Just (1, s)

-- the grammar
expression = number <:> add  <::> number |||
             number <:> subt <::> number |||
             number <:> mult <::> number |||
             number <:> divi <::> number |||
             number
number = digit <:> (hndrds <::> (digit <:> tens <::> digit)) |||
         digit <:> tens <::> digit |||
         digit |||
         inject1 <:> tens <::> digit -- inject 1 to reuse the function

-- run the calculator as a repl
main = putStrLn "type ':q' to quit." >> repl
 where
  repl = do
         input <- getLine
         let result = printNum $ eval input
         if ((== ":q") input)
           then return ()
           else putStrLn (input ++ "等于" ++ result) >> repl

-- call the grammar to parse and evaluate
eval s = case expression s of
   Just (n,[]) -> n
   Just (n,xs) -> error $ "Could not parse input, got stuck on "++xs
   Nothing -> error $ "Could not parse input at all "++s

-- reencode a number into chinese
printNum x = h' ++ t' ++ o
 where o  = if ((h'/="" || t'/="") && tRest == 0) then "" else [intToCNDigit tRest]
       h' = printDigit h "百"
       t' = printDigit t "十"
       printDigit d c | d==0 = ""
                      | d==1 && c=="百" = '一':c
                      | d==1 = c
                      | otherwise = intToCNDigit d:c
       (t, tRest) = divMod hRest 10
       (h, hRest) = divMod x 100
       intToCNDigit d =  head [fst x | x <- dict, snd x==d]

-- the combinators:

-- return the result of the parser only if
-- it also satisfies the given predicate - like `with` in ADP
infix 7 <==
(<==) :: Parser a -> (a -> Bool) -> Parser a
(m <== p) s = case m s of
        Nothing     -> Nothing
        Just(a,s)  -> if p a then Just(a,s) else Nothing

-- alternative/or combinator
infixl 3 |||
(|||) :: Parser a -> Parser a -> Parser a
(m ||| n) s = case m s of
    Nothing -> n s
    ms -> ms

-- next/sequence combinator
-- reverse polish notation needs just this:
-- testRPExp = digit <:> (digit <:> add)
infixl 6 <:>
(<:>) :: Parser a -> Parser (a -> b) -> Parser b
(m <:> n) s = case m s of
    Nothing -> Nothing
    Just (a, s') -> case n s' of
        Nothing -> Nothing
        Just (b, s2) -> Just (b a, s2)

-- next/sequence combinator, right side
-- infix notation needs this second combinator:
-- testExp = digit <:> add <::> digit
infixl 5 <::>
(<::>) :: Parser (a->b) -> Parser a -> Parser b
(m <::> n) s = case m s of
    Nothing -> Nothing
    Just (a, s') -> case n s' of
        Nothing -> Nothing
        Just (b, s2) -> Just (a b, s2)

-- evaluate a parse result :)
infixl 5 ==>
(==>) :: Parser a -> (a -> b) -> Parser b
(m ==> n) s = case m s of
    Nothing -> Nothing
    Just (a, s') -> Just (n a, s')

Running it:
┌─[linse@yolocat]─[~/test]
└──╼ ghc -o calc calc_own_combi.hs
[1 of 1] Compiling Main             ( own_combi.hs, own_combi.o )
Linking calc ...
┌─[linse@yolocat]─[~/test]
└──╼ ./calc
type ':q' to quit.
二乘以八
二乘以八等于十六
:q

That's a cool command prompt.

Smalltalk (Smalltalk/X)
using a packrat parser (just a q&d hack, I guess, this could be done better, especially the number parsing; I was not 100% sure, when it is allowed to leave out zeros...).Also, I don't understand what "零 or 〇 → 0" means; does it mean "it must support both" or "I can choose to support either"?Anyway, if required, the d0 rule could be changed easily.For readability, the code is not golfified.
"/ parsing digits
d0 := ($零 asParser ==> [:c|0]).
d1 := ($一 asParser ==> [:c|1]).
d2 := ($二 asParser ==> [:c|2]).
d3 := ($三 asParser ==> [:c|3]).
d4 := ($四 asParser ==> [:c|4]).
d5 := ($五 asParser ==> [:c|5]).
d6 := ($六 asParser ==> [:c|6]).
d7 := ($七 asParser ==> [:c|7]).
d8 := ($八 asParser ==> [:c|8]).
d9 := ($九 asParser ==> [:c|9]).
t:= $十 asParser.
h:= $百 asParser.
d := d1|d2|d3|d4|d5|d6|d7|d8|d9.
"/ parsing numbers
n :=
    ((d,h,d,t,d) ==> [:a| (a first*100)+(a third *10)+a fifth])
    / ((d,h,d,t) ==> [:a| (a first*100)+(a third *10)])
    / ((d,h,d) ==> [:a| (a first*100)+(a third)])
    / ((d,h) ==> [:a| a first*100])
    / ((d,t,d) ==> [:a| (a first*10)+(a third)])
    / ((d,t) ==> [:a| a first*10])
    / ((t,d) ==> [:a| a second+10])
    / d0
    / d
    / (t ==> [:c|10])
    .
"/ operators
A:= ($加 asParser)==>[:c|#+].
S:= ($减 asParser)==>[:c|#-].
M := ($乘 asParser , $以 asParser)==>[:c|#*].
D:= ($除 asParser , $以 asParser)==>[:c|#/].

"/ times and quotient
T:= ((n,M,T) ==>[:a|(a first * a third)])
   / ((n,D,T) ==>[:a|(a first / a third)])
   / n
   .

"/ sum and difference
E:=((T,A,E) ==>[:n|(n first + n third)])
   / ((T,S,E) ==>[:n|(n first - n third)])
   / T
   .

"/ printing (number->string)
di:= #( $一 $二 $三 $四 $五 $六 $七 $八 $九).
P:=[:n|
  n>=100
    ifTrue:[ (di at:(n//100)),$百,(P value:(n\\100)) ]
    ifFalse:[
      n>20
        ifTrue:[ (di at:(n//10)),$十,(P value:(n\\10)) ]
        ifFalse:[
          n>10
            ifTrue:[$十,(P value:(n\\10))]
            ifFalse:[
              n==10
                ifTrue:[$十]
                ifFalse:[
                  n==0
                    ifTrue:[$零]
                    ifFalse:[(di at:n) ]]]]]].
"/ evaluate an expression and return numeric value
p:= (E end) ==> P.

"/ the calculator, parse, concatenate input,EQ,number string
calc:=[:s | s,'等于',(p parse:s)].

usage:
calc value:'二乘以八'.

-> '二乘以八等于十六'

The "零 or 〇 → 0" is actually underspecified. As originally posted, the question missed the zero entirely (and numbers like "一百零一" (101) were impossible). After that, the OP inserted 零 in the question, but did a comment with 〇. So I edited the question adding both, but which one to use is not clear. Anyway, since this is popularity-contest, it probably does not matter too much anyway, but you would be safer if you allow both forms.

Well, I decided to edit the question and pu it as 零 or 〇 → 0 (either form or both, you choose), so nobody will have trouble with this.

I tried writing this one in python:
import compiler
# encoding: utf-8

# python chinese calculator,

c2e = {('1','一'),('2','二'),('3','三'),('4','四'),('5','五'),('6','六'),('7','七'),('8','八'),('9','九'),('0','零')}

def tochi(eq):
    for en,ch in c2e:
        eq.replace(en,ch)
    return eq

def toen(eq):
    for en,ch in c2e:
        eq.replace(ch,en)
    return eq

if __name__ == "__main__":
    while True:
        eqin = raw_input('Equation with chinese numbers: ')
        eqin = toen(eqin)
        eqout = compiler.parse(eqin)
        eqout = tochi(eqout)
        print eqout

Try adding a # encoding: utf-8 line at the start

Actually, just # coding=utf-8 is enough. Python doesn't mind as long as the first or second line matches coding[:=]\s*([-\w.]+). On a side note, I recommend using Python 3 for new projects when possible. YMMV.

Also, it's a really bad idea to use input() in Python 2. It's not meant for numerical input, it's meant for evaluating Python code. Consider using raw_input() and parsing manually instead. (In Python 3, input() is equivalent to Python 2's raw_input(), and you use eval(input()) for the old functionality.)

Erm, I don't see where do you handle the chinese operators. Further, if I input a number like 十一 or 百, I don't think that it will do the right thing.

Once i saw the whole rules, i didnt feel like implementing that part

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


text:
Write a program that can draw 2-D shapes using ASCII or any other method
Rules (not too restrictive; flexible):
1.Must be able to draw shapes on command (e.g., I type in "square" and a square is drawn).
Minimum completed shapes that can be drawn on command: Square, Circle, Triangle, Pentagon.
2.Must also be able to also draw shapes vertex-by-vertex, specified by a command function that gives the user an input to determine line segment lengths between points in succession.
The program has to give the option to make polygons as well, but incomplete 2-D shapes, circles, unclosed planes, and non-polygons shall be allowed.
Winner: Most votes.

I only see two things wrong: What happens if the line segments do not make a polygon. E.g. 10, 50, 10. Other thing: Do you really want only ascii-art? If yes, why? Isn't graphical output ok?

@Victor It actually doesn't have to be only polygons, but I added an extra rule that the program must give the option to the user on whether or not the shapes must be polygons(e.g., a circle isn't a polygon). Also, it doesn't have to be only ASCII-art, so experimentation is welcome.

Rule# 1 is fairly trivial. Rule #2 is underspecified.  For polygons with more than three edges, the edge lengths do not constrain the shape of the resulting figure.

Next time, don't forget to run your question through the sandbox

Logo
Just install it!
Then things like triangles, squares, pentagons and circles are defined as:
to triangle :length
    polygon :length 3
end

to square :length
    polygon :length 4
end

to pentagon :length
    polygon :length 5
end

to circle :length
    polygon :length 360
end

to polygon :length :sides
    repeat :sides [forward :length right 360/:sides]
end

Easy peasy lemon squeezy...

You should do circle, triangle, and pentagon, too.

Okay, no problem. Done.


text:
Converting to Secret Language
Write some code in any language that inputs a string such as "Today is a great day" (Note that there is no punctuation) and converts it to the "Secret Language". Here are the rules for the "Secret Language".

a=c, b=d, c=e and so on (y=a and z=b)
separate each word by a space
make sure there is proper capitalization

Example:
Input: "Today is a great day"

Output: "Vqfca ku c itgcv fca"

It is a popularity-contest. Other users should give points by looking for most "to the point" yet "unique" code.
CHALLENGE:
I was looking up uncommon programming languages and I found a language called Piet (esolang). I challenge anyone to write it in this language.

Shouldn't that be x=z, y=a, z=b?

you are right "duh" :)

I was confused until I realized a=c is a -> c.

In other words, ROT2 it

Both rot13 and rot2 are both Caesar ciphers with different keys (13 and 2).

We are trying to make the code elegantly functional, right? I hope this does not descend into an obfuscation contest.

I went for the feature rich Python version :-)

Smalltalk (Smalltalk/X), 29 27 chars
I am lucky - it is already in the String class:
'Today is a great day' rot:2
    -> 'Vqfca ku c itgcv fca'

adding I/O, this makes it:
(Stdin nextLine rot:2)print

in the spirit of doorknob's obfuscated example below, how about:
Parser evaluate:('(Uvfkp pgzvNkpg tqv:2)rtkpvPN' rot:-2)

I never thought I'd see a Smalltalk solution!

Postscript
The HQ requires, that from now on all agents shall receive communication in printed form only (as electronic channels proved too unreliable) using special top secret font. It is your responsibility to include this top secret procedure into prologue of our printing software:
/define_Secret_font {
    /Secret_font
    /Coronet findfont dup
    /Encoding get
    aload pop 256 array astore
    /secret_proc {
        2 copy
        26 getinterval aload pop
        26 -2 roll 26 array astore
        putinterval
    } def
    dup 65 secret_proc
    dup 97 secret_proc
    exch dup length dict dup
    3 -1 roll {put dup} forall
    exch /Encoding 4 -1 roll put
    definefont pop
} def

And only that font is allowed, e.g.:
define_Secret_font
/Secret_font 36 selectfont
0 841 translate
20 -60 moveto
(Today is a great day) show
20 -120 moveto
(Programming Puzzles & Code Golf) show
showpage

And that's what it prints:

Ruby, obfuscated edition (with commentary included!)
I suggest reading the entire thing; I find it quite amusing ;)
$s='';class Module;def const_missing c

# MAGIC:
$s+="#{c}".split("#{$;}").map{|x|x.ord-8**2}.reduce(:"#{43.chr}").chr;end;end

              # My commentary ;)

ZZZY          # ?
YAYYY         # Oookay; you seem excited
Yaz           # Typo?
Yay           # Better
JEEEEEEF      # You misspelled Jeff's name
LAZZZY        # Yes, you are very lazy
Yax           # Another typo...
LLAMA         # Definitely not completely random at all...
EEEEEEEEEEEEE # Ouch my ears
IIIII         # Ouch stop
ASDFASDFASDF  # I SAID STOP BANGING ON THE KEYBOARD
YUMMY         # ... you eat keyboards?
IIIII         # Stop!
YUMMYY        # Why are you eating your keyboard
LLAMA         # That doesn't make sense :(
VV            # :(
LLAMA         # Could you stop saying that?!
CODEGOLF      # Yay, one of my favorite SE sites! :D
VW            # I don't drive
ASDFASDFASDF  # Why do you keep banging on your keyboard?!?!
EEEEEEEEEEEEE # No
VVV           # Stop
HELLOo        # ...it's a little late for a greeting, isn't it?
DOGS          # ...
OOOOOo        # No, you're not a ghost.
HELLOOOO      # Just a *bit* late.
NNNNNNN       # Huh?
LLAMA         # I said to stop.

print eval$s

Hints on how it works (spoilers, hover to show):

 This code builds a string and then evaluates it.

 It uses const_missing in order to build the string character by character.

 The string it ends up building is gets.tr'A-Za-z','C-ZABc-zab'.

The commentary reads like some of the chats in this question: http://codegolf.stackexchange.com/questions/20914/who-is-this-chatbot/20926#20926

bash
Classic.
tr A-Za-z C-ZABc-zab

Example:
$ tr A-Za-z C-ZABc-zab <<< "Today is a great day"
Vqfca ku c itgcv fca

I think you don't need the quotes.

@marinus You're right, I'll change it.

DFSORT (IBM Mainframe sorting program)
 OPTION COPY
 INREC BUILD=(1,80,TRAN=ALTSEQ)

No SORT control statement can start in column one.
For the above to work on its own, you'd have to change the default installation alternate translation table, to offset all values for upper- and lower-case letters, wrapping around the final two letters.
Without changing the default table, it would require an ALTSEQ statement listing all the required pairs of hex values (from-hex-code immediately followed by to-hex-code, each pair of hex values separated by a comma):
 OPTION COPY
 INREC BUILD=(1,80,TRAN=ALTSEQ)
 ALTSEQ CODE=(xxyy,...)

So to get upper-case EBCDIC A to C and B to D:
ALTSEQ CODE=(C1C3,C2C4)
For the whole thing, that would be a lot of error-prone typing, of course, so you'd use another SORT step to generate the control cards for this step, and let SORT read them from the dataset created by that new step.
Of course, for any language which supports a "translation table", it is as easy as changing the translation table. Nice COBOL program, with a specific Codepage, and it could be done in one line of COBOL procedure code (plus the obligatory lines of COBOL that go with everything... not so many in this particular case).
Oh, the 1,80 is the "card image" which will contain the text. Probably all in upper-case on the first run...

+1. Using DFSORT for ROT2 is really unique.

C, 75 bytes
main(c){while((c=getchar())>0)putchar(isalpha(c)?(c&224)+((c&31)+2)%26:c);}

Example:
$echo "Today is a great day" |./a.out
Vqfca ku c itgcv fca

assuming EOF is -1 you may use the bitwise not ~(c=getchar()) to save 1 char

and since the question says there are no punctuations the only non-alphabetical character is space, so you may test for it with c-32 instead, which saves you 6 chars

This is a popularity contest and not code-golf

Code golf is antithetical to popularity now?

@user689 you're right, sorry I didn't read the question carefully. Since this code is written in a single line with ternary operator and no int, and even a char count is provided, I somehow assumed that it was code golf. Sorry.

Java, it's actually understandable.
I know that anything with whitespace and parentheses has a hard time on CG, but here's a shot.
    class SecretLanguage {

    public static void main(String[] args) {
    for (String S : args) {
        for (char s : S.toCharArray()) {
        System.out.print((char) (s + ((s < 'y') ? 2 : -24)));
        }
        System.out.print(" ");
    }
    }
}

There are separate contests for obfuscating code, but I can make mine ridiculous too.
class S{public static void main(String[]args){for(String str:args){for(char i:(str).toCharArray())System.out.print((char)(i+((i<'y')?2:-24)));System.out.print(" ");}}

PHP
Not the shortest one though!
Live example: https://eval.in/102173
<?php
$str = 'Today is a great day';
$out = implode('', array_map(function ($val) {
  if ($val == ' ') return ' ';
  $c = ord($val)+2;

  if (ctype_lower($val)) {
    if ($c > ord('z')) {
      return chr(ord('`') + ($c - ord('z')));
    }
    return chr($c);
  }
  else {
    if ($c > ord('Z')) {
      return chr(ord('A') + ($c - ord('Z')));
    }
    return chr($c);
  }
}, str_split($str)));

var_dump($out);

Note:
ord('`') = ord('a') - 1

TI-Basic (the language that runs on TI-83 graphing calculators)
:ClrHome
:" abcdefghijklmnopqrstuvwxyz" //all symbols that can be interpreted
:Ans+Ans+Ans->Str1
:Menu("crippter","encript",1,"decript",2
:Lbl 2
:1->C
:Lbl 1
:if not(C)
:Imput ">",Str2
:if C
:Imput "<",Str2
:length(Str2)->D
:lenght(Str1)/3->E
:if not(C)
:Then
:randInt(1,E)->B
:sub(Str1,B,1)->Str3
:Else
:inString(Str1,sub(Str2,1,1),1)->B
":"->Str3
:For(X,1+C,D
:inString(Str1,sub(Str2,X,1)->A
:if not(C
:A+E-B-X->A
:if C
:A+B+X-1->A
:Str3+sub(Str1,A,1)->Str3
:End
:if C
:sub(Str3,2,D-1)->Str3
:Pause Str3
:Goto A

This is some nice encryption software (for a TI-83). By ti-83 I mean any calculator in the ti-83 or ti-84 family. "->" means "STORE" accessed by "STO>"

This doesn't work, at least on the TI-84 family -- // doesn't define comments (in fact, there is no way to get comments), every If requires a Then, and it's impossible to have a line that doesn't start with a colon (as you have with ":"->Str3).

Ruby 40 32
p gets.tr("A-XY-Za-xy-z","C-ZA-Bc-za-b")

update (as seen from danieros bash solution):
p gets.tr("A-Za-z","C-ZABc-zab")

I think I'll ROT2 it!
Javascript
function r(a,b){return++b?String.fromCharCode((a<"["?91:123)>(a=a.charCodeAt()+2)?a:a-26):a.replace(/[A-z]/g,r)}

console.log(r('Qccipcr'));

I thought about something like that at first, but I never thought of [A-z]!

Python
a = list('abcdefghijklmnopqrstuvwxyz')
b = list('yzabcdefghijklmnopqrstuvwx')

c = {}

#generate conversion dictionary

for i in range(len(a)):
    c[a[i]] = b[i]

instring = "the weather is very nice today"

outstring = ""

for i in list(instring):
    try:
        outstring += c[i]
    except:
        outstring += i

print outstring

Output:
rfc ucyrfcp gq tcpw lgac rmbyw

(1) It's +3, right? (2) You could inline a lot of stuff to make it more complicated. (that seems to be a trend here)

b = a[2:] + a[:2] would be less typo-prone, and there seems to be no need to convert the string a to a list

oh, and c = dict(zip(a,b)). And the except shouldn't be so generic, use an except KeyError

str concatenation is super slow. Create a list and join them together would be much better.

Javascript
var str = '';
var textInput = 'myString';
for (var i = 0; i < textInput.length; i++) {
    str += textInput.charAt(i).replace(/([a-zA-Z])[^a-zA-Z]*$/, function (a) {
        var c = a.charCodeAt(0);
        switch (c) {
            case 89:
                return 'A'; //Letter Y!
            case 90:
                return 'B'; //Letter Z!
            case 121:
                return 'a'; //Letter y!
            case 122: //Letter z!
                return 'b';
            default:
                return String.fromCharCode(c + 2); //If not y, Y, z, or Z, then just two more from the usual char code
        }
    })
}
console.log(str);

What with all the comments, my hamster can understand this.

JavaScript
// setup alphabet and secret rotated alphabet
//
var alpha=' abcdefghijklmnopqrstuvwxyz'
var rotor=' cdefghijklmnopqrstuvwxyzab'
alpha+=alpha.toUpperCase()
rotor+=rotor.toUpperCase()

function encrypt(str) {
 return crypt(str, alpha, rotor)
}

function decrypt(str) {
 return crypt(str, rotor, alpha)
}

// swap position of char from one dictionary to the other
function crypt(msg, d1, d2) {
 var out=''
 var len=str.length
 for(var i=0; i < len; i++) {
  var c = msg.charAt(i)
  var j = d1.indexOf(c)
  out += d2.charAt(j)
 }
 return out
}

Python 2.x
An attempt at a feature rich Python solution.
Features:

the use of a dict
handling the list in a circular way, so that shift=2 can be varied
you can also use it to decipher when you know shift (just use minus), it'll also allows you to test your output.
ability to add "shifting scopes" -- scopes in which you cycle
option to either be strict for undefined characters, or just return the undefined input character.
a secret language leaves no trace ;)

Here goes:
# Shifting scopes
lower_case = map(chr, range(97, 123))
upper_case = map(chr, range(65, 91))
space = [" "] # space will always be transformed to space

def secret(instring, shift, scopes, strict=False):
    def buildTranslationDict(scores):
        translation_dict = {}
        for scope in scopes:
            for index in range(len(scope)):
                translation_dict[scope[index]] = scope[(index+shift) % len(scope)]
        return translation_dict
    translation_dict = buildTranslationDict(scopes)
    # Use the translation dictionary to transform input
    output = ""
    for char in instring:
        if strict:
           output += translation_dict[char]   # will crash if unexpected char
        else:
            try:
               output += translation_dict[char]
            except:
               output += char
    return output

Proof:
secret(instring="Today is a great day", shift=2, scopes=[lower_case, upper_case, space])
'Vqfca ku c itgcv fca'

Can you decipher 'Wrpruurz lv qrw edg hlwkhu!' :) ?

Just curious, do you consider adding this extra "strict" feature "not to the point"?

It would save 6 lines of code...

Are you talking to yourself or am I missing something? Like deleted comments?

Yup deleted, please do not delete your comment as well...

Haskell
Here's a lens based implementation. I'm using Iso to represent the isomorphism between regular text and text converted into the secret language. Unless you provide the --from option, the input is converted into the secret language. If the --from option is provided, the opposite conversion is performed.
module Main where
import Control.Lens
import System.Environment (getArgs)
import Data.Char          (ord, chr, isUpper, isSpace)
import Data.Word          (Word8)

ord8 :: Char -> Word8
ord8 = fromIntegral . ord

chr8 :: Word8 -> Char
chr8 = chr . fromIntegral

ordIso :: Iso' Char Word8
ordIso = iso ord8 chr8

firstLetterOrd :: Word8 -> Word8
firstLetterOrd n
  | n ^. from ordIso . to isUpper = ord8 'A'
  | otherwise                     = ord8 'a'

secretChar :: Iso' Char Char
secretChar =
  iso toSecret
      fromSecret
  where
    toSecret, fromSecret :: Char -> Char
    toSecret   = secretConversion   2
    fromSecret = secretConversion (-2)

secretConversion :: Int -> Char -> Char
secretConversion n c
  | isSpace c = c
  | otherwise = c & over ordIso (secretShift n)

secretShift :: Int -> Word8 -> Word8
secretShift shiftAmount =
  preserveLetters $ (`mod` 26) . (+ shiftAmount)

preserveLetters :: (Int -> Int) -> Word8 -> Word8
preserveLetters fn n =
  firstLetter + overWord8 fn (n - firstLetter)
  where
    firstLetter = firstLetterOrd n

overWord8 :: (Int -> Int) -> Word8 -> Word8
overWord8 fn = fromIntegral . fn . fromIntegral

help :: IO ()
help =
  putStr
  $ unlines
      ["SecretLang [--from]"
      ,"If the --from option is provided, the program"
      ,"converts from the secret language. Otherwise,"
      ,"it converts to the secret language."
      ]

convertContents :: (String -> String) -> IO ()
convertContents fn = do
  input <- getContents
  putStrLn . ("Output: " ++) $ fn input

main :: IO ()
main = do
  args <- getArgs

  case args of
    ("--from":_) ->
      convertContents (^. mapping (from secretChar))

    ("--help":_) -> help
    ("-h"    :_) -> help

    _            ->
      convertContents (^. mapping secretChar)

Examples:
$ ./SecretLang
Today is a great day
Output: Vqfca ku c itgcv fca

$ ./SecretLang --from
Vqfca ku c itgcv fca
Output: Today is a great day

Powershell
$chars = [int]('a')[0]..[int]('z')[0] | %{ [char]$_, [char]::ToUpper([char]$_) }

$y = $args[0].ToCharArray() | %{
    $idx = $chars.indexOf($_);
    if ($idx -ge 0) {
        $chars[($idx + 4) % 52]
    } else  {
        $_
    }
}

-join [char[]]$y

Output:
PS C:\Temp> .\z.ps1 "Today is a great day"
Vqfca ku c itgcv fca
PS C:\Temp>

C
    #include<stdio.h>

    int main()
    { char p[256];
    int i;
    fgets ( p, 256, stdin );
    for(i=0; i<256 ; i++)
    {
   if ( p[i] == '\n' )
    {
    p[i] = '\0';
    break;
    }
    else
    {

    if((p[i] >= 'a' && p[i] <= 'x') || (p[i] >= 'A' && p[i] <= 'X') )
    {
        p[i] +=2;
    }

    else
    {
    switch(p[i])
     {
        case 'y':    p[i] = 'a';
                     break;

       case 'Y':    p[i] = 'A';
                     break;

       case 'z':    p[i] = 'b';
                     break;
       case 'Z':    p[i] = 'B';
                     break;
       case ' ':    p[i] = ' ';
                     break;

     }
    }
}}

printf("%s", p);

    return 0;
 }

you can save a lot of code by using modulu arithmetic on the chars...

@blabla999 this is a popularity contest and not code-golf

sorry - not meant to offend. I overlooked that.

EcmaScript 6:
alert(prompt(_='').split(_).map(x=>String.fromCharCode(x.charCodeAt()+(x>' '?x>'x'|x>'X'&x<'['?-24:2:0))).join(_))

EcmaScript, my devolved ol' enemy

JAVA
32 is space so we print it out as is
88 is X so anything less than 89 moves up 2 characters
90 is Z so anything less than 91 moves down 24 characters (with anything less than 89 already handled so only 89 and 90 effectively)
Repeat same process for lowercase letters, ranging from 97 as a to 122 as z.
void secret(String s) {
    for (char c : s.toCharArray()) {
        System.out.print((char)(c == 32 ? c : c < 89 ? c + 2 : c < 91 ? c - 24 : c < 121 ? c + 2 : c - 24));
    }
}

PHP
This solution is rather boring:
echo strtr('Today is a great day','ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz','CDEFGHIJKLMNOPQRSTUVWXYZABcdefghijklmnopqrstuvwxyzab');

Python 3
I think i didn't quite understand the question, but anyway:
alphabet = "abcdefghijklmnopqrstuvwxyz"
rot = alphabet[2:] + alphabet[:2]
rot = rot + rot.upper()
alphabet = alphabet + alphabet.upper()

def encode_letter(letter):
    return rot[alphabet.index(letter)]

def encode_word(word):
    return "".join(encode_letter(letter) for letter in word)

def encode_string(string):
    return " ".join(encode_word(word) for word in string.split())

print("Output: " + encode_string(input("Input: ")))

JavaScript (V8)
t=>t.replace(/./g,d=>/[a-z]/i.test(d)?((parseInt(d,36)-8)%26+10).toString(36)[/[A-Z]/.test(d)?"toUpperCase":"valueOf"]():d)

This is code golf, short is popular.

Python 3
# To understand recursion, go to the bottom of the program

from string import ascii_letters

translate_table = {
    c: chr(ord(c) + 2) for c in ascii_letters
}

def translate_helper(string):
    if len(string) == 1:
        if string not in {"y", "z"}:
            return translate_table[string]
        else:
            return "a" if string == "y" else "b"
    else:
        return translate_helper(string[:-1]) + translate_helper(string[-1])

def translate(string):
    return " ".join(map(translate_helper, string.split(" ")))

print(translate("Today is a great day"))

# To understand recursion, go to the top of the program

Javascript, 255 bytes
const sl = text =>
  text
    .split(" ")
    .map(word =>
      word
        .split("")
        .map(c => String.fromCharCode(c.charCodeAt(0) + (c < "y" ? 2 : -24)))
        .join("")
    )
    .join(" ");

console.log(sl("Today is a great day"));

Welcome to Code Golf! There's a lot of byte saves possible here, like removing whitespace and shortening variable names (like changing word to w). I'd recommend checking out our Tips for Golfing in JavaScript for more!

Vyxal
@rotate:letter|
 kL ←letter c [
   ←letter \Y = [
     \A | ←letter \y = [
       \a | ←letter \Z = [
         \B | ←letter \z = [
           \b | ←letter C 2 + C
         ]
       ]
     ]
   ] | ←letter
 ]
;

`Today is a great day`f °rotate; M ¤j

Try it Online!
Finally, a chance to use the more obscure features of Vyxal! Behold the beauty of named functions, variables, if-else chains and function references. I also got to make good use of the codemirror functionality built into the online interpreter for once.
Also, I know caird said not to, but I answered anyway, because I never get the chance to properly show off the cooler stuff of my esolang.

Extended BrainFuck
Since this is a popularity contest I've written this with the intention
of it being as easy to follow as EBF can be. It's heavily commented and
I've intentionally used macros to make the program flow more literal.
Probably the most difficult thing here is the main switch since EBF doesn't have any special means of doing it so it's in reality no simpler than how one would do it in BrainFuck except for the variables and balancing parentheses.
;;;; rot2.ebf : Perform rot2 on ascii text
;;;; Usage: bf ebf.bf < rot2.ebf > rot2.bf
;;;;        echo "Today is a great day" | bf rot2.bf
;;;;        # => Vqfca ku c itgcv fca
;;;;
;;;; BF interpreter/Compiler requirement:
;;;; Wrapping cells at any size (allmost all of them do)
;;;;

;;; Memory map
:tmp    ; a temporary cell used for the read routine
:input  ; a copy of the input for output purposes
:switch ; a copy of the input for the switch statements
:flag   ; flag to indicate the predicate has been processed or not

;;; Macros
;; Ultracompatible read
;; supports EOF 0, -1 and no change
{read_tmp
  $input+
  $tmp(-),
  [+[-$input-]] ; blanks for all EOFs
  $switch [
    @input &clear
    $switch
  ]
}

;; for the switch we need
;; to do destructive testing
;; and we need to preserve the
;; original as well.
{copy_input
  $tmp(-$input+$switch+)
}

;; clears the cell
{clear (-)}

;; prints current cell
{print .}

;;; Main proram
;;; flow starts here
&read_tmp
while $tmp not eof
(
  &copy_input
  $flag+
  $switch 10-(22-(
    ;; not linefeed/space
    $switch 57-(-(31-(-(
       ;; default: not wrapping
       &clear
       $flag-
       $input 2+))))
    $flag (-
       ;; wrapping
       $input 24-)))
  $flag &clear
  $input &print &clear
  &read_tmp
)
;;; End

Javascript
var STR = "Today is a great day";
//so i can replace chars at a index in the string
String.prototype.replaceAt=function(i, char) {
    var a = this.split("");
    a[i] = char;
    return a.join("");
}

function secretIt( str ){
    for( var i = 0; i < str.length; i++ ) {
        var c = str.charCodeAt( i );
        /**
        * check for spaces first
        * check if get outside of the letter range for both lower and upper
        * if we dont go then were good
        * if so go back 26 chars
        */
        str = str.replaceAt( i, String.fromCharCode( ( c == 32 ) ? c : ( ( c = c + 2 ) > 91 && c < 97 || c < 123 ) ? c : c - 26 ) ) ;
    }
    return str;
}

console.log( secretIt( "Qsncp qcapcr ambc" ), ' ' , secretIt( STR ));

C# 5KB

(381 chars)

391
using System;
namespace WinHelper {
    class P {
        static void Main(string[] args) {
            char[] f =  "abcdefghijklmnopqrstuvwxyz ".ToCharArray();
            char[] g =  "cdefghijklmnopqrstuvwxyzab ".ToCharArray();

            foreach (char c in Console.ReadLine().ToCharArray().ToLower())
                Console.Write(g[Array.FindIndex(f, a => a == c)]);
        }
    }
}

Compiled size (5KB) doesn't matter. For code-golf the number of chars (of sourcecode) usually counts, but since this particular challenge is a popularity contest and not code-golf the chars/size doesn't matter at all. Hover your mouse over the popularity contest badge beneath the challenge (you'll see a tooltip explaining it: "A popularity-contest is a competition where the correct answer with the most upvotes wins, usually the most creative answer").

Also, it crashes on the challenge's example input Today is a great day since it doesn't support uppercase letters.

C#, 163
Yes, this is not code-golf. I went for shortest anyway (or at least, made a first stab at it)
using System.Linq;class P{static void Main(string[]a){System.Console.WriteLine(string.Concat(a[0].Select(c=>(char)(c==32?c:c<89?c+2:c<91?c-24:c<121?c+2:c-24))));}}

Formatted:
using System.Linq;
class P
{
    static void Main(string[] a)
    {
        System.Console.WriteLine(string.Concat(a[0].Select(c => (char)(c == 32 ? c : c < 89 ? c + 2 : c < 91 ? c - 24 : c < 121 ? c + 2 : c - 24))));
    }
}

Yes, I did have a peek at ufis' answer.

Q
{x^(raze a!'rotate[2] each a:.Q`a`A)x}

Which Q language? http://q-lang.sourceforge.net/ or https://en.wikipedia.org/wiki/Q_%28programming_language_from_Kx_Systems%29 or something else?

Java
void sl(String s){
    for (char c: s.toCharArray()){
        char l = Character.toLowerCase(c);
        System.out.print((char)(c + (l < 'y'? l < 'a'? 0: 2: -24)));
    }
}

I would say this is very similar to this answer: http://codegolf.stackexchange.com/a/21002/12205

...and I would agree with you :P

Bash, 8 characters
...if you happen to have the bsdgames package installed! Reads from standard input.
caesar 2

Example
echo Today is a great day|caesar 2

Output: Vqfca ku c itgcv fca

C
#include <stdio.h>
char c[100];
int main()
{
gets(c);
char *p=c,x;
while(*p)
{
    x=*p;
    if(x>='a'&&x<='z')
    {
        *p=((*p-'a'+2)%(26)+'a');
    }
    if(x>='A'&&x<='Z')
    {
        *p=((*p-'A'+2)%(26)+'A');
    }

    p++;
}
puts(c);
}

Brainfuck
Must have (at least) 7-bit wrapping cells to work.
+[>,>+++++[<------>-]>[<<++++++++++++++++++++++++++++++.>>>+<]>-[<<<++++++++++++++++++++++++++++++++.[-]]<]

Infinite input loop +[
Get input >,
Make a loop to get number 30 >+++++[<------>-]>
If the symbol is a space, output the space [<<++++++++++++++++++++++++++++++.>>>+<]>-
Otherwise, shift the ASCII value by two and output [<<<++++++++++++++++++++++++++++++++.[-]]<
Get more input ]

Timtech, you really like posting esoteric solutions without explaining what they do. When posting your answers, don't forget the explanation.

-30 will always be true so it will just output the first character as is infinitely.

@Quincunx Explanation added.

@Sylwester Fixed.

Still doesn't work. Today is a great day turns into Vqfc{"ku"c"itgcv"fc{ instead of Vqfca ku c itgcv fcawhich means it doesn't wrap at yY and spaces are translated too.

@Sylwester You need to use 7-bit wrapping cells

@Timtech Very unusual cell size and I read at least as it would have to be a minimum. Where do you get a 7 bit interpreter?

@Sylwester It can be eight or more, they just have to wrap. That's a requirement.

@Timtech 8 bit wrapping I can do and my interpreter is still printing Vqfc{"ku"c"itgcv"fc{ instead of Vqfca ku c itgcv fca.