虫食いコード
def foo(n)
s = n.??????
s.gsub(/./){|c|c.to_i>0?"*":"\n"}
end
上のようなメソッドがあります。
引数n
には、数値が渡されることを期待しています。
n.??????
では、あるメソッドを呼んでいます。
引数と戻り値
foo 975
では、以下の文字列が返ります。
****
****
foo 3006189
では、以下の文字列が返ります。
*
**
***
****
***
**
*
foo 8791795956735
では、以下の文字列が返ります。
**********
**********
**********
**********
問題
foo 39699650524203608556267005547831588735
だと、何て返るんでしょう。
一言
コードゴルフ的なものを解いてたら思いついたのでクイズにしてみました。
Ruby以外では、大きな数値を扱うのが難しいのでRubyにしました。
(gsubの部分はぶっちゃけ少し分かりにくくしてます。素直に書いたらすぐに答え分かるし。)
ヒントのようなもの
-
foo 1
では*
が返りますが、foo 2
でも*
が返ります。
おまけ: 別バージョン
コメントでアドバイスをいただき(ありがとうございます!)、別バージョンが出来たのでこちらにも追記します。
def foo(n)
s = n.??????
s.gsub(/./){|c|c=c.to_i;c>0?(c>1?"L"*(c-1):" "):"\n"}
end
n.??????
の部分は、上のと少し違います。
foo 221607684358918433469140214100113483789619871671261045176200726322239151137507466750261989293139198188272371638628418943901601268
とすると、以下の文字列が返ります。
LLLLLLLL LLL LLL LLLLLLLL LLL LLL
LLL LLL LLL LLL LLL LLL LLL LLL
LLL LLL LLL LLL LLLLLLLL LLL LLL
LLLLLLL LLL LLL LLL LLL LLLLLLL
LLL LLL LLL LLL LLL LLL LLL
LLL LLLL LLLLLLL LLLLLLLL LLL