LL Golf Hole 3 - 13日の金曜日を数え上げる
Posted feedbacks - Ruby
今日から2013年12月31日までの、13日の金曜日とその総数を表示してください。
余力のあるものはこのプログラムを短くしてみたり、短くしてみたり、短くしてください。
※LL Future実行委員の高野光弘です。この出題は LL Future公式の出題であり、優れたものについてはLL Golfのセッションでご紹介させていただくかもしれません。ご理解の上、ご投稿ください。また、LL Futureのチケットは現在も発売中です。よろしければ、メインイベントの方にもぜひご参加ください。
see: DateTime - Rubyリファレンスマニュアル
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)}
|




takano32
#6985()
[
Ruby
]
Rating4/8=0.50
今日から2013年12月31日までの、13日の金曜日とその総数を表示してください。
余力のあるものはこのプログラムを短くしてみたり、短くしてみたり、短くしてください。
※LL Future実行委員の高野光弘です。この出題は LL Future公式の出題であり、優れたものについてはLL Golfのセッションでご紹介させていただくかもしれません。ご理解の上、ご投稿ください。また、LL Futureのチケットは現在も発売中です。よろしければ、メインイベントの方にもぜひご参加ください。
see: DateTime - Rubyリファレンスマニュアル
Rating4/8=0.50-0+
[ reply ]