編集部が選ぶ「みんなに見てほしい」イチオシまとめはこちら
1
Kawazoe @riverplus
CodeIQ「カウント・スリー」問題、明日で掲載終了でございます。今回は挑戦者数やや多めでしたね。今回も終わったr皆さまのコードを公開してくださいませ。Togetterでまとめます! codeiq.jp/q/3397
SMZ8110 @smz_8110
@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
SMZ8110 @smz_8110
@riverplus rubyで135文字です 自分にはこれが限界でした
SMZ8110 @smz_8110
@riverplus ゴルフしてないバージョンも一応つけておきます ideone.com/arqvVD
masaki goto @g_m_k
@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
masaki goto @g_m_k
@riverplus ideone.com/GfhbPW 最初はこんな感じで、よくある「1~nまでに現れる3の数を求めよ」の二分探索で書きましたが、直接考えたほうが短くなるかな、と思い直しました。
masaki goto @g_m_k
@smz_8110 @riverplus う、設問の最大値よりも大きい値まで対応されているのが素晴らしいです。(自分は最大桁数決め打ちでした) なお、1要素の配列を作りたい場合、以下のような短縮が可能です。 a=[b=c=d=e=0] → *a=b=c=d=e=0
masaki goto @g_m_k
@riverplus あ、 @smz_8110 さんのコードを見ていて気付きましたが、 "h==3&&e+=1" は "e+=8[h]" で良いですね。
masaki goto @g_m_k
@smz_8110 @riverplus あと細かいですが、"1 while"の半角スペースは無くても良いかと思います!
SMZ8110 @smz_8110
@g_m_k @riverplus ありがとうございます! どちらも自分では気づけなかったので助かります
SMZ8110 @smz_8110
@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
SMZ8110 @smz_8110
@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
SMZ8110 @smz_8110
@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
idiotton @idiotton
公開するの忘れてました。 途中の時点の数字が「以下」なのか「未満」なのか頭が混乱して、具体的に数字入れて詰めないと解けなかったのがツライところ。抽象的なまま解けるようにならないと。 github.com/ysenoh/codeiq/… twitter.com/riverplus/stat…
norioc @norioc
@riverplus 桁DP+二分探索で解きました。noriok.hatenablog.com/entry/2017/10/… 今回は正解できました!

コメント

ログインして広告を非表示にする
ログインして広告を非表示にする