Na, bitte. Das Golfen der Version bevor es kaputt ging, aber jetzt sind wir wieder online. Ich bin mir sicher, dass man weiter Golf spielen kann. Ich werde morgen weiter daran arbeiten. Es war schwer genug, es richtig zum Laufen zu bringen, ohne es zu spielen, und meine Augen haben es satt, es anzustarren. Haha
Java - 3220
import java.util.*;class a{int D=0,i,l,j;static boolean T=true,F=false;enum O{A("plus"),S("minus"),M("times"),D(""),P("point");String t;O(String u){t=u;}double p(double f,double s){if(this==A)f+=s;if(this==S)f-=s;if(this==M)f*=s;if(this==D)f/=s;return f;}static O f(String s){O r=null;for(O o:values())if(s.equals(o.t))r=o;return r;}}enum N{A("zero",0,F),B("one",1,F),C("two",2,F),D("three",3,F),E("four",4,F),AG("five",5,F),G("six",6,F),H("seven",7,F),I("eight",8,F),J("nine",9,F),K("ten",10,F),L("eleven",11,F),M("twelve",12,F),N("thirteen",13,F),O("fourteen",14,F),P("fifteen",15,F),Q("sixteen",16,F),R("seventeen",17,F),S("eighteen",18,F),AH("nineteen",19,F),U("twenty",20,F),V("thirty",30,F),W("forty",40,F),X("fifty",50,F),Y("sixty",60,F),Z("seventy",70,F),AA("eighty",80,F),AB("ninety",90,F),AC("hundred",100,T),AD("thousand",1000,T),AE("million",1000000,T),AF("billion",1000000000,T);String t;double v;boolean q;N(String u,int w,boolean r){t=u;v=w;q=r;}static N f(String s){N r=null;for(N n:values())if(s.equals(n.t))r=n;return r;}static N f(char s){return d(q(""+s));}static N d(double v){N r=null;for(N n:values())if(v==n.v)r=n;return r;}static String c(double n){return d(n).t;}}public static void main(String[]a){new a();}a(){while(T){try{List p=p(new Scanner(System.in).nextLine()),t=new ArrayList();double d=0;for(j=0;j<p.size();j++){Object o=p.get(j);if(o(o)){if((O)o==O.P){t.add((d(t.get(t.size()-1))+((d=d(p.get(j+1)))<10?d*=100:d<100?d*=10:d)/1000));t.remove(t.size()-2);j++;}else t.add(o);}else {N n=N.d(d(o));if(n!=null&&n.q){t.add((d(o))*d(t.get(t.size()-1)));t.remove(t.size()-2);}else t.add(o);}}double r=d(t.get(0));for(j=1;j<t.size();j++){Object c=t.get(j),l=t.get(j-1);if(o(c))continue;if(c instanceof Double&&l instanceof Double)r+=d(c);else r=((O)t.get(j-1)).p(r,d(t.get(j)));}System.out.println(p(r));}catch(Exception e){System.out.println("E");}}}List p(String s) {List r=new ArrayList();Scanner i=new Scanner(s);while(i.hasNext()){String c=i.next();if(c.equals("divided")){r.add(O.D);i.next();}else if(c.indexOf("-")!=-1){String[] num=c.split("-");r.add(N.f(num[0]).v+N.f(num[1]).v);}else{Object o=N.f(c);r.add(o!=null?((N)o).v:O.f(c));}}return r;}String p(double n){String a=String.valueOf(n),w,d=null,b="";l=a.indexOf(".");if(l!=-1){w=a.substring(0,l);d=a.substring(l+1);}else w=a;if(d.equals("0"))d=null;D=0;while(w.length()%3!=0)w=" "+w;for(i=w.length();i>0;i-=3,D++)b=w(w.substring(i-3,i))+b;return b+d(d);}String w(String w) {if(w==null)return "";w=w.trim();String b="";l=w.length();if(l>1&&w.charAt(l-2)!='0'){if(w.charAt(l-2)=='1')b=N.d(q(w.substring(l-2))).t;else b+=N.d(q(w.charAt(l-2)+"0")).t+"-"+N.f(w.charAt(l-1)).t;}for(j=(b.equals("")?l-1:l-3);j>-1;j--){N n=N.f(w.charAt(j));if(n==N.A)continue;if(j==l-1)b=n.t;else if(j==l-2)b=N.f(n.t+"0")+"-"+b;else if(j==l-3)b=n.t+" hundred "+b;}if(!b.trim().equals("")){if(D==1)b+=" thousand ";if(D==2)b+=" million ";if(D==3)b+=" billion ";}return b;}String d(String d) {if(d==null)return"";if(d.length()>3)d=d.substring(0,3);String b = " point ";for(char n:d.toCharArray())b+=N.f(n).t+" ";return b;}boolean o(Object o){return o instanceof O;}Double d(Object o){return (Double)o;}static double q(String s){return Double.parseDouble(s);}}
Mit Zeilenumbrüchen und Tabulatoren
import java.util.*;
class a{
int D=0,i,l,j;
static boolean T=true,F=false;
enum O{
A("plus"),
S("minus"),
M("times"),
D(""),
P("point");
String t;
O(String u){
t=u;
}
double p(double f,double s){
if(this==A)f+=s;
if(this==S)f-=s;
if(this==M)f*=s;
if(this==D)f/=s;
return f;
}
static O f(String s){
O r=null;
for(O o:values())if(s.equals(o.t))r=o;
return r;
}
}
enum N{
A("zero",0,F),
B("one",1,F),
C("two",2,F),
D("three",3,F),
E("four",4,F),
AG("five",5,F),
G("six",6,F),
H("seven",7,F),
I("eight",8,F),
J("nine",9,F),
K("ten",10,F),
L("eleven",11,F),
M("twelve",12,F),
N("thirteen",13,F),
O("fourteen",14,F),
P("fifteen",15,F),
Q("sixteen",16,F),
R("seventeen",17,F),
S("eighteen",18,F),
AH("nineteen",19,F),
U("twenty",20,F),
V("thirty",30,F),
W("forty",40,F),
X("fifty",50,F),
Y("sixty",60,F),
Z("seventy",70,F),
AA("eighty",80,F),
AB("ninety",90,F),
AC("hundred",100,T),
AD("thousand",1000,T),
AE("million",1000000,T),
AF("billion",1000000000,T);
String t;
double v;
boolean q;
N(String u,int w,boolean r){
t=u;
v=w;
q=r;
}
static N f(String s){
N r=null;
for(N n:values())if(s.equals(n.t))r=n;
return r;
}
static N f(char s){
return d(q(""+s));
}
static N d(double v){
N r=null;
for(N n:values())if(v==n.v)r=n;
return r;
}
static String c(double n){
return d(n).t;
}
}
public static void main(String[]a){
new a();
}
a(){
while(T){
try{
List p=p(new Scanner(System.in).nextLine()),t=new ArrayList();
double d=0;
for(j=0;j<p.size();j++){
Object o=p.get(j);
if(o(o)){
if((O)o==O.P){
t.add((d(t.get(t.size()-1))+((d=d(p.get(j+1)))<10?d*=100:d<100?d*=10:d)/1000));
t.remove(t.size()-2);
j++;
}
else t.add(o);
}
else {
N n=N.d(d(o));
if(n!=null&&n.q){
t.add((d(o))*d(t.get(t.size()-1)));
t.remove(t.size()-2);
}
else t.add(o);
}
}
double r=d(t.get(0));
for(j=1;j<t.size();j++){
Object c=t.get(j),l=t.get(j-1);
if(o(c))continue;
if(c instanceof Double&&l instanceof Double)r+=d(c);
else r=((O)t.get(j-1)).p(r,d(t.get(j)));
}
System.out.println(p(r));
}
catch(Exception e){
System.out.println("E");
}
}
}
List p(String s) {
List r=new ArrayList();
Scanner i=new Scanner(s);
while(i.hasNext()){
String c=i.next();
if(c.equals("divided")){
r.add(O.D);
i.next();
}
else if(c.indexOf("-")!=-1){
String[] num=c.split("-");
r.add(N.f(num[0]).v+N.f(num[1]).v);
}
else{
Object o=N.f(c);
r.add(o!=null?((N)o).v:O.f(c));
}
}
return r;
}
String p(double n){
String a=String.valueOf(n),w,d=null,b="";
l=a.indexOf(".");
if(l!=-1){
w=a.substring(0,l);
d=a.substring(l+1);
}
else w=a;
if(d.equals("0"))d=null;
D=0;
while(w.length()%3!=0)w=" "+w;
for(i=w.length();i>0;i-=3,D++)b=w(w.substring(i-3,i))+b;
return b+d(d);
}
String w(String w) {
if(w==null)return "";
w=w.trim();
String b="";
l=w.length();
if(l>1&&w.charAt(l-2)!='0'){
if(w.charAt(l-2)=='1')b=N.d(q(w.substring(l-2))).t;
else b+=N.d(q(w.charAt(l-2)+"0")).t+"-"+N.f(w.charAt(l-1)).t;
}
for(j=(b.equals("")?l-1:l-3);j>-1;j--){
N n=N.f(w.charAt(j));
if(n==N.A)continue;
if(j==l-1)b=n.t;
else if(j==l-2)b=N.f(n.t+"0")+"-"+b;
else if(j==l-3)b=n.t+" hundred "+b;
}
if(!b.trim().equals("")){
if(D==1)b+=" thousand ";
if(D==2)b+=" million ";
if(D==3)b+=" billion ";
}
return b;
}
String d(String d) {
if(d==null)return"";
if(d.length()>3)d=d.substring(0,3);
String b = " point ";
for(char n:d.toCharArray())b+=N.f(n).t+" ";
return b;
}
boolean o(Object o){
return o instanceof O;
}
Double d(Object o){
return (Double)o;
}
static double q(String s){
return Double.parseDouble(s);
}
}
two plus two minus five times five divided by negative zero point five->2 + 2 - 5 * 5 / -0.5->54.