Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
四則演算の計算結果を返すプログラムを書きながら学習とは何かについて考える
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
YuheiNakasaka
June 03, 2026
Technology
92
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
四則演算の計算結果を返すプログラムを書きながら学習とは何かについて考える
LT資料
YuheiNakasaka
June 03, 2026
More Decks by YuheiNakasaka
See All by YuheiNakasaka
エンジニアリングマネージャーの仕事
yuheinakasaka
0
190
サラリーマンソフトウェアエンジニアのキャリア
yuheinakasaka
55
26k
LLMでコードレビューする際の自分用環境を整える
yuheinakasaka
0
350
AIプログラミング雑キャッチアップ
yuheinakasaka
25
9.7k
Rubyに(ちょっと)コントリビュートできた話
yuheinakasaka
2
370
Other Decks in Technology
See All in Technology
2026TECHFRESH畢業分享會 - 葬送的通靈師:化系統與用戶雜訊成行動訊號
line_developers_tw
PRO
0
1.3k
SONiCの統計情報を取得したい
sonic
0
230
「勝手に広まる」人気 AI エージェントを爆速で作ろう!(AWS Summit Japan 2026講演資料)
minorun365
PRO
8
2k
FPGAの開発コンペでZephyrを使ってみた
iotengineer22
0
140
[AWS Summit Japan 2026]迷っているあなたへ_小さな一歩が、やがて自分を助けてくれる
sh_fk2
1
160
気軽に使える"情報のハブ"としてのNotion活用 〜フロー情報の集積点 と、 Claude Code × Notion AI〜
syucream
1
150
Lightning近況報告
kozy4324
0
190
小さく始める AI 活用推進 ― 日経電子版 Web チームの事例/nikkei-tech-talk47
nikkei_engineer_recruiting
0
300
AWS Security Agent といっしょに脅威モデリングをやってみよう
amarelo_n24
1
180
MUSUBI 田中裕一『AIと共に行う「しごとのリデザイン」- スモールバックオフィス編』AI Ops Lab #4
musubi
0
270
GitHub Copilot app最速の発信の裏側
tomokusaba
1
190
入門!AWS Blocks
ysuzuki
1
160
Featured
See All Featured
BBQ
matthewcrist
89
10k
How to Think Like a Performance Engineer
csswizardry
28
2.7k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
490
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.2k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
230
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
71
40k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
330
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.5k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.2k
Git: the NoSQL Database
bkeepers
PRO
432
67k
Building Applications with DynamoDB
mza
96
7.1k
Faster Mobile Websites
deanohume
310
31k
Transcript
四則演算の計算結果を返すプログラムを書きながら 学習とは何かについて考える Yuhei Nakasaka 1
四則演算の式を受け取って その計算結果を返すプログラム書けますか? 例: 1+2*3 => 7 2
楽勝〜〜 eval('1+2*3') 3
条件 文字列 s は、非負整数・空白・演算子 + - * / だけからなる有効な式である s
を評価して結果を返せ * / は通常通り優先し、整数除算は 0 方向に切り捨てる 1 <= s.length <= 3 * 10^5 eval などの式評価関数は禁止 https://leetcode.com/problems/basic-calculator-ii/ 4
再帰下降構文解析のパーサーを書けば良いのでは どうやって書くんだっけ? ぼんやりとしか記憶していない → 調べる 5
再帰下降構文解析とは 文法規則ごとに関数を用意する トップダウン構文解析 各関数が、対応する非終端記号を処理する 書いたプログラムの構造が文法の構造に近くなる 実装的には優先順位が低いものから順に再帰的に降って下から順に計算する感じ https://en.wikipedia.org/wiki/Recursive_descent_parser 6
四則演算のBNF書くか〜 どうやって書くんだっけ? ぼんやりとしか記憶していない → 調べる 7
BNF(バッカスナウア)記法とは Backus–Naur Form の略 記号の書き換え規則を用いて文字列の構造を定義する仕組み プログラミング言語やプロトコルの構文定義で使われる <expr> ::= <term> [
('+'|'-') <term> ]* <term> ::= <number> [ ('*'|'/') <number> ]* <number> ::= '0'|'1'|'2'|'3'|'4'|'5'|'6'|'7'|'8'|'9' https://en.wikipedia.org/wiki/Backus–Naur_form 8
再帰下降構文解析で書いてみた結果 https://gist.github.com/YuheiNakasaka/e6574b98653bb1d0548fb4583ed1f205 9
というかこんなことしなくても もっと雑に解ける方法あるのでは... 10
四則演算のプログラムといえば 逆ポーランド記法!! 逆ポーランド記法に変換すれば良いのでは 11
逆ポーランド記法とは 演算子を、対応するオペランドの 後ろ に置く記法 1 + 2 * 3 は
1 2 3 * + 左から読み、数値はスタックに積み、演算子が来たら計算する 1 2 3 * + push 1 push 2 push 3 * => 2 * 3 = 6 + => 1 + 6 = 7 https://en.wikipedia.org/wiki/Reverse_Polish_notation 12
と言っても 中置記法を逆ポーランド記法に変換するの面倒そう 13
操車場アルゴリズムというのがある ダイクストラ先生 が考案した、式を構文解析するためのアルゴリズム 中置記法から、逆ポーランド記法や AST を生成できる(らしい) 演算子スタックを使い、優先順位が高いものから出力に送る input: 1 +
2 * 3 output: 1 2 3 * + https://en.wikipedia.org/wiki/Shunting_yard_algorithm 14
実際のコード https://gist.github.com/YuheiNakasaka/62e96c088fa12c30ad6b46b1837d8d7a これで提出 15
通った 16
では模範解答をチェック! 17
模範解答 https://gist.github.com/YuheiNakasaka/0bcfb8c124ad852dccf79a5e41ddfc73 18
全然違う解法... スタックを一つ使うだけ...だと 19
模範解答の考え方 * / だけ、その場で計算する + n は n をスタックに積む /
- n は -n をスタックに積む * n は直前の値を取り出して掛ける / / n は直前の値を取り出して割る 最後にスタックを合計する 3 + 2 * 2 stack: [3] stack: [3, 2] stack: [3, 4] sum : 7 20
気づき 21
人間は知ってる道具で課題解決しようとする ハンマーしか持っていなければ、すべてのものが釘に見える(ハンマーを持ってる と釘を探したくなる) 技術選定や設計などあらゆる意思決定でも言えること(学んだばかりのデザインパ ターンで実装したくなる、など) 様々な選択肢を持っていないと最適な選択ができない 22
最適な答えが全てではない 最適な答えを得ることは大事だが、そこに辿り着くまでの過程は無駄だったか 再起下降構文/BNF/逆ポーランド記法/操車場アルゴリズムなど。寄り道によって 様々なアプローチを再学習できた。 23
AIと学習機会 AIを使うと最適な答えがすぐに手に入る 最適な答えが手に入るのは便利だが、その過程で本来得られたかもしれない新た な学びの機会を失っているのではないか 本当にそれでいいのか 24
もっと間違って寄り道しよう 自分のプログラマ人生を振り返ってみると、いつも何か学びを多く得られたのは 答えを得た時ではなく、答えを得るまでの道中だった気がする ゴールに辿り着くまでの試行錯誤こそが学習の肝なのではないか 成長のために必要な、大切な寄り道の機会をAIに奪われるのは勿体無い 25
ただし、あくまで学習という観点の話 業務ではAIが簡単にやってしまえることはAIにやらせて人間はより複雑な判断や創 造的な仕事に時間を使うべき AIを使うなというわけではなく、学習という観点で大切なのは寄り道の中にある のではないか、という話です。 AIで仕事が出来るからといって、自分が賢くなっているわけではない もちろんAIを使って学習を加速させることもできる(が、これはまた別の機会で) 26
終わり 27
参考資料 LeetCode 227. Basic Calculator II: https://leetcode.com/problems/basic-calculator-ii/description/ Recursive descent parser:
https://en.wikipedia.org/wiki/Recursive_descent_parser BNF notation for syntax, W3C: https://www.w3.org/Notation.html バッカス・ナウア記法: https://ja.wikipedia.org/wiki/バッカス・ナウア記法 Reverse Polish notation: https://en.wikipedia.org/wiki/Reverse_Polish_notation Shunting yard algorithm: https://en.wikipedia.org/wiki/Shunting_yard_algorithm Law of the instrument: https://en.wikipedia.org/wiki/Law_of_the_instrument 28