challenge 除算・余剰を使わずに閏年

ある西暦が閏年か否かを判定するプログラムを書いてください。 ただし、除算・余剰を求める演算子、組み込み関数、ライブラリ関数等を使用してはいけません。 また、閏年は以下のように定義されています。 1. 西暦年が4で割り切れる年は閏年 2. ただし、西暦年が100で割り切れる年は平年 3. ただし、西暦年が400で割り切れる年は閏年

Posted feedbacks - Smalltalk

Squeak Smalltalk で。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
| 閏年か? |

閏年か? := [:int |
    ((0 to: Float infinity by: 4) includes: int)
        and: [((0 to: Float infinity by: 100) includes: int) not
            or: [(0 to: Float infinity by: 400) includes: int]]].

閏年か? value: 1900.   "=> false "
閏年か? value: 2000.   "=> true "
閏年か? value: 2008.   "=> true "
閏年か? value: 2100.   "=> false "

考えたら、べつに無限にせずともこれで十分ですね(^_^;)。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
| 閏年か? |

閏年か? := [:int |
    ((0 to: int by: 4) includes: int)
        and: [((0 to: int by: 100) includes: int) not
            or: [(0 to: int by: 400) includes: int]]].

閏年か? value: 1900.   "=> false "
閏年か? value: 2000.   "=> true "
閏年か? value: 2008.   "=> true "
閏年か? value: 2100.   "=> false "

まあ、こういうのもあるということで。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
| 閏年か? |

閏年か? := [:int |
    (int isDivisibleBy: 4)
        and: [(int isDivisibleBy: 100) not or: [int isDivisibleBy: 400]]].

閏年か? value: 1900.   "=> false "
閏年か? value: 2000.   "=> true "
閏年か? value: 2008.   "=> true "
閏年か? value: 2100.   "=> false "

その手がありましたか!って、もはや悪のりでしかありませんね(^_^;)。

1
2
3
4
5
6
7
8
| 閏年か? |

閏年か? := [:int | int asYear daysInYear = 366].

閏年か? value: 1900.   "=> false "
閏年か? value: 2000.   "=> true "
閏年か? value: 2008.   "=> true "
閏年か? value: 2100.   "=> false "

Index

Feed

Other

Link

Pathtraq

loading...