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 ( - + {label[locale]} {emoji}{' '} - + ) } diff --git a/src/components/H.tsx b/src/components/H.tsx index cf6c46ab5..a6d7be342 100644 --- a/src/components/H.tsx +++ b/src/components/H.tsx @@ -1,14 +1,14 @@ /** @jsx jsx */ import { css, jsx } from '@emotion/core' import { Fragment } from 'react' -import { InlineHighlightType } from 'src/types/ContentTagTypes' +import { InlineHighlightType } from 'src/components/ContentTags/Inline' import InlineBorder from 'src/components/InlineBorder' import { useContext } from 'react' import { - Em, + Highlight, InternalLink, P, - Strong, + HighlightBold, Bold, ExternalLink, Hr, @@ -242,10 +242,10 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => { こんにちは!このページは「 {lessonTitle} 」という記事の - {episodeNumber + 1}ページ目 + {episodeNumber + 1}ページ目 です。1ページ目から読むには - こちらからどうぞ + こちらからどうぞ

@@ -376,14 +376,14 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => { content ) : ( <> - {content} + {content} ) } else { return ( - + 「弁当箱のパズル 🍱」 - + ) } } @@ -391,17 +391,17 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => { if (locale === 'en') { return ( <> - + Next ➡️ - + ) } else { return ( <> - + 次へ ➡️ - + ) } @@ -410,17 +410,17 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => { if (locale === 'en') { return ( <> - + {args.lowerCase ? 'r' : 'R'}un ▶️ - + ) } else { return ( <> - + 実行 ▶️ - + ) } @@ -429,17 +429,17 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => { if (locale === 'en') { return ( <> - + Play - + ) } else { return ( <> - + 早送り - + ) } @@ -448,17 +448,17 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => { if (locale === 'en') { return ( <> - + Playing… - + ) } else { return ( <> - + 早送り中… - + ) } @@ -467,17 +467,17 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => { if (locale === 'en') { return ( <> - + Pause - + ) } else { return ( <> - + 一時停止 - + ) } @@ -486,17 +486,17 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => { if (locale === 'en') { return ( <> - + Reset ↩️ - + ) } else { return ( <> - + リセット ↩️ - + ) } @@ -505,17 +505,17 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => { if (locale === 'en') { return ( <> - + ⬅️ Previous - + ) } else { return ( <> - + ⬅️ 前へ - + ) } @@ -524,17 +524,17 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => { if (locale === 'en') { return ( <> - + Done 🏁 - + ) } else { return ( <> - + 実行完了! 🏁 - + ) } @@ -556,16 +556,16 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => { if (args.name === 'pressPlay') { if (locale === 'en') { return ( - + {args.capitalize ? 'T' : 't'} ry pressing - + ) } else { return ( - + を押してみてください: - + ) } } @@ -661,17 +661,17 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => { if (locale === 'en') { return ( <> - + Press : - + ) } else { return ( <> - + を押してみてください: - + ) } @@ -680,15 +680,15 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => { if (locale === 'en') { return ( <> - + Press : - + ) } else { return ( <> - + を押してみて {!args.girl && <>ください} {args.mentionRightArrow || args.skippable @@ -698,7 +698,7 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => { : args.girl ? '!' : ':'} - + {args.mentionRightArrow && } {args.skippable && ( @@ -730,7 +730,7 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => { <> 上の弁当箱を すると、 - 最終的に下のようになるでしょうか? + 最終的に下のようになるでしょうか? ) } @@ -785,7 +785,7 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => { if (args.sentence) { return ( <> - {childNode}でした。 + {childNode}でした。 ) } else { @@ -811,7 +811,9 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => { if (locale === 'en') { return <>? } else { - return まだ途中ですが、解説のため一旦止めます! + return ( + まだ途中ですが、解説のため一旦止めます! + ) } } if (args.name === 'pageNotFound') { @@ -835,9 +837,10 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => { const question = (

また、本稿の内容について質問がございましたら、 - - 上のツイートにスクリーンショット付きで返信 - + + 上のツイートにスクリーンショット付き + で返信 + してくだされば最優先で対応します。メール( shu@chibicode.com @@ -849,9 +852,9 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => { if (episodeNumber <= numEpisodesExceptFirstAndLast) { let quitReason: React.ReactNode if (episodeNumber === 0) { - quitReason = 時間がないからあとで読もう + quitReason = 時間がないからあとで読もう } else { - quitReason = 長いのでひと休みしよう + quitReason = 長いのでひと休みしよう } return ( @@ -862,17 +865,17 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => {

差し支えなければ、このページを閉じる前に - - 下のツイートをリツイート + + 下のツイートをリツイート してくださると、宣伝になるので非常に助かります。 - + {episodeNumber > 0 && ( <> もしくは、「 - + までは読み終えた - + 」と引用リツイートしてくださると、さらに励みになります。 )} @@ -887,7 +890,7 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => { <>

お疲れ様でした!本稿に対するご意見・ご感想を、ぜひ - 下のツイートを引用リツイートして + 下のツイートを引用リツイートして ご共有ください。

@@ -896,9 +899,9 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => {

本稿を読んで、「 - + プログラミング未経験者だけど、コンピュータサイエンスを学びたくなった。次は何を読めばいい? - + 」と思ってくださった方へ:

@@ -911,11 +914,11 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => {

というわけで、 - + 一定数の方がリクエストしてくださったら、続編を書こう - + かなと思っています。続編を書くとしたら、 - 人工知能 + 人工知能 についてプログラミング抜きに学べる教材を作りたいと考えています。

{ />

続編をリクエストしたい方は、 - + 以下のツイートの引用リツイートで「 - 続編が読みたい」と書いてくださると嬉しいです。 - + 続編が読みたい + 」と書いてくださると嬉しいです。 +


@@ -940,7 +944,7 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => {

宣伝: もしご興味があれば、わたしが共訳した書籍『 - ファクトフルネス + ファクトフルネス 』や、 @@ -1069,9 +1073,9 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => { } else { return ( <> - + 一回ずつ進める場合は、➡️ を押してください。 - + ) } @@ -1149,9 +1153,9 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => { return <>? } else { return ( - + 実行と変換完了! 🏁 - + ) } } @@ -1174,19 +1178,19 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => { if (locale === 'en') { return ( <> - + Converted to Mathbox!{' '} 🐶 - + ) } else { return ( <> - + 計算箱に変換しました{' '} 🐶 - + ) } @@ -1204,7 +1208,8 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => { } else { return ( <> - 「1を足す効果 」 + 「1を足す効果{' '} + 」 ) } @@ -1215,7 +1220,8 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => { } else { return ( <> - 「1を引く効果 」 + 「1を引く効果{' '} + 」 ) } @@ -1229,11 +1235,11 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => {
there’s only one item on the bottom row,
- + start with the pair of{' '} 2 ’s. - + ) } else { @@ -1256,7 +1262,7 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => { If there are multiple pairs of{' '} 1’s,
- start with the leftmost pair. + start with the leftmost pair. ) } else { @@ -1315,7 +1321,7 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => { <> 右下には 🅰️ がついた{' '} が「 - {args.number}個」 + {args.number}個
→ 計算箱に変換すると になる @@ -1340,7 +1346,11 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => { if (locale === 'en') { return <>? } else { - return 最後までスキップすることも可能です。 + return ( + + 最後までスキップすることも可能です。 + + ) } } if (args.name === 'slide') { @@ -1407,13 +1417,14 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => { content ) : ( <> - {content} + {content} ) } else { return ( <> - 1を足す機能 + 1を足す機能{' '} + ) } @@ -1430,13 +1441,14 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => { content ) : ( <> - {content} + {content} ) } else { return ( <> - 1を引く機能 + 1を引く機能{' '} + ) } @@ -1453,13 +1465,13 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => { content ) : ( <> - {content} + {content} ) } else { return ( <> - 繰り返しの機能 🔁 + 繰り返しの機能 🔁 ) } @@ -1470,7 +1482,8 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => { } else { return ( <> - 条件分岐の機能 + 条件分岐の機能{' '} + ) } diff --git a/src/components/NextLessonButton.tsx b/src/components/NextLessonButton.tsx index f1609c65c..edd7de24b 100644 --- a/src/components/NextLessonButton.tsx +++ b/src/components/NextLessonButton.tsx @@ -6,7 +6,7 @@ import H from 'src/components/H' import { remainingText } from 'src/lib/episodeCategories' import locale from 'src/lib/locale' import { colors, fontSizes, lineHeights, radii, spaces } from 'src/lib/theme' -import { Strong } from 'src/components/ContentTags' +import { HighlightBold } from 'src/components/ContentTags' import EpisodeContext from 'src/components/EpisodeContext' import GlobalContext from 'src/components/GlobalContext' import Emoji from 'src/components/Emoji' @@ -83,7 +83,7 @@ const NextLessonButton = ({ halfMargin }: { halfMargin?: boolean }) => { color: ${colors('grey700')}; `} > - {remainingText(nextEpisodeNumber)} + {remainingText(nextEpisodeNumber)} )} diff --git a/src/components/YesNoButtons.tsx b/src/components/YesNoButtons.tsx index 2ca7ab9fb..230b9f2a8 100644 --- a/src/components/YesNoButtons.tsx +++ b/src/components/YesNoButtons.tsx @@ -1,7 +1,7 @@ /** @jsx jsx */ import { css, jsx } from '@emotion/core' import React, { useContext } from 'react' -import { Em, P } from 'src/components/ContentTags' +import { Highlight, P, Bold } from 'src/components/ContentTags' import H from 'src/components/H' import locale from 'src/lib/locale' import { fontSizes, colors, radii, spaces } from 'src/lib/theme' @@ -149,14 +149,14 @@ const YesNoButtons = ({ answer }: YesNoButtonsProps) => { ) : ( - - + + {cardActionResult === 'correct' ? ( ) : ( )} - + {locale === 'en' && ' '} {cardActionResult === 'correct' ? ( @@ -168,7 +168,7 @@ const YesNoButtons = ({ answer }: YesNoButtonsProps) => { }} /> )} - + )}

diff --git a/src/contents/0.jp.tsx b/src/contents/0.jp.tsx index 1f7b4cb8c..468f087f0 100644 --- a/src/contents/0.jp.tsx +++ b/src/contents/0.jp.tsx @@ -4,11 +4,11 @@ import { numTotalPages } from 'src/lib/episodeCategories' import { - Em, + Highlight, Img, ExternalLink, P, - Strong, + HighlightBold, Bold, Ol, OlLi, @@ -36,10 +36,10 @@ export default () => ( content: ( <>

- こんにちは、上杉周作 + こんにちは、上杉周作 と申します。米国在住のプログラマ兼ブロガーです。2019年に日経BP社から発売された『 - ファクトフルネス + ファクトフルネス 』の共訳者でもあります。 @@ -58,11 +58,11 @@ export default () => (

- 本稿「{lessonTitle} + 本稿「{lessonTitle} 」は、 - + プログラミング未経験者向けの、邪道なコンピュータサイエンスの入門書 - + です。どういう意味かは、すぐに説明しますね!

( <> プログラミング未経験者向けの、
- 邪道なコンピュータサイエンスの入門書 + 邪道 + なコンピュータサイエンスの入門書 } />

- ちなみに、本稿は最後まで無料 + ちなみに、本稿は最後まで無料 で公開しており、スマホからもパソコンからも閲覧できます。

( }} /> - それぞれ5ページずつ、 + それぞれ5ページずつ、 それにこのページと「 ( /> 」を加えた - 全{numTotalPages}ページ - で構成されています。記事というよりは、電子書籍に近い + 全{numTotalPages}ページ + で構成されています。 + 記事というよりは、電子書籍に近い かもしれません。

大半の方は、 - - 読了までに約2〜3時間ほどかかる - + + 読了までに約2〜3時間ほどかかる + と思います。長いので、少しずつ読み進めてくださると嬉しいです。

@@ -152,15 +154,15 @@ export default () => ( content: ( <>

- 「前置きはいいから早く読みたい! + 「前置きはいいから早く読みたい! 」という方は、下のボタンを押して先に進んでください!

反対に「 - + 本稿についての説明を聞いてから読むかどうか決めたい! - + 」という方は、そのまま下に読み進めてみてください。

@@ -172,11 +174,15 @@ export default () => ( <>

本稿のタイトルは「 - {lessonTitle} + {lessonTitle} 」ですが、「 - そもそもコンピュータサイエンスって何?」 - と思われる方は多いでしょう。そんな方向けに、 - 非常に単純化したコンピュータサイエンスの定義 + + そもそもコンピュータサイエンスって何? + + 」 と思われる方は多いでしょう。そんな方向けに、 + + 非常に単純化したコンピュータサイエンスの定義 + を書いてみたいと思います。

( わたしたちの身の回りには、パソコンやスマホといった「コンピュータ」と、そのコンピュータ上で動く「 ソフトウェア 」がたくさんあります。身近なものでいえば、 - + 🔎 グーグルなどの検索エンジン、 🗺 地図アプリのナビ機能、📷{' '} カメラアプリの顔認識機能は、どれも「 ソフトウェア」です - + 。

( />

アプリ・ウェブサービス・ゲーム・AI・組み込みシステムやITシステム・仮想通貨など、「 - コンピュータプログラムによって機能するもの + コンピュータプログラムによって機能するもの 」はすべて、「ソフトウェア 」と呼ばれます。

そして「 - コンピュータサイエンス」とは、 - + コンピュータサイエンス」とは、 + こういったソフトウェアを開発したり、またはソフトウェアを用いて情報を処理する際に、 - 根幹となる学問のことを指す - + 根幹となる学問のことを指す + のです。

(
ソフトウェアを用いた情報処理の
- 根幹となる学問がコンピュータサイエンス + 根幹となる学問 + がコンピュータサイエンス } /> @@ -246,7 +253,7 @@ export default () => ( <>

コンピュータサイエンスという言葉をはじめて聞く方に、コンピュータサイエンスについて説明しようとすると、「 - プログラミングと何が違うの? + プログラミングと何が違うの? 」というご質問をよくいただきます。

( />

非常に単純化して言うと、「 - + コンピュータサイエンスは、プログラミングを支える - 『学問』 - + 『学問』 + 」です。この『学問』の部分が重要なのですが、そう言ってもピンと来ないかもしれないので、例えを用いて説明します。かなり乱暴な例えなのですが、わかりやすさを優先しているのでご了承ください。

@@ -276,9 +283,9 @@ export default () => ( <>

まず、 - + コンピュータサイエンスは「医学」に、プログラミングは「治療」に例えることができます。 - + お医者さんは、患者を治療することができますが、その治療法は医学に基づいていますよね。「こうすれば治る可能性が高い」と医学的に根拠があるからこそ、それに基づいた治療法を選ぶわけです。

( />

それと同じで、プログラマも、プログラミングをすることでソフトウェアを作ることができます。そして - + 医者にとっての医学のように、ソフトウェアを設計する際に指針のひとつとなる - + のがコンピュータサイエンスという学問なのです。

( />

医学の知識が浅い人が医者になってしまうと、間違った治療を施しかねません。それと同じで、 - + コンピュータサイエンスの知識が浅い人が高度なプログラミングを行った場合、非効率なプログラムを書いてしまいサーバー代がかさんだり、セキュリティーが脆弱なものになってしまう - + かもしれません。

また、 - + 医学もコンピュータサイエンスも、日々研究が行われ、進歩しています。 - + 医学の進歩によって、昔はどれほど優れた医者でも治療できなかった病気が、根絶できるようになったりしますよね。

同じように、 - + コンピュータサイエンスの進歩によって、以前はどれほど優れたプログラマでも作れなかったソフトウェアが、最近なら誰でも作れるようになったりします。 - + 最近だと、人工知能分野の進歩が著しく、以前は作るのが不可能とされていたようなAIアプリを、多くのプログラマが作れるようになりました。

( } />

- + 医学もコンピュータサイエンスも「学問」であり、日々の研究による学問の進歩が、治療やプログラミングといった現場の改善につながる - + わけですね。

@@ -356,7 +363,9 @@ export default () => ( <>

先ほどの例えを使えば、「 - コンピュータサイエンスを学ぶメリットはあるの? + + コンピュータサイエンスを学ぶメリットはあるの? + 」という質問にも答えることができます。

( />

医学の場合、まず大前提として、 - ほとんどの人が医者になることはありえません。 + + ほとんどの人が医者になることはありえません。 + その一方で、 - + 簡単な医学の知識は誰にでも身につけることができるし、身につけておくべきです。 - + たとえば、「タバコは体に悪い」というのは、誰もが知っておくべき初歩的な医学的知識ですよね。

( />

これと同じ話で、 - ほとんどの人がプログラマになることはありえません + + ほとんどの人がプログラマになることはありえません + 。その一方で、世の中はソフトウェア無しには回らなくなっており、この傾向は人工知能の発展とともに加速するでしょう。

だからこそ、 - + 多くの人が簡単なコンピュータサイエンスの知識を身につけるべき - + だと思うのです。たとえば最近だと、人工知能や仮想通貨がどういう仕組で動いているかなどは、基礎的なコンピュータサイエンスの知識があればすぐに理解できます。

( />

まとめると、 - + コンピュータサイエンスを学ぶメリットは、簡単な医学の知識を学ぶメリットと似ている - + と言えるかもしれません。

@@ -434,9 +447,9 @@ export default () => (

他に医学と似ていない点としては、 - + プログラミングの場合、学問の進歩よりも、現場の試行錯誤から生まれた最新技術のほうが、日々の業務に与える影響は圧倒的に大きい - + です。また、そういった最新技術がコンピュータサイエンスの学術論文に載ることは少ないです。

@@ -448,10 +461,11 @@ export default () => (

余談 (読み飛ばしてもOK):{' '} コンピュータサイエンスと医学は似ている部分もありますが、 - 似ていない部分もたくさんあります。たとえば、 - + 似ていない部分もたくさんあります + 。たとえば、 + 医者にはそう簡単になれませんが、コンピュータサイエンスの知識が無くてもプログラマになることはできます。 - +

) @@ -467,12 +481,15 @@ export default () => ( <>

誰もがコンピュータサイエンスを学ぶべきというわけで、このたび - コンピュータサイエンスの入門書 - を書きました。それが、本稿「{lessonTitle}」です。 + コンピュータサイエンスの入門書 + を書きました。それが、本稿「 + {lessonTitle}」です。

ただ、本稿はよくある入門書とは違い、 - 邪道なコンピュータサイエンスの入門書 + + 邪道なコンピュータサイエンスの入門書 + です。

( />

わたしはアメリカの大学でコンピュータサイエンスを学んだのですが、当時から教育者気質・作家気質だった筆者は、「 - いつかコンピュータサイエンスの入門書を書いてみたい + + いつかコンピュータサイエンスの入門書を書いてみたい + 」と考えていました。

( />

ただ、もちろんコンピュータサイエンスの入門書なんて掃いて捨てるほどあるので、何らかの差別化をしないと書く意味がありません。そこで思いついたのが、「 - 正統派の入門書ではなく、『邪道』な入門書を書く + + 正統派の入門書ではなく、『邪道』な入門書を書く + 」ということです。

本稿が「邪道」である理由は以下の2点です。

    - プログラミングの必要なし + プログラミングの必要なし - 高度な内容 + 高度な内容

それぞれどういうことか説明しますね!

@@ -516,7 +537,7 @@ export default () => ( <>

先に進みたい方へ:「 - 前置きはもういいから早く読みたい! + 前置きはもういいから早く読みたい! 」という方は、下のボタンを押して先に進んでください!

@@ -530,7 +551,7 @@ export default () => ( <>

本稿がコンピュータサイエンスの「邪道」な入門書である理由のひとつめは、 - プログラミングを行わないからです。 + プログラミングを行わないからです。

( />

正統派のコンピュータサイエンスの入門書は、「 - + プログラミングを行いながら、コンピュータサイエンスを学ぶ - + 」という教え方をします。

たしかにそのほうが効率が良いのですが、 - + ほとんどの人はプログラミング未経験者ですし、将来プログラマになることもありません。 - + またプログラミングは、スマホからだと非常にやりにくいです。

(

個人的には、 - + プログラマになる気がない、またはコンピュータサイエンスを専門として目指さないのであれば、 - + プログラミング抜きにコンピュータサイエンスだけを学ぶほうがいい - - + + と考えています。

@@ -582,9 +603,9 @@ export default () => ( <>

そのためにはどうすればいいかというと、 - + プログラミングの代わりに、プログラミングに似たパズルを使って学べばいい - + のです。

( <> プログラミングの代わりに、
- プログラミングに似たパズルで学ぶ + プログラミングに似たパズル + で学ぶ } />

本稿では、以下のようなパズルを解きながらコンピュータサイエンスの題材を学んでいきます。以下のパズルがどういう仕組みかは次のページで説明しますが、とりあえず - + {' '} ボタンを押してみると、パズルが動くことを確認できます。 - +

以下のようなパズルを解きながら学びます。 @@ -611,9 +633,9 @@ export default () => (

上記のように、 - + 本稿で紹介するパズルはすべて、スマホからでもパソコンからでも行えます。 - +

( <>

対象が子供の場合は話が違います。 - + 子供向けの学校教育の場合、大人よりは学びに使える時間がたくさんあるので、プログラミングとコンピュータサイエンスの両方を教えるべきだと思います。 - +

(

余談 (読み飛ばしてもOK):{' '} 「プログラミング無しにコンピュータサイエンスを学ぶべき」というのは、 - あくまで対象が忙しい大人である場合 + + あくまで対象が忙しい大人である場合 + に当てはまります。

@@ -681,7 +705,8 @@ export default () => ( <>

本稿がコンピュータサイエンスの「邪道」な入門書である理由のふたつめは、 - 高度な内容を取り扱っているからです。 + 高度な内容を取り扱っている + からです。

( />

正統派のコンピュータサイエンスの入門書は、 - 初歩的な内容 + 初歩的な内容 を教えます。それはそれで良いと思うのですが、本稿では逆に、みなさんに - 高度な内容 + 高度な内容 を学んでもらいます。

- 本稿は2〜3時間程度 + 本稿は2〜3時間程度 で読み切れる長さを目標にしているのですが、そのくらいの文量だと、コンピュータサイエンスのすべてを語ることは到底できません。 だから、 - + わたしはその限られた文量の中で、「 - 自分にもコンピュータサイエンスを学べるかも + + 自分にもコンピュータサイエンスを学べるかも + 」と思うきっかけを読者に提供したい - + と考えています。

( />

そのためには - + 初歩的な内容ではなく、高度な内容を教えるほうが良い - + と思っています。

なぜなら、 - + もし高度な内容を理解することができれば、それより易しい他の分野も理解できる - + ということを自覚してもらえるからです。「 - + わたしでも高度な内容を理解できた。だったら、他の内容も学べるはずだ! - + 」と思ってもらいたいのです。それが、「 - 自分にもコンピュータサイエンスを学べるかも + 自分にもコンピュータサイエンスを学べるかも 」という自信につながると考えています。

( />

また、このページを開き、ここまで読んでくださったあなたは、おそらく - 知的好奇心がとても旺盛 + 知的好奇心がとても旺盛 な方なのでしょう。そういう方々は、 - + あまりにも内容が簡単すぎると、退屈で物足りないと感じてしまう - + かもしれません。だから、知的好奇心が旺盛な方にでも「面白い」と思っていただけるように、内容は高度にしています。


とはいえ、内容が高度すぎて、誰にも理解されなかったら本末転倒です。だから、 - + 内容は万人向けとは言えないものの、なるべく多くの方に最後まで読んでいただけるように、できる限り分かりやすく説明させていただきます - + 。

また、高度な内容とはいえ、 - + 数学やプログラミングなどの事前知識は一切必要ありません - + ので、ご安心ください。

( <>

では、本稿で取り扱う高度な内容とは何かというと、タイトルにもある「 - Yコンビネータ」です。 + Yコンビネータ」です。 Yコンビネータ とは、タイトルにもある通り - 魔法のような力を持つ、とあるコンピュータサイエンスの概念 + + 魔法のような力を持つ、とあるコンピュータサイエンスの概念 + です。

( 魔法のような力を持つ
とあるコンピュータサイエンスの概念、 -
Yコンビネータ」について学ぶ +
Yコンビネータ + 」について学ぶ } />

- Yコンビネータは、初歩的な題材では全くありません。 + + Yコンビネータは、初歩的な題材では全くありません。 + わたしの大学だと、Yコンビネータは - コンピュータサイエンス専攻の2〜3年生 + コンピュータサイエンス専攻の2〜3年生 が学ぶ高度な題材でした。しかも、マニアックな題材で実用的ではなく、知っていても業務に役立つことはありません。

なぜそんなマニアックな題材を選んだかというと、 - + Yコンビネータには、コンピュータサイエンスの面白さや魅力が凝縮されている - + からです。これについては、最後まで読んでいただくと分かると思うので、ぜひ楽しみにしていてください。

@@ -834,9 +866,9 @@ export default () => ( <>

- + Yコンビネータは、シリコンバレーで最も有名なITベンチャー養成機関の名でもあります。 - + AirBnBをはじめとする超有名ITベンチャーを多数輩出しており、 約2000社の卒業企業のうち、トップ100社の企業価値を合計すると @@ -845,9 +877,9 @@ export default () => ( 。

- + では、なぜYコンビネータという名称がつけられたのでしょうか? - + Yコンビネータ創業者のひとり、ポール・グレアム氏は インタビューでこう語っていました @@ -861,20 +893,22 @@ export default () => ( children: ( <>

- - + + Yコンビネータとは、プログラミングのテクニックのひとつです。 - - {' '} + + {' '} (中略) 個人的に、 Yコンビネータがあまりにも興味深いテクニックだと思ったので、われわれのITベンチャー養成機関もそう名付けてしまったのです。しかし結果的には、 - われわれが投資する起業家を選別する + + われわれが投資する起業家を選別する + 際に、この名前が役立ちました。

- + わたしたちは凄腕プログラマの起業家は招き入れたかったが、スーツ姿のビジネスパーソンは門前払いにしたかった。 - + 凄腕プログラマがわたしたちのことを聞いたら、こう思うでしょう。「Yコンビネータって名のITベンチャー養成機関だって?最高じゃん!きっと、面白い人たちが集まっているに違いない」と。

@@ -887,7 +921,9 @@ export default () => ( />

つまり、彼らは凄腕プログラマの起業家に投資したかった。だから、「Yコンビネータ」という - 高度なコンピュータサイエンスの専門用語 + + 高度なコンピュータサイエンスの専門用語 + をITベンチャー養成機関の名前につけることで、凄腕プログラマを呼び寄せたのです。

@@ -904,9 +940,9 @@ export default () => ( } />

- + しかし、本稿を読めば、プログラマではなくてもYコンビネータを理解できます - + 。ITベンチャー養成機関としての「Yコンビネータ」をご存知の方も、ぜひ読み進めてみてください!

@@ -916,11 +952,12 @@ export default () => ( content: ( <>

- ちなみに: IT業界にいる方 + ちなみに:{' '} + IT業界にいる方 の中には、「 - + Yコンビネータって、シリコンバレーにあるITベンチャー養成機関のこと? - + 」と思われた方もいるかと思います。そんな方は、↓の「続きを読む」を押してみてください。「聞いたことない」という方はそのまま先に進んでください。

@@ -937,9 +974,9 @@ export default () => ( <>

もし本稿が正統派のコンピュータサイエンスの入門書だったら、みなさんからお代を頂戴していたかもしれません。 - + しかし、本稿は邪道な入門書なので、最初から最後まで無料で提供しています。 - +

( />

だからというのも何ですが、 - 内容には期待しすぎないでください + 内容には期待しすぎないでください 。無料なので、有料の入門書に比べてクオリティは高くはありません。

( />

さらに言うと、 - 本稿は実用的な内容ではありません + 本稿は実用的な内容ではありません 。最後まで読み終えても、日々の暮らしや、キャリアに役立つ気づきは得られないないでしょう。

ただその代わりに、 - + もしかしたら読後に「コンピュータサイエンスを学んでみたい」という気持ちが芽生えるかもしれません。 - +

( } />

- あるいは、「難しすぎる。自分には向かない + あるいは、「難しすぎる。自分には向かない 」と思われる方もいるかもしれません。そう思われたとしたらわたしの力不足ですので、申し訳ないです。

@@ -990,17 +1027,17 @@ export default () => ( <>

本稿は - プログラミング未経験者向け + プログラミング未経験者向け です。プログラマの方にとって有益かどうかは、正直微妙かもしれません。

- + 本稿で説明する内容は、プログラミングを使うと一瞬で説明できます。 - + しかし、前述の理由から、あえてプログラミングを使わないで説明するので、 - + プログラマの方にとっては非常に回りくどい説明に感じられる - + と思います。数式を使わずに数学をやるようなものです。

( />

したがって、プログラマの方向けのYコンビネータの教材としては、本稿はおすすめできません。しかし、その代わりにおすすめできる教材があります。 - + プログラマの方で、「Yコンビネータって何?」と思われた方は、↓の「続きを読む」を押してみてください。 - +

), @@ -1064,9 +1101,9 @@ export default () => ( />

もしも「 - + とりあえず読んでみたい 🙂 - + 」と思ってくださったのであれば、下のボタンを押して先に進んでみてください!

diff --git a/src/contents/1.en.tsx b/src/contents/1.en.tsx index d19e22b5a..75094fd42 100644 --- a/src/contents/1.en.tsx +++ b/src/contents/1.en.tsx @@ -1,6 +1,14 @@ import React from 'react' import EpisodeCardList from 'src/components/EpisodeCardList' -import { P, Strong, Em, Bold, Ul, UlLi, Hr } from 'src/components/ContentTags' +import { + P, + HighlightBold, + Highlight, + Bold, + Ul, + UlLi, + Hr +} from 'src/components/ContentTags' import H from 'src/components/H' import Emoji from 'src/components/Emoji' import CustomEmoji from 'src/components/CustomEmoji' @@ -18,8 +26,9 @@ export default () => ( <>

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{' '} + “mathboxes”, one of the key items + of this story.

( <>

Once upon a time, there was a rural village called{' '} - “Lambda Village”. The villagers worked to earn - just enough for a modest lifestyle. + “Lambda Village”. The villagers + worked to earn just enough for a modest lifestyle.

Lambda Village and the villagers} />

- In Lambda Village, a tool called “Mathbox” has - been passed down from one generation to next. As its name - suggests, a mathbox is a magical tool that can solve{' '} - math questions. You can think of it as a{' '} - simple calculator. + In Lambda Village, a tool called{' '} + “Mathbox” has been passed down from + one generation to next. As its name suggests, a{' '} + mathbox is a magical tool that can solve{' '} + math questions. You can think of it as a{' '} + simple calculator.

( ]} description={ <> - Mathbox is a magical tool that can do math. + Mathbox is a magical tool that + can do math. } /> @@ -85,7 +96,7 @@ export default () => ( content: ( <>

- Here’s an example mathbox: + Here’s an example mathbox:

Mathbox @@ -123,29 +134,29 @@ export default () => ( <>

Each mathbox has a{' '} - + button - + . If you press it, the mathbox calculates the result.{' '} - + - {' '} + {' '} on the mathbox below.

- + The result is - + . That means it calculated {' '} . 🙂


Let’s look at other mathboxes.{' '} - + - {' '} + {' '} on this one:

@@ -177,23 +188,23 @@ export default () => (
    - + There’s some number on the top, and… - + - + There’s on the bottom. That means… - + - + If you it, the result will be {' '} . - +
(

This is the first feature of mathbox:{' '} .{' '} - + It lets you add to some number - + .

( content: ( <>

- Mathboxes can also subtract 1 from a number.{' '} - below: + Mathboxes can also subtract 1 from + a number. {' '} + below:

@@ -255,12 +267,12 @@ export default () => (


Summary:{' '} - + If you combine with{' '} , it will calculate{' '} {' '} . - +

Calculates {' '} @@ -269,9 +281,9 @@ export default () => (

This is the second feature of mathbox:{' '} .{' '} - + It lets you subtract from some number - + .

( <>

Important: You can{' '} - + only use and{' '} - {' '} + {' '} in mathboxes.

( Question: If you can only use{' '} and , then{' '} - + how do you calculate something like {' '} - {' '} + {' '} using a mathbox? 🤔

@@ -354,9 +366,9 @@ export default () => (

Answer: To calculate {' '} ,{' '} - + use twice - {' '} + {' '} on .

( <>

Note: You can use both{' '} - + and{' '} as many times as you like - + . 😉

( />

Example: This one uses{' '} - + three times - {' '} + {' '} to calculate {' '} .

@@ -439,9 +451,9 @@ export default () => (

Another Example: This one uses{' '} - + four times - {' '} + {' '} to calculate {' '} .

@@ -459,10 +471,10 @@ export default () => (

Takeaway: By using and{' '} many times, you can{' '} - + calculate any addition or subtraction, no matter how large the numbers are - {' '} + {' '} .

( />

Answer: Combine{' '} - + with ten{' '} ’s - + .

@@ -526,9 +538,9 @@ export default () => ( <>

Summary: A Mathbox is a{' '} - + magical tool that can calculate additions and subtractions - + .

( />

Why mathboxes were important: The villagers in Lambda - Village were all very bad at math. They even had - to rely on mathboxes to calculate simple additions like{' '} - {' '} + Village were all very bad at math. + They even had to rely on mathboxes to calculate simple additions + like {' '} .

( <>

Note:{' '} - + Unfortunately, mathboxes cannot do{' '} - multiplications ✖️ or{' '} - divisions . - + multiplications{' '} + ✖️ or divisions{' '} + . +

( <>

Next up: It turns out that mathboxes have{' '} - one more feature other than{' '} + one more feature other than{' '} and{' '} that we just described.

diff --git a/src/contents/1.jp.tsx b/src/contents/1.jp.tsx index af7c1cd05..4ff3611aa 100644 --- a/src/contents/1.jp.tsx +++ b/src/contents/1.jp.tsx @@ -1,6 +1,14 @@ import React from 'react' import EpisodeCardList from 'src/components/EpisodeCardList' -import { P, Strong, Em, Bold, Ul, UlLi, Hr } from 'src/components/ContentTags' +import { + P, + HighlightBold, + Highlight, + Bold, + Ul, + UlLi, + Hr +} from 'src/components/ContentTags' import H from 'src/components/H' import Emoji from 'src/components/Emoji' import CustomEmoji from 'src/components/CustomEmoji' @@ -17,13 +25,13 @@ export default () => ( content: ( <>

- 本稿はゆるい物語調 + 本稿はゆるい物語調 で話を進めていきます。ちなみに、この話はフィクションです。 😉

まずは、この物語に登場する「 - 計算箱」の話をしましょう。 + 計算箱」の話をしましょう。

( content: ( <>

- むかしむかし、「ラムダ村 + むかしむかし、「ラムダ村 」という小さな山奥の村があり、村人が仲良く暮らしていました。

( description={<>ラムダ村の村人たち} />

- ラムダ村には、代々伝わる「計算箱 + ラムダ村には、代々伝わる「計算箱 」という道具がありました。計算箱 - は、その名の通り算数の計算をしてくれる - 魔法の道具です。現代の電卓のようなもの + は、その名の通り算数の計算をしてくれる + 魔法の道具です。現代の電卓のようなもの だと思ってください。

( ]} description={ <> - 計算ができる魔法の道具「計算箱」 + 計算ができる魔法の道具「計算箱 + 」 } /> @@ -77,8 +86,8 @@ export default () => ( <>

ちなみに: 「ラムダ村」は、 - 上から読んでも下から読んでも「ラムダ村」です。 - なぜ「ラムダ」と名付けたかは最後に説明します! + 上から読んでも下から読んでも「ラムダ村」 + です。 なぜ「ラムダ」と名付けたかは最後に説明します!

) @@ -90,7 +99,7 @@ export default () => ( <>

こちらをご覧ください。これが、ラムダ村の村人が使っていた「 - 計算箱」のひとつです。 + 計算箱」のひとつです。

計算箱 @@ -125,19 +134,19 @@ export default () => ( <>

それぞれの計算箱には - + ボタン - + がついており、それを押すと計算が実行されます。試しに、下の計算箱で - + - +

- + 結果は になりました - + 。つまり、 {' '} が計算できたということです。 @@ -145,9 +154,9 @@ export default () => (


他の計算箱も見てみましょう!たとえばこちらをご覧になり、 - + - +

@@ -166,22 +175,22 @@ export default () => (

    - + 上に何らかの数字 {' '} が入っていて、 - + - + 下に が入っている場合、 - + - + すると結果は{' '} {' '} になる - +

ということです。

@@ -196,10 +205,10 @@ export default () => ( これが、計算箱に備わっている機能のひとつ、「 」です。この機能を使えば、 - + 何らかの数字に {' '} を足す計算を行うことができる - + のです。

( ]} description={ <> - 計算箱の1を足す機能: + 計算箱の1を足す機能:
何らかの数字に を足す @@ -224,7 +233,8 @@ export default () => ( content: ( <>

- 計算箱は「1を足す」だけではなく、「1を引く + 計算箱は「1を足す」だけではなく、「 + 1を引く 」計算をすることもできます。こちらの計算箱を してみてください: @@ -239,12 +249,12 @@ export default () => (


このように、 - + 何らかの数字 の下に{' '} が入っていると、 {' '} を計算することができる - + のです。

@@ -265,7 +275,7 @@ export default () => ( ]} description={ <> - 計算箱の1を引く機能: + 計算箱の1を引く機能:
何らかの数字から を引く @@ -285,10 +295,10 @@ export default () => ( <>

ここが重要なポイントなのですが、計算に使うことができるのは{' '} - + と{' '} だけです - + 。

( {' '} を計算したい場合、 に加えて{' '} - + を2回 - + 使えばいいのです。

( <>

ちなみに、 - + も{' '} {' '} も、どちらも何回でも使うことができます - + 。😉

( />

たとえば、下の計算箱は、 - + を3回 - + 使うことで、 {' '} を計算してくれます。 @@ -422,9 +432,9 @@ export default () => (

一方、下の計算箱は、 - + を4回 - + 使うことで、 {' '} を計算してくれます。 @@ -444,7 +454,10 @@ export default () => ( つまり、 {' '} を何度も使うことで、 - どんな大きな数字の足し算でも引き算でも可能なのです。 + + どんな大きな数字の足し算でも引き算でも可能なのです + + 。

( />

答えを言うと、 - + の下に{' '} {' '} を10回配置した計算箱を実行すればいい - + のです。

@@ -497,8 +510,10 @@ export default () => (

このようにすれば、 - 計算箱はどんな大きな数字の足し算でも引き算でもできます。 - 😉 + + 計算箱はどんな大きな数字の足し算でも引き算でもできます + + 。😉

) @@ -509,7 +524,9 @@ export default () => ( <>

まとめると、 - 計算箱は足し算や引き算を行ってくれる魔法の道具 + + 計算箱は足し算や引き算を行ってくれる魔法の道具 + というわけです。

( description={<>計算箱は足し算や引き算ができる} />

- そして、ラムダ村の村人は計算がとても苦手でした。 + そして、ラムダ村の村人は + 計算がとても苦手でした。 だから、たとえば「 {' '} @@ -552,12 +570,12 @@ export default () => ( <>

ちなみに:{' '} - - 残念ながら、計算箱は「掛け算{' '} + + 残念ながら、計算箱は「掛け算{' '} ✖️ - 」や「割り算 + 」や「割り算 」を行うことはできませんでした。 - +

( content: ( <>

- + 実は計算箱には、今回紹介した「 」や「 」以外にも、 - さらにもうひとつ + さらにもうひとつ の機能があります。 - +

( children: ( <>

- それらは、まだ返すわけにはいかないな。 + + それらは、まだ返すわけにはいかないな。 +

- + いまお前たちに返せるのは、「 」がある計算箱だけだ。 - +

) @@ -126,9 +135,9 @@ export default () => ( <>

計算箱を返すとは言ったが… - + 計算箱のすべての機能を返すとは言っていないからな! - +

) @@ -176,11 +185,11 @@ export default () => ( <>

そうだな…先ほどの問題ではお前たちに、 - + 計算箱の「 」を弁当箱で再現してもらった - + よな。

@@ -202,15 +211,15 @@ export default () => ( <>

だから、 - + 」や「 」を返してほしかったら、 - + それらを同じように弁当箱で再現してみることだな! - - + +

) @@ -281,10 +290,12 @@ export default () => ( 」や「 」がないと、 - - 引き算や、大きな数の足し算・引き算 + + + 引き算や、大きな数の足し算・引き算 + ができないよ! - +

俺らは計算箱がないと何もできないんだ!

@@ -332,10 +343,10 @@ export default () => (

わかりました。こちらの弁当箱をご覧ください。

前回と同じく、 - + それぞれの {' '} には何らかの料理が入ります。 - +

) @@ -363,12 +374,12 @@ export default () => ( <>

そして、 - + それぞれの {' '} に、ある法則に基づいて料理を入れると、 がある弁当箱になります。 - +

) @@ -378,7 +389,7 @@ export default () => ( それぞれの に、
- ある法則に基づいて料理を入れると、 + ある法則に基づいて料理を入れると、
がある弁当箱になる @@ -413,23 +424,23 @@ export default () => (

    - + ある数字 {' '} に変換できる弁当箱と合体させ、 - + - + すると、 - +

- + 結果は {' '} になる - + のです。

@@ -551,10 +562,10 @@ export default () => (

前回もやったように、 - + {' '} に変換できる弁当箱と合体させてみよう。 - +

( つまり、 した時に、 - + 結果が {' '} になれば成功というわけだ。 - +

(
して、結果が になれば - 成功 🎉 + 成功 🎉
- それ以外なら失敗 😭 + それ以外なら失敗 😭 ( children: ( <>

- すべてを目で追う必要はないですよ! + + すべてを目で追う必要はないですよ! + なんとなく、「へー、こんなふうに進んでいくんだ」と思っていただければ大丈夫です。

また、「 - + → - + 」を押して、飛ばしていただいても結構です。

@@ -694,7 +707,7 @@ export default () => ( <>

それより見てみて! - + 途中で{' '} ( bottomRightBadgeType="funcUnbound" />{' '} が同じ になったよ! - +

前回と同じように - + 特別ルールで、 {' '} が別の料理に変わる - + んだよね。

@@ -727,9 +740,9 @@ export default () => ( />

特別ルールを実行するには、 - + を押してみてください! - +

( <>

ということは、サヤちゃんの弁当箱は…

- + {' '} に変換できる弁当箱と合体させ、 すると、結果が になる - + ということですね。

@@ -824,7 +837,8 @@ export default () => ( つまり、 {' '} が計算できたので、 - 成功です! 🎉 + 成功です!{' '} + 🎉

) @@ -869,19 +883,19 @@ export default () => ( ぐぬぬ…しかし、 {' '} が計算できたからといって、 - + その弁当箱に があるとはまだ言い切れない - + ぞ。

たとえば、 - + {' '} は計算できるのかな? - +

) @@ -904,10 +918,10 @@ export default () => ( <>

じゃあ、 - + {' '} に変換できる弁当箱と合体させてみる - + ね!

@@ -923,9 +937,9 @@ export default () => ( 合体したものを して、 - + 結果が になればいい - + んだよね。

@@ -943,9 +957,9 @@ export default () => (
して、結果が になれば - 成功 🎉 + 成功 🎉
- それ以外なら失敗 😭 + それ以外なら失敗 😭 (

    - 今回は、最後まで止まらずに早送りするね! + 今回は、 + + 最後まで止まらずに早送りするね! + - 複雑なので、目で追わなくても大丈夫だよ! + 複雑なので、 + 目で追わなくても大丈夫だよ! ちょっと時間がかかるので、待てない方は下の「 - + → - + 」を押してね!
@@ -1008,7 +1026,8 @@ export default () => ( つまり、 {' '} が計算できたので、 - またしても成功です! 🎉 + またしても成功です!{' '} + 🎉

) @@ -1051,11 +1070,11 @@ export default () => ( <>

まさか、こうも簡単に正解されるとは思わなかったが…

- + サヤちゃんが考えた弁当箱は、 がある弁当箱だ! - {' '} + {' '} 🎉

@@ -1085,11 +1104,11 @@ export default () => ( <>

ちなみに、サヤちゃんが考えた弁当箱以外にも、 - + 以下の法則に当てはまる弁当箱であれば、 どれでも があるぞ。 - +

) @@ -1146,11 +1165,11 @@ export default () => ( <>

今回学んだことを一言でまとめると、 - + 計算箱の「 」も、弁当箱で「再現」できる - + 、ということです。

( 」は、
- 弁当箱で「再現」することができる + 弁当箱で「再現 + 」することができる } /> @@ -1182,11 +1202,11 @@ export default () => (

これを弁当箱で再現するには、 - + に変換できる弁当箱と、 がある弁当箱を合体すればいい - + のです。

@@ -1208,11 +1228,11 @@ export default () => (

まとめると、 - + 計算箱の「 」も、弁当箱で再現することができる - + のです。このポイントさえ覚えていただければ、細かいことは分からなくても大丈夫です!

( 」も、
- 弁当箱で「再現」することができる + 弁当箱で「再現 + 」することができる } /> @@ -1246,9 +1267,9 @@ export default () => (

前回話した通り、 - + 答えを思いつけなくても、答えを見て、「なるほど、そういうことだったのか」と理解できれば、コンピュータサイエンスを学ぶ素養は十分すぎるほどあります。 - +

) @@ -1316,10 +1337,10 @@ export default () => ( <>

しかし、 - + 」がある計算箱は、まだ返すわけにはいかないな。返してほしかったら、これらも弁当箱で再現してみるんだな! - +

) @@ -1364,7 +1385,7 @@ export default () => ( children: ( <>

- ちなみに、中級編はここまでだ。 + ちなみに、中級編はここまでだ。 決着は、次からはじまる上級編でつけよう!

diff --git a/src/contents/11.jp.tsx b/src/contents/11.jp.tsx index c06a4968a..7360ce42e 100644 --- a/src/contents/11.jp.tsx +++ b/src/contents/11.jp.tsx @@ -1,6 +1,14 @@ import React from 'react' import EpisodeCardList from 'src/components/EpisodeCardList' -import { P, Strong, Hr, Em, Ul, UlLi, Bold } from 'src/components/ContentTags' +import { + P, + HighlightBold, + Hr, + Highlight, + Ul, + UlLi, + Bold +} from 'src/components/ContentTags' import H from 'src/components/H' import BubbleQuotes from 'src/components/BubbleQuotes' import EmojiNumber from 'src/components/EmojiNumber' @@ -133,9 +141,9 @@ export default () => ( こちらも復習になりますが、ラムダ村の村人たちにとって、計算箱の「 」は、 - + 大きな数の足し算や引き算をするときに欠かせない機能 - + でした。

( を10回配置

- + しかし初級その2でもやった通り、 の数が増えると、 {' '} の数を間違えてしまう可能性があります。 - + そうすると、正しい計算ができません。

( 」を、
- 弁当箱でどう「再現」する? + 弁当箱でどう「再現」する? } /> @@ -231,11 +239,11 @@ export default () => ( <>

うーん、 - + どんなに考えても、計算箱の「 」を弁当箱で再現することができない… - +

サヤちゃん、何か思いついた?

@@ -271,7 +279,7 @@ export default () => ( <>

みなさん、なかなかお困りのようですね。よければ、 - ヒントを出しましょうか? + ヒントを出しましょうか?

) @@ -364,12 +372,12 @@ export default () => ( <>

まず、 - + それぞれの {' '} {' '} {' '} には数字を入れることができます。 - + 同じ数字を入れても構いませんし、違う数字を入れても構いません。

@@ -408,12 +416,12 @@ export default () => (

というわけで、 - + {' '} {' '} {' '} に何か適当な数字を入れてみてください! - +

) @@ -424,11 +432,11 @@ export default () => ( <>

分かった。とりあえず、{' '} - + 上から順に {' '} {' '} を入れてみたよ。 - +

これで、 @@ -486,7 +494,7 @@ export default () => (

」はまず、 - + ( }} />{' '} に入っている数字が かどうか - + チェックします。

@@ -539,7 +547,7 @@ export default () => ( である場合、 - + ( }} />{' '} に入っている数字が最終的に残るのです。 - + @@ -700,7 +708,7 @@ export default () => (

この場合は、 - + ( }} />{' '} に入っている数字が最終的に残ります。 - +

) @@ -730,7 +738,9 @@ export default () => (

なるほど… は、「 - ゼロ以外の数字の場合はこちら + + ゼロ以外の数字の場合はこちら + 」という意味なんだね。

@@ -760,31 +770,31 @@ export default () => ( 」がある計算箱

- + まず、 {' '} の中にある が{' '} かどうかチェックします。 - +

- + もし なら、{' '} {' '} の中にある が残ります。 - +

- + もし でなければ、 {' '} の中にある が残ります。 - +

( <>

なるほど、「 - + かどうか? - + 」という「 - 条件」によって 「分岐 + 条件」によって 「 + 分岐 」するから、「 」なのか。 @@ -820,12 +831,12 @@ export default () => ( description={ <> 「 - + かどうか? - + 」という -
条件」によって 「 - 分岐」するから 「 +
条件」によって 「 + 分岐」するから 「 」 } @@ -847,9 +858,9 @@ export default () => ( この「 」は、 - + 実は計算箱にもともと備わっていた隠れ機能 - + なんです。

@@ -885,9 +896,9 @@ export default () => ( そうなんです。「 」は - + あまり役に立たないので、いつしか忘れ去られてしまった - + のです。

@@ -899,9 +910,9 @@ export default () => ( <>

たしかに、「 - + かどうか? - + 」をチェックできても、何の役にも立たなさそうだけど…

@@ -915,11 +926,11 @@ export default () => ( しかし、この「 」は、 - + 実は「 」と関連がある - + のです。

@@ -1062,7 +1073,7 @@ export default () => ( emojis={['❓', '🍱', '❓']} description={ <> - 弁当箱で再現できたら… + 弁当箱で再現できたら… } /> diff --git a/src/contents/12.jp.tsx b/src/contents/12.jp.tsx index cdbbea717..1a3fa09af 100644 --- a/src/contents/12.jp.tsx +++ b/src/contents/12.jp.tsx @@ -1,6 +1,12 @@ import React from 'react' import EpisodeCardList from 'src/components/EpisodeCardList' -import { P, Strong, Em, Ul, UlLi } from 'src/components/ContentTags' +import { + P, + HighlightBold, + Highlight, + Ul, + UlLi +} from 'src/components/ContentTags' import H from 'src/components/H' import BubbleQuotes from 'src/components/BubbleQuotes' import EmojiNumber from 'src/components/EmojiNumber' @@ -24,7 +30,9 @@ export default () => ( content: ( <>

- このページから、本格的に上級向けになります。 + + このページから、本格的に上級向けになります。 + 前のページに比べて、読むのに時間がかかるかもしれません。

( emojis={['❓', '🍱', '❓']} description={ <> - 弁当箱で再現できる? + 弁当箱で再現できる? } /> @@ -64,11 +72,11 @@ export default () => ( <>

復習すると、上の計算箱は、 - + もし が{' '} なら真ん中の{' '} が残り… - +

) @@ -84,11 +92,11 @@ export default () => ( <>

そして、 - + もし が{' '} 以外の数字なら、上の{' '} が残るんだよな。 - +

) @@ -171,14 +179,14 @@ export default () => ( <>

では、まずサヤの弁当箱の一番下の「 - + {' '} に変換できる弁当箱 - + 」のところに、「 - + に変換できる弁当箱 - + 」を入れてみるね。

@@ -188,9 +196,9 @@ export default () => ( /> 一番下の 「 - + に変換できる弁当箱 - + 」
のところに、 に変換できる @@ -204,14 +212,14 @@ export default () => ( children: ( <>

- + 使うのは、 - + こちらの {' '} に変換できる弁当箱 - + です! - +

( /> 「 - + に変換できる弁当箱 - + 」のところに、
- + に変換できる弁当箱 - + を入れてみた -
(一番下の黄色の部分) +
(一番下の黄色の部分)
( <>

たしかに、 - + 両方とも を入れると{' '} が残る - + ね!

@@ -334,14 +342,14 @@ export default () => ( <>

次は、サヤの弁当箱の一番下の「 - + {' '} に変換できる弁当箱 - + 」のところに、「 - + に変換できる弁当箱 - + 」を入れてみるね。

@@ -351,9 +359,9 @@ export default () => ( /> 一番下の 「 - + に変換できる弁当箱 - + 」
のところに、 に変換できる @@ -367,14 +375,14 @@ export default () => ( children: ( <>

- + 使うのは、 - + こちらの {' '} に変換できる弁当箱 - + です! - +

( /> 「 - + に変換できる弁当箱 - + 」のところに、
- + に変換できる弁当箱 - + を入れてみた -
(一番下の黄色の部分) +
(一番下の黄色の部分)
( <>

たしかに、 - + 両方とも を入れると{' '} が残る - + ね!

@@ -510,7 +518,7 @@ export default () => ( 👧🏻 サヤちゃんが弁当箱で再現してみた!
- 果たして、これが正解なのか? + 果たして、これが正解なのか?
(

いちおう最終チェックとして、

    - + {' '} {' '} {' '} の全てを埋めてみて、 - + - + それをサヤの弁当箱でも再現できるかやってみるよ! - +
@@ -585,19 +593,19 @@ export default () => (

たとえば、

    - + 条件分岐の機能がある計算箱の{' '} {' '} {' '} に、 - + - + それぞれ {' '} {' '} を入れた場合… - + 最終的に が残るよね。 @@ -634,22 +642,23 @@ export default () => ( <>

    では、 - + サヤの弁当箱の {' '} {' '} にも{' '} {' '} を入れてみるよ。 - +

    これを したとき、 - + 先ほど同じく結果が になれば - 成功 🎉{' '} - というわけだよね。 - + + 成功 + 🎉 というわけだよね。 +

    ) @@ -672,11 +681,11 @@ export default () => ( - + に変換できる弁当箱
    - になれば成功 🎉 -
    + になれば成功 🎉 +
    (

      - 複雑なので、目で追わなくても大丈夫だよ! + 複雑なので、 + 目で追わなくても大丈夫だよ! ちょっと時間がかかるので、待てない方は下の「 - + → - + 」を押してね!
    @@ -767,7 +777,9 @@ export default () => (

    だから、 が残ったので、 - 成功 🎉 です! + + 成功 + 🎉 です!

    ) @@ -837,12 +849,12 @@ export default () => ( <>

    ちなみに、 - + 以下のような 🅰️ 🅱️{' '} {' '} {' '} の法則に沿っていれば、それぞれに何の料理が入っていても、条件分岐の機能を再現することができます。 - +

    ) @@ -862,11 +874,11 @@ export default () => ( <>

    まとめると、 - + 計算箱の「 」も、弁当箱で再現することができる - + のです。このポイントさえ覚えていただければ、細かいことは分からなくても大丈夫です!

    @@ -888,7 +900,8 @@ export default () => ( 」も、
    - 弁当箱で「再現」することができる + 弁当箱で「再現 + 」することができる } /> @@ -949,7 +962,7 @@ export default () => ( 「 」は、「 - 」と関連があるのです。 + 」と関連があるのです。

    ) @@ -1043,7 +1056,9 @@ 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: ( <>

    - このページからまた難易度がアップします。 + + このページからまた難易度がアップします。 + ただ、 - + 内容を完全に理解する必要はありません。少しくらい分からなくても、雰囲気で読み進めていただいて大丈夫です。 - +

    ( <>

    ここで質問です。 - + 上の弁当箱を、 {' '} すると、どんな結果になるでしょう? - +

    ) @@ -123,7 +132,9 @@ export default () => ( children: ( <>

    - そんなの、すぐ答えられるわけないだろう! + + そんなの、すぐ答えられるわけないだろう! + こんな複雑な弁当箱、 するのもひと苦労だよ!

    @@ -137,9 +148,9 @@ export default () => (

    サヤはすぐ分かったよ! すると、 - + 結果は になる - + んじゃない?

    @@ -154,10 +165,10 @@ export default () => ( children: ( <>

    - + まさにその通り!サヤちゃん、正解です! 🎉 - +

    ) @@ -168,10 +179,10 @@ export default () => ( <>

    へ?なんでそんな早く正解が分かるの…?

    - + サヤちゃん、まさか一瞬で頭の中で したのかい? - +

    ) @@ -203,9 +214,9 @@ export default () => ( <>

    まず、 - + 一番上の部分と、右の真ん中の部分に注目してみて! - +

    ) @@ -225,10 +236,10 @@ export default () => ( <>

    あ、 - + 一番上の部分をよく見ると、これは{' '} に変換できる弁当箱だ! - +

    (

    さらに、 - + 右の真ん中の部分をよく見ると、これは{' '} に変換できる弁当箱だ! - +

    ( <>

    そう!だから、とりあえずこれらを - + と{' '} に置き換えてみる - + ね。

    @@ -319,11 +330,11 @@ export default () => ( <>

    これはもしかして… - + 中級その3でやった、 がある弁当箱かな? - +

    @@ -338,9 +349,9 @@ export default () => ( <>

    その通り!だから、この部分をいったん{' '} - + に置き換える - + ね。

    @@ -476,13 +487,13 @@ export default () => ( <>

    ここまできたら、後は簡単だよね。 - + が{' '} だから、 に入っている{' '} {' '} が残る - + んだ。

    @@ -502,9 +513,9 @@ export default () => ( <>

    ほらね、サヤがさっき言ったように、 - + 最後に が残った - + でしょう?

    @@ -539,7 +550,9 @@ export default () => ( <>

    しかし… - サヤちゃんがとった手法はズルなんじゃないか? + + サヤちゃんがとった手法はズルなんじゃないか? +

    サヤちゃんは、もともとの弁当箱を、それぞれの要素に対応する計算箱に置き換えてから実行したけど… @@ -565,13 +578,13 @@ export default () => ( children: ( <>

    - + もともとの弁当箱を、そのまま しても、結果は同じく {' '} になっていたのかな? - +

    ) @@ -623,19 +636,21 @@ export default () => (
      ステップが非常に多いので、 - 3倍速で早送りします!{' '} + + 3倍速で早送りします! + {' '} - + 早送り中は、目に優しくなるように弁当箱を半透明にしています。 - + 待てない方は、「 - + → - + 」を押して下さい!
    @@ -653,9 +668,9 @@ export default () => ( <>

    最後に残った以下の弁当箱は、 - + に変換できる弁当箱 - + ですね。

    @@ -681,9 +696,9 @@ export default () => ( children: ( <>

    - + サヤちゃんのやり方でやったときと、結果が同じになった! - +

    ということは、サヤちゃんのやり方は間違ってなかったのか… @@ -718,9 +733,9 @@ export default () => (

    ここで一旦立ち止まって振り返ってみましょう。

    さきほどサヤちゃんがやったのは、「 - + 弁当箱の一部分を、同じ効果がある計算箱と置き換える - + 」という手法でした。図で説明すると、以下のような感じですね。

    @@ -743,10 +758,12 @@ export default () => ( <>

    重要なのは、 - + このように弁当箱の一部分を計算箱と置き換えても、 - 実行したら結果は同じになる - + + 実行したら結果は同じになる + + ということです。

    @@ -764,11 +781,11 @@ export default () => ( /> - + 実行したら
    結果は同じになる! -
    +
    ( <>

    たしかに先ほどの場合は、 - + サヤちゃんの手法を使っても、そのまま実行しても、どちらも結果は{' '} になった - + な。

    @@ -793,14 +810,14 @@ export default () => ( <>

    はい。 - + 複雑な弁当箱は、それぞれの部分をシンプルな計算箱に置き換えると分かりやすくなります。 - +

    - + 結果は変わらないのだから、積極的に置き換えていくべき - + ということですね。

    @@ -821,11 +838,11 @@ export default () => ( - + ちなみに、どちらの場合も
    実行結果は になる -
    +
    ) @@ -842,11 +859,11 @@ export default () => ( <>

    でもさあ…質問なんだけど、 - + この話って、「 」と何の関係があるの? - +

    ) @@ -882,11 +899,11 @@ export default () => ( children: ( <>

    - + ねえねえ、もしかしたらサヤ、「 」を弁当箱で再現できたかもしれない! - +

    ) @@ -945,8 +962,8 @@ export default () => ( <>

    この弁当箱に、以下のように - いろいろ追加してみたの。 - 黄色の部分が追加した部分だよ。 + いろいろ追加してみたの。 + 黄色の部分が追加した部分だよ。

    ) @@ -954,7 +971,7 @@ export default () => ( ]} /> - 黄色が追加した部分 + 黄色が追加した部分 (

    ( - + 次のページで早送りして詳細に解説するけど、今回は早送りは省略します! - + )

    @@ -1021,9 +1038,9 @@ export default () => ( <>

    うん、早送りは次のページでやるから、今はとりあえず「 - + なるほど、結果は になるんだ - + 」と受け入れてほしい!

    @@ -1056,15 +1073,15 @@ export default () => ( <>

    それよりも重要なのは、 - + この って、 - + 実行前の弁当箱に入っていた、 と{' '} を足した数 - + だよね? - +

    ) @@ -1112,7 +1129,8 @@ export default () => ( children: ( <>

    - つまり…足し算ができるってこと? + つまり…足し算ができる + ってこと?

    ) @@ -1126,15 +1144,15 @@ export default () => ( <>

    補足: 「 - + この弁当箱、本当に実行すると {' '} になるの? - + 」と疑われているかもしれませんが、ご安心ください! - + 次のページでなぜ実行すると {' '} になるのかを詳細に説明します - + ので、とりあえず読み進めてみてください!

    @@ -1156,10 +1174,10 @@ export default () => ( 以下のように計算箱の「 」を使っても、 - + {' '} を計算できる - + よね。

    @@ -1259,7 +1277,9 @@ export default () => ( <>

    補足:{' '} - もし上に書いてあることが腑に落ちなくてもご心配なく! + + もし上に書いてあることが腑に落ちなくてもご心配なく! + 次のページで詳細に解説します。

    diff --git a/src/contents/14.jp.tsx b/src/contents/14.jp.tsx index 7ccff62e5..853ab8d67 100644 --- a/src/contents/14.jp.tsx +++ b/src/contents/14.jp.tsx @@ -1,6 +1,12 @@ import React from 'react' import EpisodeCardList from 'src/components/EpisodeCardList' -import { P, Strong, Em, Ul, UlLi } from 'src/components/ContentTags' +import { + P, + HighlightBold, + Highlight, + Ul, + UlLi +} from 'src/components/ContentTags' import H from 'src/components/H' import BubbleQuotes from 'src/components/BubbleQuotes' import Emoji from 'src/components/Emoji' @@ -22,7 +28,9 @@ export default () => ( content: ( <>

    - 今回は、今までで最も複雑な弁当箱が登場します。 + + 今回は、今までで最も複雑な弁当箱が登場します。 +

    ( />

    しかしいつも通り、 - + 内容を完全に理解する必要はありません。少しくらい分からなくても、雰囲気で読み進めていただいて大丈夫です。 - +

    ( <>

    前回は、 - + 計算箱の「 」を、サヤちゃんが考えた弁当箱で再現できるかも? - + というところで終わりました。

    @@ -69,10 +77,10 @@ export default () => (

    サヤちゃんの弁当箱は、前回 - + してみると{' '} になりました。 - +

    つまり、「 @@ -109,17 +117,17 @@ export default () => (

    今回は、前回サヤが考えた弁当箱を して、 - + 途中、弁当箱がどう変化するかを確認してみる - + よ。

    そうすることで、 - + どいうった経緯で最終的に {' '} になるのか - + を知ることができるからね。

    @@ -136,7 +144,7 @@ export default () => ( emojis={['❓', '🍱', '❓']} description={ <> - 途中、弁当箱がどう変化した後… + 途中、弁当箱がどう変化した後… } /> @@ -152,9 +160,9 @@ export default () => ( <>

    なるほど、 - + 早送りをすることで、途中で何が起きているか確かめてみようってことだね。 - +

    ) @@ -188,22 +196,23 @@ export default () => (

      - + 弁当箱の中身がたくさんあるので、スペースの都合上、ひとつひとつの料理を小さく表示しているよ。 - + 見にくくてごめん! 説明のために、何度も止めながらやっていくよ。 - 複雑なので、目で追わなくても大丈夫だよ! + 複雑なので、 + 目で追わなくても大丈夫だよ! ちょっと時間がかかるので、待てない方は下の「 - + → - + 」を押してね!
    @@ -229,7 +238,8 @@ export default () => ( <>

    でもちょっと立ち止まって考えてみて。まず、この - 真ん中の黄色で示した部分に注目してくれる? + 真ん中の黄色で示した部分 + に注目してくれる?

    ) @@ -237,7 +247,7 @@ export default () => ( ]} /> - 真ん中の黄色の部分に注目 + 真ん中の黄色の部分に注目 ( <>

    上の黄色の部分が複雑なので、 - - 分かりやすくするために、そこだけを{' '} - 🍱{' '} + + + 分かりやすくするために、 + + そこだけを 🍱{' '} のアイコンに置き換えて省略してみると、下のようになる - + よ。

    @@ -260,7 +272,7 @@ export default () => ( ]} /> - 先ほどの弁当箱の黄色の部分
    + 先ほどの弁当箱の黄色の部分
    🍱 と置き換えて省略した
    (

    この時点で、

      - + には{' '} が入っている - +

    …ということを覚えておいてね。

    @@ -285,10 +297,10 @@ export default () => ( ]} /> - + には{' '} が入っている - + (

    後で大事になってくるからだよ。

    では続きを見てみよう。 - + には{' '} が入っているので、 が残ります。 - +

    ) @@ -338,7 +350,7 @@ export default () => ( <>

    じゃあ、🍱 を省略する前の状態( - 黄色の部分)に戻すね。 + 黄色の部分)に戻すね。

    ) @@ -381,11 +393,11 @@ export default () => ( ]} /> - + 黄色の部分は、前回省略したのと
    まったく同じ -
    +
    ( children: ( <>

    - そう、この部分が繰り返されるんだよね。 + そう、この部分が + 繰り返されるんだよね。 🔁

    では、また - + 黄色の部分を 🍱{' '} のアイコンで省略してみた - + よ。前回と何が違うかな?

    @@ -411,9 +424,9 @@ export default () => ( ]} /> - + 黄色の部分を 🍱 で省略してみた - + ( left={ <> - 前回と比べると… + 前回と比べると… } right={ <> - 黄色の部分が違う + 黄色の部分が違う } @@ -454,15 +467,15 @@ export default () => ( 先ほど には{' '} が入っていたが、 - + 今回は が入っている - + - + 一番下に {' '} が追加されている - +
@@ -474,12 +487,12 @@ export default () => ( <>

ふむふむ… - + に入っていた数字は、 から{' '} に「 - 1減った」というわけか。 - + 1減った」というわけか。 +

) @@ -506,11 +519,11 @@ export default () => ( <>

じゃあもしかしたら、 - + このまま続けたら、次は{' '} の数字が{' '} になる - + のかも…?

続けて確かめてみるか。

@@ -549,10 +562,10 @@ export default () => ( children: ( <>

- + また真ん中の部分が前回と同じなので、🍱{' '} のアイコンで省略してみる - + ね。

@@ -581,14 +594,14 @@ export default () => ( left={ <> - 前回と比べると… + 前回と比べると… } right={ <> - 黄色の部分が違う + 黄色の部分が違う } @@ -604,15 +617,15 @@ export default () => ( 先ほど には{' '} が入っていたが、 - + 今回は が入っている - + - + またしても、一番下に {' '} が追加されている - + @@ -625,14 +638,14 @@ export default () => (

なんとなく、パターンが見えてきたかも…

特に、 - + に入っていた数字は、 から{' '} に、 から{' '} にと、 - 1ずつ減っているよね。 - + 1ずつ減っているよね。 +

) @@ -661,20 +674,20 @@ export default () => ( <>

ということは、次は{' '} - + が{' '} になるのかな? - +

そして、 - + が{' '} になると、 ではなく{' '} {' '} が残るようになるから、繰り返しがストップされる - + のかも?

@@ -685,7 +698,8 @@ export default () => ( children: ( <>

- では、確かめてみよう!次が最後だよ! + では、確かめてみよう! + 次が最後だよ!

) @@ -706,8 +720,8 @@ export default () => ( children: ( <>

- これが最後だよ!🍱{' '} - を省略する前の状態に戻したので、 + これが最後だよ! + 🍱 を省略する前の状態に戻したので、

@@ -723,10 +737,10 @@ export default () => ( children: ( <>

- + 例によって、真ん中の部分が前回と同じなので、 🍱 のアイコンで省略してみる - + ね。

@@ -755,14 +769,14 @@ export default () => ( left={ <> - 前回と比べると… + 前回と比べると… } right={ <> - 黄色の部分が違う + 黄色の部分が違う } @@ -774,10 +788,10 @@ export default () => ( children: ( <>

- + が{' '} になった! - +

) @@ -788,11 +802,11 @@ export default () => ( <>

そう! - + だから、 に入っている{' '} が残ることになるね。 - +

) @@ -820,9 +834,9 @@ export default () => ( を計算するだけなので…

- + 結果は になります! - +

) @@ -862,10 +876,10 @@ export default () => ( <>

まず、 - + もともとの弁当箱には数字の {' '} と が入っていた - + よね。

@@ -885,10 +899,10 @@ export default () => ( <>

そして - + {' '} していくと、終了直前に以下のようになった - + よね。

@@ -942,7 +956,7 @@ export default () => ( - この弁当箱で「再現」できる! + この弁当箱で「再現」できる! ( ]} /> - この弁当箱で「再現」できる! + この弁当箱で「再現」できる! ) @@ -1106,10 +1120,10 @@ export default () => ( <>

ちなみにですが…下のように、 - + {' '} を繰り返す計算箱は、どうやって弁当箱で再現すればいいか - + 分かりますか?

@@ -1136,12 +1150,12 @@ export default () => ( ]} /> - + 先ほどの弁当箱で右上にあった
を{' '} に変えるだけ(黄色の部分) -
+
( children: ( <>

- サヤちゃん、その通りです!これで、 + サヤちゃん、 + その通りです!これで、 {' '} を繰り返す計算箱を再現できます。

@@ -1196,13 +1211,13 @@ export default () => (

そうですね。ここでひとつ説明したいことがあります。

さきほど登場した、 - + 🅰️ 🅱️{' '} を計算できる弁当箱の、 - + 下半分に使われていた部分にご注目ください - - + + 。

@@ -1274,7 +1289,7 @@ export default () => ( 今回登場した弁当箱において、
- 下半分の部分に使われていた + 下半分の部分に使われていた
こちらの弁当箱が、
@@ -1298,7 +1313,8 @@ export default () => ( <>

そうですね。ちなみに、この弁当箱には、 - 特殊な呼び名があるんですよ。 + 特殊な呼び名 + があるんですよ。

) @@ -1316,7 +1332,7 @@ export default () => ( children: ( <>

- 「Yコンビネータ + 「Yコンビネータ 」です。

@@ -1325,7 +1341,7 @@ export default () => ( ]} /> - この弁当箱の名は「Yコンビネータ」 + この弁当箱の名は「Yコンビネータ ( children: ( <>

- 「Yコンビネータ」かあ。変な名前だね。 + 「Yコンビネータ + 」かあ。変な名前だね。

) @@ -1345,7 +1362,8 @@ export default () => ( <>

ちなみに、以下のような法則に当てはまる弁当箱は、どれも「 - Yコンビネータ」と呼べるんですよ。 + Yコンビネータ + 」と呼べるんですよ。

) @@ -1354,7 +1372,7 @@ export default () => ( /> この法則に当てはまる弁当箱は全部 -
Yコンビネータ」 +
Yコンビネータ
( <>

そうなんだ。でもすごいね。 - + こんなシンプルな、 🅰️🅱️{' '} の二種類の料理しかない弁当箱が、繰り返しを可能にするなんて… - +

- まるで、魔法みたい! + まるで、魔法みたい! 🧙‍♀️{' '}

@@ -1383,7 +1401,8 @@ export default () => ( children: ( <>

- 確かに…まさに、「魔法のYコンビネータ + 確かに…まさに、「 + 魔法のYコンビネータ 」だね!

@@ -1395,7 +1414,7 @@ export default () => ( emojis={['✨', '🧙‍♀️', '✨']} description={ <> - 魔法のYコンビネータ + 魔法のYコンビネータ } /> @@ -1440,7 +1459,8 @@ export default () => ( ]} />

- 村人たちの命運やいかに?次の上級最後のページ + 村人たちの命運やいかに?次の + 上級最後のページ で確かめてみましょう!

diff --git a/src/contents/15.jp.tsx b/src/contents/15.jp.tsx index 4c0157ff4..5584c8efd 100644 --- a/src/contents/15.jp.tsx +++ b/src/contents/15.jp.tsx @@ -1,6 +1,13 @@ import React from 'react' import EpisodeCardList from 'src/components/EpisodeCardList' -import { P, Bold, Strong, Em, Ul, UlLi } from 'src/components/ContentTags' +import { + P, + Bold, + HighlightBold, + Highlight, + Ul, + UlLi +} from 'src/components/ContentTags' import H from 'src/components/H' import BubbleQuotes from 'src/components/BubbleQuotes' import Emoji from 'src/components/Emoji' @@ -48,7 +55,9 @@ export default () => ( <>

やった!これで、 - 計算箱のすべての機能を返してもらった + + 計算箱のすべての機能を返してもらった + ぞ!悪魔に勝った! 🎉

@@ -106,9 +115,9 @@ export default () => ( <>

それについてなんだが… - + ちょっと伝えたいことがある。聞いてもらえるか? - +

) @@ -151,12 +160,12 @@ export default () => ( <>

なんだ、この弁当箱は?

- + 上のほうに、 と{' '} {' '} を入れる部分があるけれど… - +

) @@ -180,9 +189,9 @@ export default () => ( <>

分かった。じゃあ、こちらの{' '} - + に変換できる弁当箱 - + と…

@@ -196,9 +205,9 @@ export default () => (

こちらの{' '} - + に変換できる弁当箱 - + を…

@@ -260,13 +269,13 @@ export default () => (

    - 複雑なので、目で追わなくても大丈夫です! + 複雑なので、目で追わなくても大丈夫です! ちょっと時間がかかるので、待てない方は下の「 - + → - + 」を押してください!
@@ -279,10 +288,10 @@ export default () => ( <>

結果は… - + {' '} に変換できる弁当箱になった! - +

( <>

では、 - + もともと と{' '} {' '} に入れた数字は何だった - + かな?

@@ -328,11 +337,11 @@ export default () => ( children: ( <>

- + もともと入れたのは と{' '} だった。そして、結果は{' '} になった… - +

) @@ -354,7 +363,8 @@ export default () => ( children: ( <>

- ということはもしかして…足し算を計算した + ということはもしかして… + 足し算を計算した のか?

@@ -367,22 +377,22 @@ export default () => (

その通りだ!先ほどの弁当箱は、

    - + と{' '} {' '} に数字を入れ、 - + {' '} すると… - + 結果は {' '} {' '} になるんだ。 - +
@@ -420,7 +430,8 @@ export default () => ( children: ( <>

- つまり、足し算ができる弁当箱 + つまり、 + 足し算ができる弁当箱 というわけだな。

@@ -488,13 +499,13 @@ export default () => (

先ほどの弁当箱と似ているけど、微妙に違うなあ…

前回同様、 - + と{' '} に変換できる弁当箱を{' '} と{' '} に入れて、 してみよう。 - +

) @@ -505,9 +516,9 @@ export default () => ( <>

ちなみに、今回はかなり時間がかかるので、待てない場合は「 - + → - + 」を押してもいいぞ。

@@ -529,10 +540,10 @@ export default () => ( <>

結果は… - + {' '} に変換できる弁当箱になった! - +

( children: ( <>

- これはもしかして…掛け算を計算できる + これはもしかして… + 掛け算を計算できる のか?

(

その通りだ!先ほどの弁当箱は、

    - + と{' '} {' '} に数字を入れ、 - + {' '} すると… - + 結果は {' '} ✖️{' '} になるんだ。 - +
@@ -659,7 +671,8 @@ export default () => ( children: ( <>

- つまり、掛け算ができる弁当箱 + つまり、 + 掛け算ができる弁当箱 というわけだな。

@@ -686,9 +699,9 @@ export default () => ( <>

すごい…! - + 計算箱では掛け算ができなかったけど、弁当箱を使えば掛け算ができるのか! - +

) @@ -699,12 +712,16 @@ export default () => ( <>

そうだ。ちなみに今回は紹介する時間がないが、 - ふたつの数字の引き算や割り算 + + ふたつの数字の引き算や割り算 + も弁当箱で行うことができるぞ。

つまり、 - 弁当箱は四則演算の全てを行うことができる + + 弁当箱は四則演算の全てを行うことができる + んだ。

@@ -748,7 +765,7 @@ export default () => ( また、前回「 」を再現するのに使った「 - Yコンビネータ + Yコンビネータ 」の弁当箱と組み合わせることで、さらに複雑な計算をすることもできる。

@@ -756,7 +773,8 @@ export default () => ( 」を
- 再現するのに使った「Yコンビネータ」 + 再現するのに使った「 + Yコンビネータ
) @@ -774,13 +792,13 @@ export default () => ( children: ( <>

- たとえば、「階乗 + たとえば、「階乗 」という計算がある。これは「 - + ある数からはじめて、1を引いていき、 {' '} になるまで繰り返し掛け算をする - + 」という計算だ。

@@ -832,7 +850,7 @@ export default () => ( } />

- 階段 + 階段 みたいに1ずつ数字が減っていくから「階」乗、と覚えておけばいい。

@@ -851,9 +869,9 @@ export default () => ( children: ( <>

- この「階乗」は、先ほどの - 掛け算ができる弁当箱と、 - Yコンビネータ + この「階乗」は、先ほどの + 掛け算ができる弁当箱と、 + Yコンビネータ の弁当箱を組み合わせて計算することができるんだ。

@@ -867,7 +885,7 @@ export default () => ( 掛け算を計算できる弁当箱と… - 「Yコンビネータ」の + 「Yコンビネータ」の
弁当箱を組み合わせることで…
@@ -912,10 +930,10 @@ export default () => ( <>

まず、 - + 掛け算を計算できる弁当箱を、以下のように{' '} ✖️印で省略してみる。 - + こうしたほうがひと目で見て分かりやすいからな。

@@ -958,22 +976,22 @@ export default () => ( <>

それでは、階乗を計算する弁当箱をお見せしよう。

- こちらの弁当箱は、黄色の部分に、 - + こちらの弁当箱は、黄色の部分に、 + 先ほど紹介した掛け算の弁当箱( ✖️ 印)と、Yコンビネータの弁当箱が入っている - + 。

この弁当箱を実行すると、 - + の階乗、すなわち{' '} ✖️{' '} ✖️{' '} を計算してくれる - + んだ。

@@ -982,9 +1000,10 @@ export default () => ( ]} /> - 掛け算ができる弁当箱(✖️印)と + 掛け算ができる弁当箱( + ✖️印)と
- Yコンビネータ + Yコンビネータ の弁当箱を使うことで…
@@ -1010,9 +1029,9 @@ export default () => ( children: ( <>

- + 前のページで登場した弁当箱と、右上の部分が微妙に違う - + のが分かるかな?

@@ -1058,9 +1077,9 @@ export default () => (

完全には理解できなくていいが…

この - + 右上部分の違いが、前回のように足し算を計算するか、今回のように階乗を計算するかの違いを生んでいる - + んだな。

@@ -1080,10 +1099,10 @@ export default () => ( <>

そして、先ほどの弁当箱の - + 一番上の {' '} を他の数字に変えれば、その数字の階乗を計算できるというわけだ。 - +

たとえば に変えると、 @@ -1115,19 +1134,19 @@ export default () => (

へー、すごいなあ。完璧には理解できていないけど…

    - 「階乗」は、「 - + 「階乗」は、「 + になるまで掛け算を『 - 繰り返す』 - + 繰り返す』 + 」ということだから、 - + 「繰り返す」のを可能にする「 - Yコンビネータ + Yコンビネータ 」の弁当箱が必要 - + というわけかな…?
@@ -1144,18 +1163,20 @@ export default () => (

それでもわたしが伝えたかったのは、

    - - Yコンビネータ + + Yコンビネータ の弁当箱は、 - + - + 掛け算を計算できる弁当箱と組み合わせることによって、 - + - 階乗のように複雑な計算を行うこともできる + + 階乗のように複雑な計算を行うこともできる +

ということだ。

@@ -1165,7 +1186,7 @@ export default () => ( ]} /> - Yコンビネータの弁当箱は… + Yコンビネータの弁当箱は… ( ]} description={ <> - 階乗のような複雑な計算もできる! + 階乗 + のような複雑な計算もできる! } /> @@ -1211,9 +1233,9 @@ export default () => ( <>

以上をまとめると… - + 弁当箱は、計算箱よりもっと複雑な計算ができるということだ - + 。

@@ -1237,7 +1259,9 @@ export default () => ( <>

じゃあ逆に質問するけど… - 弁当箱にできない計算はあるのかい? + + 弁当箱にできない計算はあるのかい? +

) @@ -1248,7 +1272,9 @@ export default () => ( <>

いい質問だな。それは、次のページで説明しよう!

- 次が最後のページ、エピローグだ! + + 次が最後のページ、エピローグだ! +

) diff --git a/src/contents/16.jp.tsx b/src/contents/16.jp.tsx index f384ef363..a077cbf04 100644 --- a/src/contents/16.jp.tsx +++ b/src/contents/16.jp.tsx @@ -2,9 +2,9 @@ import React from 'react' import EpisodeCardList from 'src/components/EpisodeCardList' import { P, - Strong, + HighlightBold, Bold, - Em, + Highlight, ExternalLink, Img, CenteredCode, @@ -57,7 +57,9 @@ export default () => ( children: ( <>

- 弁当箱にできない計算はあるのかな? + + 弁当箱にできない計算はあるのかな? +

) @@ -66,7 +68,9 @@ export default () => ( />

この質問に答えるためには、「 - そもそも弁当箱というアイデアはどこから来たのか + + そもそも弁当箱というアイデアはどこから来たのか + 」という質問にまず答える必要があります。

( />

そのためには、 - ラムダ村の世界ではなく、現実世界の歴史 + + ラムダ村の世界ではなく、現実世界の歴史 + を学ばないといけません。

(

ちなみに:{' '} これからコンピュータやコンピュータサイエンスの歴史について語りますが、 - + 簡潔さを優先するために、正確性をあえて犠牲にしたり、ほとんどの出来事を省いたりしています - + 。

@@ -118,10 +124,11 @@ export default () => (

この記事のタイトルは「 - コンピュータサイエンスと魔法のYコンビネータ + コンピュータ + サイエンスと魔法のYコンビネータ 」ですが、はじめに、「 - そもそもコンピュータとは何か + そもそもコンピュータとは何か 」という質問について考えてみましょう。

(

- しかし、コンピュータは本質的には「計算機 + しかし、コンピュータは本質的には「 + 計算機 」なのです。

- コンピュータは本質的には「計算機」 + コンピュータは本質的には「 + 計算機」 } /> @@ -148,10 +157,10 @@ export default () => ( コンピュータを使えば情報を瞬時に検索できたり、美しいCGを描いたりすることができます。最近はAIを使って顔認証や会話ができるようになりました。

- + こういった便利な機能は、 コンピュータが大量の計算を瞬時に行えるからこそ実現されているのです。 - +

たとえば、検索エンジンは膨大な数のデータをランク付けするために計算を行います。AIが顔認証をするときは、センサーが取り込んだ顔のデータを数値化し、それをもとに複雑な計算を行って本人かどうかを確かめているのです。 @@ -161,7 +170,8 @@ export default () => ( description={<>コンピュータは、大量の計算を行える計算機} />

- だから、コンピュータは「計算機」なのですね。 + だから、コンピュータは「計算機 + 」なのですね。

) @@ -172,7 +182,9 @@ export default () => ( <>

コンピュータは計算機であるからこそ、 - コンピュータの歴史はすなわち、計算機の歴史 + + コンピュータの歴史はすなわち、計算機の歴史 + なのです。

@@ -211,11 +223,11 @@ export default () => ( />

- + タビュレーティングマシンは、アメリカの国勢調査、すなわち国全体のアンケート調査を集計するために使われた計算機でした。 - + マークシートのような紙に空いた穴を読み取って計算することで、大量のデータをすばやく集計できたのです。 - 現代のエクセルのようなものですね。 + 現代のエクセルのようなものですね。

( />

ちなみに、 - + この計算機の発明者であるホレリスは、IBMの前身となる会社を創業しました。 - + IBMはさらに強力な計算機を開発し続け、1960年代に世界一のコンピュータ企業になったのです。

@@ -249,16 +261,17 @@ export default () => ( description={<>計算機は20世紀にどんどん進化した} />

- いっぽう同時期に、計算機について科学する学問 + いっぽう同時期に、 + 計算機について科学する学問 である「 コンピュータサイエンス=計算機科学」 も生まれ、進化していきました。

そんなコンピュータサイエンスの研究者たちは、「 - + コンピュータ=計算機の作り方や使い方をどう工夫すれば、より効率的に問題を解けるのか - + 」といった問いに取り組んだのです。

( } />

- そして、コンピュータサイエンスの礎を築いた + そして、コンピュータサイエンスの礎を築いた と言われているのが、英国の数学者だった アラン・チューリング 🧑🏻{' '} と、米国の数学者だった @@ -300,13 +313,13 @@ export default () => ( content: ( <>

- + チューリングとチャーチは1930年代に、「 - ヒルベルトの決定問題 + ヒルベルトの決定問題 」という、とある難しい数学の問題に別々に取り組んでいました。 - + それがどんな問題かを説明するのは非常に難しいので省略しますが、ふたりが - その問題をどのようにして解いたか + その問題をどのようにして解いたか が興味深かったのです。

( />

その問題を解くために、ふたりはそれぞれ別々の「 - 空想上の計算機 + 空想上の計算機 」を考案する必要がありました。「 空想上の計算機 」とはすなわち、 - + 実際には(少なくとも1930年代の当時は)存在しないけど、もし存在したとしたら非常に複雑な計算ができる、 - 仮想上の計算機 - + 仮想上の計算機 + のことです。

- 空想上の計算機とは、 + 空想上の計算機とは、
実際には存在しないが、もしも存在したら
非常に複雑な計算ができる
- 仮想上の計算機のこと。 + 仮想上の計算機のこと。 } />

- 「もし仮にそんな計算機がこの世に存在したら… + 「 + + もし仮にそんな計算機がこの世に存在したら… + 」と仮定したうえで理論を展開することで、ふたりはそれぞれ別々に、先述の問題を解くことができたのです。

@@ -356,8 +372,10 @@ export default () => ( description={ <> 先述の問題を解くために、ふたりはそれぞれ -
空想上の計算機」を頭の中で設計した。 -
もしこういった計算機が存在したら…」と +
空想上の計算機 + 」を頭の中で設計した。 +
「 + もしこういった計算機が存在したら…」と
仮定した上で理論を展開して問題を解いた @@ -365,31 +383,31 @@ export default () => ( />

実は、この時にふたりが別々に考案した、当時の技術では作ることができない「 - 空想上の計算機 + 空想上の計算機 」が、 - + その後のコンピュータの開発や、プログラミング言語の開発、ひいてはコンピュータサイエンスそのものに大きな影響を与えました。 - +

言い換えると、このふたりは「ヒルベルトの決定問題」という数学の問題を解いていたのですが、 - + その問題を解くためにふたりが考えたアイデアが偶然にも、近代のコンピュータサイエンスの土台になった - + のです。


- 1930年代半ばに、チューリング + 1930年代半ばに、チューリング は先述の問題を解くために「 チューリングマシン 」という空想上の計算機を考案しました。「このチューリングマシンが仮に存在したら…」と論を展開することで、彼は先述の数学の問題を解くことができたのです。

そして、ここでは詳しく説明しませんが、 - + このチューリングマシンの仕組みはシンプルながら、現代のコンピュータの仕組みと非常に似ており、近代的なコンピュータの発展に大きな影響を与えたのです。 - +

( } />

- 一方、ほぼ時を同じくして、チャーチ + 一方、ほぼ時を同じくして、チャーチ は先述の問題を解くために「 - ラムダ計算 + ラムダ計算 」という空想上の計算機を考案しました。では、この「 - ラムダ計算 + ラムダ計算 」とはどんな仕組みだったのでしょうか。

( } />

- + 実は、みなさんはすでに「 - ラムダ計算 + ラムダ計算 」がどんな仕組みかを知っています。 - + そう、 - + 🍱 弁当箱のことです。 - +

( <> チャーチが考えた空想上の計算機
ラムダ計算 - 」は、弁当箱と仕組みが同じ + 」は、弁当箱と仕組みが同じ } /> @@ -454,8 +472,11 @@ export default () => ( content: ( <>

- チャーチが考えた空想上の計算機「ラムダ計算 - 」は、見た目は弁当箱とは違いますが、仕組みは同じでした。 + チャーチが考えた空想上の計算機「 + ラムダ計算 + 」は、 + 見た目は弁当箱とは違いますが、仕組みは同じ + でした。

( />

たとえば、こちらが「ラムダ計算 - 」の記述式です。一番左にある「λ + 」の記述式です。一番左にある「λ 」の記号はギリシャ文字で「 - ラムダ + ラムダ 」と呼ぶことから、「ラムダ計算」と呼ばれています。

λA.B C @@ -489,11 +510,11 @@ export default () => (

- + それと同じで、先ほどの「ラムダ計算」の記述式も、 すると - Bが残るのです。 - + Bが残るのです。 +

λA.B C @@ -504,21 +525,24 @@ export default () => ( λA.(λB.A(B B))(λB.A(B B))

答えを言うと、上の記述式は - Yコンビネータを表している + Yコンビネータを表している のです。つまり、下の弁当箱とまったく同じです。

上のラムダ計算の記述式は、 -
Yコンビネータ」の弁当箱と同じ +
Yコンビネータ + 」の弁当箱と同じ

つまり本稿では、 - 実はみなさんにラムダ計算を教えていたのです。 - + + 実はみなさんにラムダ計算を教えていたのです。 + + ラムダ計算の記述式は見た目が複雑なので、 という形で教えることで、とっつきやすくしていた - + というわけですね。

( />

そして繰り返しますが、このラムダ計算は、1930年代に考えられた「 - 空想上の計算機」というわけです。 + 空想上の計算機」というわけです。

) @@ -565,7 +589,7 @@ export default () => ( ]} />

- 先ほど、「弁当箱とラムダ計算は同じ + 先ほど、「弁当箱とラムダ計算は同じ 」という話をしましたね。つまり、上の質問は以下のように言い換えることができます。

( children: ( <>

- ラムダ計算にできない計算はあるのかな? + ラムダ計算にできない計算 + はあるのかな?

) @@ -585,9 +610,9 @@ export default () => (

では、ラムダ計算にできない計算はあるのでしょうか?

結論から言うと、 - + ラムダ計算は、現代のコンピュータが行うことができるすべての計算を行うことができます。 - + つまり、あなたのパソコンやスマホができる計算はすべて、ラムダ計算にもできるということです。

( />

ということはつまり、 - + 弁当箱も、現代のコンピュータが行えるすべての計算を行うことができる - + というわけですね。

( />

このことは、1930年代に証明されました。「 - + これから先にどれほど強力な計算機が登場しても、その計算機ができる計算は、理論上はラムダ計算にもできる - + 」ということが数学的に証明されたのです。もちろん、この証明は難しすぎるので省略します。

( <>

先ほど説明したように、ラムダ計算はもともと、とある数学の問題を解くためにチャーチが考案したものでした。しかし、ラムダ計算もまた、 - コンピュータサイエンスの発展に大きな影響を与えたのです。 + + コンピュータサイエンスの発展に大きな影響を与えた + + のです。

( />

特に、ラムダ計算は - 数々のプログラミング言語 + 数々のプログラミング言語 に影響を与えました。現存するプログラミング言語の多くには、ラムダ計算の名残が残っています。

たとえば、執筆時点で世界で最も人気のプログラミング言語のひとつである、 - Python (パイソン) + Python (パイソン) という言語があります。ちなみにパイソンとは大蛇のことで、Python言語のロゴにもヘビの絵が描かれています。

( description={<>Python言語} />

- このPython言語にも、「lambda{' '} + このPython言語にも、「lambda{' '} (ラムダ)」という機能があります。たとえば、以下のPython言語のコードをご覧ください。

(lambda A: A)('B') @@ -726,9 +754,9 @@ export default () => ( 'B'

まとめると、 - + Python言語のような人気のプログラミング言語も、1930年代に考えられたラムダ計算の影響を間接的に受けている - + のです。

(

それは、 - - 「計算機を工夫すること + + 「計算機を工夫すること 」が、コンピュータサイエンスではとても大事 - + というお話です。

- 重要: 計算機を工夫することが、 + 重要: 計算機を工夫することが、
コンピュータサイエンスではとても大事

今回紹介したラムダ計算、すなわち弁当箱は、 - 仕組みはとてもシンプルです + 仕組みはとてもシンプルです 。弁当箱の基本の法則は、初級その3〜5で紹介したように、非常にシンプルです。

弁当箱の基本の法則は非常にシンプル @@ -790,9 +818,9 @@ export default () => (

しかし、こんなシンプルな弁当箱でも、現代のコンピュータが行えるすべての計算を行うことができるのです。 - + それができる理由は、弁当箱を工夫すれば、四則演算や、条件分岐や、繰り返しを行うことができるからです。 - +

( たとえば今回紹介した通り、Yコンビネータの弁当箱を使えば、繰り返しを行うことができますよね。他にも工夫次第で、さまざまな計算を行うことができます。

- 「Yコンビネータ」の弁当箱を使えば + 「Yコンビネータ」の弁当箱を使えば
繰り返しを行うことができる

コンピュータサイエンスは、「 - + 計算機(コンピュータ)の作り方や使い方をどう工夫すれば、より効率的に問題を解けるのか - + 」について考える学問です。

そして、今回学んだ弁当箱は、 - シンプルでも工夫次第で複雑な計算ができる計算機です。 + + シンプルでも工夫次第で複雑な計算ができる計算機です。 + そんな弁当箱には、 - コンピュータサイエンスのエッセンスが詰まっている + + コンピュータサイエンスのエッセンスが詰まっている + と思うのです。

(

とはいえ、コンピュータサイエンスの他の分野を学ぶときも、やることは弁当箱のときと同じです。なぜならどの分野でも、弁当箱のように「 - - 計算機(コンピュータ)を工夫して + + 計算機(コンピュータ)を工夫して 、問題を解く」ことが大事になってくるからです。 - +

コンピュータサイエンスのどの分野でも、 - キーワードは「工夫」 + キーワードは「工夫」 なのです。たとえば、「 - - コンピュータをどう工夫して + + コンピュータをどう工夫して 使えば、美しいCGや、人工知能や、仮想通貨が作れるだろう? - + 」といった感じですね。

( />

長くなりましたが、本稿を読んで、「 - + コンピュータサイエンスの他の分野でも、コンピュータの工夫の仕方を学んでみたい - + 」と思ってくだされば嬉しいです。

@@ -903,24 +935,24 @@ export default () => (

本稿で学んだことを短くまとめると、以下のようになります。

    - + 弁当箱は、工夫次第で四則演算や、条件分岐や、繰り返しといった複雑な計算ができる。また、繰り返しを行う弁当箱を - Yコンビネータと呼ぶ。 - + Yコンビネータと呼ぶ。 + - + 弁当箱は、1930年代に考案された空想上の計算機「ラムダ計算」が基になっている。ラムダ計算は、現代のコンピュータが行えるすべての計算を行うことができ、また多くのプログラミング言語に影響を与えた。 - + - + コンピュータサイエンスは「 - + 計算機(コンピュータ)をどう工夫して問題を解くか - + 」を考える学問。工夫次第で複雑な計算ができる弁当箱には、そのエッセンスが詰まっている。 - +
@@ -935,9 +967,11 @@ export default () => (

まず、先述したイギリスの数学者で、空想上の計算機「 チューリングマシン」を考案した - アラン・チューリング + アラン・チューリング 。彼はチューリングマシンを考案したのち、イギリスからアメリカに渡り、 - ラムダ計算(弁当箱)を考案したチャーチのもとで学びました。 + + ラムダ計算(弁当箱)を考案したチャーチのもとで学びました。 +

( <> チューリングマシンを考案した
- アラン・チューリングは、 + アラン・チューリングは、
ラムダ計算(弁当箱)を考案した
- チャーチに弟子入りした + チャーチに弟子入りした } /> @@ -967,9 +1001,9 @@ export default () => ( チューリングが亡くなってから55年後の2009年、英政府はチューリングに対する迫害を謝罪し、2013年には亡きチューリングに恩赦が与えられました。

- + そしてこの記事の執筆中、2019年7月15日に、イギリスの新しい50ポンド紙幣の肖像にチューリングが採用されることになったのです。 - + その50ポンド紙幣には、彼が考えた空想上の計算機「チューリングマシン」のイラストが載っています。(参考:{' '} BBC @@ -1037,9 +1071,9 @@ export default () => ( <>

本稿をお読みになったプログラマの方の中には、「 - + これはプログラミング未経験者にとっては難しすぎるのではないか - + 」と思われた方もいるかもしれません。そんな方に伝えたいことがあります。

@@ -1055,9 +1089,9 @@ export default () => (

個人的な話で恐縮ですが、わたしは今まで「 - + この人はほんとうに頭がいいな、知的好奇心が旺盛だな - + 」と思った方に数多く出会いました。たとえば、わたしは20代のときに母を癌で亡くしているのですが、母がお世話になったお医者様の方々と話したときは、「こんなに賢い人に出会ったのは初めてだ」と思ったものです。

( />

そして、今までわたしが「 - + この人はほんとうに頭がいいな、知的好奇心が旺盛だな - + 」と思った人々の内訳を見てみると、 - + プログラマの方よりも、プログラマでない方のほうが遥かに多い - + のです。もちろん、これは当たり前ですね。プログラマは世の中では圧倒的少数派ですから、母数のケタが違います。

そういった、「 - + 世の中にたくさんいる、プログラマではない、とても知的好奇心が旺盛な人々向けにコンピュータサイエンスの入門書を書くとしたら、どういう教材がいいだろう? - + 」と考えた結果、完成したのが本稿です。

だから、そういう方々に「 - 知的に面白い + 知的に面白い 」と思っていただくために、難易度はあえて高めに設定しました。本稿は - + 「プログラミング未経験者向けの入門書」とは謳っていますが、「誰にでも、何ならサルにでも分かる入門書」だとは謳っていない - + 理由は、そういうところにあります。

しかし同時に、 - + せっかく時間をかけて書くのであれば、できるかぎり読者層の裾野を広げたい - + とも思いました。どうせなら、たくさんの人に読んでもらいたい。だから、難易度は妥協しないけれど、説明はできる限り平易にしようと心がけました。

また、冒頭でも書いた通り、いきなり高度な内容を理解することができれば、「 - これが理解できたんだから、他の内容も学べるだろう + + これが理解できたんだから、他の内容も学べるだろう + 」と自信がつきます。高度な内容を分かりやすく書くことができれば、こういったメリットもあります。

努力はしたものの、それでも本稿がまだまだ難しいのは承知しております。本稿はあくまで、「 - 邪道な + 邪道な 」入門書なのです。ただ、その上でひとこと言わせていただくと、 - + 内容を完全には理解できなくても、雰囲気だけでも楽しんでくださった方や、「よくわからないけど、コンピュータサイエンスって面白そう」と感じてくださった方が、ひとりでも多くいればいいな - + と思っています。

( <>

悪魔のわたしに言わせれば…「 - + 入門書を必要以上に難しくしたら、その分野に苦手意識を持つ人が増える - + 」というのは確かにそうだと思う。

一方、「 - + ある分野の入門書や入門コースが知的に面白かったから、その分野に興味を持つようになった - + 」という人も、一定数いると思う。大抵は、知的好奇心が旺盛な人たちだ。わたしはどうせ発信するなら、そういう人たちに好かれるものを作りたい。

そして、 - + 「知的に面白い」と思ってもらえる入門書には、ある程度の難しさは欠かせない - + と思う。簡単すぎたら退屈だからだ。

「難しすぎて敬遠してしまう人」の数を抑えつつ、「難しくて面白いと思ってくれる人」の数を増やす、というのは - トレードオフ + トレードオフ だ。どこでバランスを取るかは教材作成者が自由に決めるべきで、 - 「これが正解」というのは無い + + 「これが正解」というのは無い + と思うんだ。

@@ -1161,7 +1199,9 @@ export default () => ( />

ちなみに: プログラマの方で、「 - Yコンビネータを実際にプログラミングで試してみたい + + Yコンビネータを実際にプログラミングで試してみたい + 」と思った方は、↓の「プログラミングで試してみる」を押してみてください。

@@ -1171,14 +1211,14 @@ export default () => (

下のコードは、 - + JavaScriptでYコンビネータを使って「 の階乗」、すなわち{' '} ✖️{' '} ✖️{' '} ✖️{' '} を計算するコード - + です。

@@ -1206,9 +1246,9 @@ export default () => (
                 ふつう、JavaScriptで階乗を計算するには for や{' '}
                 while といったループ機能、reduce{' '}
                 といった関数、または関数の再帰を使います。しかし、
-                
+                
                   Yコンビネータを使えば、それらを一切使わずに階乗を計算できる
-                
+                
                 のです。
               

diff --git a/src/contents/2.en.tsx b/src/contents/2.en.tsx index c360ac4d5..c8eb0e256 100644 --- a/src/contents/2.en.tsx +++ b/src/contents/2.en.tsx @@ -1,7 +1,15 @@ /** @jsx jsx */ import { css, jsx } from '@emotion/core' import EpisodeCardList from 'src/components/EpisodeCardList' -import { P, Hr, Strong, Em, Ul, UlLi, Bold } from 'src/components/ContentTags' +import { + P, + Hr, + HighlightBold, + Highlight, + Ul, + UlLi, + Bold +} from 'src/components/ContentTags' import CustomEmoji from 'src/components/CustomEmoji' import EmojiSeparator from 'src/components/EmojiSeparator' import EmojiNumber from 'src/components/EmojiNumber' @@ -18,14 +26,15 @@ export const TwoPlusFour = () => (

The result is . Because{' '} - + there’s{' '} {' '} next to , it repeats{' '} - four times. - + four times + . +

@@ -50,11 +59,11 @@ export const Conclusion = () => ( }} /> ,{' '} - + you’ll always use the correct number of ’s or ’s - + . That means you can be confident that your additions and subtractions are accurate.

@@ -105,7 +114,7 @@ export default () => ( <>

Review: Last time, we talked about Lambda Village and{' '} - mathboxes used by its villagers. + mathboxes used by its villagers.

( } />

- This time, we’ll talk about the third feature of - a mathbox: . + This time, we’ll talk about the{' '} + third feature of a mathbox:{' '} + .

✨, 🔁, ]} @@ -201,10 +211,10 @@ export default () => (

Question: Will the above mathbox correctly calculate{' '} - + {' '} ? - {' '} + {' '} Select or{' '} .

@@ -221,20 +231,20 @@ export default () => ( content: ( <>

- + - + . :

So the result is .{' '} - + Instead of calculating {' '} , we calculated{' '} {' '} by mistake - + .

( {' '} is because there was the wrong number of{' '} - + ’s - + .

(

If you wanted to calculate {' '} , you need to have{' '} - eight + eight{' '} + ’s. However,{' '} - - the previous mathbox actually had only seven of - them - + + the previous mathbox actually had only{' '} + seven of them + .

( ]} description={ <> - Needed eight + Needed eight{' '} + ’s,
- but there was only seven of them + but there was only seven of + them } />

You can check again:

- Needed eight + Needed eight{' '} + ’s,
- but there was only seven of them + but there was only seven of them

Summary: If you put the wrong number of{' '} @@ -339,7 +353,7 @@ export default () => (

Now, here’s a question:{' '} - How can we avoid mistakes like this? + How can we avoid mistakes like this?

(

If you the above mathbox,{' '} - + it automatically expands the bottom half before calculating the result - - . After the expansion, there are now eight{' '} + + . After the expansion, there are now{' '} + eight{' '} ’s.

@@ -426,19 +441,20 @@ export default () => ( The bottom half automatically becomes
- eight + eight{' '} + ’s.

Summary:{' '} - + If there’s{' '} {' '} next to , it repeats{' '} eight times - + .

(

Takeaway: By using{' '} ,{' '} - + you can specify the number of times{' '} gets repeated - + . 🤗

@@ -497,10 +513,10 @@ export default () => ( content: ( <>

- + You can also repeat ’s - + . Take a look at this mathbox, and{' '} :

@@ -530,20 +546,20 @@ export default () => (
    - + If there’s{' '} {' '} to the left of , then… - + - + When you it,{' '} gets repeated for{' '} times. - +

@@ -560,10 +576,10 @@ export default () => ( />

Of course, you can use{' '} - + instead of{' '} - {' '} + {' '} as well.

@@ -615,10 +631,10 @@ export default () => (

By using this technique,{' '} - + you won’t use the wrong number of ’s again! - {' '} + {' '} 😉

@@ -653,9 +669,9 @@ export default () => ( <>

As we mentioned earlier,{' '} - + the villagers in Lambda Village were all very bad at math - + . They had to rely on mathboxes to do even simple additions or subtractions.

@@ -698,7 +714,8 @@ export default () => ( } />

- However, one day, something terrible happened in + However, one day,{' '} + something terrible happened in Lambda Village that changed everything.

(

結果は になりました。この計算箱は、 - + 下の の左側に{' '} {' '} があるので、 が4回繰り返されるのです。 - +

@@ -44,10 +51,10 @@ export const Conclusion = () => ( <>

このように繰り返しの機能を使えば、 - + {' '} を数え間違えることなく、確実に足し算や引き算を行うことができます。 - + だからこそ、繰り返しの機能はラムダ村で重宝されていたのです。

( content: ( <>

- 前回は、ラムダ村に代々伝わる「計算箱 + 前回は、ラムダ村に代々伝わる「 + 計算箱 」の話をしました。

(

ここで質問です。上の計算箱は、 - + {' '} を正しく計算できるでしょうか? - +

@@ -182,12 +190,12 @@ export default () => (

答えは {' '} になりました。つまり、もともと意図していた{' '} - + {' '} ではなく、 {' '} を計算してしまった - + のです。

( ではなく、 {' '} を計算してしまった理由は、 - + の数が間違っていたから - + です。

(

{' '} を計算したければ、 - 8個配置する + を + 8個配置する 必要がありますが、 - + 先ほどの計算箱には が - 7個しかありませんでした - + 7個しかありませんでした + 。

( このように、 {' '} の数をひとつでも間違えると、計算箱では正確な計算ができません。 - ではどうすれば、こういったミスを防げるのでしょうか? + + ではどうすれば、こういったミスを防げるのでしょうか? +

(

注目ポイントは、 - + 下の の左側に{' '} {' '} の印があることです。 - +

) @@ -338,31 +349,31 @@ export default () => ( content: ( <>

- + 上の計算箱を すると、計算をする前に、下の部分が次のように変化します。 - + 変化後には、 の下に {' '} - が8個あるのに注目です。 + が8個あるのに注目です。

計算をする前に… の下に {' '} - が8個出現する + が8個出現する

つまり、 - + の左側に{' '} {' '} の印があると、 が8回繰り返されるということ - + です。

(

まとめると、 - + 繰り返しの機能を使うことで、 {' '} を指定した回数分繰り返すことができる - + ということです。🤗

@@ -421,9 +432,9 @@ export default () => ( <>

もちろん、 - + を繰り返すこともできます。 - + こちらの計算箱をご覧になり、

@@ -444,20 +455,20 @@ export default () => (
    - + の左側に何らかの数字{' '} {' '} が入っている場合、 - + - + すると、 が{' '} 回分繰り返される。 - +

@@ -472,10 +483,10 @@ export default () => ( />

もちろん、 - + の代わりに{' '} を使った場合も同じ - + ように繰り返されます。

@@ -563,7 +574,9 @@ export default () => ( <>

前回も話したように、 - ラムダ村の村人は計算がとても苦手でした + + ラムダ村の村人は計算がとても苦手でした + 。だから彼らは、足し算や引き算を行うときは、計算箱に頼り切っていました。

( />

村人たちは、計算箱の - + 」、「 」、そして今回紹介した「 」を組み合わせる - + ことで、足し算や引き算を正確に行っていたのです。

( } />

- そんなある日、ラムダ村である異変が起きました。 + そんなある日、 + ラムダ村である異変が起きました。

( <>

One day,{' '} - + the devil 😈 - {' '} + {' '} suddenly appeared in Lambda Village.

- The devil appears! + The devil appears! } /> @@ -65,13 +65,13 @@ export default () => ( <>

Don’t worry. I’m not here to take your lives away…

- + However, I will take{' '} - + all of your mathboxes - + . They’re all mine now! - +

) @@ -96,7 +96,8 @@ export default () => ( <>

And just like that: The devil has stolen{' '} - every single mathbox in Lambda Village. + every single mathbox in Lambda + Village.

( children: ( <>

- We’re all really bad at math. + 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. + + 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: ( <>

- + So, by taking away your mathboxes, I’m giving you an opportunity to finally study math. - {' '} + {' '} You should thank me for it!

@@ -213,7 +216,8 @@ export default () => ( type: 'devil', children: (

- Hmm…okay. Maybe I’ll give you a chance. + Hmm…okay.{' '} + Maybe I’ll give you a chance.

) } @@ -227,14 +231,14 @@ export default () => ( children: ( <>

- + I’ll give you{' '} - + a bunch of puzzles that require lots of thinking. - {' '} - If you can solve all of them, I’ll - give your mathboxes back. - + {' '} + If you can solve all of + them, I’ll give your mathboxes back. +

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! + + We’ll accept your challenge, the devil! +

) @@ -307,9 +313,9 @@ export default () => ( <>

お前たちに解いてもらうパズルは、{' '} - + - + というものだ。

@@ -320,7 +326,7 @@ export default () => ( children: ( <>

- 弁当箱 + 弁当箱 だって?なんか美味しそうな名前だなあ…

@@ -354,9 +360,9 @@ export default () => ( 解説: 上のように、 には、実際の弁当箱のように、 - + 四角の中にいくつかマスがあり、それぞれのマスの中に料理が入っています - + 。

@@ -385,7 +391,7 @@ export default () => ( <>

なんとなく、 - 見た目が計算箱に似ている + 見た目が計算箱に似ている 気がするなあ。数字の代わりに、料理が入っているけど。

@@ -398,15 +404,15 @@ export default () => (

実はこの - は、計算箱と密接な関係がある + は、計算箱と密接な関係がある んだが、これについては後に説明する。

とりあえず今は、 - + について見ていこう。 - +

) @@ -427,15 +433,15 @@ export default () => ( content: ( <>

- + は、計算箱と同じように することができます。 - + 試しに、 - + - +

( <>

すると、 - + 下のふたつの が消えて、 だけが残った! - +

) @@ -470,11 +476,14 @@ export default () => ( children: ( <>

- 実は、これはある法則に則っているんだ。 + 実は、これはある法則 + に則っているんだ。

今回は、お前たちに - その法則が何か解き明かしてもらうぞ。 + + その法則が何か解き明かしてもらうぞ。 +

) @@ -485,7 +494,7 @@ export default () => ( emojis={['❓', '🍱', '❓']} description={ <> - 弁当箱は、どんな法則に則って + 弁当箱は、どんな法則に則って
されるでしょう? @@ -499,7 +508,7 @@ export default () => ( <>

これだけだと法則が何か、まだハッキリと言えないなあ… - もう少し他の例を試してみないと! + もう少し他の例を試してみないと!

) @@ -552,7 +561,8 @@ export default () => ( />

- 続いて、上段にふたつの料理が入っている場合 + 続いて、上段に + ふたつの料理が入っている場合 を紹介します。

@@ -586,7 +596,7 @@ export default () => (


- どれもある法則 + どれもある法則 に則っているのですが、その法則がお分かりでしょうか?

( <>

では、 - + 弁当箱のパズルは、 する際にどんな法則に則っているか - + 、そろそろ分かったかな?

@@ -678,9 +688,9 @@ export default () => ( <>

ほう。ではここで、 - + - + の時間だ。法則が分かったかどうか、チェックしてやるぞ!

@@ -730,7 +740,7 @@ export default () => (

これを すると、 - 最終的に下のようになるでしょうか? + 最終的に下のようになるでしょうか? これまでの法則から予想してみてください。

@@ -756,7 +766,7 @@ export default () => (

- 最終的に下のようになるでしょうか? + 最終的に下のようになるでしょうか? これまでの法則から予想してみてください。

@@ -775,10 +785,10 @@ export default () => (

つまり - + 1問目の - {' '} + {' '} でした。

@@ -787,10 +797,10 @@ export default () => (

つまり - + 2問目の - {' '} + {' '} でした。

diff --git a/src/contents/3.jp.tsx b/src/contents/3.jp.tsx index 16dc0b9fa..93f24e5d5 100644 --- a/src/contents/3.jp.tsx +++ b/src/contents/3.jp.tsx @@ -1,6 +1,12 @@ import React from 'react' import EpisodeCardList from 'src/components/EpisodeCardList' -import { P, Strong, Em, Hr, Bold } from 'src/components/ContentTags' +import { + P, + HighlightBold, + Highlight, + Hr, + Bold +} from 'src/components/ContentTags' import EmojiSeparator from 'src/components/EmojiSeparator' import ExpressionRunnerSeparator from 'src/components/ExpressionRunnerSeparator' import YesNoButtons from 'src/components/YesNoButtons' @@ -21,9 +27,9 @@ export default () => ( <>

ある日のこと。平和だったラムダ村に突然、 - + とてもとても恐ろしい悪魔 😈 - + が現れました。

( <>

安心しろ、お前たちの命だけは助けてやる。

- + だが、お前たちが大事にしている - + 計算箱 - {' '} - は、すべて没収させてもらうぞ! - + {' '} + は、すべて没収 + させてもらうぞ! +

) @@ -82,7 +89,9 @@ export default () => ( <>

こうして悪魔は、 - ラムダ村から計算箱を取り上げてしまったのです。 + + ラムダ村から計算箱を取り上げてしまったのです。 +

( children: ( <>

- 俺らは計算が大の苦手なんだ。 + 俺らは計算が大の苦手なんだ。

計算箱がないと、足し算や引き算ができなくなって、村の経済が成り立たなくなるんだぞ! @@ -133,9 +142,9 @@ export default () => ( children: ( <>

- + 計算箱を取り上げたのは、お前たちが計算が苦手だからだよ。 - +

お前たちは簡単な計算をするのにでも計算箱に頼り切っているだろう。そんなことだから、いつまでたっても計算が上達しないんだ。 @@ -156,9 +165,9 @@ export default () => ( children: ( <>

- + だから計算箱を取り上げることで、お前たちが計算を勉強するきっかけを作ってやったのさ。 - + 感謝するんだな!

@@ -197,7 +206,9 @@ export default () => ( children: (

ふむ…そこまで言うなら仕方ない。では、 - お前たちにチャンスをやろう! + + お前たちにチャンスをやろう! +

) } @@ -211,14 +222,16 @@ export default () => ( children: ( <>

- + これから、 - 頭を使わないと解けないパズル + + 頭を使わないと解けないパズル + をたくさん出題する。 - + すべて解けたら、計算箱を返してやってもいいぞ! - - + +

日頃から頭を使ってこなかったお前たちには、おそらくムリだろうがな!わはは! @@ -238,7 +251,7 @@ export default () => ( 難しそう…しかし、やるしかない!計算箱を取り返すんだ!

- その挑戦、受けて立つぞ! + その挑戦、受けて立つぞ!

) @@ -279,9 +292,9 @@ export default () => ( <>

お前たちに解いてもらうパズルは、{' '} - + - + というものだ。

@@ -292,7 +305,7 @@ export default () => ( children: ( <>

- 弁当箱 + 弁当箱 だって?なんか美味しそうな名前だなあ…

@@ -319,9 +332,9 @@ export default () => ( 解説: 上のように、 には、実際の弁当箱のように、 - + 四角の中にいくつかマスがあり、それぞれのマスの中に料理が入っています - + 。

@@ -350,7 +363,7 @@ export default () => ( <>

なんとなく、 - 見た目が計算箱に似ている + 見た目が計算箱に似ている 気がするなあ。数字の代わりに、料理が入っているけど。

@@ -363,15 +376,15 @@ export default () => (

実はこの - は、計算箱と密接な関係がある + は、計算箱と密接な関係がある んだが、これについては後に説明する。

とりあえず今は、 - + について見ていこう。 - +

) @@ -392,15 +405,15 @@ export default () => ( content: ( <>

- + は、計算箱と同じように することができます。 - + 試しに、 - + - +

( <>

すると、 - + 下のふたつの が消えて、 だけが残った! - +

) @@ -435,11 +448,14 @@ export default () => ( children: ( <>

- 実は、これはある法則に則っているんだ。 + 実は、これはある法則 + に則っているんだ。

今回は、お前たちに - その法則が何か解き明かしてもらうぞ。 + + その法則が何か解き明かしてもらうぞ。 +

) @@ -450,7 +466,7 @@ export default () => ( emojis={['❓', '🍱', '❓']} description={ <> - 弁当箱は、どんな法則に則って + 弁当箱は、どんな法則に則って
されるでしょう? @@ -464,7 +480,7 @@ export default () => ( <>

これだけだと法則が何か、まだハッキリと言えないなあ… - もう少し他の例を試してみないと! + もう少し他の例を試してみないと!

) @@ -517,7 +533,8 @@ export default () => ( />

- 続いて、上段にふたつの料理が入っている場合 + 続いて、上段に + ふたつの料理が入っている場合 を紹介します。

@@ -551,7 +568,7 @@ export default () => (


- どれもある法則 + どれもある法則 に則っているのですが、その法則がお分かりでしょうか?

( <>

では、 - + 弁当箱のパズルは、 する際にどんな法則に則っているか - + 、そろそろ分かったかな?

@@ -643,9 +660,9 @@ export default () => ( <>

ほう。ではここで、 - + - + の時間だ。法則が分かったかどうか、チェックしてやるぞ!

@@ -695,7 +712,7 @@ export default () => (

これを すると、 - 最終的に下のようになるでしょうか? + 最終的に下のようになるでしょうか? これまでの法則から予想してみてください。

@@ -721,7 +738,7 @@ export default () => (

- 最終的に下のようになるでしょうか? + 最終的に下のようになるでしょうか? これまでの法則から予想してみてください。

@@ -740,10 +757,10 @@ export default () => (

つまり - + 1問目の - {' '} + {' '} でした。

@@ -752,10 +769,10 @@ export default () => (

つまり - + 2問目の - {' '} + {' '} でした。

diff --git a/src/contents/4.en.tsx b/src/contents/4.en.tsx index 3c011dd3f..a5ad1d69c 100644 --- a/src/contents/4.en.tsx +++ b/src/contents/4.en.tsx @@ -1,6 +1,6 @@ import React from 'react' import EpisodeCardList from 'src/components/EpisodeCardList' -import { P, Strong, Bold } from 'src/components/ContentTags' +import { P, HighlightBold, Bold } from 'src/components/ContentTags' import BottomRightBadge from 'src/components/BottomRightBadge' import Emoji from 'src/components/Emoji' import * as R from 'src/components/Runners' @@ -79,12 +79,12 @@ export const Unmatched = () => ( If none of ’s and ’s match,{' '} - + don’t do the copy step and simply remove{' '} ’s and ’s - + .

diff --git a/src/contents/4.jp.tsx b/src/contents/4.jp.tsx index 5f8d021f3..6440dabc2 100644 --- a/src/contents/4.jp.tsx +++ b/src/contents/4.jp.tsx @@ -1,6 +1,12 @@ import React from 'react' import EpisodeCardList from 'src/components/EpisodeCardList' -import { P, Strong, Em, Hr, Bold } from 'src/components/ContentTags' +import { + P, + HighlightBold, + Highlight, + Hr, + Bold +} from 'src/components/ContentTags' import BottomRightBadge from 'src/components/BottomRightBadge' import BubbleQuotes from 'src/components/BubbleQuotes' import EmojiSeparator from 'src/components/EmojiSeparator' @@ -85,11 +91,11 @@ export const Unmatched = () => ( と{' '} {' '} が一致しなかった場合、 - + コピーはせずに、ただ{' '} と{' '} を消す - + 。

@@ -129,7 +135,9 @@ export default () => ( children: ( <>

- やった、法則が分かったぞ! + + やった、法則が分かったぞ! +

) @@ -161,14 +169,19 @@ export default () => ( <>

じゃあ説明しよう。まず、 - 下のふたつの料理を比べてみる。 + + 下のふたつの料理を比べてみる + + 。

- - もし下のふたつの料理が同じなら、 + + もし下のふたつの料理が + 同じなら、 - したときに上にある料理が残る - + したときに上にある + 料理が残る + んだ。

@@ -232,14 +245,18 @@ export default () => ( <>

次に、 - 下のふたつの料理が異なる場合。 + + 下のふたつの料理が異なる場合 + + 。

- + この場合は、 - したときに右下にある料理が残る - + したときに右下にある + 料理が残る + んだ。

@@ -317,7 +334,7 @@ export default () => ( children: ( <>

- 正解、まさにその通りだ!{' '} + 正解、まさにその通りだ!{' '} 🎉 🎉 🎉

@@ -339,7 +356,7 @@ export default () => ( children: ( <>

- だが、喜ぶのはまだ早い。 + だが、喜ぶのはまだ早い。

) @@ -360,10 +377,10 @@ export default () => ( 次のページから、さらに難しい を解いてもらう。そのためには、 - + の法則を明確にする必要がある。 - +

) @@ -393,11 +410,11 @@ export default () => ( <>

先ほどお前が言った、 - + 「下のふたつの料理を比べて、同じなら上が残る。違うなら右下が残る」というのは - 明確さに欠ける。 + 明確さに欠ける。 さらに複雑なパズルを解くには、法則としては不十分なんだ。 - +

) @@ -439,11 +456,11 @@ export default () => ( children: ( <>

- + というわけで、これから の - 明確な法則を紹介する。 - + 明確な法則を紹介する。 + それを理解した上で、さらに複雑なパズルを解いてもらおう。

@@ -525,7 +542,7 @@ export default () => (

まず、 - + 上の料理には{' '} 、左の料理には{' '} @@ -536,7 +553,7 @@ export default () => ( bottomRightBadgeType="funcBound" />{' '} の印をつけます。 - +

( <>

続いて、 - + と{' '} {' '} が一致するかチェックし、一致した料理には、 を付けます。 - +

( <>

続いて、 - + {' '} の料理を、一致した{' '} {' '} の部分にコピーします。 - +

( <>

最後に、 - + と{' '} {' '} が消えます。 - +

( <>

では、たとえば下の例のように、 - 上にふたつの料理がある場合 + + 上にふたつの料理がある場合 + はどうなるんだろう?

@@ -820,11 +839,11 @@ export default () => ( この場合、上にある には - + 両方とも{' '} {' '} の印がつきます。 - +

両方とも{' '} @@ -839,7 +858,7 @@ export default () => (

が - 両方ともコピーされます。 + 両方ともコピーされます。

@@ -868,7 +887,7 @@ export default () => ( では、最初から最後まで で見てみましょう。 機能を使うと、 - 各ステップを自動で見ていくことができます。 + 各ステップを自動で見ていくことができます。

( <>

うむ。そして、 - + こうやってルールを明確にすれば、パズルが複雑になっても応用が効く - + んだ。

@@ -953,7 +972,7 @@ export default () => ( <>

では、 - + もし{' '} ( bottomRightBadgeType="funcBound" />{' '} が一致しなかったらどうするの? - +

たとえば下の弁当箱の場合は、 @@ -1007,12 +1026,12 @@ export default () => ( と{' '} {' '} が一致しない場合は、 - + コピーはせずに、ただ{' '} と{' '} {' '} を消すだけです。 - +

@@ -1103,9 +1122,9 @@ export default () => ( children: ( <>

- + 法則を覚えきれていなくても、次回また復習するので大丈夫だ。 - +

) @@ -1126,7 +1145,9 @@ export default () => ( children: ( <>

- 次回では、もっと複雑なパズルを出題する。 + + 次回では、もっと複雑なパズルを出題する。 + 計算箱を返してほしかったら、解いてみせるんだな!

diff --git a/src/contents/5.en.tsx b/src/contents/5.en.tsx index 838e72fc0..dd1ec813e 100644 --- a/src/contents/5.en.tsx +++ b/src/contents/5.en.tsx @@ -1,6 +1,14 @@ import React from 'react' import EpisodeCardList from 'src/components/EpisodeCardList' -import { P, Em, Strong, Ol, OlLi, Bold, Hr } from 'src/components/ContentTags' +import { + P, + Highlight, + HighlightBold, + Ol, + OlLi, + Bold, + Hr +} from 'src/components/ContentTags' import H from 'src/components/H' import InlinePrioritiesLabel from 'src/components/InlinePrioritiesLabel' import BottomRightBadge from 'src/components/BottomRightBadge' @@ -13,25 +21,25 @@ export const ThreeRowRules = () => (

    - + First, start with the pair of{' '} 1’s. - + - + Label the center item on the bottom row as{' '} , and you can ignore this for the rest of the iteration. - + - + After finishing the pair of{' '} 1’s, 2 will become{' '} 1. Then, repeat. - +
Lunchbox with 3 rows @@ -43,18 +51,18 @@ export const Beginner5Rules = () => (

Additional Rule 1: If there are multiple pairs of{' '} 1’s,{' '} - start with the leftmost pair. + start with the leftmost pair.

Note:{' '} - + If there’s no 1’s on the leftmost edge of a lunchbox, then start with the inner pair of{' '} 1’s. - +

If there’s no 1 on the @@ -69,10 +77,10 @@ export const Beginner5Rules = () => ( Additional Rule 2: If you can’t start with{' '} 1’s because there’s only one item on the bottom row,{' '} - + start with the pair of 2 ’s. - +

diff --git a/src/contents/5.jp.tsx b/src/contents/5.jp.tsx index 9d2a975b2..7d6365d26 100644 --- a/src/contents/5.jp.tsx +++ b/src/contents/5.jp.tsx @@ -2,8 +2,8 @@ import React from 'react' import EpisodeCardList from 'src/components/EpisodeCardList' import { P, - Em, - Strong, + Highlight, + HighlightBold, Ul, UlLi, Ol, @@ -32,27 +32,27 @@ export const ThreeRowRules = () => (

    - + まず先に 1{' '} のペアからはじめる。 - + - + 下段の真ん中にある料理には{' '} {' '} をつける。 {' '} は、いったん無視して構わない。 - + - + 1 のペアが終わると、 2 が{' '} 1{' '} になるので、また繰り返す。 - +
3段の弁当箱 @@ -64,18 +64,18 @@ export const Beginner5Rules = () => (

細かい法則1: 1{' '} のペアが左右ふたつ以上ある場合は、 - 一番左のペアからはじめます。 + 一番左のペアからはじめます。

補足:{' '} - + 1{' '} のペアが弁当箱の左端にない場合は、内側の{' '} 1 のペアからはじめる。 - +

1{' '} @@ -88,9 +88,9 @@ export const Beginner5Rules = () => ( 細かい法則2: 下段にひとつの料理しかなく、 1{' '} のペアからはじめられない場合、 - + 2 のペアからはじめます。 - +

@@ -132,7 +132,7 @@ export default () => ( content: ( <>

- 今回が初級最後のページです! + 今回が初級最後のページです! ここまで読んでくださり、ありがとうございます!

( description={<>初級最後のページです!} />

- 今回登場する弁当箱は、今までと比べてちょっと難しいです。 + + 今回登場する弁当箱は、今までと比べてちょっと難しいです。 + しかし、ここまで来たあなたなら読み進められるはずです。諦めずにチャレンジしてみてください!

( <>

これは… - + 今までの弁当箱は縦に2段しかなかったけれど、 - この弁当箱には縦に3段あるぞ。 - + + この弁当箱には縦に3段ある + + ぞ。 +

) @@ -202,17 +207,20 @@ export default () => ( <>

そして、 - + 一番下には と横に3つの料理が並んでいる。 - +

今までの弁当箱では、 - 横に3つの料理が並んだことはなかった。 + + 横に3つの料理が並んだことはなかった + + 。

) @@ -223,11 +231,11 @@ export default () => ( <>

そうだな。そしてさらに、 - + 1 や{' '} 2 という数字が左端に表示されている - + のに気づいたかな?

@@ -264,11 +272,11 @@ export default () => (

そして - + 解き方を説明した後に、 を出題し、お前たちに自力で解いてもらう - + ぞ。

@@ -299,10 +307,10 @@ export default () => ( 3段の を解く際には、まず - + 左上と左下に 1{' '} の印がある部分に注目します。 - +

( <>

そう。これは、 - + 暗い色 {' '} の部分は無視して、 1 {' '} のペアの部分に注目する - + ということだ。

@@ -390,14 +398,14 @@ export default () => ( children: ( <>

- + 下段真ん中の には、 {' '} の印がついた! - +

) @@ -426,7 +434,7 @@ export default () => ( <>

そう、前回では登場しなかったが、 - + ( bottomRightBadgeType="funcBound" />{' '} のどれにも該当しない、 - 下段の真ん中にある料理には{' '} + 下段の真ん中にある料理 + には{' '} {' '} をつけるんだ。 - +

) @@ -482,7 +491,8 @@ export default () => ( <>

{' '} - の印がついた料理は、いったん無視してください。 + の印がついた料理は、 + いったん無視してください

(

- + どれも{' '} {' '} は関係ありませんよね。だから、 - + 次のいくつかのステップの間は{' '} {' '} を無視していい - + のです。 - +

の @@ -579,32 +589,32 @@ export default () => ( />

まず、 - + と{' '} {' '} が一致するかチェックし、一致した料理には {' '} を付けます。 - +

続いて、 - + {' '} の料理を、一致した{' '} {' '} の部分にコピーします。 - +

最後に、 - + と{' '} {' '} が消えます。 - +

( children: ( <>

- + 上記のどのステップにおいても、 {' '} は関係なかった - + だろう?

@@ -811,14 +821,14 @@ export default () => (

まとめると、

    - + まず先に{' '} 1{' '} のペアからはじめる。 - + - + 下段の真ん中にある料理には{' '} ( bottomRightBadgeType="funcUnbound" />{' '} は、いったん無視して構わない。 - + - + 1{' '} のペアが終わると、 @@ -841,7 +851,7 @@ export default () => ( が{' '} 1{' '} になるので、また繰り返す。 - +

こんなところかな?

@@ -854,10 +864,10 @@ export default () => ( <>

その通り。では、 - + そろそろ の時間だ! - +

) @@ -911,10 +921,10 @@ export default () => ( children: ( <>

- + {' '} だと思う! - + 最後には が残るはずだ。 @@ -979,7 +989,7 @@ export default () => ( <>

まだドヤ顔をするような時間じゃないぞ。弁当箱の「 - 細かい法則 + 細かい法則 」に関する問題を出していないからな。

@@ -992,7 +1002,7 @@ export default () => ( description={ <> 弁当箱の「 - 細かい法則 + 細かい法則 」? } @@ -1005,7 +1015,7 @@ export default () => ( <>

弁当箱の「 - 細かい法則 + 細かい法則 」だって?何のことだ?

@@ -1037,10 +1047,10 @@ export default () => ( <>

今まで見たことない形のパズルだ。 - + 1{' '} のペアが左右ふたつある - + なあ…

@@ -1073,11 +1083,11 @@ export default () => ( <>

これも見たことない形だなあ… - + 一番下に入っている料理が ひとつだけだ。 - +

) @@ -1099,7 +1109,7 @@ export default () => ( <>

上で紹介したようなパズルを解くには、これから紹介する弁当箱の「 - 細かい法則 + 細かい法則 」を知っておかないといけない。

@@ -1112,7 +1122,7 @@ export default () => ( description={ <> 弁当箱の「 - 細かい法則 + 細かい法則 」を
知らないと解けない @@ -1126,7 +1136,7 @@ export default () => ( children: ( <>

- その法則はふたつある。 + その法則はふたつある。 順番に紹介していこう!もちろん、 もやるからな! @@ -1151,12 +1161,12 @@ export default () => ( <>

まあそう焦るな。 - - + + 次からはじまる中級編で、とても難しい問題を出題する。 - + このページで紹介した法則を応用すれば解ける問題だ。それに答えることができたら、計算箱を返してやろう! - +

) @@ -1201,16 +1211,16 @@ export default () => (

細かい法則その1:{' '} - + 1{' '} のペアが左右ふたつ以上ある場合は、 - 一番左側にある{' '} + 一番左側にある{' '} 1{' '} のペアからはじめます。 - +

- 一番左側にある{' '} + 一番左側にある{' '} 1{' '} のペアからはじめる @@ -1269,14 +1279,14 @@ export default () => ( がついたのに注目だ。

- + 弁当箱の右端に接している料理にはすべて{' '} {' '} の印がつく - + んだ。

@@ -1298,7 +1308,7 @@ export default () => ( children: ( <>

- + ( bottomRightBadgeType="funcUnbound" />{' '} の印がつく - + んだな。

@@ -1423,10 +1433,10 @@ export default () => ( children: ( <>

- + {' '} だと思う! - + 最後には ではなく、 が残るはずだ。 @@ -1479,10 +1489,10 @@ export default () => ( ここで補足です。まず、下の弁当箱をご覧ください。先ほどの{' '} で登場した弁当箱とほとんど同じですが、 - + 1{' '} のペアが弁当箱の左端になく、内側だけにあります。 - +

1{' '} @@ -1492,10 +1502,10 @@ export default () => (

このような場合、 - + 内側の 1{' '} のペアの部分からはじめます。 - +

内側の 1{' '} @@ -1509,12 +1519,12 @@ export default () => (

まとめると、 - + 1{' '} のペアが弁当箱の左端にない場合は、内側の{' '} 1{' '} のペアからはじめればいい - + のです。

@@ -1547,10 +1557,10 @@ export default () => ( <>

この弁当箱は、 - + 一番下の段の料理が だけ - + なのに注目だ。

@@ -1569,7 +1579,7 @@ export default () => ( この には、 - + ( bottomRightBadgeType="funcUnbound" />{' '} のうち、どの印をつければいいのだろう? - +

) @@ -1599,11 +1609,12 @@ export default () => ( のうちどの印をつければいい?

- 答えは、「どの印もつけることができない + 答えは、「 + どの印もつけることができない 」です。 - + 一番下の段にひとつしか料理がない場合、どの印をつけることもできないのです - + 。

( />

ということはつまり、 - + 1{' '} のペアからはじめることができない - + 、ということになります。

( 答え: 上記のように{' '} 1{' '} のペアからはじめられない場合は、 - + 2{' '} のペアからはじめます。 - +

2{' '} @@ -1682,7 +1693,7 @@ export default () => ( なるほど、 2{' '} のペアからはじめれば、 - + 下の段に がふたつあるから、 @@ -1696,7 +1707,7 @@ export default () => ( bottomRightBadgeType="funcBound" />{' '} の印をつけられるね。 - +

) @@ -1750,9 +1761,9 @@ export default () => ( が残った!

- + このふたつが残った時点で、もうこれ以上進められないから、そこで終了する - + というわけか。

@@ -1768,10 +1779,10 @@ export default () => ( の時間だ。

- + これが初級最後の になるぞ! - +

) @@ -1817,10 +1828,10 @@ export default () => ( children: ( <>

- + {' '} だと思う! - + 最後には @@ -1886,11 +1897,11 @@ export default () => ( children: ( <>

- + 安心しろ、これらの法則を暗記する必要はない。 - + なんとなく「 - こういう法則があるんだな + こういう法則があるんだな 」と頭に入れておけば大丈夫だ。

@@ -1926,18 +1937,18 @@ export default () => ( <>

やるじゃないか。 - + というわけで、初級編はここで終わりだ。次からは中級編に入る。 - +

さきほど約束した通り、 - - + + 次からはじまる中級編で、とても難しい問題を出題する。 - + このページで紹介した法則を応用すれば解ける問題だ。それに答えることができたら、計算箱を返してやろう! - +

) diff --git a/src/contents/6.jp.tsx b/src/contents/6.jp.tsx index e509f3758..66f783b1c 100644 --- a/src/contents/6.jp.tsx +++ b/src/contents/6.jp.tsx @@ -2,7 +2,15 @@ import { css, jsx } from '@emotion/core' import { colors, spaces } from 'src/lib/theme' import EpisodeCardList from 'src/components/EpisodeCardList' -import { P, Em, Strong, Ol, OlLi, Bold, Hr } from 'src/components/ContentTags' +import { + P, + Highlight, + HighlightBold, + Ol, + OlLi, + Bold, + Hr +} from 'src/components/ContentTags' import BubbleQuotes from 'src/components/BubbleQuotes' import EmojiSeparator from 'src/components/EmojiSeparator' import TwoColGrid from 'src/components/TwoColGrid' @@ -35,9 +43,9 @@ export default () => (

初級編を忘れてしまいましたか? もしかしたら、「 - + 初級編を終えた後に長い休憩を取ったので、これまでの内容を忘れてしまった - + 」という方もいらっしゃるかもしれません。

( description={<>内容を忘れてしまいましたか?} >

- そんな方のために、復習用のまとめ + そんな方のために、復習用のまとめ を用意しました。 - 初級編の内容をほとんど忘れてしまった + 初級編の内容をほとんど忘れてしまった という方は、↓の「初級編の内容を復習する」を押してください。

- + 初級編の内容がまだ頭に少しでも残っているという方は、そのまま読み進めてくださって大丈夫 - + です。

@@ -64,7 +72,8 @@ export default () => ( <>

- まず、ラムダ村の村人たちは、悪魔に「計算箱 + まず、ラムダ村の村人たちは、悪魔に「 + 計算箱 」を奪われてしまいました。計算箱には「 」と「 @@ -124,7 +133,9 @@ export default () => (


以上が初級編で話したことでした。 - これらの法則を暗記する必要はありません。 + + これらの法則を暗記する必要はありません。 + なんとなく、「こんな法則があるんだな」と思っていただければ十分です。

( <>

ここからは中級編だ。 - + 約束した通り、この中級編で出題する難しい問題に答えることができたら、計算箱を返してやろう! - +

) @@ -185,7 +196,8 @@ export default () => ( children: ( <>

- 問題を出す前に、わたしの助手 + 問題を出す前に、わたしの + 助手 をここに呼ばせてもらおう。

@@ -205,7 +217,7 @@ export default () => ( <>

いま呼ぶから、ちょっと待つんだな。

- …いでよ、「ミニオン」! + …いでよ、「ミニオン」!

) @@ -214,7 +226,11 @@ export default () => ( /> 悪魔の助手・ミニオン、ここに参上!} + description={ + + 悪魔の助手・ミニオン、ここに参上! + + } /> ( children: ( <>

- どうも、ミニオン + どうも、ミニオン です。お呼びですか、ご主人さま?

@@ -235,7 +251,7 @@ export default () => ( <>

よく来てくれた!こいつがわたしの助手、 - ミニオンだ。 + ミニオンだ。

) @@ -254,7 +270,7 @@ export default () => ( <>

ミニオンはそんじょそこらの犬とは違う。 - とっておきの芸 + とっておきの芸 を持っているからな。

ミニオン、こいつらにお前の芸を見せてやるんだ!

@@ -319,15 +335,17 @@ export default () => ( <>

ぼくは、 - この弁当箱を計算箱に変える + + この弁当箱を計算箱に変える + ことができるんです!

下の - + 」ボタン - + を押してみてください!

@@ -354,11 +372,13 @@ export default () => ( <>

そうなんです。ぼくは、 - ある法則に基づいて + ある法則に基づいて 、弁当箱を計算箱に変える芸を持っているんです。

- その法則がどんなものか、当ててみてください! + + その法則がどんなものか、当ててみてください! +

) @@ -513,10 +533,10 @@ export default () => ( children: ( <>

- + {' '} だと思う! - + 変換すると になるはずだ。

@@ -692,15 +712,15 @@ export default () => ( children: ( <>

- + では、計算箱に変換した場合、何の数字になるのでしょうか? - +

答えを言うと、 - + 右下にある 🅰️ がついた料理の数 - + が、変換後の計算箱の数字になります。

@@ -719,11 +739,12 @@ export default () => ( <>

先ほどの弁当箱の場合、 - + 右下には 🅰️ がついた - が「2個 + が「 + 2個 」あります。 - +

だから、これをぼくが計算箱に変換すると{' '} @@ -756,9 +777,9 @@ export default () => ( children: ( <>

- + 他の料理でも、同じ法則に沿っていれば、計算箱に変換したときに同じ数字になります。 - +

たとえば、 と{' '} @@ -822,11 +843,11 @@ export default () => ( <>

つまり、 - + 弁当箱に入っているのがどんな料理だろうと、 🅰️🅱️{' '} の印をつけた際に、同じ法則に沿っていれば同じ数字に変換される - + というわけです。

@@ -873,11 +894,11 @@ export default () => (

上の弁当箱に、先ほどの法則にしたがって 🅰️{' '} と 🅱️ の印をつけると、 - + 右下には 🅰️ がついた - が「4個」あります。 - + が「4個」あります。 +

だから、これをぼくが計算箱に変換すると{' '} @@ -932,17 +953,17 @@ export default () => (

上の弁当箱に、先ほどの法則にしたがって 🅰️{' '} と 🅱️ の印をつけると、 - + 右下には 🅰️ がついた が - ひとつもありません。 - + ひとつもありません。 +

つまり、 - + 🅰️ の数は「ゼロ個」 - + というわけです。

@@ -969,10 +990,10 @@ export default () => ( <>

なるほど、 - + 右下の 🅰️{' '} の数がゼロになる場合もあるんだね。 - +

) @@ -983,8 +1004,9 @@ export default () => ( <>

はい。先ほど紹介した法則の「🅰️ が - いくつか」というのは、「 - 🅰️ゼロ個 + いくつか」というのは、「 + 🅰️ が + ゼロ個 」である場合も含まれているわけです。

@@ -1012,10 +1034,10 @@ export default () => ( <>

さらにぼくは、 - + 弁当箱を してから計算箱に変換する - + こともできます。

@@ -1057,11 +1079,11 @@ export default () => ( <>

ためしに、 - + 次の弁当箱の下にある、「 」ボタンを押してみてください。 - +

) @@ -1122,10 +1144,10 @@ export default () => ( children: ( <>

- + これは先ほど説明した通り、計算箱に変換すると{' '} になります。 - +

) @@ -1148,17 +1170,17 @@ export default () => (

このような、

    - + まず弁当箱を し、 - + - + 実行し終えたら、続いて{' '} する - +

というふたつのステップを、

@@ -1187,9 +1209,9 @@ export default () => ( - + - + (

なるほど、「実行」と「 計算箱に変換」を - 一括で行う + 一括で行う こともできる、ということだな。

@@ -1292,10 +1314,10 @@ export default () => ( children: ( <>

- + {' '} だと思う! - + 変換すると ではなく、 になるはずだ。

@@ -1373,10 +1395,10 @@ export default () => ( children: ( <>

- + これは、計算箱に変換すると {' '} になります。 - +

) @@ -1440,10 +1462,12 @@ export default () => ( <>

それでは以前約束した通り、 - - 次のページで難しい問題を出題する + + + 次のページで難しい問題を出題する + 。それに答えることができたら、計算箱を返してやろう! - +

) diff --git a/src/contents/7.jp.tsx b/src/contents/7.jp.tsx index a42650305..ed882251b 100644 --- a/src/contents/7.jp.tsx +++ b/src/contents/7.jp.tsx @@ -1,6 +1,12 @@ import React from 'react' import EpisodeCardList from 'src/components/EpisodeCardList' -import { P, Em, Strong, Ul, UlLi } from 'src/components/ContentTags' +import { + P, + Highlight, + HighlightBold, + Ul, + UlLi +} from 'src/components/ContentTags' import CustomEmoji from 'src/components/CustomEmoji' import BubbleQuotes from 'src/components/BubbleQuotes' import EmojiNumber from 'src/components/EmojiNumber' @@ -25,7 +31,9 @@ export default () => ( content: ( <>

- このページから難易度が急激に上がります。 + + このページから難易度が急激に上がります。 + 弁当箱も、以前に比べて複雑になります。

( />

ただ、 - + 内容を完全に理解する必要はありません。少しくらい分からなくても、雰囲気で読み進めていただいて大丈夫です。 - + また、先に進んでから読み返すことで理解できる場合もあるので、分からなくてもとりあえず先に進んでみてください。

( <>

では約束通り、 - + これから出す問題に答えることができたら、計算箱を返してやろう! - +

) @@ -88,7 +96,7 @@ export default () => ( children: ( <>

- この問題は非常に難しい + この問題は非常に難しい から覚悟するんだな。ミニオン、問題を説明するんだ!

@@ -105,10 +113,10 @@ export default () => (

{' '} がたくさんありますが、それぞれの{' '} - + {' '} には何らかの料理が入ります。 - +

) @@ -128,10 +136,10 @@ export default () => ( <>

何だか複雑そうな弁当箱だなあ…

- + {' '} にはそれぞれ何の料理が入るの? - +

) @@ -142,11 +150,11 @@ export default () => ( <>

それが今回の問題です! - + 村人のみなさんには、 {' '} には何の料理が入るかを当ててもらいます。 - +

) @@ -154,11 +162,11 @@ export default () => ( ]} /> - + に何が入るかを
当ててもらいます!🐶 -
+
( <>

先ほどの弁当箱は、 - + それぞれの {' '} に、ある法則に基づいて料理を入れると… - +

- + がある弁当箱になります。 - +

) @@ -224,7 +232,7 @@ export default () => ( それぞれの に、
- ある法則に基づいて料理を入れると、 + ある法則に基づいて料理を入れると、
がある弁当箱になる @@ -335,7 +343,8 @@ export default () => (

では上の弁当箱を、先ほどの - がある弁当箱と合体させてみます。 + がある弁当箱と + 合体させてみます

) @@ -354,9 +363,9 @@ export default () => ( <>

では、この弁当箱を「 - + - + 」するとどうなるか見てみましょう。

@@ -384,27 +393,27 @@ export default () => (

そうなんです!つまり、

    - + に変換できる弁当箱と、 - + - + 先ほどの がある弁当箱を合体させて、 - + - + 」すると、 - + - + 結果は になる - +

ということです。

@@ -433,10 +442,10 @@ export default () => ( <>

つまりざっくり言うと、 - + が{' '} になった - + というわけです。

@@ -515,11 +524,11 @@ export default () => ( <>

この弁当箱も、 - + 先ほどの がある弁当箱と合体させてみました。 - +

) @@ -538,9 +547,9 @@ export default () => ( <>

こちらを「 - + - + 」するとどうなるか確かめてみてください!

@@ -592,10 +601,10 @@ export default () => ( <>

ざっくり言うと、今度は{' '} - + が{' '} になった - + のです。

@@ -634,29 +643,29 @@ export default () => (

まとめると、

    - + ある数字 {' '} に変換できる弁当箱と、 - + - + がある弁当箱を合体させ、 - + - + すると、 - +

- + 結果は {' '} になる - + のです。

@@ -696,11 +705,11 @@ export default () => ( <>

ここで思い出してほしいのですが、 - + 計算箱では、 {' '} を使えば、「1を足す」計算を行うことができましたよね - + 。

@@ -742,10 +751,10 @@ export default () => ( children: ( <>

- + 計算箱における {' '} と同じようなもの - + 、と言えるでしょう。

@@ -754,10 +763,10 @@ export default () => ( ]} /> - + 計算箱における、 と同じようなもの - + ) @@ -775,11 +784,11 @@ export default () => ( <>

では、ここで問題です。 - + この弁当箱に、どのような法則に基づいて{' '} {' '} に料理を入れると… - +

) @@ -787,11 +796,11 @@ export default () => ( ]} /> - + どのような法則に基づいて
に料理を入れると… -
+
( <>

先ほどのような、 - + がある弁当箱になるでしょう? - +

) @@ -812,10 +821,10 @@ export default () => ( ]} /> - + がある弁当箱になる? - + ( <>

つまり、 - + それぞれの {' '} に何を入れたら、 があるか当てろってこと? - +

) @@ -852,17 +861,19 @@ export default () => ( children: ( <>

- はい、その通りです! - + はい、その通りです! + ある法則に基づいて{' '} {' '} に料理を入れた時に限り - + 、 がある弁当箱になります。

- それがどんな法則が、当ててみよう! + + それがどんな法則が、当ててみよう! + という問題です。

@@ -874,7 +885,9 @@ export default () => ( <>

この問題こそが、以前から話していた「難しい問題」だ。 - これを解けたら、約束通り計算箱を返してやろう! + + これを解けたら、約束通り計算箱を返してやろう! +

) @@ -895,7 +908,7 @@ export default () => ( { title: ( <> - 試しに適当な料理を入れてみる + 試しに適当な料理を入れてみる ), content: ( @@ -908,9 +921,9 @@ export default () => ( <>

うーん… - + 問題を完全に理解できた自信がないし、どうやって解けばいいかさっぱり分からない! - +

) @@ -921,11 +934,11 @@ export default () => ( <>

大丈夫、安心してください!

- + 試しに、 {' '} に適当な料理を入れてみると、問題を理解できると思います。 - +

) @@ -948,14 +961,14 @@ export default () => ( に適当な料理を入れてみよう。

- + を適当な組み合わせで{' '} {' '} に入れてみたよ。 - +

) @@ -977,9 +990,9 @@ export default () => ( この弁当箱に、 があれば - 成功 🎉 - 、なければ失敗 😭{' '} - ということかな? + 成功 🎉 + 、なければ失敗{' '} + 😭 ということかな?

) @@ -1028,8 +1041,11 @@ export default () => ( 結果が になれば があるので - 成功 🎉、 それ以外なら - 失敗 😭 というわけです。 + 成功 🎉、 + それ以外なら + + 失敗 + 😭 というわけです。

) @@ -1049,9 +1065,9 @@ export default () => (
があるので - 成功 🎉 + 成功 🎉
- それ以外なら失敗 😭 + それ以外なら失敗 😭 ) @@ -1097,19 +1113,22 @@ export default () => ( これを先ほどの弁当箱と組み合わせて、 し、 - + {' '} を計算できればいい - + んだな。

すなわち、 - + 結果が になれば - 成功 🎉、それ以外なら - 失敗 😭{' '} - + 成功 🎉 + 、それ以外なら + + 失敗 + 😭{' '} + というわけか。

@@ -1127,9 +1146,9 @@ export default () => (
して、結果が になれば - 成功 🎉 + 成功 🎉
- それ以外なら失敗 😭 + それ以外なら失敗 😭 ( children: ( <>

- 今回の弁当箱では、初級その5で学んだ法則が登場 + 今回の弁当箱では、 + 初級その5で学んだ法則が登場 します。

@@ -1190,11 +1210,11 @@ export default () => (

以下のように、 - + {' '} が計算できれば - 成功 🎉 - {' '} + 成功 🎉 + {' '} なんだよな。

@@ -1212,9 +1232,9 @@ export default () => (
して、結果が になれば - 成功 🎉 + 成功 🎉
- それ以外なら失敗 😭 + それ以外なら失敗 😭 (

まず初級編で説明した通り、 - + 1{' '} のペアが左右ふたつ以上ある場合は、一番左の{' '} 1{' '} のペアからはじめます。 - +

) @@ -1258,21 +1278,21 @@ export default () => ( <>

続いて、また{' '} - + 1{' '} のペアからはじめたいのですが、 1{' '} のペアの一番下の段にひとつの料理( )しかないので不可能です。 - +

というわけで、初級編で説明した通り、 - + 次は 2{' '} のペアから - + はじめます。

@@ -1298,10 +1318,10 @@ export default () => ( <>

次も前回と同じく、 - + 2{' '} のペアからはじめます。 - +

) @@ -1351,9 +1371,9 @@ export default () => (

残念ながら、 - + この弁当箱はぼくが計算箱に変換することができません。 - +

) @@ -1371,17 +1391,19 @@ export default () => ( <>

理由は、 - 以下の法則に沿っていないからです。 + + 以下の法則に沿っていないからです。 +

- + 右上には 🅱️{' '} の料理がひとつないといけませんが、ここでは{' '} 🅰️ になっている - + ので、計算箱に変換できないのです。

@@ -1404,14 +1426,14 @@ export default () => ( <>

ダメか… - + もし仮に右上が ではなくて だったら、 に変換できていたのになあ。 - +

) @@ -1462,10 +1484,10 @@ export default () => ( 実行したところ、
- + {' '} に変換できる弁当箱にならなかった - +
( <>

だから、 - + 先ほどの弁当箱に、 は無い - - のです。つまり、不正解でした! + + のです。つまり、 + 不正解でした!

) @@ -1524,11 +1547,11 @@ export default () => ( 問題の意味が分かったでしょうか?では、もう一度聞きますね。

- + この弁当箱に、どのような法則に基づいて{' '} {' '} に料理を入れると… - +

) @@ -1536,10 +1559,10 @@ export default () => ( ]} /> - + どのような法則に基づいて {' '} に料理を入れると… - + ( children: ( <>

- + がある弁当箱になるでしょう? - +

) @@ -1559,10 +1582,10 @@ export default () => ( ]} /> - + がある弁当箱になる? - + ( description={<>難しすぎて見当もつかない!} />

- しかし、次のページで答えが判明します。 + しかし、 + 次のページで答えが判明します。 ぜひ先に進んでみてください!

diff --git a/src/contents/8.jp.tsx b/src/contents/8.jp.tsx index 8103b4d95..d36eda454 100644 --- a/src/contents/8.jp.tsx +++ b/src/contents/8.jp.tsx @@ -1,6 +1,14 @@ import React from 'react' import EpisodeCardList from 'src/components/EpisodeCardList' -import { P, Strong, Em, Ul, UlLi, Bold, Hr } from 'src/components/ContentTags' +import { + P, + HighlightBold, + Highlight, + Ul, + UlLi, + Bold, + Hr +} from 'src/components/ContentTags' import CustomEmoji from 'src/components/CustomEmoji' import BubbleQuotes from 'src/components/BubbleQuotes' import EmojiNumber from 'src/components/EmojiNumber' @@ -30,16 +38,16 @@ export default () => ( />

ラムダ村の村人たちは、前回の問題に四苦八苦していました。

- + どのような法則に基づいて {' '} に料理を入れると… - + - + がある弁当箱になる? - + ( ]} />

- その時です。ラムダ村に暮らす少女のサヤちゃん{' '} + その時です。ラムダ村に暮らす少女の + サヤちゃん{' '} 👧🏻{' '} が、問題に苦戦している村人たちに話しかけてきました。

@@ -72,7 +81,8 @@ export default () => ( emojis={['✨', '👧🏻', '✨']} description={ <> - ラムダ村に暮らす少女のサヤちゃん + ラムダ村に暮らす少女の + サヤちゃん } /> @@ -114,11 +124,11 @@ export default () => ( <>

じゃあ、手短に説明するね。

- + 以下の弁当箱の{' '} {' '} に、どのような法則に基づいて料理を入れると… - +

) @@ -138,17 +148,17 @@ export default () => ( children: ( <>

- 「1を足す効果{' '} + 「1を足す効果{' '} 」がある弁当箱になるか、という問題なんだ。

すなわち、 - + {' '} {' '} を計算できるようにしないといけない - + んだ。

@@ -169,7 +179,7 @@ export default () => ( {' '} になる?
- (すなわち「1を足す効果{' '} + (すなわち「1を足す効果{' '} 」がある?) @@ -235,10 +245,10 @@ export default () => (

前回もやったように、 - + {' '} に変換できる弁当箱と合体させて、 - +

(

して、 - + 結果が になるか - + 確かめてみよう。どうせムリだろうけど!

@@ -272,9 +282,9 @@ export default () => (
して、結果が になれば - 成功 🎉 + 成功 🎉
- それ以外なら失敗 😭 + それ以外なら失敗 😭 (

まず、 - + 1{' '} のペアが左右ふたつ以上あるので、一番左の{' '} 1{' '} のペアからはじめます。 - + (

続いて、また{' '} - + 1{' '} のペアからはじめたいのですが、 1{' '} のペアの一番下の段にひとつの料理( )しかないので不可能です。 - +

というわけで、 - + 次は 2 のペアから - + はじめます。

@@ -348,10 +358,10 @@ export default () => (

次も前回と同じく、 - + 2{' '} のペアからはじめます。 - +

@@ -413,12 +423,12 @@ export default () => ( <>

ということは、サヤちゃんの弁当箱は…

- + {' '} に変換できる弁当箱と合体させ、 すると、結果が になる - + ということですね。

@@ -447,7 +457,8 @@ export default () => ( つまり、 {' '} が計算できたので、 - 成功です! 🎉 + 成功です!{' '} + 🎉

) @@ -494,18 +505,18 @@ export default () => ( いや、まだ分からんぞ。 {' '} ができるからといって、 - + 他の数字に対しても があるとは限らない。 - +

たとえば、 - + {' '} も計算できるのかどうか - + 確かめてみないと。

@@ -529,9 +540,9 @@ export default () => ( <>

じゃあ、 - + に変換できる弁当箱と、 - +

( 合体したものを して、 - + 結果が になればいい - + んだよね。

@@ -570,9 +581,9 @@ export default () => (
して、結果が になれば - 成功 🎉 + 成功 🎉
- それ以外なら失敗 😭 + それ以外なら失敗 😭 ( つまり、 {' '} が計算できたので、 - またしても成功です! 🎉 + またしても成功です!{' '} + 🎉

) @@ -681,14 +693,15 @@ export default () => ( <>

ではここで正解を言いましょう。 - + サヤちゃんが考えた弁当箱は、 がある弁当箱です。 - +

- だから、サヤちゃんの答えが正解です! + だから、 + サヤちゃんの答えが正解です! おめでとうございます!🎉

@@ -718,11 +731,11 @@ export default () => ( <>

さらに言うと、サヤちゃんが考えた弁当箱以外にも、 - + 以下の法則に当てはまる弁当箱であれば、 どれでも があります。 - +

) @@ -829,12 +842,12 @@ export default () => ( はありますよ。

- + 試しに、 {' '} に変換できるこちらの弁当箱と合体させて してみましょう。 - +

(

実行したとき、 - + 結果が {' '} に変換できる弁当箱になれば、 {' '} を計算できたので成功 - + になります。

@@ -940,9 +953,12 @@ export default () => ( <>

いいですよ!

- ちなみに現時点で、中級編も半分を終えました + ちなみに現時点で、 + 中級編も半分を終えました 。つまり、本稿の折り返し地点を越えたということです。 - 残るは中級編の残り半分と、上級編のみです。 + + 残るは中級編の残り半分と、上級編のみです。 +

いい機会なので、少し立ち止まって振り返ってみましょう。 @@ -967,7 +983,7 @@ export default () => ( これまで学んだことを一言でまとめると、上の計算箱にあるような「 」は、 - 弁当箱で「再現」できる + 弁当箱で「再現」できる 、ということです。

( 」は、
- 弁当箱で「再現」することができる + 弁当箱で「再現 + 」することができる } />

- 「再現 + 「再現 」できる、とはどういうことでしょうか?先ほどの計算箱の例で説明しますね。

これを弁当箱で再現します

ステップ1: まず、 - + 計算箱の の代わりに、 - + に変換できる - + 弁当箱 - + を用意します。

これの代わりに… @@ -1011,10 +1028,10 @@ export default () => (

ステップ2: 次に、 - + 計算箱の の代わりに、 - + がある弁当箱を用意します。

これの代わりに… @@ -1027,10 +1044,10 @@ export default () => (

ステップ3:{' '} このふたつを合体させた弁当箱は、先ほども説明した通り、 - + すると{' '} になります - + ね。

@@ -1046,14 +1063,15 @@ export default () => (

- こちらの弁当箱で「再現」できるということです。 + こちらの弁当箱で「再現」できる + ということです。

{' '} の計算箱を、弁当箱で再現

- これが、「計算箱を弁当箱で再現する + これが、「計算箱を弁当箱で再現する 」ということなんですね。

@@ -1073,38 +1091,39 @@ export default () => (

これを弁当箱で再現するには、 - + に変換できる弁当箱と、 - がある弁当箱を「2個」合体させればいい - + がある弁当箱を「2個 + 」合体させればいい + のです。

に変換できる弁当箱と
- がある弁当箱を「2個
+ がある弁当箱を「2個
合体すれば、 {' '} の計算箱を再現できる

上の弁当箱は実行に時間がかかるので、ここでは早送りはしませんが、 - + {' '} ボタンを押すと、答えが {' '} になるのを確認できます。 - +


まとめると、 - + 計算箱の「 」は、弁当箱で再現することができる - + のです。このポイントさえ覚えていただければ、細かいことは分からなくても大丈夫です!

( 」は、
- 弁当箱で「再現」することができる + 弁当箱で「再現 + 」することができる } /> @@ -1154,9 +1174,9 @@ export default () => ( 回繰り返す)

- + これらの機能も、弁当箱で再現することができるのでしょうか? - +

( } />

- この疑問については、後に答えが明らかになります。 + + この疑問については、後に答えが明らかになります。 + 楽しみにしていてください。

@@ -1213,9 +1235,9 @@ export default () => ( さっきの問題、難しすぎやしないかい?普通は、サヤちゃんみたいに答えをとっさに思いつかないよ!

- + こういうのがパッと思いつけないと、コンピュータサイエンスを学ぶ資格はないのかな? - +

) @@ -1234,7 +1256,9 @@ export default () => ( children: ( <>

- いえ、そんなことは全くありませんよ。 + + いえ、そんなことは全くありませんよ。 + むしろ、こういう答えを思いつけるのはひと握りの天才だけです。

@@ -1254,9 +1278,9 @@ export default () => ( <>

はい。先ほどの問題は超難問でしたから。

- + 答えを思いつけなくても、答えを見て、「なるほど、そういうことだったのか」と理解できれば、コンピュータサイエンスを学ぶ素養は十分すぎるほどあります。 - +

) @@ -1316,7 +1340,9 @@ export default () => ( <>

ミニオンさん、 - おかしなことに気づいちゃったんだけど… + + おかしなことに気づいちゃったんだけど… +

) @@ -1332,7 +1358,8 @@ export default () => ( ]} />

- サヤちゃんが気づいた、「おかしなこと + サヤちゃんが気づいた、「 + おかしなこと 」とは何なのでしょうか?次のページで説明していきます!

diff --git a/src/contents/9.jp.tsx b/src/contents/9.jp.tsx index 71ff7c347..a2259123e 100644 --- a/src/contents/9.jp.tsx +++ b/src/contents/9.jp.tsx @@ -1,6 +1,12 @@ import React from 'react' import EpisodeCardList from 'src/components/EpisodeCardList' -import { P, Em, Strong, Ul, UlLi } from 'src/components/ContentTags' +import { + P, + Highlight, + HighlightBold, + Ul, + UlLi +} from 'src/components/ContentTags' import H from 'src/components/H' import BubbleQuotes from 'src/components/BubbleQuotes' import EmojiNumber from 'src/components/EmojiNumber' @@ -37,9 +43,9 @@ export default () => (

ねえねえ、見てほしいものがあるんだけど。

まず、 - + これは に変換できる弁当箱 - + だよね。

@@ -98,11 +104,11 @@ export default () => ( <>

そりゃあ、 - + {' '} を計算できるんだから、 になるに決まっている - + だろう?

@@ -163,9 +169,9 @@ export default () => (

残念ながら、 - + この弁当箱はぼくが計算箱に変換することができません。 - +

) @@ -181,22 +187,24 @@ export default () => ( <>

理由は、 - 以下の法則に沿っていないからです。 + + 以下の法則に沿っていないからです。 +

- + 右上には 🅱️ の料理が「 - ひとつだけ + ひとつだけ 」ある必要があります。しかし、 - + ここでは 🅱️ の料理が - ふたつもある - + ふたつもある + ので、計算箱に変換できないのです。 - +

) @@ -240,12 +248,12 @@ export default () => ( では、前回と比較してみましょう。前回実行したのは、こちらの弁当箱でした。

- + 先ほどと唯一違うのは、上の部分に{' '} のかわりに{' '} が入っている - - ところです。(黄色で示しています) + + ところです。(黄色で示しています)

) @@ -256,13 +264,13 @@ export default () => (

- 前回実行した弁当箱: + 前回実行した弁当箱:
上の部分は に変換できる。
- + 先ほどと違うのは、上の の部分。 - +
それ以外はすべて先ほどと同じ。
@@ -320,7 +328,8 @@ export default () => (

では、ここでネタばらしをしましょう。

こちらに、先ほど - 失敗した例をもう一度表示しています。 + 失敗した + 例をもう一度表示しています。

) @@ -329,10 +338,10 @@ export default () => ( /> 先ほど{' '} - + {' '} を計算できなかった - + 例 ( <>

ここで、 - + ( />{' '} の両方に、 がある - + のに注目してみてください。

@@ -409,7 +418,7 @@ export default () => ( <>

実は、このように{' '} - + ( bottomRightBadgeType="funcUnbound" />{' '} に同じ料理があると、実行結果が狂ってしまう - + のです。

@@ -442,7 +451,7 @@ export default () => ( ]} description={ <> - + {' '} と{' '} ( に同じ料理があると、
実行結果が狂う -
+
(先ほどの場合は
@@ -481,7 +490,7 @@ export default () => ( <>

この例だと複雑すぎて説明が難しいので、 - 簡単な例を使って説明しますね! + 簡単な例を使って説明しますね!

) @@ -597,9 +606,9 @@ export default () => ( children: ( <>

- + 左側は、下のふたつの料理が違うけど、右側は下のふたつの料理が同じになった! - +

) @@ -732,7 +741,7 @@ export default () => ( ]} description={ <> - + {' '} と{' '} ( に同じ料理があると、
実行結果が狂う -
+ } /> @@ -784,10 +793,10 @@ export default () => ( ]} /> - + {' '} を計算できなかった - + 理由:
と{' '} @@ -811,7 +820,7 @@ export default () => ( children: ( <>

- + ( のどちらかの {' '} を別の料理に変えれば、上手くいく - + というわけだよね。

じゃあ… - - ミニオンさんお願い!特別ルール + + ミニオンさんお願い! + 特別ルール を設けてくれないかな? - +

) @@ -852,7 +862,7 @@ export default () => (

に、「 - + ( bottomRightBadgeType="funcUnbound" />{' '} に同じ料理が登場したら、どちらかを別な料理に変える - + 」という特別ルールを設けてほしいんだ。

@@ -879,7 +889,7 @@ export default () => ( ]} description={ <> - + {' '} と{' '} ( に同じ料理が登場したら、
どちらかを別な料理に変える -
+
という特別ルールを設けてほしい @@ -902,7 +912,9 @@ export default () => ( children: ( <>

- 分かりました、いいですよ! + + 分かりました、いいですよ! +

) @@ -941,7 +953,7 @@ export default () => (

それでは、

    - + ( bottomRightBadgeType="funcUnbound" />{' '} に同じ料理が登場したら、 - + - + 自動的に{' '} {' '} を、まだ使われてない料理にランダムに変える。 - +

という特別ルールを設けましょう。

@@ -983,13 +995,13 @@ export default () => ( {' '} に同じ料理が登場したら、
- + 自動的に{' '} {' '} がまだ使われてない料理に
ランダムに変わる -
+ } /> @@ -1025,24 +1037,24 @@ export default () => ( children: ( <>

- + {' '} の が自動的に別の料理に変わります。 - +

- + 何に変わるかについてですが、 - + まだ使われていない料理にランダムに変わります - + 。ここでは、 になりました。 - +

) @@ -1175,9 +1187,9 @@ export default () => (

次の - + に変換できる弁当箱 - + と組み合わせた場合、

@@ -1203,18 +1215,18 @@ export default () => (

しかし、今回から新たに以下の特別ルールが適用されます:

    - + と{' '} {' '} に同じ料理が登場したら、 - + - + 自動的に{' '} {' '} を、まだ使われてない料理にランダムに変える。 - +
@@ -1238,15 +1250,17 @@ export default () => ( <>

ご心配なく! - + この特別ルールは次のページ以降で登場する弁当箱でも使われますが、 - - 暗記する必要はありません。 + + + 暗記する必要はありません。 + 早送り中に自動で行われますから。

なんとなく「 - こういう法則があるんだな + こういう法則があるんだな 」と思ってくだされば大丈夫です!

diff --git a/src/contents/demo.en.tsx b/src/contents/demo.en.tsx index c2b2c7b15..4bda66a3c 100644 --- a/src/contents/demo.en.tsx +++ b/src/contents/demo.en.tsx @@ -1,5 +1,5 @@ import React from 'react' -import { P, Hr, Strong, CenteredCode } from 'src/components/ContentTags' +import { P, Hr, HighlightBold, CenteredCode } from 'src/components/ContentTags' import EpisodeCardList from 'src/components/EpisodeCardList' import ExpressionRunnerSeparator from 'src/components/ExpressionRunnerSeparator' import EmojiSeparator from 'src/components/EmojiSeparator' @@ -22,8 +22,8 @@ const DemoCardList = () => ( <>

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 in person. So there won’t + be any explanations written on this page.

) diff --git a/src/types/ContentTagTypes.ts b/src/types/ContentTagTypes.ts deleted file mode 100644 index 178f80557..000000000 --- a/src/types/ContentTagTypes.ts +++ /dev/null @@ -1,7 +0,0 @@ -export type InlineHighlightType = - | 'default' - | 'white' - | 'none' - | 'blue' - | 'yellow' - | 'pink'