Solved ProjectEuler/019: php, ruby

This commit is contained in:
FuryFire 2012-03-09 13:48:12 +01:00
parent 6a3906b838
commit e689e807da
3 changed files with 72 additions and 0 deletions

25
ProjectEuler/019/desc.yml Normal file

@ -0,0 +1,25 @@
title: How many Sundays fell on the first of the month during the twentieth century?
url: http://projecteuler.net/problem=19
desc: |
You are given the following information, but you may prefer to do some research for yourself.
1 Jan 1900 was a Monday.
Thirty days has September,
April, June and November.
All the rest have thirty-one,
Saving February alone,
Which has twenty-eight, rain or shine.
And on leap years, twenty-nine.
A leap year occurs on any year evenly divisible by 4, but not on a century unless it is divisible by 400.
How many Sundays fell on the first of the month during the twentieth century (1 Jan 1901 to 31 Dec 2000)?
solution: Instead of using buildtin DateTime language features this use a homemade algorithm
solutions:
solve.php:
desc: Basic solution
language: php
solve.rb:
desc: Basic solution
language: ruby

@ -0,0 +1,38 @@
<?php
$days_in_month = array(
1 => 31,
2 => 28,
3 => 31,
4 => 30,
5 => 31,
6 => 30,
7 => 31,
8 => 31,
9 => 30,
10 => 31,
11 => 30,
12 => 31
);
$day_cycle = 0;
for($year=1900; $year <= 2000; $year++) {
for($month=1; $month <= 12; $month++) {
$cdates = $days_in_month[$month];
if($month == 2) {
if($year % 4 == 0) {
$cdates = 29;
}
if($years % 100 == 0) {
$cdates = 28;
}
if($years % 400 == 0) {
$cdates = 29;
}
}
$day_cycle += $cdates;
if($day_cycle % 7 == 0) {
if($year >= 1901) {$sum++; }
}
}
}
echo $sum;

@ -0,0 +1,9 @@
require "date"
sundays = 0
(1901..2000).each do |year|
(1..12).each do |month|
dt = Date.new(year,month,1)
sundays += (dt.wday == 0) ? 1 : 0
end
end
puts sundays