CodeIQ「カウント・スリー」問題、明日で掲載終了でございます。今回は挑戦者数やや多めでしたね。今回も終わったr皆さまのコードを公開してくださいませ。Togetterでまとめます! codeiq.jp/q/3397
2017-09-27 22:13:46@riverplus n=gets.to_i a=[b=c=d=e=0] a<<e=10**b*b+=1 while n>e (d*=10;f=-1;(d+=1;n-=e)while n>e=(8[f+=1]+c)*10**b+a[b];c+=8[d%10])while-1<b-=1 p d
2017-09-28 10:00:07@riverplus Ruby(118)でした。感想が書けなry r=gets.to_i x=e=0 13.downto(0){|d|a=[(d+10*e)*10**~-d]*10;a[3]+=10**d;x=x*10+h=a.index{|v|r<=v||!r-=v};h==3&&e+=1} p x
2017-09-28 22:13:42@riverplus ideone.com/GfhbPW 最初はこんな感じで、よくある「1~nまでに現れる3の数を求めよ」の二分探索で書きましたが、直接考えたほうが短くなるかな、と思い直しました。
2017-09-28 22:20:41@smz_8110 @riverplus う、設問の最大値よりも大きい値まで対応されているのが素晴らしいです。(自分は最大桁数決め打ちでした) なお、1要素の配列を作りたい場合、以下のような短縮が可能です。 a=[b=c=d=e=0] → *a=b=c=d=e=0
2017-09-28 22:39:31@riverplus あ、 @smz_8110 さんのコードを見ていて気付きましたが、 "h==3&&e+=1" は "e+=8[h]" で良いですね。
2017-09-28 23:05:26@g_m_k @riverplus 桁数固定の真似をさせてもらうと111まで縮められますね n=gets.to_i c=d=e=0 99.downto(0){|b|d*=10;f=-1;(d+=1;n-=e)while n>e=(8[f+=1]+c)*10**b+10**~-b*b;c+=8[d%10]} p d
2017-09-28 23:36:53@g_m_k @riverplus 単純な部分を見逃していたので109に n=gets.to_i 99.downto(c=d=e=0){|b|d*=10;f=-1;(d+=1;n-=e)while n>e=(8[f+=1]+c)*10**b+10**~-b*b;c+=8[d%10]} p d
2017-09-29 00:08:12ネタバレ。Rubyでの素直な再帰実装です。 github.com/angel-p57/code… twitter.com/riverplus/stat…
2017-09-29 06:32:19@riverplus ruby(98)です。100切れました n=gets.to_i 99.downto(t=r=0){|i|f=-1 n-=$;while n>$;=(8[f+=1]+t+i/10r)*10**i r=r*10+f t+=8[f]} p r
2017-09-29 10:08:59公開するの忘れてました。 途中の時点の数字が「以下」なのか「未満」なのか頭が混乱して、具体的に数字入れて詰めないと解けなかったのがツライところ。抽象的なまま解けるようにならないと。 github.com/ysenoh/codeiq/… twitter.com/riverplus/stat…
2017-10-01 21:35:24CodeIQ「カウント・スリー」問題、これまでに頂いた皆さまのコードをまとめました。引き続きよろしくお願いします! togetter.com/li/1156324
2017-10-01 00:31:03@riverplus 桁DP+二分探索で解きました。noriok.hatenablog.com/entry/2017/10/… 今回は正解できました!
2017-10-01 23:29:52