diff --git a/src/components/ContentTags/Inline.tsx b/src/components/ContentTags/Inline.tsx
index 42201ddfc..f8967d25a 100644
--- a/src/components/ContentTags/Inline.tsx
+++ b/src/components/ContentTags/Inline.tsx
@@ -9,7 +9,8 @@ import {
CardProps
} from 'src/components/Card'
import { LinkContext } from 'src/components/ContentTags/Links'
-import { InlineHighlightType } from 'src/types/ContentTagTypes'
+
+export type InlineHighlightType = 'white' | 'none' | 'blue' | 'pink'
interface HighlightContextProps {
inHighlightType: InlineHighlightType
@@ -47,7 +48,7 @@ export const Italic = (props: JSX.IntrinsicElements['span']) => (
/>
)
-export const Strong = ({
+export const HighlightBold = ({
highlightType,
...props
}: {
@@ -74,9 +75,7 @@ export const Strong = ({
css={[
css`
font-weight: bold;
- background: ${highlightType === 'yellow'
- ? colors('yellow100')
- : highlightType === 'blue'
+ background: ${highlightType === 'blue'
? mix(color, colors('blue50'))
: highlightType === 'white'
? colors('white')
@@ -101,11 +100,11 @@ export const Strong = ({
}
}
-Strong.defaultProps = {
+HighlightBold.defaultProps = {
highlightType: 'default'
}
-export const Em = ({
+export const Highlight = ({
highlightType,
...props
}: {
@@ -132,8 +131,6 @@ export const Em = ({
font-style: normal;
background: ${highlightType === 'pink'
? colors('pink50')
- : highlightType === 'yellow'
- ? colors('yellow100')
: highlightType === 'blue'
? mix(color, colors('blue50'))
: highlightType === 'white'
@@ -157,6 +154,6 @@ export const Em = ({
}
}
-Em.defaultProps = {
+Highlight.defaultProps = {
highlightType: 'default'
}
diff --git a/src/components/ContentTags/index.tsx b/src/components/ContentTags/index.tsx
index 8c84b03cd..4bd240897 100644
--- a/src/components/ContentTags/index.tsx
+++ b/src/components/ContentTags/index.tsx
@@ -1,7 +1,12 @@
export { Ul, Ol, OlLi, UlLi } from 'src/components/ContentTags/List'
export { P, PFullWidth } from 'src/components/ContentTags/P'
export { Hr } from 'src/components/ContentTags/Hr'
-export { Strong, Em, Bold, Italic } from 'src/components/ContentTags/Inline'
+export {
+ HighlightBold,
+ Highlight,
+ Bold,
+ Italic
+} from 'src/components/ContentTags/Inline'
export { ExternalLink, InternalLink } from 'src/components/ContentTags/Links'
export { H3 } from 'src/components/ContentTags/Headings'
export { Img } from 'src/components/ContentTags/Img'
diff --git a/src/components/EmojiWithText.tsx b/src/components/EmojiWithText.tsx
index 5ec009bb2..ae658ec75 100644
--- a/src/components/EmojiWithText.tsx
+++ b/src/components/EmojiWithText.tsx
@@ -4,7 +4,7 @@ import { VariableNames } from 'src/types/VariableNames'
import Emoji, { EmojiProps } from 'src/components/Emoji'
import emojiLabelMapping from 'src/lib/emojiLabelMapping'
import letterEmojiMapping from 'src/lib/letterEmojiMapping'
-import { Em } from 'src/components/ContentTags'
+import { Highlight } from 'src/components/ContentTags'
import BubbleQuoteContext from 'src/components/BubbleQuoteContext'
interface EmojiWithTextProps {
@@ -20,9 +20,9 @@ const EmojiWithText = ({ letter, size }: EmojiWithTextProps) => {
throw new Error()
}
return (
-
+
また、本稿の内容について質問がございましたら、
-
- 上のツイートにスクリーンショット付きで返信
-
+
差し支えなければ、このページを閉じる前に
-
- 下のツイートをリツイート
+
お疲れ様でした!本稿に対するご意見・ご感想を、ぜひ
- 下のツイートを引用リツイートして
+
というわけで、
-
+
続編をリクエストしたい方は、
-
+
there’s only one item on the bottom row,
-
+
- start with the leftmost pair.
+
→ 計算箱に変換すると
- こんにちは、上杉周作
+ こんにちは、
- 本稿「{lessonTitle}
+ 本稿「
- ちなみに、本稿は最後まで無料
+ ちなみに、本稿は最後まで
大半の方は、
-
- 読了までに約2〜3時間ほどかかる
-
+
- 「前置きはいいから早く読みたい!
+ 「
反対に「
-
+
本稿のタイトルは「
- {lessonTitle}
+
アプリ・ウェブサービス・ゲーム・AI・組み込みシステムやITシステム・仮想通貨など、「
- コンピュータプログラムによって機能するもの
+
そして「
- コンピュータサイエンス」とは、
-
+
コンピュータサイエンスという言葉をはじめて聞く方に、コンピュータサイエンスについて説明しようとすると、「
- プログラミングと何が違うの?
+
非常に単純化して言うと、「
-
+
まず、
-
+
それと同じで、プログラマも、プログラミングをすることでソフトウェアを作ることができます。そして
-
+
医学の知識が浅い人が医者になってしまうと、間違った治療を施しかねません。それと同じで、
-
+
また、
-
+
同じように、
-
+
-
+
先ほどの例えを使えば、「
- コンピュータサイエンスを学ぶメリットはあるの?
+
医学の場合、まず大前提として、
- ほとんどの人が医者になることはありえません。
+
これと同じ話で、
- ほとんどの人がプログラマになることはありえません
+
だからこそ、
-
+
まとめると、
-
+
他に医学と似ていない点としては、
-
+
誰もがコンピュータサイエンスを学ぶべきというわけで、このたび
- コンピュータサイエンスの入門書
- を書きました。それが、本稿「{lessonTitle}」です。
+
ただ、本稿はよくある入門書とは違い、
- 邪道なコンピュータサイエンスの入門書
+
わたしはアメリカの大学でコンピュータサイエンスを学んだのですが、当時から教育者気質・作家気質だった筆者は、「
- いつかコンピュータサイエンスの入門書を書いてみたい
+
ただ、もちろんコンピュータサイエンスの入門書なんて掃いて捨てるほどあるので、何らかの差別化をしないと書く意味がありません。そこで思いついたのが、「
- 正統派の入門書ではなく、『邪道』な入門書を書く
+
本稿が「邪道」である理由は以下の2点です。
それぞれどういうことか説明しますね!
@@ -516,7 +537,7 @@ export default () => ( <>
本稿がコンピュータサイエンスの「邪道」な入門書である理由のひとつめは、
- プログラミングを行わないからです。
+
正統派のコンピュータサイエンスの入門書は、「
-
+
たしかにそのほうが効率が良いのですが、
-
+
個人的には、
-
+
そのためにはどうすればいいかというと、
-
+
本稿では、以下のようなパズルを解きながらコンピュータサイエンスの題材を学んでいきます。以下のパズルがどういう仕組みかは次のページで説明しますが、とりあえず
-
+
上記のように、
-
+
対象が子供の場合は話が違います。
-
+
本稿がコンピュータサイエンスの「邪道」な入門書である理由のふたつめは、
- 高度な内容を取り扱っているからです。
+
正統派のコンピュータサイエンスの入門書は、
- 初歩的な内容
+
- 本稿は2〜3時間程度
+ 本稿は
そのためには
-
+
なぜなら、
-
+
また、このページを開き、ここまで読んでくださったあなたは、おそらく
- 知的好奇心がとても旺盛
+
とはいえ、内容が高度すぎて、誰にも理解されなかったら本末転倒です。だから、
-
+
また、高度な内容とはいえ、
-
+
では、本稿で取り扱う高度な内容とは何かというと、タイトルにもある「
- Yコンビネータ」です。
+
- Yコンビネータは、初歩的な題材では全くありません。
+
なぜそんなマニアックな題材を選んだかというと、
-
+
-
+
-
+
-
-
+
-
+
@@ -887,7 +921,9 @@ export default () => (
/>
つまり、彼らは凄腕プログラマの起業家に投資したかった。だから、「Yコンビネータ」という
- 高度なコンピュータサイエンスの専門用語
+
-
+
-
もし本稿が正統派のコンピュータサイエンスの入門書だったら、みなさんからお代を頂戴していたかもしれません。
-
+
だからというのも何ですが、
- 内容には期待しすぎないでください
+
さらに言うと、
- 本稿は実用的な内容ではありません
+
ただその代わりに、
-
+
- あるいは、「難しすぎる。自分には向かない
+ あるいは、「
本稿は
- プログラミング未経験者向け
+
-
+
したがって、プログラマの方向けのYコンビネータの教材としては、本稿はおすすめできません。しかし、その代わりにおすすめできる教材があります。
-
+
もしも「
-
+
In this course, we’ll learn about Y Combinator through a short
- story. Let’s first talk about “mathboxes”, one of
- the key items of this story.
+ story. Let’s first talk about{' '}
+
Once upon a time, there was a rural village called{' '}
- “Lambda Village”. The villagers worked to earn
- just enough for a modest lifestyle.
+
- In Lambda Village, a tool called “Mathbox” has
- been passed down from one generation to next. As its name
- suggests, a
- Here’s an example mathbox:
+ Here’s an example
Each mathbox has a{' '}
-
+
-
+
Let’s look at other mathboxes.{' '}
-
+
- Mathboxes can also subtract 1 from a number.{' '}
-
@@ -255,12 +267,12 @@ export default () => (
- 本稿はゆるい物語調
+ 本稿は
まずは、この物語に登場する「
- 計算箱」の話をしましょう。
+
- むかしむかし、「ラムダ村
+ むかしむかし、「
- ラムダ村には、代々伝わる「計算箱
+ ラムダ村には、代々伝わる「
こちらをご覧ください。これが、ラムダ村の村人が使っていた「
- 計算箱」のひとつです。
+
それぞれの計算箱には
-
+
-
+
他の計算箱も見てみましょう!たとえばこちらをご覧になり、
-
+
@@ -166,22 +175,22 @@ export default () => (
ということです。
@@ -196,10 +205,10 @@ export default () => ( これが、計算箱に備わっている機能のひとつ、「
- 計算箱は「1を足す」だけではなく、「1を引く
+ 計算箱は「1を足す」だけではなく、「
+
このように、
-
+
ここが重要なポイントなのですが、計算に使うことができるのは{' '}
-
+
ちなみに、
-
+
たとえば、下の計算箱は、
-
+
一方、下の計算箱は、
-
+
答えを言うと、
-
+
このようにすれば、
- 計算箱はどんな大きな数字の足し算でも引き算でもできます。
-
まとめると、
- 計算箱は足し算や引き算を行ってくれる魔法の道具
+
- そして、ラムダ村の村人は計算がとても苦手でした。
+ そして、ラムダ村の村人は
+
-
+
- それらは、まだ返すわけにはいかないな。
+
-
+
計算箱を返すとは言ったが…
-
+
そうだな…先ほどの問題ではお前たちに、
-
+
だから、
-
+
俺らは計算箱がないと何もできないんだ!
> @@ -332,10 +343,10 @@ export default () => (わかりました。こちらの弁当箱をご覧ください。
前回と同じく、
-
+
そして、
-
+
-
+
前回もやったように、
-
+
- すべてを目で追う必要はないですよ!
+
また、「
-
+
それより見てみて!
-
+
前回と同じように
-
+
特別ルールを実行するには、
-
+
ということは、サヤちゃんの弁当箱は…
-
+
たとえば、
-
+
じゃあ、
-
+
まさか、こうも簡単に正解されるとは思わなかったが…
-
+
ちなみに、サヤちゃんが考えた弁当箱以外にも、
-
+
今回学んだことを一言でまとめると、
-
+
これを弁当箱で再現するには、
-
+
まとめると、
-
+
前回話した通り、
-
+
しかし、
-
+
- ちなみに、中級編はここまでだ。
+
-
+
うーん、
-
+
サヤちゃん、何か思いついた?
> @@ -271,7 +279,7 @@ export default () => ( <>
みなさん、なかなかお困りのようですね。よければ、
- ヒントを出しましょうか?
+
まず、
-
+
というわけで、
-
+
分かった。とりあえず、{' '}
-
+
これで、 @@ -486,7 +494,7 @@ export default () => (
「
この場合は、
-
+
なるほど…
-
+
-
+
-
+
なるほど、「
-
+
「条件」によって 「
- 分岐」するから 「
+
「
たしかに、「
-
+
- このページから、本格的に上級向けになります。
+
復習すると、上の計算箱は、
-
+
そして、
-
+
では、まずサヤの弁当箱の一番下の「
-
+
-
+
たしかに、
-
+
次は、サヤの弁当箱の一番下の「
-
+
-
+
たしかに、
-
+
いちおう最終チェックとして、
たとえば、
では、
-
+
これを
だから、
ちなみに、
-
+
まとめると、
-
+
では、
- 次のページでまたヒントを出しましょう!
+
というわけで、先に進んでみてください。
> diff --git a/src/contents/13.jp.tsx b/src/contents/13.jp.tsx index f58ea1099..8f95d9c5a 100644 --- a/src/contents/13.jp.tsx +++ b/src/contents/13.jp.tsx @@ -1,6 +1,13 @@ import React from 'react' import EpisodeCardList from 'src/components/EpisodeCardList' -import { P, Strong, Em, Ul, UlLi, Bold } from 'src/components/ContentTags' +import { + P, + HighlightBold, + Highlight, + Ul, + UlLi, + Bold +} from 'src/components/ContentTags' import H from 'src/components/H' import BubbleQuotes from 'src/components/BubbleQuotes' import Emoji from 'src/components/Emoji' @@ -23,11 +30,13 @@ export default () => ( content: ( <>
- このページからまた難易度がアップします。
+
ここで質問です。
-
+
- そんなの、すぐ答えられるわけないだろう!
+
サヤはすぐ分かったよ!
-
+
へ?なんでそんな早く正解が分かるの…?
-
+
まず、
-
+
あ、
-
+
さらに、
-
+
そう!だから、とりあえずこれらを
-
+
これはもしかして…
-
+
その通り!だから、この部分をいったん{' '}
-
+
ここまできたら、後は簡単だよね。
-
+
@@ -502,9 +513,9 @@ export default () => ( <>
ほらね、サヤがさっき言ったように、
-
+
しかし…
- サヤちゃんがとった手法はズルなんじゃないか?
+
サヤちゃんは、もともとの弁当箱を、それぞれの要素に対応する計算箱に置き換えてから実行したけど… @@ -565,13 +578,13 @@ export default () => ( children: ( <>
-
+
最後に残った以下の弁当箱は、
-
+
-
+
ということは、サヤちゃんのやり方は間違ってなかったのか… @@ -718,9 +733,9 @@ export default () => (
ここで一旦立ち止まって振り返ってみましょう。
さきほどサヤちゃんがやったのは、「
-
+
重要なのは、
-
+
たしかに先ほどの場合は、
-
+
はい。
-
+
-
+
でもさあ…質問なんだけど、
-
+
-
+
この弁当箱に、以下のように
- いろいろ追加してみたの。
- 黄色の部分が追加した部分だよ。
+
(
-
+
うん、早送りは次のページでやるから、今はとりあえず「
-
+
それよりも重要なのは、
-
+
- つまり…足し算ができるってこと?
+ つまり…
- 今回は、今までで最も複雑な弁当箱が登場します。
+
しかしいつも通り、
-
+
前回は、
-
+
サヤちゃんの弁当箱は、前回
-
+
つまり、「 @@ -109,17 +117,17 @@ export default () => (
今回は、前回サヤが考えた弁当箱を
そうすることで、
-
+
なるほど、
-
+
でもちょっと立ち止まって考えてみて。まず、この
- 真ん中の黄色で示した部分に注目してくれる?
+
上の黄色の部分が複雑なので、
-
- 分かりやすくするために、そこだけを{' '}
-
この時点で、
…ということを覚えておいてね。
@@ -285,10 +297,10 @@ export default () => ( ]} />後で大事になってくるからだよ。
では続きを見てみよう。
-
+
じゃあ、
- そう、この部分が繰り返されるんだよね。
+ そう、この部分が
+
では、また
-
+
ふむふむ…
-
+
じゃあもしかしたら、
-
+
続けて確かめてみるか。
@@ -549,10 +562,10 @@ export default () => ( children: ( <>
-
+
なんとなく、パターンが見えてきたかも…
特に、
-
+
ということは、次は{' '}
-
+
そして、
-
+
- では、確かめてみよう!次が最後だよ!
+ では、確かめてみよう!
+
- これが最後だよ!
-
+
-
+
そう!
-
+
-
+
まず、
-
+
そして
-
+
ちなみにですが…下のように、
-
+
- サヤちゃん、その通りです!これで、
+ サヤちゃん、
+
そうですね。ここでひとつ説明したいことがあります。
さきほど登場した、
-
+
そうですね。ちなみに、この弁当箱には、
- 特殊な呼び名があるんですよ。
+
- 「Yコンビネータ
+ 「
- 「Yコンビネータ」かあ。変な名前だね。
+ 「
ちなみに、以下のような法則に当てはまる弁当箱は、どれも「
- Yコンビネータ」と呼べるんですよ。
+
そうなんだ。でもすごいね。
-
+
- まるで、魔法みたい!
+
- 確かに…まさに、「魔法のYコンビネータ
+ 確かに…まさに、「
+
- 村人たちの命運やいかに?次の上級最後のページ
+ 村人たちの命運やいかに?次の
+
やった!これで、
- 計算箱のすべての機能を返してもらった
+
それについてなんだが…
-
+
なんだ、この弁当箱は?
-
+
分かった。じゃあ、こちらの{' '}
-
+
こちらの{' '}
-
+
結果は…
-
+
では、
-
+
-
+
- ということはもしかして…足し算を計算した
+ ということはもしかして…
+
その通りだ!先ほどの弁当箱は、
- つまり、足し算ができる弁当箱
+ つまり、
+
先ほどの弁当箱と似ているけど、微妙に違うなあ…
前回同様、
-
+
ちなみに、今回はかなり時間がかかるので、待てない場合は「
-
+
結果は…
-
+
- これはもしかして…掛け算を計算できる
+ これはもしかして…
+
その通りだ!先ほどの弁当箱は、
- つまり、掛け算ができる弁当箱
+ つまり、
+
すごい…!
-
+
そうだ。ちなみに今回は紹介する時間がないが、
- ふたつの数字の引き算や割り算
+
つまり、
- 弁当箱は四則演算の全てを行うことができる
+
- たとえば、「階乗
+ たとえば、「
@@ -832,7 +850,7 @@ export default () => ( } />
- 階段
+
- この「階乗」は、先ほどの
- 掛け算ができる弁当箱と、
- Yコンビネータ
+ この「
まず、
-
+
それでは、階乗を計算する弁当箱をお見せしよう。
- こちらの弁当箱は、黄色の部分に、
-
+ こちらの弁当箱は、
この弁当箱を実行すると、
-
+
-
+
完全には理解できなくていいが…
この
-
+
そして、先ほどの弁当箱の
-
+
たとえば
へー、すごいなあ。完璧には理解できていないけど…
それでもわたしが伝えたかったのは、
ということだ。
@@ -1165,7 +1186,7 @@ export default () => ( ]} />
以上をまとめると…
-
+
じゃあ逆に質問するけど…
- 弁当箱にできない計算はあるのかい?
+
いい質問だな。それは、次のページで説明しよう!
- 次が最後のページ、エピローグだ!
+
- 弁当箱にできない計算はあるのかな?
+
この質問に答えるためには、「
- そもそも弁当箱というアイデアはどこから来たのか
+
そのためには、
- ラムダ村の世界ではなく、現実世界の歴史
+
@@ -118,10 +124,11 @@ export default () => (
この記事のタイトルは「
- しかし、コンピュータは本質的には「計算機
+ しかし、コンピュータは本質的には「
+
-
+
たとえば、検索エンジンは膨大な数のデータをランク付けするために計算を行います。AIが顔認証をするときは、センサーが取り込んだ顔のデータを数値化し、それをもとに複雑な計算を行って本人かどうかを確かめているのです。 @@ -161,7 +170,8 @@ export default () => ( description={<>コンピュータは、大量の計算を行える計算機>} />
- だから、コンピュータは「計算機」なのですね。
+ だから、コンピュータは「
コンピュータは計算機であるからこそ、
- コンピュータの歴史はすなわち、計算機の歴史
+
@@ -211,11 +223,11 @@ export default () => ( />
-
+
ちなみに、
-
+
- いっぽう同時期に、計算機について科学する学問
+ いっぽう同時期に、
+
そんなコンピュータサイエンスの研究者たちは、「
-
+
- そして、コンピュータサイエンスの礎を築いた
+ そして、
-
+
その問題を解くために、ふたりはそれぞれ別々の「
- 空想上の計算機
+
- 「もし仮にそんな計算機がこの世に存在したら…
+ 「
+
実は、この時にふたりが別々に考案した、当時の技術では作ることができない「
- 空想上の計算機
+
言い換えると、このふたりは「ヒルベルトの決定問題」という数学の問題を解いていたのですが、
-
+
- 1930年代半ばに、チューリング
+ 1930年代半ばに、
そして、ここでは詳しく説明しませんが、
-
+
- 一方、ほぼ時を同じくして、チャーチ
+ 一方、ほぼ時を同じくして、
-
+
- チャーチが考えた空想上の計算機「ラムダ計算
- 」は、見た目は弁当箱とは違いますが、仕組みは同じでした。
+ チャーチが考えた空想上の計算機「
+
たとえば、こちらが「
-
+
答えを言うと、上の記述式は
- Yコンビネータを表している
+
つまり本稿では、
- 実はみなさんにラムダ計算を教えていたのです。
-
+
そして繰り返しますが、このラムダ計算は、1930年代に考えられた「
- 空想上の計算機」というわけです。
+
- 先ほど、「弁当箱とラムダ計算は同じ
+ 先ほど、「
- ラムダ計算にできない計算はあるのかな?
+
では、ラムダ計算にできない計算はあるのでしょうか?
結論から言うと、
-
+
ということはつまり、
-
+
このことは、1930年代に証明されました。「
-
+
先ほど説明したように、ラムダ計算はもともと、とある数学の問題を解くためにチャーチが考案したものでした。しかし、ラムダ計算もまた、
- コンピュータサイエンスの発展に大きな影響を与えたのです。
+
特に、ラムダ計算は
- 数々のプログラミング言語
+
たとえば、執筆時点で世界で最も人気のプログラミング言語のひとつである、
- Python (パイソン)
+
- このPython言語にも、「lambda{' '}
+ このPython言語にも、「
まとめると、
-
+
それは、
-
- 「計算機を工夫すること
+
今回紹介したラムダ計算、すなわち弁当箱は、
- 仕組みはとてもシンプルです
+
しかし、こんなシンプルな弁当箱でも、現代のコンピュータが行えるすべての計算を行うことができるのです。
-
+
コンピュータサイエンスは、「
-
+
そして、今回学んだ弁当箱は、
- シンプルでも工夫次第で複雑な計算ができる計算機です。
+
とはいえ、コンピュータサイエンスの他の分野を学ぶときも、やることは弁当箱のときと同じです。なぜならどの分野でも、弁当箱のように「
-
- 計算機(コンピュータ)を工夫して
+
コンピュータサイエンスのどの分野でも、
- キーワードは「工夫」
+
長くなりましたが、本稿を読んで、「
-
+
本稿で学んだことを短くまとめると、以下のようになります。
まず、先述したイギリスの数学者で、空想上の計算機「
-
+
本稿をお読みになったプログラマの方の中には、「
-
+
個人的な話で恐縮ですが、わたしは今まで「
-
+
そして、今までわたしが「
-
+
そういった、「
-
+
だから、そういう方々に「
- 知的に面白い
+
しかし同時に、
-
+
また、冒頭でも書いた通り、いきなり高度な内容を理解することができれば、「
- これが理解できたんだから、他の内容も学べるだろう
+
努力はしたものの、それでも本稿がまだまだ難しいのは承知しております。本稿はあくまで、「
- 邪道な
+
悪魔のわたしに言わせれば…「
-
+
一方、「
-
+
そして、
-
+
「難しすぎて敬遠してしまう人」の数を抑えつつ、「難しくて面白いと思ってくれる人」の数を増やす、というのは
- トレードオフ
+
下のコードは、
-
+
@@ -1206,9 +1246,9 @@ export default () => (
ふつう、JavaScriptで階乗を計算するには for や{' '}
while といったループ機能、reduce{' '}
といった関数、または関数の再帰を使います。しかし、
-
+
The result is
- This time, we’ll talk about the third feature of
- a mathbox:
-
+
So the result is
If you wanted to calculate
You can check again:
If you
-
+
Of course, you can use{' '}
-
+
By using this technique,{' '}
-
+
As we mentioned earlier,{' '}
-
+
- However, one day, something terrible happened in
+ However, one day,{' '}
+
結果は
このように繰り返しの機能を使えば、
-
+
- 前回は、ラムダ村に代々伝わる「計算箱
+ 前回は、ラムダ村に代々伝わる「
+
ここで質問です。上の計算箱は、
-
+
答えは
注目ポイントは、
-
+
-
+
つまり、
-
+
まとめると、
-
+
もちろん、
-
+
もちろん、
-
+
前回も話したように、
- ラムダ村の村人は計算がとても苦手でした
+
村人たちは、計算箱の
-
+
- そんなある日、ラムダ村である異変が起きました。
+ そんなある日、
+
One day,{' '}
-
+
Don’t worry. I’m not here to take your lives away…
-
+
- We’re all really bad at math.
+
Without mathboxes, we can’t do any calculations. Our @@ -148,7 +149,9 @@ export default () => ( <>
That’s exactly why I took away your mathboxes.{' '}
- It’s because you all are bad at math.
+
You see, your math skill hasn’t improved because you’re @@ -171,10 +174,10 @@ export default () => ( children: ( <>
-
+
- Hmm…okay. Maybe I’ll give you a chance.
+ Hmm…okay.{' '}
+
-
+
Since you villagers hadn’t spent much time studying, @@ -259,7 +263,9 @@ export default () => ( But…we have to solve them to get our mathboxes back!
- We’ll accept your challenge, the devil!
+
お前たちに解いてもらうパズルは、{' '}
-
+
- 弁当箱
+
@@ -385,7 +391,7 @@ export default () => ( <>
なんとなく、
- 見た目が計算箱に似ている
+
実はこの
とりあえず今は、
-
+
-
+
- 実は、これはある法則に則っているんだ。
+ 実は、これは
今回は、お前たちに
- その法則が何か解き明かしてもらうぞ。
+
これだけだと法則が何か、まだハッキリと言えないなあ…
- もう少し他の例を試してみないと!
+
- 続いて、上段にふたつの料理が入っている場合
+ 続いて、上段に
+
@@ -586,7 +596,7 @@ export default () => (
- どれもある法則
+ どれも
では、
-
+
ほう。ではここで、
-
+
これを
- 最終的に下のようになるでしょうか?
+
つまり
-
+
@@ -787,10 +797,10 @@ export default () => (
つまり
-
+
ある日のこと。平和だったラムダ村に突然、
-
+
安心しろ、お前たちの命だけは助けてやる。
-
+
こうして悪魔は、
- ラムダ村から計算箱を取り上げてしまったのです。
+
- 俺らは計算が大の苦手なんだ。
+
計算箱がないと、足し算や引き算ができなくなって、村の経済が成り立たなくなるんだぞ! @@ -133,9 +142,9 @@ export default () => ( children: ( <>
-
+
お前たちは簡単な計算をするのにでも計算箱に頼り切っているだろう。そんなことだから、いつまでたっても計算が上達しないんだ。 @@ -156,9 +165,9 @@ export default () => ( children: ( <>
-
+
ふむ…そこまで言うなら仕方ない。では、
- お前たちにチャンスをやろう!
+
-
+
日頃から頭を使ってこなかったお前たちには、おそらくムリだろうがな!わはは! @@ -238,7 +251,7 @@ export default () => ( 難しそう…しかし、やるしかない!計算箱を取り返すんだ!
- その挑戦、受けて立つぞ!
+
お前たちに解いてもらうパズルは、{' '}
-
+
- 弁当箱
+
@@ -350,7 +363,7 @@ export default () => ( <>
なんとなく、
- 見た目が計算箱に似ている
+
実はこの
とりあえず今は、
-
+
-
+
- 実は、これはある法則に則っているんだ。
+ 実は、これは
今回は、お前たちに
- その法則が何か解き明かしてもらうぞ。
+
これだけだと法則が何か、まだハッキリと言えないなあ…
- もう少し他の例を試してみないと!
+
- 続いて、上段にふたつの料理が入っている場合
+ 続いて、上段に
+
@@ -551,7 +568,7 @@ export default () => (
- どれもある法則
+ どれも
では、
-
+
ほう。ではここで、
-
+
これを
- 最終的に下のようになるでしょうか?
+
つまり
-
+
@@ -752,10 +769,10 @@ export default () => (
つまり
-
+
- やった、法則が分かったぞ!
+
じゃあ説明しよう。まず、
- 下のふたつの料理を比べてみる。
+
-
- もし下のふたつの料理が同じなら、
+
次に、
- 下のふたつの料理が異なる場合。
+
-
+
- 正解、まさにその通りだ!{' '}
+
@@ -339,7 +356,7 @@ export default () => ( children: ( <>
- だが、喜ぶのはまだ早い。
+
先ほどお前が言った、
-
+
-
+
まず、
-
+
続いて、
-
+
続いて、
-
+
最後に、
-
+
では、たとえば下の例のように、
- 上にふたつの料理がある場合
+
@@ -868,7 +887,7 @@ export default () => (
では、最初から最後まで
うむ。そして、
-
+
では、
-
+
たとえば下の弁当箱の場合は、
@@ -1007,12 +1026,12 @@ export default () => (
-
+
- 次回では、もっと複雑なパズルを出題する。
+
- 今回が初級最後のページです!
+
- 今回登場する弁当箱は、今までと比べてちょっと難しいです。
+
これは…
-
+
そして、
-
+
今までの弁当箱では、
- 横に3つの料理が並んだことはなかった。
+
そうだな。そしてさらに、
-
+
そして
-
+
そう。これは、
-
+
-
+
そう、前回では登場しなかったが、
-
+
-
+
まず、
-
+
続いて、
-
+
最後に、
-
+
-
+
まとめると、
こんなところかな?
@@ -854,10 +864,10 @@ export default () => ( <>
その通り。では、
-
+
-
+
まだドヤ顔をするような時間じゃないぞ。弁当箱の「
- 細かい法則
+
弁当箱の「
- 細かい法則
+
今まで見たことない形のパズルだ。
-
+
これも見たことない形だなあ…
-
+
上で紹介したようなパズルを解くには、これから紹介する弁当箱の「
- 細かい法則
+
- その法則はふたつある。
+
まあそう焦るな。
-
-
+
-
+
-
+
-
+
このような場合、
-
+
まとめると、
-
+
この弁当箱は、
-
+
- 答えは、「どの印もつけることができない
+ 答えは、「
+
ということはつまり、
-
+
-
+
-
+
-
+
-
+
やるじゃないか。
-
+
さきほど約束した通り、
-
-
+
- そんな方のために、復習用のまとめ
+ そんな方のために、
-
+
- まず、ラムダ村の村人たちは、悪魔に「計算箱
+ まず、ラムダ村の村人たちは、悪魔に「
+
以上が初級編で話したことでした。
- これらの法則を暗記する必要はありません。
+
ここからは中級編だ。
-
+
- 問題を出す前に、わたしの助手
+ 問題を出す前に、わたしの
+
いま呼ぶから、ちょっと待つんだな。
- …いでよ、「ミニオン」!
+ …いでよ、「
- どうも、ミニオン
+ どうも、
よく来てくれた!こいつがわたしの助手、
- ミニオンだ。
+
ミニオンはそんじょそこらの犬とは違う。
- とっておきの芸
+
ミニオン、こいつらにお前の芸を見せてやるんだ!
@@ -319,15 +335,17 @@ export default () => ( <>
ぼくは、
- この弁当箱を計算箱に変える
+
下の
-
+
そうなんです。ぼくは、
- ある法則に基づいて
+
- その法則がどんなものか、当ててみてください!
+
-
+
-
+
答えを言うと、
-
+
先ほどの弁当箱の場合、
-
+
だから、これをぼくが計算箱に変換すると{' '} @@ -756,9 +777,9 @@ export default () => ( children: ( <>
-
+
たとえば、
つまり、
-
+
上の弁当箱に、先ほどの法則にしたがって
だから、これをぼくが計算箱に変換すると{' '} @@ -932,17 +953,17 @@ export default () => (
上の弁当箱に、先ほどの法則にしたがって
つまり、
-
+
@@ -969,10 +990,10 @@ export default () => ( <>
なるほど、
-
+
はい。先ほど紹介した法則の「
さらにぼくは、
-
+
ためしに、
-
+
-
+
このような、
というふたつのステップを、
@@ -1187,9 +1209,9 @@ export default () => (
なるほど、「
-
+
-
+
それでは以前約束した通り、
-
- 次のページで難しい問題を出題する
+
- このページから難易度が急激に上がります。
+
ただ、
-
+
では約束通り、
-
+
- この問題は非常に難しい
+
何だか複雑そうな弁当箱だなあ…
-
+
それが今回の問題です!
-
+
先ほどの弁当箱は、
-
+
-
+
では上の弁当箱を、先ほどの
では、この弁当箱を「
-
+
そうなんです!つまり、
ということです。
@@ -433,10 +442,10 @@ export default () => ( <>
つまりざっくり言うと、
-
+
この弁当箱も、
-
+
こちらを「
-
+
ざっくり言うと、今度は{' '}
-
+
まとめると、
-
+
ここで思い出してほしいのですが、
-
+
-
+
では、ここで問題です。
-
+
先ほどのような、
-
+
つまり、
-
+
- はい、その通りです!
-
+
- それがどんな法則が、当ててみよう!
+
この問題こそが、以前から話していた「難しい問題」だ。
- これを解けたら、約束通り計算箱を返してやろう!
+
うーん…
-
+
大丈夫、安心してください!
-
+
-
+
すなわち、
-
+
- 今回の弁当箱では、初級その5で学んだ法則が登場
+ 今回の弁当箱では、
+
@@ -1190,11 +1210,11 @@ export default () => (
以下のように、
-
+
まず初級編で説明した通り、
-
+
続いて、また{' '}
-
+
というわけで、初級編で説明した通り、
-
+
次も前回と同じく、
-
+
残念ながら、
-
+
理由は、
- 以下の法則に沿っていないからです。
+
-
+
ダメか…
-
+
だから、
-
+
-
+
-
+
- しかし、次のページで答えが判明します。
+ しかし、
+
ラムダ村の村人たちは、前回の問題に四苦八苦していました。
- その時です。ラムダ村に暮らす少女のサヤちゃん{' '}
+ その時です。ラムダ村に暮らす少女の
+
じゃあ、手短に説明するね。
-
+
- 「1を足す効果{' '}
+ 「
すなわち、
-
+
前回もやったように、
-
+
まず、
-
+
続いて、また{' '}
-
+
というわけで、
-
+
次も前回と同じく、
-
+ ということは、サヤちゃんの弁当箱は…
-
+
たとえば、
-
+
じゃあ、
-
+
ではここで正解を言いましょう。
-
+
- だから、サヤちゃんの答えが正解です!
+ だから、
+
さらに言うと、サヤちゃんが考えた弁当箱以外にも、
-
+
-
+
実行したとき、
-
+
いいですよ!
- ちなみに現時点で、中級編も半分を終えました
+ ちなみに現時点で、
+
いい機会なので、少し立ち止まって振り返ってみましょう。
@@ -967,7 +983,7 @@ export default () => (
これまで学んだことを一言でまとめると、上の計算箱にあるような「
- 「再現
+ 「
- こちらの弁当箱で「再現」できるということです。
+
- これが、「計算箱を弁当箱で再現する
+ これが、「
これを弁当箱で再現するには、
-
+
上の弁当箱は実行に時間がかかるので、ここでは早送りはしませんが、
-
+
まとめると、
-
+
-
+
- この疑問については、後に答えが明らかになります。
+
-
+
- いえ、そんなことは全くありませんよ。
+
はい。先ほどの問題は超難問でしたから。
-
+
ミニオンさん、
- おかしなことに気づいちゃったんだけど…
+
- サヤちゃんが気づいた、「おかしなこと
+ サヤちゃんが気づいた、「
+
ねえねえ、見てほしいものがあるんだけど。
まず、
-
+
そりゃあ、
-
+
残念ながら、
-
+
理由は、
- 以下の法則に沿っていないからです。
+
-
+
-
+
では、ここでネタばらしをしましょう。
こちらに、先ほど
- 失敗した例をもう一度表示しています。
+
ここで、
-
+
実は、このように{' '}
-
+
@@ -442,7 +451,7 @@ export default () => (
]}
description={
<>
-
+
実行結果が狂う
-
(先ほどの場合は
@@ -481,7 +490,7 @@ export default () => (
<>
この例だと複雑すぎて説明が難しいので、
- 簡単な例を使って説明しますね!
+
-
+
-
+
じゃあ…
-
- ミニオンさんお願い!特別ルール
+
- 分かりました、いいですよ!
+
それでは、
という特別ルールを設けましょう。
@@ -983,13 +995,13 @@ export default () => (
-
+
-
+
次の
-
+
しかし、今回から新たに以下の特別ルールが適用されます:
ご心配なく!
-
+
なんとなく「
- こういう法則があるんだな
+
I use this page when demonstrating materials from this course to
- someone in person. So there won’t be any
- explanations written on this page.
+ someone