mocchaso note

サーバーエンジニアが何か色々呟いているところ。

Python100本ノック 21本目~25本目

Python100本ノック、21本目から25本目についてです。

qiita.com

21本目:支払いパターンを計算して表示


問題無く解けましたが、より速いコードを書ければ良かったです。
for文による三重ループを使用せずに実装する方法を探してみたいと思います。


22本目:ポケットを叩くとビスケットが2倍


問題無く解けました。

自分のコード:biskets *= 2
記事内のコード:biskets = 2 ** count

書き方は異なりますが、やっていることは同じ(なはず...!)ですね。


23本目:パスワードの安全性を確認する


効率的な解法が思い浮かびませんでした。
↓自分のやり方↓

  • 調査対象の文字列の各文字が大文字、小文字、数字かどうかを確認してカウントする。

  • パスワードの長さの条件に加え、これらのカウンタが1以上ならTrueを返す。

記事内の解法では、「大文字、小文字、数字が『必ず1つは』含まれているものとする」
という条件に着目して、「1つも含まれていない場合」の否定にあたる条件式を入れていました。余事象の考え方を活用していて上手いと思いました。


24本目:文字列の内最頻な文字を表示


各アルファベットに対する数値を辞書に登録していく、という方針は思いつきました。
しかし、記事内の解法では、組み込み関数のmaxをうまく使い、関数内を2行で済ませていました...。


25本目:文字列の内最も連続された文字の個数を数える


q24と似た感じで解きました。
...が、今回は条件に該当する時の文字(最も連続された文字自体)は必要ありませんでした。
辞書の扱い方に少しずつ慣れてきたような気がします。




最近は、卒業研究で書類の提出とか進捗報告とかのタスクばかりやっていて
久々の投稿になってしまいました。やっと25本目(4分の1)まで来ました。

やってるうちに詰まるところを調べていくと、知らない機能や関数などの良い勉強になりますね。随分前に、checkiOで一度やった問題が数問ありましたが、そいつらをスラスラ解けていませんでした(ダメ)。
複数の関数を組み合わせて少し複雑なことを実現すること、問題を解決できそうなアルゴリズムを思いつくことは大事ですが、やはり難しいですね...。

あと75本。
(卒業研究に関する記事とかも書いてみるのも、備忘録にもなるし良いかも)