Project Euler #017
forked from Project Euler #016 (diff: 268)
ActionScript3 source code
/**
* Copyright hycro ( http://wonderfl.net/user/hycro )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/r4UN
*/
// forked from hycro's Project Euler #016
package {
import flash.display.Sprite;
import flash.text.TextField;
public class ProjectEuler extends Sprite {
private var _textField:TextField;
public function ProjectEuler() {
initialize();
writeAnswer(new Problem017);
}
private function writeAnswer(problem:AbstructProblem):void {
var answer:String = problem.getAnswer();
_textField.appendText(answer);
}
private function initialize():void {
_textField = new TextField();
_textField.width = stage.stageWidth;
_textField.height = stage.stageHeight;
addChild(_textField);
_textField.wordWrap = true;
}
}
}
class AbstructProblem {
final public function getAnswer():String {
var answer:String;
try {
answer = solve().toString();
} catch (err:Error) {
answer = err.getStackTrace();
}
return answer;
}
protected function solve():Number {
throw new Error("unsolved");
}
}
class Problem017 extends AbstructProblem {
override protected function solve() : Number {
var answer:Number = 0;
for (var num:uint = 1; num <= 1000; num++) {
answer += toEnglish(num).length;
}
return answer;
}
private function toEnglish(n:uint):String {
switch (n) {
case 0:
return "";
case 1:
return "one";
case 2:
return "two";
case 3:
return "three";
case 4:
return "four";
case 5:
return "five";
case 6:
return "six";
case 7:
return "seven";
case 8:
return "eight";
case 9:
return "nine";
case 10:
return "ten";
case 11:
return "eleven";
case 12:
return "twelve";
case 13:
return "thirteen";
case 14:
return "fourteen";
case 15:
return "fifteen";
case 16:
return "sixteen";
case 17:
return "seventeen";
case 18:
return "eighteen";
case 19:
return "nineteen";
case 20:
return "twenty";
case 30:
return "thirty";
case 40:
return "forty";
case 50:
return "fifty";
case 60:
return "sixty";
case 70:
return "seventy";
case 80:
return "eighty";
case 90:
return "ninety";
case 1000:
return "onethousand";
default:
if (n < 100) {
return toEnglish(n-n%10) + toEnglish(n%10);
} else {
if (n % 100) {
return toEnglish(n/100) + "hundredand" + toEnglish(n % 100);
} else {
return toEnglish(n/100) + "hundred";
}
}
}
}
}