Project Euler #019
forked from Project Euler #018 (diff: 70)
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/DEk2
*/
// forked from hycro's Project Euler #018
package {
import flash.display.Sprite;
import flash.text.TextField;
public class ProjectEuler extends Sprite {
private var _textField:TextField;
public function ProjectEuler() {
initialize();
writeAnswer(new Problem019);
}
private function writeAnswer(problem:AbstractProblem):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 AbstractProblem {
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 Problem019 extends AbstractProblem {
override protected function solve() : Number {
var answer:Number = 0;
var year:uint = 1901;
var month:uint = 1;
var totalDays:uint = 1;
while (year < 2001) {
if (totalDays % 7 == 6) {
answer++;
}
totalDays += getDaysOfMonth(year, month);
month = month < 12 ? month + 1 : (year++, 1);
}
return answer;
}
// 日数を取得
private function getDaysOfMonth(year:uint, month:uint):uint {
switch (month) {
case 2:
return isLeap(year) ? 29 : 28;
case 4:
case 6:
case 9:
case 11:
return 30;
default:
return 31;
}
}
// システムが year を閏年として認識しているかどうか
private function isLeap(year:uint):Boolean {
return !(year % 4) && (year % 100) || !(year % 400);
}
}