おいおい思った以上に難しいぞコレ【CheckiOの旅2】

おいおい思った以上に難しいぞコレ【CheckiOの旅2】

There was the book.
一冊の本があった。

Lurk under an unusual context
類まれなる文脈

Watch there darkness and Lightness 
smoldering there
闇とも光ともつかぬ燻りをそこに見る

Person who got the book
その本を手にした者は

Some gains tremendous wealth
ある者は巨万の富を得る

Some manipulate something innocent
ある者は生ならざる者を操る

Born a lot
数多を生み

To numerous ash dust
数多を灰塵へ

Its power that does not mind satisfying
holy and evil
主の善悪を厭わぬその力を

People honor and fear
人々は恐れ敬う

 

This is the story of a man who took the book

これは、その本を手にした一人の男の物語

 

People call the book・・・

人々はその本の名を・・・

 

 

 

 

 

 

 

 

”MINPY”

”みんパイ”と呼ぶ
書籍名”みんなのパイソン” 
(税込み価格2,916円)

 

 

 

いや~買っちゃった!

CheckiOって

思った以上にレベル高いじゃない?

paizaとか目じゃなかった。

 

ちょっと深いとこまで学習せにゃ

こりゃ間に合わんと思いまして

思い切って買っちゃいました。

 

あ、どもアイーンです。

 

もうね。

気分は

 

 

これもんよね。これもん。

 

どんな問題もイチコロだよね。

 

 

早速今日の問題に取り掛かってみましょう。

 

 

 

与えられる英字と記号から

頻出する文字を見つけるテストか。

解答は小文字で返す必要があると・・・。

 

頻出文字を探してる間は、大文字小文字は区別なし

数字、記号、空白は含まない。

 

ん?二文字以上頻出する文字があった場合は、アルファベット順に若いもんから持ってこいだと・・・。

 

まずは.lower()でリスト全部小文字にすればいいでしょ。

そしたら空白を消して・・・

ソートかけて・・・

頻出文字を見つけて

push

 

ん~ダメだわからん。

そもそも自分の中に回答がない。

 

人様のコードを分析して

カービィよろしく能力コピーしていくしかない。

 

今回参考にさせていただいたのはコチラ

https://github.com/peterevans/Checkio/blob/master/the-most-wanted-letter.py

def checkio(text):

    total = 0
    lower = text.lower()
    most = lower[0]
    for  i in lower:
        if i.isalpha():
            if lower.count(i) > total:
                most = i
                total = lower.count(i)
            elif lower.count(i) == total:
                if i < most:
                    most = i
                    total = lower.count(i)
    return most

まず

出現文字をカウントする total
入力を小文字にした lower
出現頻度が高い文字をいれる most

あとは入力でループを掛けて一文字づつチェック

まずは.isalpha()で英字か判定

英字なら、入力自身のiを使って.count()か。かしこい。

最大ならmostに入れて。
totalには出現回数を入れて。
後は最後の文字まで繰り返すだけ。

で、出現頻度が一緒のヤツは・・・

 

!!

文字なのに比較できるの!

あら~、そうなの~。

mostよりiの方がアルファベット順で前なら

入れ替える。

 

脱帽

 

そもそも英字か判定することで空白、記号、数字を除去

ソートする必要もなかったし。

なんかさっきまでpushしようとしてたし。

 

情けなす。

 

お、出題者の回答がある。

どれどれ・・・

 

 

 

text = text.lower()
return max(string.ascii_lowercase, key=text.count)