月の日数を出力。(C#、Java、JavaScript、PHP、Python、Ruby比較)

 標準入力された年と月から、その月の日数を求めて出力する処理を、C#、Java、JavaScript、PHP、Python、Rubyの6言語で書いてみました。

 2月については、その年がうるう年かどうか判定し、うるう年であれば29日、うるう年以外の平年であれば28日を出力します。

 2月以外の小の月(4月、6月、9月、11月)の場合は30日、大の月(1月、3月、5月、7月、8月、10月、12月)は31日を出力します。

 なお、月の入力が不正な場合(13以上など)は、C#とJavaは0、JavaScript、PHP、Python3、Rubyについては0を出力します。

 うるう年を判定する処理、年と月からその月の日数を判定する処理は、それぞれメソッドとして定義しています。

C#
using System;
using System.Linq;

public class Sample{
    //うるう年判定
    public static bool leap(int year){
        if ((year % 400 == 0 || year % 100 != 0 && year % 4 == 0) && year > 4){
            return true;
        } else {
            return false;
        }
    }

    //月の日数を返す
    public static int monthDay(int year, int month){
        if (month == 2 && leap(year) == true){
            return 29;
        } else if (month == 2 && leap(year) == false){
            return 28;
        } else if (month == 4 || month == 6 || month == 9 || month == 11){
            return 30;
        } else if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12){
            return 31;
        } else {
            return 0;
        }
    }

    public static void Main(){
        var line = Console.ReadLine().Trim().Split(' ').Select(x => int.Parse(x)).ToArray();
        Console.WriteLine(monthDay(line[0], line[1]));
    }
}
Java
import java.util.*;

public class Main {
    //うるう年判定
    public static boolean leap(int year) {
        if ((year % 400 == 0 || year % 4 == 0 && year % 100 != 0) && year > 4){
            return true;
        } else {
            return false;
        }
    }

    //月の日数を返す
    public static int monthDay(int year, int month){
        if (month == 2 && leap(year) == true){
            return 29;
        } else if (month == 2 && leap(year) == false){
            return 28;
        } else if (month == 4 || month == 6 || month == 9 || month == 11){
            return 30;
        } else if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12){
            return 31;
        } else {
            return 0;
        }
    }

    public static void main(String[] args) throws Exception {
        Scanner scan = new Scanner(System.in);
        var line = scan.nextLine().trim().split(" ");
        int y = Integer.parseInt(line[0]);
        int m = Integer.parseInt(line[1]);

        System.out.println(monthDay(y,m));
    }
}
JavaScript
process.stdin.resume();
process.stdin.setEncoding('utf8');

var lines = [];
var reader = require('readline').createInterface({
    input: process.stdin,
    output: process.stdout
});

reader.on('line', (line) => {
    lines.push(line);
});

reader.on('close', () => {
    //うるう年判定
    function leap (year){
        if ((year % 400 === 0 || year % 100 !== 0 && year % 4 === 0) && year > 4){
            return true;
        } else {
            return false;
        }
    }

    //月の日数を返す
    function monthDay (year, month){
        if (month == 2 && leap(year) === true){
            return 29;
        } else if (month == 2 && leap(year) === false){
            return 28;
        } else if (month == 4 || month == 6 || month == 9 || month == 11 ){
            return 30;
        } else if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12){
            return 31;
        } else {
            return "エラー";
        }
    }

    var ln = lines[0].trim().split(' ').map(x => parseInt(x));
    console.log(monthDay(ln[0], ln[1]));
});
PHP
<?php
//うるう年判定
function leap($year){
   if ( ($year % 400 == 0 || $year % 100 != 0 && $year % 4 == 0) & $year > 4){
       return true;
   } else {
       return false;
   }
}

//月の日数を返す
function monthDay($year, $month){
    if ($month == 2 && leap($year) == true){
        return 29;
    } elseif ($month == 2 && leap($year) == false){
        return 28;
    } elseif ($month == 4 || $month == 6 || $month == 9 || $month == 11){
        return 30;
    } elseif ($month == 1 || $month == 3 || $month == 5 || $month == 7 || $month == 8 || $month == 10 || $month == 12){
        return 31;
    } else {
        return "エラー";
    }
}

$line = trim(fgets(STDIN));
$ln = explode(' ' , $line);

echo monthDay($ln[0], $ln[1])."\n";
?>
Python3
#うるう年判定
def leap (year):
    if (year % 400 == 0 or year % 100 != 0 and year % 4 == 0) and year > 4:
        return True
    else:
        return False

#月の日数を返す
def monthDay(year, month):
    if month == 2 and leap(year) == True:
        return 29
    elif month == 2 and leap(year) == False:
        return 28
    elif month == 4 or month == 6 or month == 9 or month == 11:
        return 30
    elif month == 1 or month == 3 or month == 5 or month == 7 or month == 8 or month == 10 or month == 12:
        return 31
    else:
        return "エラー"

line = list(map(int, input().rstrip().split(' ')))
print(monthDay(line[0], line[1]))
Ruby
Ruby
#うるう年判定
def leap (year)
    if (year % 400 == 0 || year % 100 != 0 && year % 4 == 0) && year > 4
        return true
    else
        return false
    end
end

#月の日数を返す
def monthDay(year, month)
    if month == 2 && leap(year) == true
        return 29
    elsif month == 2 && leap(year) == false
        return 28
    elsif month == 4 || month == 6 || month == 9 || month == 11
        return 30
    elsif month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12
        return 31
    else
        return "エラー"
    end
end

line = gets.chomp.split(' ').map(&:to_i)
puts monthDay(line[0], line[1])

 与えられた年と月からその月の日数を求められることにより、「Y年M月D日のX日後の日付は?」みたいな処理が可能になります。

にほんブログ村 ゲームブログへ

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする