鯖と鯵を数える

Excelで、こんなクイズが出題された。

鯖と鯵は、それぞれ何匹?
f:id:Infoment:20200505202207p:plain

今回は、Split関数を用いて解いてみた。
f:id:Infoment:20200505202723j:plain

Function 何匹(全体 As String, 種類 As String) As Long
    何匹 = UBound(Split(全体, 種類))
End Function

例えば「鯖鯵鯖」(←全体)という文字を、「鯵」(←種類)という文字で分割してみる。すると、
 鯖鯵鯖 ⇒ 鯖,鯖
という風に二つに分割できる。分割された文字は配列(番号が振ってある箱のようなもの)にそれぞれ格納されるため、

  • 0番目の箱「鯖」
  • 1番目の箱「鯖」

のようなデータの持ち方をする。このとき注意すべきは、箱が「0」番から始まっていること。従って、箱に振られた番号の最大値(Ubound)がそのまま、鯵の匹数になる訳だ。

繰り返しになるが、「鯵」という文字で元の文字が何分割できるか?を利用して、「鯵」という文字の数を数えている。
f:id:Infoment:20200505203736p:plain

これだけだと味気ないので、Pythonで同じことをやってみた。

def count_fish(source,fish):
    return len(source.split(fish))-1

source='鯵鯖鯵鯖鯵鯖鯵鯖鯵鯖鯵鯖鯵鯖鯵鯖鯵鯖鯵'

for fish in ['鯖','鯵']:
    print(fish + ':' + str(count_fish(source,fish)) + ' 匹')

f:id:Infoment:20200505204150p:plain

今回作成するにあたり学習したことは、以下の二つ。

  • 関数の戻り値は、「return」で返す。
  • 配列の要素数は、len関数で求める。

対比しながら学ぶと理解も早いし、結構面白いです。

参考まで。