“日付と曜日から、その日付が西暦何年かを調べる”を Squeak Smalltalk で


Javaとカレンダー - @author pyridoxin 経由で 日付と曜日から、その日付が西暦何年かを調べたいです。 たとえ… - 人力検索はてな というのを見かけたので Squeak Smalltalk でさくっと書いてみました。

'm/d' 形式の日付文字列と、その日の曜日のシンボルからなる配列から、もっとも近い過去の該当年を探して返します。

| input year |
input := #('4/1' #Saturday).
year := Date today year.
[(input first, '/', year asString) asDate weekday = input second]
    whileFalse: [year := year - 1].
^year   "=> 2006 "


500 年程度遡ってピックアップする版も。

| input year |
input := #('4/1' #Saturday).
year := Date today year.
^(year - 500 to: year) select: [:each |
    (input first, '/', each asString) asDate weekday = input second]

"=> #(1509 1515 1520 1526 1537 1543 1548 1554 1565 1571 1576 1582 1593 1599 
1605 1611 1616 1622 1633 1639 1644 1650 1661 1667 1672 1678 1689 1695 1700 
1706 1717 1723 1728 1734 1745 1751 1756 1762 1773 1779 1784 1790 1802 1813 
1819 1824 1830 1841 1847 1852 1858 1869 1875 1880 1886 1897 1905 1911 1916 
1922 1933 1939 1944 1950 1961 1967 1972 1978 1989 1995 2000 2006) "