challenge LL Golf Hole 3 - 13日の金曜日を数え上げる

今日から2013年12月31日までの、13日の金曜日とその総数を表示してください。

余力のあるものはこのプログラムを短くしてみたり、短くしてみたり、短くしてください。

※LL Future実行委員の高野光弘です。この出題は LL Future公式の出題であり、優れたものについてはLL Golfのセッションでご紹介させていただくかもしれません。ご理解の上、ご投稿ください。また、LL Futureのチケットは現在も発売中です。よろしければ、メインイベントの方にもぜひご参加ください。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
#!/usr/bin/env ruby
require 'date'

from = DateTime.now
to = DateTime.parse("2013-12-31")

friday = (from..to).inject(0) do |friday, date|
    if date.mday == 13 and date.wday == 5 then
        puts date.strftime('%Y-%m-%d')
        friday + 1
    else
        friday
    end
end

puts friday

Posted feedbacks - Java

毎月の 13 日が金曜かどうかを調べ上げています。

初めに現在が 13 日であるかどうか調べ、 ・13日より前なら、現在の日時を 13 日に設定 ・13日より後なら、現在の日時を翌月の 13 日に設定 とし、調べ上げを開始しています。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import java.util.*;
import static java.util.Calendar.*;
public class Count13Friday {

    public static void main(String[] args) {
        Calendar to = new GregorianCalendar(2013, 12, 31);
        Calendar current = new GregorianCalendar();

        int currentDate = current.get(DATE);
        if (currentDate != 13) {
            current.set(DATE, 13);
            if (13 < currentDate) {
                current.add(MONTH, 1);
            }
        }

        List<Date> fridays = new ArrayList<Date>();
        while (current.compareTo(to) <= 0) {
            if (current.get(DAY_OF_WEEK) == FRIDAY) {
                fridays.add(current.getTime());
            }
            current.add(MONTH, 1);
        }
        System.out.println("Fridays = " + fridays);
    }

}

JavaはGolf向きじゃないんですよねー,といいつつChallenge。
基本アルゴリズムは同じで,削れるだけ削ってみました。
現在243バイト。
1
import java.util.*;class F{public static void main(String[]a){int n=0,d;for(Calendar c=new GregorianCalendar();c.get(1)<2014;c.add(2,1)){d=c.get(5);c.set(5,13);if(d<=13&&c.get(7)==6){System.out.println(c.getTime());n++;}}System.out.print(n);}}

Javaで頑張って短くしてみました。 自分はこれが限界・・・。

1
import java.util.*;public class P{public static void main(String[]s){int c=0;for(Calendar a=Calendar.getInstance();a.get(1)<2014;a.add(5,1)){if(a.get(5)==13&&a.get(7)==6){System.out.println(a.getTime());c++;}}System.out.print(c);}}

public class P の publicを消して、224バイト。 これがJavaの限界かな?と1日考えた自分の結論です。


括弧が一組削れます。これで222バイト。

1
import java.util.*;class P{public static void main(String[]s){int c=0;for(Calendar a=Calendar.getInstance();a.get(1)<2014;a.add(5,1))if(a.get(5)==13&&a.get(7)==6){System.out.println(a.getTime());c++;}System.out.print(c);}}

Index

Feed

Other

Link

Pathtraq

loading...