3の倍数と3のつく数字(世界のナベアツ)

» 力試しにナベアツのような判定をするプログラムを作ろうとしたところ…

Pythonだとこんな感じで1行で書けるんだけど,これじゃだめなのかなぁ

(num % 3 == 0) or ('3' in `num`)
実行例:
>>> num = 12345
>>> (num % 3 == 0) or ('3' in `num`)
True

>>> num = 14
>>> (num % 3 == 0) or ('3' in `num`)
False

追記:
文字列として扱ってはいけない理由が分からないけど,あくまでも数値として扱うとこんな感じかな。やっぱりPythonはすっきりと書けて,他の人が読んだときに理解しやすい気がする。

def include3(num):
    if num % 10 == 3:
        return True
    if num > 10:
        return include3(num / 10)
    return False
実行例:
>>> num = 12345
>>> (num % 3 == 0) or include3(num)
True

>>> num = 14
>>> (num % 3 == 0) or include3(num)
False

追記:
後で調べたら,はてダでこの問題を解いてる人がけっこういたのですが,下の2つには強烈なセンスを感じました。世の中には面白い人がいるもんだなぁ。

» ナベアツ問題これは難しい・・・ - miura1729の日記
 BCD表現で解いてるw
» GPUで「世界のナベアツ」問題 - 桃の天然水
 GPUのシェーダ機能を使ってる


2 Comments so far »

  1.  

    Dubhead said

    on 2008-04-16 2:41 p.m.

    `backquote` はPython 3000で無くなります (PEP 3099)。
    str(num) の方がいいと思う。

  2.  

    weboo said

    on 2008-04-16 6:08 p.m.

    > `backquote` はPython 3000で無くなります (PEP 3099)。

    そうなんですか。まだPython 3000までウォッチできてませんでした。
    ありがとうございますー


Leave a comment


:

:

:

:

このエントリーのはてなブックマーク (-)