はじめに
昨日M1グランプリ2023がありましたね。
個人的にはさや香が好きでしたが、優勝は令和ロマンスでした。
さや香の決勝戦のネタで「見せ算」というものでした。
これは+-*/
の四則演算に新たな第5の演算を追加したい、というコンセプトのネタです。
今回はこれを可能な限りプログラミングの世界に落とし込み、実装していきたいと思います。
見せ算の定義
+-*/
に当たる部分は「見せ」といい、和差積商に当たる部分は「眼(がん)」と呼びます。
基本ルール
- A=Bのとき、A見せB=0
- A<Bのとき、A見せB=B
応用ルール
- 6見せ9=11. これは、6と9がお互い形が似ているため見つめ合うように近づいて行き、結果11になる.
- 2見せ5=11. 6見せ9と同じ論理で11になり、かつ5がスマホをポケットから落とすためそれが小数点となり、1.1になる。
- 1見せ100=17. 1が17倒すので83になる
コード
ソースコードはGitHubにPUSH済みです。
本記事ではメインのロジックのみ記載します。
def misezan(a, b):
a, b = min(a, b), max(a, b)
if a == 6 and b == 9:
return 11
if a == 2 and b == 5:
return 1.1
if a == 1 and b == 100:
return 83
return misezan_basic(a, b)
def misezan_basic(a, b):
if a == b:
return 0
if a != b:
return max(a, b)
input = [(6, 9), (2, 5), (1, 100), (5, 5), (10, 3), (30, 100), (200, 140)]
for a, b in input:
print(f"{a} 見せ {b} = {misezan(a, b)}")
実行結果↓
$ python3 misezan.py
6 見せ 9 = 11
2 見せ 5 = 1.1
1 見せ 100 = 83
5 見せ 5 = 0
10 見せ 3 = 10
30 見せ 100 = 100
200 見せ 140 = 200
見事、実装できました。
応用ルールの拡張
お気づきの方も多いと思いますが、応用ルールの定義がかなり曖昧です。
その曖昧さにつけこんで、さらに曖昧な応用ルールをChatGPTに考えてもらいました。
プロンプト
# 見せ算
### 定義
+-*/に当たる部分は「見せ」といい、和差積商に当たる部分は「眼(がん)」と呼びます。
### 基本ルール
1. A=Bのとき、A見せB=0
2. A<Bのとき、A見せB=B
### 応用ルール
1. 6見せ9=11. これは、6と9がお互い形が似ているため見つめ合うように近づいて行き、結果11になる.
2. 2見せ5=11. 6見せ9と同じ論理で11になり、かつ5がスマホをポケットから落とすためそれが小数点となり、1.1になる。
3. 1見せ100=17. 1が17倒すので83になる
ーーーーーーーーーーーーーー
上記の定義に従って、応用ルールをお笑い芸人っぽく拡張してください。
例えば、
- 16と91は上下反転させるとおなじに見えるので1111
- 1000以上同士の引数が2つ与えられた場合戦争を起こして10以下の数字まで減る
面白いルールがでてきたので、これを先程のPythonスクリプトに追加してもらいます。
その結果がこちら↓
def misezan(a, b):
a, b = min(a, b), max(a, b)
if a == 6 and b == 9:
return 11
if a == 2 and b == 5:
return 1.1
if a == 1 and b == 100:
return 83
if a == 77 and b == 88:
return 18
if a == 404 and b == 505:
return 6
if a == 123 and b == 321:
return 447
if a == 2020 and b == 3030:
return 0
# 基本ルール
return misezan_basic(a, b)
def misezan_basic(a, b):
if a == b:
return 0
if a != b:
return max(a, b)
input = [(6, 9), (2, 5), (1, 100), (5, 5), (10, 3), (30, 100), (200, 140),
(77, 88), (404, 505), (123, 321), (2020, 3030)]
for a, b in input:
print(f"{a} 見せ {b} = {misezan(a, b)}")
実行結果↓
$ python3 misezan.py
6 見せ 9 = 11
2 見せ 5 = 1.1
1 見せ 100 = 83
5 見せ 5 = 0
10 見せ 3 = 10
30 見せ 100 = 100
200 見せ 140 = 200
77 見せ 88 = 18
404 見せ 505 = 6
123 見せ 321 = 447
2020 見せ 3030 = 0
さいごに
ほかにも面白い追加ルールをコメント欄にてお待ちしてます。