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

今日から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

1
2
3
4
require'date'
i=0
Date.today.upto(Date.new(2014)-1){|d|puts d.strftime'%Y-%m-%d'if d.mday*d.wday==65&&i+=1}
puts i

==65いいですね。 参考にして(ぱくって)みました。 89byte。。。
1
ruby -rdate -e'Date.today.upto(Date.new(2014)){|d|(warn d;p d)if d.day*d.wday==65}'|wc -l

まだ縮んだ。
1
ruby -rdate -e'Date.today.upto(Date.new(2014)){|d|(p warn(d))if d.day*d.wday==65}'|wc -l

56B。
1
2
3
rq'date'
a=De.y.up(De.w 2014).s{|d|d.d*d.w==65}
s a,a.sz

時刻が付いてしまうのはまぁ許される?

Fri Feb 13 16:31:21 +0900 2009
Fri Mar 13 16:31:21 +0900 2009
Fri Nov 13 16:31:21 +0900 2009
Fri Aug 13 16:31:21 +0900 2010
Fri May 13 16:31:21 +0900 2011
Fri Jan 13 16:31:21 +0900 2012
Fri Apr 13 16:31:21 +0900 2012
Fri Jul 13 16:31:21 +0900 2012
Fri Sep 13 16:31:21 +0900 2013
Fri Dec 13 16:31:21 +0900 2013
10
1
p (Time.now..Time.gm(2013,12,31)).step(86400).count{|x|x.mday==13&&x.wday==5&&!p(x)}

goruby版

1
p (Ti.no..Ti.gm(2013,12,31)).st(86400).ct{|x|x.my==13&&x.wy==5&&!p(x)}

間違い。gorubyだとpが値を返すのでした。

1
p (Ti.no..Ti.gm(2013,12,31)).st(86400).ct{|x|x.my==13&&x.w==5&&p(x)}

yugui さんのコード、どうも動かないと思ったら step のあとに count が繋げられるのは 1.9 からなのですね。 1.8.6 ではエラーになってしまいました。 一応 1.8.6 でも動作する版を作ってみました。 2013年12月31日 まで = 2014年1月1日としてますが、許される?
1
2
3
c=0
(Time.now..Time.gm(14)).step(86400){|d|d.day==13&&d.wday==5&&(c+=1)&&p(d)}
p c

1
2
3
4
5
6
7
8
9
c=0
(Time.now..Time.gm(14)-1).step(86400){|d|p(d)if"#{d}"=~/F.{7}13/&&c+=1}
p c

# または同サイズの

c=0
(Time.now..Time.gm(14)-1).step(86400){|d|p(d)if d.day*d.wday==65&&c+=1}
p c

1文字縮められました。
1
2
3
c=0
(Time.now..Time.gm(14)-1).step(86400){|d|p(d)if"#{d}"=~/i\D*13/&&c+=1}
p c

ふつうの実装

1
2
require 'date'
p (Date.today..Date.parse('2013-12-31')).inject(0){|r,i|i.wday!=5||i.mday!=13?r:(puts i;r+1)}

Index

Feed

Other

Link

Pathtraq

loading...