5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

虫食いコードクイズ

Last updated at Posted at 2014-02-28

虫食いコード

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
5
5
7

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?