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 - XSLT

XSLTでは実行時時刻を取得する手段が標準で存在しないので、
お題の投稿日を「今日」ということにしてます。

一応「今日」が変わっても正しく計算できるようにして、
630 bytes.改行が7つ削れるので実質623bytes
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
<transform version="2.0"
xmlns="http://www.w3.org/1999/XSL/Transform"
xmlns:s="http://www.w3.org/2001/XMLSchema"
xmlns:f="http://www.w3.org/2005/xpath-functions"
xmlns:y="uri:ja.doukaku.org:my-functions">
<variable name="f" select="s:date('2008-08-05')"/>
<output method="text"/><template match="/">
<value-of separator=",">
<for-each select="0 to f:days-from-duration(s:date('2013-12-31')-$f)">
<variable name="d" select="$f+s:dayTimeDuration(f:concat('P',.,'D'))"/>
<sequence select="if(f:day-from-date($d)*(f:days-from-duration($d -s:date('1970-01-04'))mod 7)=65)then $d else()"/>
</for-each></value-of></template></transform>

Index

Feed

Other

Link

Pathtraq

loading...