3 ms·
Sounds like a great Code Golf contest. ruby -e 'require"date";a=DateTime.new(0,1,1,0,0,0);(0..4e9).each{|d|b=(a+Rational(d,86400));c=b.strftime("%y%m%d%H%M%S")
by carl_dr 4y ago
Sounds like a great Code Golf contest.
ruby -e 'require"date";a=DateTime.new(0,1,1,0,0,0);(0..4e9).each{|d|b=(a+Rational(d,86400));c=b.strftime("%y%m%d%H%M%S");puts b.strftime("%y-%m-%d %H:%M:%S")if c==c.reverse}'
About the most inefficient anyone could make it, but I think it works!
- lcnPylGDnU4H9OF 4y agoLooks like it would be defeated by the dreaded leap second.
- SAI_Peregrinus 4y agoThey're going away. Resolution 4 of the CGPM 2022[1]. They didn't want to deal with having to add a negative leap second, and it looks likely they'd have to if they didn't end them. [1] https://www.bipm.org/documents/20126/64811223/Resolutions-2022.pdf/281f3160-fc56-3e63-dbf7-77b76500990f https://www.bipm.org/documents/20126/64811223/Resolutions-20...
- carl_dr 4y agoI don't think so. It would be only year 2006 (which map to second 60) which could be a problem, and there wasn't a leap year in that year.
- AkshatJ27 4y agoSome saves: `Rational(d,86400)` -> `d/86400r` Get rid of the variable `a` since it is used in only one place. `DateTime.new(0,1,1,0,0,0)` -> `DateTime.new(0,1,1)` also in newer ruby versions you can use numbered parameters to replace d with _1 and remove `|d|` Pretty sure there might be some more which i do not see immediately :)
- carl_dr 4y agoruby -e 'require"date";(0..4e9).each{b=DateTime.new(0,1,1)+_1/86400r;c=b.strftime("%y%m%d%H%M%S");puts b.strftime("%y-%m-%d %H:%M:%S")if c==c.reverse}' 151 bytes (including the ruby -e, down from 174.) Thanks!
- AkshatJ27 4y ago`ruby -e 'require"date";0.upto(4e9){b=DateTime.new(0,1,1)+_1/86400r;c=b.strftime"%y%m%d%H%M%S";p b.strftime"%y-%m-%d %H:%M:%S"if c==c.reverse}'` 142? Sorry if I broke anything, on phone.
- carl_dr 4y agoYou need to use puts to avoid quotes being added around the output - so I'll give you 145! I'm on my phone too, I'm impressed I even got something working, you've done brilliantly. Edit: DateTime.new(0) seems to work. 141.
- deleted 4y ago[deleted]
- AkshatJ27 4y ago~~`b=DateTime.new(0,1,1)+_1/86400r;`-> `b=_1/86400r+DateTime.new 0`~~ oops
- carl_dr 4y agoThat doesn't work unfortunately, you need the brackets - DateTime has to be on the left.
- AkshatJ27 4y agoah, my bad. This should work for 134: `ruby -r date -e '0.upto(4e9){b=DateTime.new(0)+_1/86400r;puts b.strftime"%y-%m-%d %H:%M:%S"if(c=b.strftime"%y%m%d%H%M%S")==c.reverse}'`
- carl_dr 4y agoruby -rdate -e'b=DateTime.new 0;loop{b+=1/86400r;c=b.strftime"%y%m%d%H%M%S";puts b.strftime"%y-%m-%d %H:%M:%S"if c==c.reverse}' 127. Script never terminates, but it does display all possibilities, so I think it still passes! Edit: 126. ruby -rdate -e'b=DateTime.new 0;loop{b+=1/86400r;puts b.strftime"%y-%m-%d %H:%M:%S"if(c=b.strftime"%y%m%d%H%M%S")==c.reverse}' I think I'm done for the moment, will revisit tomorrow if you can find any further savings!
- PinkMilkshake 4y agoPowerShell 7, 108 chars 0..2e9|%{date(date 0).AddSeconds($_)-f 'yy-MM-dd HH:mm:ss'}|?{$_-match'(.)(.)-(.)(.)-(.)(.) \6\5:\4\3:\2\1'}