diff --git a/next.config.js b/next.config.js index feeee196d..3cf000f7b 100644 --- a/next.config.js +++ b/next.config.js @@ -21,15 +21,13 @@ const config = { }, env: { productionLocale: process.env.PRODUCTION_LOCALE, - productionContentVersion: process.env.PRODUCTION_CONTENT_VERSION, isDevelopment: process.env.IS_DEVELOPMENT }, // For locale, if running 2 servers (JP and EN) locally, if you use build-time config // (env instead of publicRuntimeConfig) then the config overlaps in both servers. // So must use publicRuntimeConfig instead. publicRuntimeConfig: { - devLocale: process.env.DEV_LOCALE, - devContentVersion: process.env.DEV_CONTENT_VERSION + devLocale: process.env.DEV_LOCALE }, exportPathMap(defaultPathMap, { dev, outDir }) { if (!dev) { diff --git a/package.json b/package.json index ad1b22a0d..2939fe3ad 100644 --- a/package.json +++ b/package.json @@ -21,10 +21,9 @@ "scripts": { "jp": "IS_DEVELOPMENT=true DEV_LOCALE=jp next -p 9991", "en": "IS_DEVELOPMENT=true DEV_LOCALE=en next -p 9990", - "jp:v2": "IS_DEVELOPMENT=true DEV_LOCALE=jp DEV_CONTENT_VERSION=v2 next -p 9992", "jp:hide-cards": "DEV_LOCALE=jp next -p 9991", "en:hide-cards": "DEV_LOCALE=en next -p 9990", - "dev": "rm -f report.*.json && rm -f *.log && rm -rf .next && concurrently \"yarn jp\" \"yarn jp:v2\" \"yarn en\"", + "dev": "rm -f report.*.json && rm -f *.log && rm -rf .next && concurrently \"yarn jp\" \"yarn en\"", "dev:hide-cards": "rm -rf .next && concurrently \"yarn jp:hide-cards\" \"yarn en:hide-cards\"", "ts-node": "tsc --project tsconfig.scripts.json && node -r module-alias/register", "sitemap": "yarn ts-node .tsbuild/scripts/generateSitemap.js", diff --git a/scripts/lib/buildExpressionFromParams.ts b/scripts/lib/buildExpressionFromParams.ts index d13e5111a..743619581 100644 --- a/scripts/lib/buildExpressionFromParams.ts +++ b/scripts/lib/buildExpressionFromParams.ts @@ -183,7 +183,7 @@ export default function buildExpressionFromParams( } else if (isVariableShorthandNumberParams(expressionParams)) { return { ...buildVariableExpression( - expressionParams.someNumber ? 'someNumber' : 'shorthandNumber', + 'shorthandNumber', true, expressionParams.initialHighlight ? 'initialHighlighted' : 'default' ), diff --git a/scripts/lib/initialExpressionContainers.ts b/scripts/lib/initialExpressionContainers.ts index bcac538df..b12e08ab5 100644 --- a/scripts/lib/initialExpressionContainers.ts +++ b/scripts/lib/initialExpressionContainers.ts @@ -790,41 +790,6 @@ export const ynct = initializeExpressionContainer([ } ]) -export const heiy = initializeExpressionContainer([ - { - magical: true, - name: magicalVariableName - }, - 'someNumber' -]) - -export const yrrr = initializeExpressionContainer([ - 'someNumber', - { - shorthandBinary: 'mult' - }, - { - someNumber: true, - shorthandNumber: 1 - }, - { - shorthandBinary: 'mult' - }, - 'abbreviated', - { - shorthandBinary: 'mult' - }, - { - shorthandNumber: 2 - }, - { - shorthandBinary: 'mult' - }, - { - shorthandNumber: 1 - } -]) - export const aizc = initializeExpressionContainer([ { magical: true, @@ -927,50 +892,6 @@ export const ipyc = initializeExpressionContainer([ } ]) -export const onbh = initializeExpressionContainer([ - { - shorthandNumber: 3 - }, - [ - { - shorthandBinary: 'mult' - }, - [ - ['abbreviated', 'abbreviated'], - { - shorthandNumber: 2 - } - ] - ] -]) - -export const fzwa = initializeExpressionContainer([ - { - shorthandNumber: 3 - }, - [ - { - shorthandBinary: 'mult' - }, - [ - { - shorthandNumber: 2 - }, - [ - { - shorthandBinary: 'mult' - }, - [ - ['abbreviated', 'abbreviated'], - { - shorthandNumber: 1 - } - ] - ] - ] - ] -]) - export const pvph = initializeExpressionContainer([ [ yCombinator, @@ -999,20 +920,6 @@ export const nxmy = initializeExpressionContainer([ } ]) -export const vgig = initializeExpressionContainer([ - [ - yCombinator, - { - arg: 's', - body: updatedMagicalParams - } - ], - { - name: 'someNumber', - highlighted: true - } -]) - export const vfno = initializeExpressionContainer([ [ yCombinator, @@ -1088,44 +995,6 @@ export const hctu = initializeExpressionContainer([ } ]) -export const imda = initializeExpressionContainer([ - [ - yCombinator, - { - arg: 's', - body: updatedMagicalParamsForPower(true) - } - ], - { - name: 'someNumber', - highlighted: true - } -]) - -const updatedMagicalParamsCustomizable: FunctionExpressionParams = { - arg: magicalVariableName, - body: { - checkType: 'isZero', - condition: { - shorthandUnary: 'pred', - name: magicalVariableName - }, - trueCase: 'question', - falseCase: 'question' - } -} - -export const oesh = initializeExpressionContainer([ - [ - yCombinator, - { - arg: 's', - body: updatedMagicalParamsCustomizable - } - ], - 'someNumber' -]) - export const vazr = initializeExpressionContainer(yCombinator) export const zjhi = initializeExpressionContainer({ @@ -1214,38 +1083,10 @@ export const fmlj = initializeDoneExpressionContainer({ shorthandNumber: 6 }) -export const zcxt = initializeExpressionContainer([ - { - shorthandNumber: 2 - }, - [ - { - shorthandBinary: 'remainder' - }, - { - shorthandNumber: 5 - } - ] -]) - export const zrwn = initializeDoneExpressionContainer({ shorthandNumber: 1 }) -export const ltys = initializeExpressionContainer([ - { - shorthandNumber: 4 - }, - [ - { - shorthandBinary: 'remainder' - }, - { - shorthandNumber: 2019 - } - ] -]) - export const pduk = initializeDoneExpressionContainer({ shorthandNumber: 0 }) @@ -1287,32 +1128,6 @@ export const pslb = initializeExpressionContainer({ } }) -export const qbkn = initializeExpressionContainer([ - { - shorthandNumber: 4 - }, - [ - { - shorthandBinary: 'remainder' - }, - 'blankNumber' - ] -]) - -export const jnac = initializeExpressionContainer([ - { - shorthandNumber: 4 - }, - [ - { - shorthandBinary: 'remainder' - }, - { - shorthandNumber: 2020 - } - ] -]) - export const sbvu = initializeDoneExpressionContainer({ shorthandNumber: 0 }) @@ -1334,55 +1149,6 @@ export const wkny = initializeDoneExpressionContainer({ shorthandNumber: 28 }) -export const wrps = initializeExpressionContainer({ - checkType: 'isZero', - condition: [ - { - shorthandNumber: 2 - }, - [ - { - shorthandBinary: 'remainder' - }, - { - shorthandNumber: 5 - } - ] - ], - trueCase: { - shorthandNumber: 3 - }, - falseCase: { - shorthandNumber: 4 - } -}) - -export const ised = initializeExpressionContainer({ - checkType: 'isZero', - condition: [ - { - shorthandNumber: 2, - initialHighlight: true - }, - [ - { - shorthandBinary: 'remainder', - initialHighlight: true - }, - { - shorthandNumber: 5, - initialHighlight: true - } - ] - ], - trueCase: { - shorthandNumber: 3 - }, - falseCase: { - shorthandNumber: 4 - } -}) - export const urrw = initializeExpressionContainer({ checkType: 'isZero', condition: { @@ -1397,77 +1163,6 @@ export const urrw = initializeExpressionContainer({ } }) -export const zhpt = initializeExpressionContainer({ - checkType: 'isZero', - condition: [ - { - shorthandNumber: 4 - }, - [ - { - shorthandBinary: 'remainder' - }, - 'blankNumber' - ] - ], - trueCase: { - shorthandNumber: 29 - }, - falseCase: { - shorthandNumber: 28 - } -}) - -export const vtzk = initializeExpressionContainer({ - checkType: 'isZero', - condition: [ - { - shorthandNumber: 4 - }, - [ - { - shorthandBinary: 'remainder' - }, - { - shorthandNumber: 2019, - initialHighlight: true - } - ] - ], - trueCase: { - shorthandNumber: 29 - }, - falseCase: { - shorthandNumber: 28 - } -}) - -export const lmst = initializeExpressionContainer({ - checkType: 'isZero', - condition: [ - { - shorthandNumber: 4, - initialHighlight: true - }, - [ - { - shorthandBinary: 'remainder', - initialHighlight: true - }, - { - shorthandNumber: 2019, - initialHighlight: true - } - ] - ], - trueCase: { - shorthandNumber: 29 - }, - falseCase: { - shorthandNumber: 28 - } -}) - export const gflf = initializeExpressionContainer({ checkType: 'isZero', condition: { @@ -1482,56 +1177,6 @@ export const gflf = initializeExpressionContainer({ } }) -export const ybmb = initializeExpressionContainer({ - checkType: 'isZero', - condition: [ - { - shorthandNumber: 4 - }, - [ - { - shorthandBinary: 'remainder' - }, - { - shorthandNumber: 2020, - initialHighlight: true - } - ] - ], - trueCase: { - shorthandNumber: 29 - }, - falseCase: { - shorthandNumber: 28 - } -}) - -export const rtpi = initializeExpressionContainer({ - checkType: 'isZero', - condition: [ - { - shorthandNumber: 4, - initialHighlight: true - }, - [ - { - shorthandBinary: 'remainder', - initialHighlight: true - }, - { - shorthandNumber: 2020, - initialHighlight: true - } - ] - ], - trueCase: { - shorthandNumber: 29 - }, - falseCase: { - shorthandNumber: 28 - } -}) - export const ilun = initializeExpressionContainer({ checkType: 'isZero', condition: { @@ -1546,56 +1191,6 @@ export const ilun = initializeExpressionContainer({ } }) -export const qolg = initializeExpressionContainer({ - checkType: 'isZero', - condition: [ - { - shorthandNumber: 4 - }, - [ - { - shorthandBinary: 'remainder' - }, - { - shorthandNumber: 2021, - initialHighlight: true - } - ] - ], - trueCase: { - shorthandNumber: 29 - }, - falseCase: { - shorthandNumber: 28 - } -}) - -export const gxqm = initializeExpressionContainer({ - checkType: 'isZero', - condition: [ - { - shorthandNumber: 4, - initialHighlight: true - }, - [ - { - shorthandBinary: 'remainder', - initialHighlight: true - }, - { - name: 'blankNumber', - highlighted: true - } - ] - ], - trueCase: { - shorthandNumber: 29 - }, - falseCase: { - shorthandNumber: 28 - } -}) - export const ygid = initializeExpressionContainer([ { shorthandNumber: 3 diff --git a/src/components/ContentTags/Blockquote.tsx b/src/components/ContentTags/Blockquote.tsx deleted file mode 100644 index cd17fc503..000000000 --- a/src/components/ContentTags/Blockquote.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import styled from '@emotion/styled' -import { colors, spaces } from 'src/lib/theme' - -export const Blockquote = styled.blockquote` - border-left: ${spaces(0.25)} solid ${colors('grey100')}; - padding-left: ${spaces(0.5)}; - padding-right: 0; - margin: 0 0 ${spaces(1)}; - color: ${colors('grey700')}; -` diff --git a/src/components/ContentTags/P.tsx b/src/components/ContentTags/P.tsx index b95ee4a20..aafa2480f 100644 --- a/src/components/ContentTags/P.tsx +++ b/src/components/ContentTags/P.tsx @@ -1,14 +1,6 @@ import styled from '@emotion/styled' -import { ns, spaces } from 'src/lib/theme' +import { spaces } from 'src/lib/theme' export const P = styled.p` margin: 0 0 ${spaces(1)}; ` - -export const PFullWidth = styled.p` - margin: 0 ${spaces('-1')} ${spaces(1)}; - - ${ns} { - margin: 0 ${spaces('-2')} ${spaces(1)}; - } -` diff --git a/src/components/ContentTags/Table.tsx b/src/components/ContentTags/Table.tsx deleted file mode 100644 index 23cc2cee6..000000000 --- a/src/components/ContentTags/Table.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import styled from '@emotion/styled' -import { colors, spaces } from 'src/lib/theme' - -export const Table = styled.table` - width: 100%; - border: 2px solid ${colors('indigo300')}; - margin: 0 0 ${spaces(1)}; - border-collapse: collapse; - table-layout: fixed; -` - -export const Th = styled.th` - padding: ${spaces(0.5)} ${spaces(0.5)}; - border: 2px solid ${colors('indigo300')}; - background: ${colors('indigo50')}; - text-align: center; -` - -export const Td = styled.td` - padding: ${spaces(0.5)} ${spaces(0.5)}; - border: 2px solid ${colors('indigo300')}; - text-align: center; -` diff --git a/src/components/ContentTags/index.tsx b/src/components/ContentTags/index.tsx index 38a5f4492..f423c31c1 100644 --- a/src/components/ContentTags/index.tsx +++ b/src/components/ContentTags/index.tsx @@ -1,10 +1,8 @@ export { Ul, Ol, OlLi, UlLi } from 'src/components/ContentTags/List' -export { P, PFullWidth } from 'src/components/ContentTags/P' -export { Table, Th, Td } from 'src/components/ContentTags/Table' +export { P } from 'src/components/ContentTags/P' export { Hr } from 'src/components/ContentTags/Hr' export { Strong, Em, InlineHeader } from 'src/components/ContentTags/Inline' export { ExternalLink, InternalLink } from 'src/components/ContentTags/Links' -export { Blockquote } from 'src/components/ContentTags/Blockquote' export { H3 } from 'src/components/ContentTags/Headings' export { Img } from 'src/components/ContentTags/Img' export { LinkButton } from 'src/components/ContentTags/LinkButton' diff --git a/src/components/EmojiForLetterWithTopRightBadgeWrapper.tsx b/src/components/EmojiForLetterWithTopRightBadgeWrapper.tsx deleted file mode 100644 index 7d61b27b6..000000000 --- a/src/components/EmojiForLetterWithTopRightBadgeWrapper.tsx +++ /dev/null @@ -1,40 +0,0 @@ -/** @jsx jsx */ -import { css, jsx } from '@emotion/core' -import { zIndices } from 'src/lib/theme' -import TopRightBadge, { TopRightBadgeProps } from 'src/components/TopRightBadge' - -interface EmojiForLetterWithTopRightBadgeWrapperProps { - topRightBadgeType: TopRightBadgeProps['topRightBadgeType'] - children: React.ReactNode -} - -const EmojiForLetterWithTopRightBadgeWrapper = ({ - topRightBadgeType, - children -}: EmojiForLetterWithTopRightBadgeWrapperProps) => { - return ( - - - - - {children} - - ) -} - -export default EmojiForLetterWithTopRightBadgeWrapper diff --git a/src/components/EmojiSeparator.tsx b/src/components/EmojiSeparator.tsx index aa878aef1..cee96772c 100644 --- a/src/components/EmojiSeparator.tsx +++ b/src/components/EmojiSeparator.tsx @@ -2,7 +2,7 @@ import { css, jsx, SerializedStyles } from '@emotion/core' import React from 'react' import Emoji from 'src/components/Emoji' -import { radii, colors, fontSizes, ns, spaces, maxWidths } from 'src/lib/theme' +import { colors, fontSizes, ns, spaces, maxWidths } from 'src/lib/theme' import { VariableNames } from 'src/types/VariableNames' import letterEmojiMapping from 'src/lib/letterEmojiMapping' @@ -15,8 +15,6 @@ interface EmojiSeparatorProps { Component: React.ComponentType | string cssOverrides?: SerializedStyles description?: React.ReactNode - addDotDotDotFront: boolean - addDotDotDotEnd: boolean noBottomMargin: boolean noTopMargin: boolean } @@ -48,22 +46,6 @@ const SideSpace = ({ children }: { children: React.ReactNode }) => ( ) -const DotDotDot = () => ( - - ··· - -) - const EmojiSeparator = ({ letters, emojis, @@ -73,8 +55,6 @@ const EmojiSeparator = ({ alignCenter, cssOverrides, description, - addDotDotDotFront, - addDotDotDotEnd, noBottomMargin, noTopMargin }: EmojiSeparatorProps) => ( @@ -100,11 +80,6 @@ const EmojiSeparator = ({ justify-content: center; `} > - {addDotDotDotFront && ( - - - - )} {letters ? letters.map((letter, index) => ( @@ -128,11 +103,6 @@ const EmojiSeparator = ({ {emoji} ))} - {addDotDotDotEnd && ( - - - - )} {description && (
? } else { - return ( - <> - - の部分が変化します - - ) + return <>の部分が変化します } } case 'showExecutableUnary': { diff --git a/src/components/H.tsx b/src/components/H.tsx index 2384756bb..450daf1f2 100644 --- a/src/components/H.tsx +++ b/src/components/H.tsx @@ -1,17 +1,12 @@ /** @jsx jsx */ import { css, jsx } from '@emotion/core' import { Fragment } from 'react' -import InlineEmojiBoxes, { - InlineEmojiBoxesForQuestion -} from 'src/components/InlineEmojiBoxes' import InlineBorder from 'src/components/InlineBorder' import { useContext } from 'react' import { Em, InternalLink, P, - Ul, - UlLi, Strong, InlineHeader, ExternalLink, @@ -28,31 +23,21 @@ import { episodeTitles } from 'src/lib/titles' import EpisodeContext from 'src/components/EpisodeContext' -import { colors, fontSizes } from 'src/lib/theme' +import { colors } from 'src/lib/theme' import { episodeCategory, numEpisodesExceptFirstAndLast } from 'src/lib/episodeCategories' import EmojiForLetter from 'src/components/EmojiForLetter' -import EmojiWithText from 'src/components/EmojiWithText' import EmojiNumber from 'src/components/EmojiNumber' -import EmojiSeparator from 'src/components/EmojiSeparator' -import BottomRightBadge from 'src/components/BottomRightBadge' import TwitterEmbed from 'src/components/TwitterEmbed' import { shareId } from 'src/lib/twitter' -import { magicalVariableName } from 'src/lib/specialVariableNames' import { dateString, dateSchemaString } from 'src/lib/date' import { githubRepo } from 'src/lib/meta' -import letterEmojiMapping from 'src/lib/letterEmojiMapping' import { HProps } from 'src/types/HTypes' import CustomEmoji from 'src/components/CustomEmoji' import InlinePrioritiesLabel from 'src/components/InlinePrioritiesLabel' -const slightlyLargeCaptionCss = css` - font-size: ${fontSizes(1.2)}; - vertical-align: -0.08em; -` - const prefixColors = { intro: colors('grey600'), beginner: colors('green600'), @@ -155,22 +140,6 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => { ) } } - if (args.name === 'episodeWelcomeText') { - if (locale === 'en') { - return ( - - Welcome to ! - - ) - } else { - return ( - - - へようこそ! - - ) - } - } if (args.name === 'yesNoQuiz') { if (locale === 'en') { return ( @@ -489,20 +458,6 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => { return <>目次 } } - if (args.name === 'sideNotePrefix') { - if (locale === 'en') { - return <>Side Note - } else { - return <>余談 - } - } - if (args.name === 'continueReading') { - if (locale === 'en') { - return <>Continue reading… - } else { - return <>続きを読む - } - } if (args.name === 'toc') { if (locale === 'en') { return <>Table of Contents @@ -517,70 +472,15 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => { return <>閉じる } } - if (args.name === 'playButton') { - if (locale === 'en') { - return ( - <> - - button - - - ) - } else { - return ( - <> - - - ボタン - - - ) - } - } - if (args.name === 'afterPlay') { - if (locale === 'en') { - return Result - } else { - return 実行結果 - } - } if (args.name === 'yesNoQuizDontWorry') { if (locale === 'en') { return <>? } else { return ( <> - {args.tooHard ? ( - <> - 🤯{' '} - 頭の中で解くのは大変なので、 -
- 適当に勘で答えてみてください。 - - ) : ( - <> - 😉 分からなくても大丈夫です! -
- 適当に勘で答えてみてください。 - - )} - - ) - } - } - if (args.name === 'unknownRule') { - if (locale === 'en') { - return ( - <> - some rule{' '} - 🤫 - - ) - } else { - return ( - <> - ある法則{' '} - 🤫 + 😉 分からなくても大丈夫です! +
+ 適当に勘で答えてみてください。 ) } @@ -657,11 +557,7 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => { を押してみて{!args.girl && <>ください} - {args.pleaseWait || - args.skippingSteps || - args.isFaster || - args.mentionRightArrow || - args.skippable + {args.mentionRightArrow || args.skippable ? '。' : args.skipColon ? '' @@ -669,9 +565,6 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => { ? '!' : ':'} - {args.pleaseWait && } - {args.skippingSteps && } - {args.isFaster && } {args.mentionRightArrow && } {args.skippable && ( @@ -680,21 +573,6 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => { ) } } - if (args.name === 'isFaster') { - if (locale === 'en') { - return <>? - } else { - return ( - <> - - 時間短縮のため、いつもの - 倍速以上 - で進みますので、目に優しく半透明にしています。 - - - ) - } - } if (args.name === 'question') { if (locale === 'en') { return ( @@ -723,38 +601,6 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => { ) } } - if (args.name === 'whatHappensInTheMiddleQuestion') { - if (locale === 'en') { - return <>… - } else { - return ( - <> - 上の弁当箱を - - すると、途中で下のようになるでしょうか? - - ) - } - } - if (args.name === 'whatsTheNumberQuestion') { - if (locale === 'en') { - return <>… - } else { - return ( - <> - 上の弁当箱を - - すると、 - - 最終的に暗号が - 「{args.number}」 - の弁当箱が残る - - 。 - - ) - } - } if (args.name === 'lookAtThisBentoBox') { if (locale === 'en') { return <>… @@ -769,22 +615,6 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => { return <>こちらの計算箱をご覧ください } } - if (args.name === 'pauseIfLost') { - if (locale === 'en') { - return <>… - } else { - return ( - <> - 途中でわからなくなったら、 - - - を押してみてください - - 。説明が上に表示されます。 - - ) - } - } if (args.name === 'copy') { if (locale === 'en') { return ( @@ -807,56 +637,6 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => { return <>まとめ } } - if (args.name === 'secretCodeCaptionSimple') { - if (locale === 'en') { - return <>... - } else { - return ( - <> - 暗号は {args.number}{' '} - です - - ) - } - } - if (args.name === 'secretCodeCaption') { - if (locale === 'en') { - return ( - <> - Secret Code ={' '} - {args.number} (右下に - が - {args.number}個) - - ) - } else { - return ( - <> - 暗号 = {args.number}{' '} - (右下に - が - {args.number}個) - - ) - } - } - if (args.name === 'notSecretCodeCaption') { - if (locale === 'en') { - return <>? - } else { - return ( - <> - 暗号 = - {args.number}ではない{' '} - -
- (右下に - が - {args.number}個ないから) - - ) - } - } if (args.name === 'theAnswerIs') { if (locale === 'en') { return <>? @@ -877,119 +657,6 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => { } } } - if (args.name === 'secretCodeAddOneCaption') { - if (locale === 'en') { - return <>? - } else { - return ( - <> - {' '} - を計算 - - ) - } - } - if (args.name === 'secretCodeMinusOneCaption') { - if (locale === 'en') { - return <>? - } else { - return ( - <> - {' '} - を計算 - - ) - } - } - if (args.name === 'secretCodeTwoMinusOneCaption') { - if (locale === 'en') { - return <>? - } else { - return ( - <> - {' '} - を計算 - - ) - } - } - if (args.name === 'secretCodeAddOneCaptionWithoutQuestion') { - if (locale === 'en') { - return <>? - } else { - return ( - <> - を足す弁当箱 - - ) - } - } - if (args.name === 'secretCodeAddCaption') { - if (locale === 'en') { - return <>? - } else { - return ( - <> - {' '} - を計算 - - ) - } - } - if (args.name === 'secretCodeMultiplyCaption') { - if (locale === 'en') { - return <>? - } else { - return ( - <> - {args.arg1 ? ( - - ) : ( - - )}{' '} - ✖️{' '} - {args.arg2 ? ( - - ) : ( - - )}{' '} - を計算 - - ) - } - } - if (args.name === 'ifCaption') { - if (locale === 'en') { - return <>? - } else { - return ( - <> - が{' '} - 0 なら - {Array.isArray(args.ifZero) ? ( - letterEmojiMapping[x])} - /> - ) : ( - - )} - 、 - - 1以上 - - なら - {Array.isArray(args.ifNonZero) ? ( - letterEmojiMapping[x])} - /> - ) : ( - - )} - に - - ) - } - } if (args.name === 'privacyPolicy') { if (locale === 'en') { return <>Privacy Policy @@ -1004,35 +671,6 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => { return <>当サイトについて } } - if (args.name === 'yesOrNo') { - if (locale === 'en') { - return <>? - } else { - return ( - <> - ⭕️か? - - ) - } - } - if (args.name === 'byTheWay') { - if (locale === 'en') { - return <>? - } else { - return ( - <> - ちなみに: - - ) - } - } - if (args.name === 'epiloguePrefix') { - if (locale === 'en') { - return <>Epilogue - } else { - return <>エピローグ - } - } if (args.name === 'stoppedForExplanation') { if (locale === 'en') { return <>? @@ -1040,43 +678,6 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => { return まだ途中ですが、解説のため一旦止めます! } } - if (args.name === 'isCallArgAndFuncUnboundTheSameCaption') { - if (locale === 'en') { - return <>? - } else { - return ( - <> - {args.same ? ( - - と - - に同じ料理があります - - ) : ( - - と - - に同じ料理がありません - - )} - - ) - } - } - if (args.name === 'mustChangeBothFuncUnboundAndBound') { - if (locale === 'en') { - return <>? - } else { - return ( - <> - - だけでなく、 - - も変える - - ) - } - } if (args.name === 'pageNotFound') { if (locale === 'en') { return <>Page Not Found @@ -1091,125 +692,7 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => { return <>目次はこちらです: } } - if (args.name === 'computerScience') { - if (locale === 'en') { - return <>? - } else { - return <>コンピュータサイエンス - } - } - if (args.name === 'yCombinator') { - if (locale === 'en') { - return <>? - } else { - return <>Yコンビネータ - } - } - if (args.name === 'infinitelyAddingQuestionCaption') { - if (locale === 'en') { - return <>? - } else { - return ( - <> - 無限に - - が追加されていきます - - ) - } - } - if (args.name === 'isZeroReview') { - if (locale === 'en') { - return <>? - } else { - return ( - <> -
    - - もし - 暗号が「0」 - の弁当箱を入れて実行した場合、最後に - - - - が残ります 。 - -
- , - ➡️, - - ]} - description={ - <> - 「0」なら - に - - } - /> -
    - - もし - 暗号が「1以上」 - の弁当箱を入れて実行した場合、最後に - - - - が残ります 。 - -
- 🔢, - ➡️, - - ]} - description={ - <> - 「1以上」なら - に - - } - /> - - ) - } - } - if (args.name === 'witch') { - if (locale === 'en') { - return <>? - } else { - return ( - <> - 魔女 🧙‍♀️ - - ) - } - } - if (args.name === 'secretCode') { - if (locale === 'en') { - return <>Number - } else { - return <>暗号 - } - } - if (args.name === 'whatCanComputeFactorial') { - if (locale === 'en') { - return <>? - } else { - return ( - <> - - に何を入れたら、 -
- - が計算できる? - - ) - } - } - if (args.name === 'shareContent') { + if (args.name === 'shareContent') { if (locale === 'en') { return <>? } else { @@ -1319,101 +802,6 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => { } } } - if (args.name === 'witchAppearsAgainCaption') { - if (locale === 'en') { - return <>? - } else { - return ( - <> - - がまた登場します - - ) - } - } - if (args.name === 'witchReplacedCaption') { - if (locale === 'en') { - return <>? - } else { - return ( - <> - - の代わりに、 - - を入れます - - ) - } - } - if (args.name === 'magicalChangedCaption') { - if (locale === 'en') { - return <>? - } else { - return ( - <> - - 一番上の数字が - - から - - になり、 - -
- - - の下に✖️ - - が追加されました。 - - - ) - } - } - if (args.name === 'ycChangedCaption') { - if (locale === 'en') { - return <>? - } else { - return ( - <> - - 一番上の数字が - - から - - になり、 - -
- その下に同じ弁当箱がふたつ(省略)、 -
- - その下に✖️ - - が追加されました。 - - - ) - } - } - if (args.name === 'abbreviated') { - if (locale === 'en') { - return <>? - } else { - return <>省略 - } - } - if (args.name === 'itWillTakeTime') { - if (locale === 'en') { - return <>? - } else { - return ( - <> - - 少し時間がかかりますが、お待ちいただけると嬉しいです! - - - ) - } - } if (args.name === 'prevAndNextLinks') { if (locale === 'en') { return <>? @@ -1474,159 +862,6 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => { ) } } - if (args.name === 'skippingSteps') { - if (locale === 'en') { - return <>? - } else { - return ( - <> - - 時間短縮のため、早送り中は多くのステップを省略しています。 - - - ) - } - } - if (args.name === 'inlineFactorial') { - return ( - <> - {args.start === 5 && ( - <> - ✖️{' '} - - )} - {args.start >= 4 && ( - <> - ✖️{' '} - - )} - ✖️ {' '} - ✖️ - - ) - } - if (args.name === 'factorialDefinition') { - if (locale === 'en') { - return <>? - } else { - return ( - <> - 「 - - ある数からはじめて、1を引いた数を掛けていき、最後に「1」を掛けるまで、掛け算を繰り返す - - 」 - - ) - } - } - if (args.name === 'factorialComputation') { - if (args.start === 5) { - return ( - - 5 ✕ 4 ✕ 3 ✕ 2 ✕ 1 = - - ) - } else if (args.start === 4) { - return ( - - 4 ✕ 3 ✕ 2 ✕ 1 = - - ) - } else { - return ( - - 3 ✕ 2 ✕ 1 = - - ) - } - } - if (args.name === 'changedToPowerCaption') { - if (locale === 'en') { - return <>? - } else { - return ( - <> - 上の - - は以前は - - 、下の - - は以前は - - でした。 - - ) - } - } - if (args.name === 'powerComputation') { - if (args.power === 4) { - return ( - - 2 ✕ 2 ✕ 2 ✕ 2 = - - ) - } else { - return ( - - 2 ✕ 2 ✕ 2 = - - ) - } - } - if (args.name === 'thisIsYCombinatorCaption') { - if (locale === 'en') { - return <>? - } else { - return ( - <> - これ{args.too ? 'も' : 'が'} - - 「」 - - です - - ) - } - } - if (args.name === 'csDescriptionPreface') { - if (locale === 'en') { - return <>? - } else { - return ( - <> - - - とは、非常に単純化して言うと「ソフトウェア開発や、コンピュータによる情報処理の根幹となる学問」です。 - - - ) - } - } - if (args.name === 'csDescription') { - if (locale === 'en') { - return <>? - } else { - return ( - <> -

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

-

- 身近なものでいえば、 - 🔎 グーグルなどの検索エンジン、 - 🗺 地図アプリのナビ機能、📷{' '} - カメラアプリの顔認識機能には、コンピュータサイエンスの研究結果が応用されています。 -

- - ) - } - } if (args.name === 'dateAndSource') { if (locale === 'en') { return <>? @@ -1690,17 +925,6 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => { return <>ひとつ } } - if (args.name === 'numberOfAIsSecretCodeCaption') { - if (locale === 'en') { - return <>? - } else { - return ( - <> - 右下の🅰️の数が暗号 - - ) - } - } if (args.name === 'mentionRightArrow') { if (locale === 'en') { return <>? @@ -1714,79 +938,6 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => { ) } } - if (args.name === 'addMathBoxCaption') { - if (locale === 'en') { - return <>? - } else { - return ( - <> - 足し算の計算箱 - - ) - } - } - if (args.name === 'remainder') { - if (locale === 'en') { - return <>? - } else { - return <>割ったときの余り - } - } - if (args.name === 'conditionalMathBoxCaption') { - if (locale === 'en') { - return <>? - } else { - return ( - <> - ↕️ 条件分岐の計算箱 - - ) - } - } - if (args.name === 'whatHappensAtTheEndMathBoxQuestion') { - if (locale === 'en') { - return <>? - } else { - return ( - <> - 上の計算箱を - - すると、最終的に下のようになるでしょうか?{' '} - 🤔 - - ) - } - } - if (args.name === 'isLeapYearCaption') { - if (locale === 'en') { - return <>? - } else { - return ( - <> - うるう年なら結果は になる - - ) - } - } - if (args.name === 'leapYearConditionalCaption') { - if (locale === 'en') { - return <>? - } else { - return <>うるう年の場合はこうなる - } - } - if (args.name === 'yellowHighlighted') { - if (locale === 'en') { - return <>? - } else { - return ( - <> - (黄色 - で示しています) - - ) - } - } if (args.name === 'conditionSectionName') { if (locale === 'en') { return <>? @@ -1812,18 +963,6 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => { } } } - if (args.name === 'repeatingMathBoxCaption') { - if (locale === 'en') { - return <>? - } else { - return ( - <> - 繰り返しの計算箱{' '} - - - ) - } - } if (args.name === 'lookAtThisBentoBoxPuzzle') { if (locale === 'en') { return <>? @@ -1904,17 +1043,6 @@ const H = ({ args, highlightType, episodeNumberOverrides }: HProps) => { return <>に変換できる弁当箱 } } - if (args.name === 'sameAddRole') { - if (locale === 'en') { - return <>? - } else { - return ( - <> - 同じ「1を足す」効果 - - ) - } - } if (args.name === 'plusOneEffect') { if (locale === 'en') { return <>? diff --git a/src/components/InlineEmojiBoxes.tsx b/src/components/InlineEmojiBoxes.tsx deleted file mode 100644 index a62ef5c76..000000000 --- a/src/components/InlineEmojiBoxes.tsx +++ /dev/null @@ -1,129 +0,0 @@ -/** @jsx jsx */ -import { css, jsx } from '@emotion/core' -import Emoji from 'src/components/Emoji' -import FlexCenter from 'src/components/FlexCenter' -import { colors, spaces } from 'src/lib/theme' -import ConditionalBorder, { - ConditionalBorderProps -} from 'src/components/ConditionalBorder' - -interface InlineEmojiBoxProps { - emojis: string[] - background: string - borderBadge?: React.ReactNode - size: 'md' | 'lg' | 'xl' -} - -export const InlineEmojiBoxesForCondition = ({ - type, - variableSizeOverrides -}: { - type: ConditionalBorderProps['type'] - variableSizeOverrides: ConditionalBorderProps['variableSizeOverrides'] -}) => ( - - } - /> -) - -InlineEmojiBoxesForCondition.defaultProps = { - variableSizeOverrides: 'md' -} - -export const InlineEmojiBoxesForQuestion = ({ - size, - borderBadge -}: { - size: InlineEmojiBoxProps['size'] - borderBadge?: React.ReactNode -}) => ( - -) - -InlineEmojiBoxesForQuestion.defaultProps = { - size: 'lg' -} - -const widthAndHeight = (size: InlineEmojiBoxProps['size']) => - ({ - xl: 2, - lg: 1.7, - md: 1.4 - }[size]) - -const emojiSize = (size: InlineEmojiBoxProps['size']): 'md' | 'sm' => - ({ - xl: 'md' as 'md', - lg: 'md' as 'md', - md: 'sm' as 'sm' - }[size]) - -const Border = ({ - size, - children -}: { - size: InlineEmojiBoxProps['size'] - children: React.ReactNode -}) => ( - - {children} - -) - -const InlineEmojiBoxes = ({ - emojis, - background, - size, - borderBadge -}: InlineEmojiBoxProps) => ( - - {emojis.map((emoji, i) => ( - - - {emoji} - - - ))} - {borderBadge && {borderBadge}} - -) - -InlineEmojiBoxes.defaultProps = { - background: colors('white'), - size: 'lg', - emojis: [] -} - -export default InlineEmojiBoxes diff --git a/src/components/VariableExpressionBox.tsx b/src/components/VariableExpressionBox.tsx index 7e8805ece..a0788769a 100644 --- a/src/components/VariableExpressionBox.tsx +++ b/src/components/VariableExpressionBox.tsx @@ -10,7 +10,7 @@ import ExpressionRunnerContext from 'src/components/ExpressionRunnerContext' import ConditionalContext from 'src/components/ConditionalContext' import TopLeftBadge from 'src/components/TopLeftBadge' import TopRightBadge from 'src/components/TopRightBadge' -import { fontSizes, spaces, zIndices, colors, radii } from 'src/lib/theme' +import { fontSizes, spaces, zIndices } from 'src/lib/theme' import letterEmojiMapping from 'src/lib/letterEmojiMapping' import { VariableExpression } from 'src/types/ExpressionTypes' import H from 'src/components/H' @@ -57,46 +57,6 @@ export const variableExpressionBoxFontSize = ( xxxs: fontSizes(0.85) }[size]) -const SecretCodeLabelWrapper = ({ - children, - operator -}: { - operator?: boolean - children: React.ReactNode -}) => ( - - {children} - -) - -const SecretCodeLabel = ({ number }: { number?: number }) => ( - - - {number && <> – {number}} - -) - -const RemainderLabel = () => ( - - - -) - const shorthandBinary = ( shorthandBinary: NonNullable ) => { @@ -161,35 +121,6 @@ const VariableEmoji = ({ expression }: VariableExpressionBoxProps) => {
) - } else if (expression.name === 'someNumber') { - return ( -
- -
- ) - } else if (expression.shorthandBinary === 'remainder') { - return ( -
- -
- ) - } else if (expression.name === 'abbreviated') { - return ( -
- - () - -
- ) } else if ( expression.name === 'blankNumber' && expression.shorthandNumberPlusOrMinusOne diff --git a/src/components/YesNoButtons.tsx b/src/components/YesNoButtons.tsx index 13817058a..541f169a0 100644 --- a/src/components/YesNoButtons.tsx +++ b/src/components/YesNoButtons.tsx @@ -10,7 +10,6 @@ import CardActionContext from 'src/components/CardActionContext' interface YesNoButtonsProps { answer: 'yes' | 'no' - tooHard: boolean } interface ButtonProps { @@ -73,7 +72,7 @@ const Button = ({ ) } -const YesNoButtons = ({ answer, tooHard }: YesNoButtonsProps) => { +const YesNoButtons = ({ answer }: YesNoButtonsProps) => { const { cardActionTaken, cardActionResult, @@ -147,7 +146,7 @@ const YesNoButtons = ({ answer, tooHard }: YesNoButtonsProps) => { color: ${colors('grey700')}; `} > - + ) : ( @@ -177,8 +176,4 @@ const YesNoButtons = ({ answer, tooHard }: YesNoButtonsProps) => { ) } -YesNoButtons.defaultProps = { - tooHard: false -} - export default YesNoButtons diff --git a/src/contents/0.jp.tsx b/src/contents/0.jp.tsx index 5f4ca258b..74ea96120 100644 --- a/src/contents/0.jp.tsx +++ b/src/contents/0.jp.tsx @@ -1,4 +1,837 @@ import React from 'react' +import { + numEpisodesExceptFirstAndLast, + numTotalPages +} from 'src/lib/episodeCategories' +import { + Em, + Img, + ExternalLink, + P, + Strong, + InlineHeader, + Ol, + OlLi, + Hr +} from 'src/components/ContentTags' +import Emoji from 'src/components/Emoji' +import EmojiSeparator from 'src/components/EmojiSeparator' import EpisodeCardList from 'src/components/EpisodeCardList' +import BubbleQuotes from 'src/components/BubbleQuotes' +import NextLessonButton from 'src/components/NextLessonButton' +import CardContent from 'src/components/CardContent' +import Toc from 'src/components/Toc' +import H from 'src/components/H' +import { lessonTitle } from 'src/lib/titles' +import YoutubeEmbed from 'src/components/YoutubeEmbed' +import { githubRepo } from 'src/lib/meta' +import * as R from 'src/components/Runners' -export default () => +export default () => ( + + +

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

+

+ + ファクトフルネス『ファクトフルネス』} + /> + +

+

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

+

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

+ + 最後まで無料。スマホからも +
+ パソコンからも閲覧できる + + } + /> + + ) + }, + { + type: 'meta', + title: <>目次, + content: ( + <> +

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

+

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

+ +

↓ クリックすると各章に飛べます。

+ + + ), + footer: { + content: + } + }, + { + title: <>前置きはいいから早く読みたい!という方へ, + content: ( + <> +

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

+ +

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

+ + ) + }, + { + title: <>コンピュータサイエンスって何?, + content: ( + <> +

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

+ そもそもコンピュータサイエンスって何?} + /> +

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

+ + グーグルなどの検索エンジン、 +
+ 地図アプリのナビ機能、 +
+ カメラアプリの顔認識機能は、 +
+ どれも「 + ソフトウェア」 + + } + /> +

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

+

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

+ + ソフトウェア開発や、 +
+ ソフトウェアを用いた情報処理の +
+ 根幹となる学問がコンピュータサイエンス + + } + /> + + ) + }, + { + title: <>プログラミングと何が違うの?, + content: ( + <> +

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

+ + コンピュータサイエンスって +
+ プログラミングと何が違うの? + + } + /> +

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

+
+

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

+ お医者さんの治療は「医学」に基づいている} + /> +

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

+ + プログラムを設計する際に、 +
+ 指針のひとつとなる学問が +
+ コンピュータサイエンス + + } + /> +

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

+

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

+

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

+ + 医学もコンピュータサイエンスは進歩している。 +
+ 以前はどれほど優れた医者でも、 +
+ またはどれほど優れたプログラマでも +
+ できなかったことが可能になっている + + } + /> + + ) + }, + { + title: <>コンピュータサイエンスを学ぶメリットはあるの?, + content: ( + <> +

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

+ + コンピュータサイエンスを +
+ 学ぶメリットはあるの? + + } + /> +

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

+ + 「タバコは体に悪い」というのは +
+ 誰もが知っておくべき医学的知識 + + } + /> +

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

+

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

+ + 大半の人はプログラマにはならないが、 +
+ 簡単なコンピュータサイエンスの知識を +
+ 身につければ、世間を騒がせている +
+ ソフトウェアについての理解が深まる + + } + /> +

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

+ + ), + footer: { + content: ( + <> +

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

+

+ 最近はツールが発達してきているので、たとえば簡単なスマホアプリを作るだけならコンピュータサイエンスの知識は必要ありません。一方、たとえばGoogleのような企業で、検索エンジンの精度向上のように難しい課題を解決するには、コンピュータサイエンスの知識は必須です。 +

+ + ) + } + }, + { + title: <>邪道なコンピュータサイエンスの入門書, + content: ( + <> +

+ 誰もがコンピュータサイエンスを学ぶべきというわけで、今回は + コンピュータサイエンスの入門書 + を書きました。ただ、本稿はよくある入門書とは違い、 + 邪道なコンピュータサイエンスの入門書 + です。 +

+ 邪道なコンピュータサイエンスの入門書} + /> +

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

+ + いつかコンピュータサイエンスの +
+ 入門書を書いてみたい! + + } + /> +

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

+

邪道とはどういうことかは、以下の2点にまとめることができます。

+
    + + プログラミングの必要なし + + + 難しいマニアックな内容 + +
+

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

+ + ) + }, + { + title: <>邪道な理由1: プログラミングの必要なし, + content: ( + <> +

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

+ プログラミングの必要なし} + /> +

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

+

+ たしかにそのほうが効率が良いのですが、 + + ほとんどの人はプログラミング未経験者ですし、将来プログラマになることもありません。 + + プログラミングをコンピュータサイエンスを学ぶ必須事項にしてしまうと、それだけで学ぶハードルを上げてしまいます。 +

+

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

+
+

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

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

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

+ + 以下のようなパズルを解きながら学びます。 +
+ を押してみて下さい! +
+

+ 上記のように、 + + 本稿で紹介するパズルはすべて、スマホからでもパソコンからでも行える + + ようになっています。将来的には、「スマホから、プログラミング無しにコンピュータサイエンスを学ぶ」ことが当たり前になればいいなと考えています。 +

+ スマホでもパソコンでもOK} + /> + + ) + }, + { + title: <>邪道な理由2: 高度な内容, + content: ( + <> +

+ 本稿がコンピュータサイエンスの邪道な入門書である理由のふたつめは、 + 内容が高度だからです。 +

+ 内容が高度} + /> +

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

+

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

+ + 「自分にもコンピュータサイエンスを +
+ 学べるかも」と思うきっかけを提供したい + + } + /> +

+ そのためには + + 初歩的な内容ではなく、ある程度高度な内容を教えるほうが良い + + と思っています。なぜなら、 + + もし高度な内容を理解することができれば、それより易しい他の分野も勉強すれば理解できるということ + + になり、「コンピュータサイエンスを学べるかも」という自信につながるからです。 +

+

+ もちろん、高度な内容を理解できなかったら本末転倒です。だから、できる限り分かりやすく説明するつもりです。また、高度な内容とはいえ、 + + 数学やプログラミングなどの事前知識は一切必要ありません + + ので、ご安心ください。 +

+ + ) + }, + { + title: <>Yコンビネータ, + content: ( + <> +

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

+ Yコンビネータについて学ぶ} + /> +

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

+

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

+ + ), + footer: { + content: ( + <> + +

+ + Yコンビネータは、シリコンバレーで最も有名なITベンチャー養成機関の名でもあります。 + + AirBnBをはじめとする超有名ITベンチャーを多数輩出しており、 + 約2000の卒業企業のうち、トップ100社の企業価値を合計すると + + 10兆円以上になります(2018年10月時点) + + 。 + 企業価値には偏りがありますが、単純に割り算をすると、1社あたりの企業価値は1000億円以上になります。 +

+

+ + では、なぜYコンビネータという名称がつけられたのでしょうか? + + Yコンビネータ創業者のひとり、ポール・グレアム氏は + + インタビューでこう語っていました + + 。 +

+ +

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

+

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

+ + ) + } + ]} + /> +

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

+ + + 凄腕プログラマを集めるために +
+ あえて「Yコンビネータ−」という名前を +
+ ITベンチャー養成機関につけた + + } + /> +

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

+ + } + preview={{ + text: <>続きを読む, + content: ( + <> +

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

+ + ) + }} + /> + + ) + } + }, + { + title: <>邪道なので無料, + content: ( + <> +

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

+ すべて無料で読めます!} + /> +

+ だからというのも何ですが、 + 内容に期待しすぎないでください + 。そして繰り返しますが、本稿は + プログラミング未経験者向け + です。プログラマの方にとって有益な内容かどうかは、正直微妙かもしれません。 +

+

+ また、本稿は実用的な内容ではありません + 。最後まで読み終えても、日々の暮らしや、キャリアに役立つ気づきは得られないないでしょう。ただその代わりに、 + + もしかしたら読後に「コンピュータサイエンスを学んでみたい」という気持ちが芽生えるかもしれません。 + +

+ + ), + footer: { + content: ( + <> + +

+ プログラマ向けのYコンビネータについての説明で最もおすすめなのは、 + 「 + + + Y Not - Adventures in Functional Programming + + + 」という動画です。これは、Rubyのプログラマで、Rakeの作者でもある故・Jim + Weirich氏がRubyConf + 2012にて行った講演です。英語ですが字幕付きで見ることができます。 +

+ +

+ 余談:{' '} + 本稿はTypeScriptとNext.jsで書いています。ソースコードは + + GitHubで公開中 + + です。 +

+ + } + preview={{ + text: <>続きを読む, + content: ( + <> +

+ ちなみに:{' '} + プログラマの方で、「Yコンビネータって何?」と思われた方は、↓の「続きを読む」を押してみてください。 +

+ + ) + }} + /> + + ) + } + }, + { + title: <>さっそくはじめてみましょう!, + content: ( + <> + +

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

+ + + ) + } + ]} + /> +) diff --git a/src/contents/0.v2.jp.tsx b/src/contents/0.v2.jp.tsx deleted file mode 100644 index 4a62295e7..000000000 --- a/src/contents/0.v2.jp.tsx +++ /dev/null @@ -1,857 +0,0 @@ -import React from 'react' -import { - numEpisodesExceptFirstAndLast, - numTotalPages -} from 'src/lib/episodeCategories' -import { - Em, - Img, - ExternalLink, - P, - Strong, - InlineHeader, - Ol, - OlLi, - Hr -} from 'src/components/ContentTags' -import Emoji from 'src/components/Emoji' -import EmojiSeparator from 'src/components/EmojiSeparator' -import EpisodeCardList from 'src/components/EpisodeCardList' -import BubbleQuotes from 'src/components/BubbleQuotes' -import NextLessonButton from 'src/components/NextLessonButton' -import CardContent from 'src/components/CardContent' -import Toc from 'src/components/Toc' -import H from 'src/components/H' -import { lessonTitle } from 'src/lib/titles' -import YoutubeEmbed from 'src/components/YoutubeEmbed' -import { githubRepo } from 'src/lib/meta' -import * as R from 'src/components/Runners' - -export default () => ( - - -

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

-

- - ファクトフルネス『ファクトフルネス』} - /> - -

-

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

-

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

- - 最後まで無料。スマホからも -
- パソコンからも閲覧できる - - } - /> - - ) - }, - { - type: 'meta', - title: <>目次, - content: ( - <> -

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

-

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

- -

↓ クリックすると各章に飛べます。

- - - ), - footer: { - content: - } - }, - { - title: <>前置きはいいから早く読みたい!という方へ, - content: ( - <> -

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

- -

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

- - ) - }, - { - title: <>コンピュータサイエンスって何?, - content: ( - <> -

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

- そもそもコンピュータサイエンスって何?} - /> -

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

- - グーグルなどの検索エンジン、 -
- 地図アプリのナビ機能、 -
- カメラアプリの顔認識機能は、 -
- どれも「 - ソフトウェア」 - - } - /> -

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

-

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

- - ソフトウェア開発や、 -
- ソフトウェアを用いた情報処理の -
- 根幹となる学問がコンピュータサイエンス - - } - /> - - ) - }, - { - title: <>プログラミングと何が違うの?, - content: ( - <> -

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

- - コンピュータサイエンスって -
- プログラミングと何が違うの? - - } - /> -

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

-
-

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

- お医者さんの治療は「医学」に基づいている} - /> -

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

- - プログラムを設計する際に、 -
- 指針のひとつとなる学問が -
- コンピュータサイエンス - - } - /> -

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

-

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

-

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

- - 医学もコンピュータサイエンスは進歩している。 -
- 以前はどれほど優れた医者でも、 -
- またはどれほど優れたプログラマでも -
- できなかったことが可能になっている - - } - /> - - ) - }, - { - title: <>コンピュータサイエンスを学ぶメリットはあるの?, - content: ( - <> -

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

- - コンピュータサイエンスを -
- 学ぶメリットはあるの? - - } - /> -

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

- - 「タバコは体に悪い」というのは -
- 誰もが知っておくべき医学的知識 - - } - /> -

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

-

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

- - 大半の人はプログラマにはならないが、 -
- 簡単なコンピュータサイエンスの知識を -
- 身につければ、世間を騒がせている -
- ソフトウェアについての理解が深まる - - } - /> -

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

- - ), - footer: { - content: ( - <> -

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

-

- 最近はツールが発達してきているので、たとえば簡単なスマホアプリを作るだけならコンピュータサイエンスの知識は必要ありません。一方、たとえばGoogleのような企業で、検索エンジンの精度向上のように難しい課題を解決するには、コンピュータサイエンスの知識は必須です。 -

- - ) - } - }, - { - title: <>邪道なコンピュータサイエンスの入門書, - content: ( - <> -

- 誰もがコンピュータサイエンスを学ぶべきというわけで、今回は - コンピュータサイエンスの入門書 - を書きました。ただ、本稿はよくある入門書とは違い、 - 邪道なコンピュータサイエンスの入門書 - です。 -

- 邪道なコンピュータサイエンスの入門書} - /> -

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

- - いつかコンピュータサイエンスの -
- 入門書を書いてみたい! - - } - /> -

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

-

邪道とはどういうことかは、以下の2点にまとめることができます。

-
    - - プログラミングの必要なし - - - 難しいマニアックな内容 - -
-

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

- - ) - }, - { - title: <>邪道な理由1: プログラミングの必要なし, - content: ( - <> -

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

- プログラミングの必要なし} - /> -

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

-

- たしかにそのほうが効率が良いのですが、 - - ほとんどの人はプログラミング未経験者ですし、将来プログラマになることもありません。 - - プログラミングをコンピュータサイエンスを学ぶ必須事項にしてしまうと、それだけで学ぶハードルを上げてしまいます。 -

-

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

-
-

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

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

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

- - 以下のようなパズルを解きながら学びます。 -
- を押してみて下さい! -
-

- 上記のように、 - - 本稿で紹介するパズルはすべて、スマホからでもパソコンからでも行える - - ようになっています。将来的には、「スマホから、プログラミング無しにコンピュータサイエンスを学ぶ」ことが当たり前になればいいなと考えています。 -

- スマホでもパソコンでもOK} - /> - - ) - }, - { - title: <>邪道な理由2: 高度な内容, - content: ( - <> -

- 本稿がコンピュータサイエンスの邪道な入門書である理由のふたつめは、 - 内容が高度だからです。 -

- 内容が高度} - /> -

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

-

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

- - 「自分にもコンピュータサイエンスを -
- 学べるかも」と思うきっかけを提供したい - - } - /> -

- そのためには - - 初歩的な内容ではなく、ある程度高度な内容を教えるほうが良い - - と思っています。なぜなら、 - - もし高度な内容を理解することができれば、それより易しい他の分野も勉強すれば理解できるということ - - になり、「コンピュータサイエンスを学べるかも」という自信につながるからです。 -

-

- もちろん、高度な内容を理解できなかったら本末転倒です。だから、できる限り分かりやすく説明するつもりです。また、高度な内容とはいえ、 - - 数学やプログラミングなどの事前知識は一切必要ありません - - ので、ご安心ください。 -

- - ) - }, - { - title: <>Yコンビネータ, - content: ( - <> -

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

- Yコンビネータについて学ぶ} - /> -

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

-

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

- - ), - footer: { - content: ( - <> - -

- - - は、シリコンバレーで最も有名なITベンチャー養成機関の名でもあります。 - - AirBnBをはじめとする超有名ITベンチャーを多数輩出しており、 - 約2000の卒業企業のうち、トップ100社の企業価値を合計すると - - 10兆円以上になります(2018年10月時点) - - 。 - 企業価値には偏りがありますが、単純に割り算をすると、1社あたりの企業価値は1000億円以上になります。 -

-

- - では、なぜ - - という名称がつけられたのでしょうか? - - - 創業者のひとり、ポール・グレアム氏は - - インタビューでこう語っていました - - 。 -

- -

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

-

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

- - ) - } - ]} - /> -

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

- - - 凄腕プログラマを集めるために -
- あえて「Yコンビネータ−」という名前を -
- ITベンチャー養成機関につけた - - } - /> -

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

- - } - preview={{ - text: <>続きを読む, - content: ( - <> -

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

- - ) - }} - /> - - ) - } - }, - { - title: <>邪道なので無料, - content: ( - <> -

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

- すべて無料で読めます!} - /> -

- だからというのも何ですが、 - 内容に期待しすぎないでください - 。そして繰り返しますが、本稿は - プログラミング未経験者向け - です。プログラマの方にとって有益な内容かどうかは、正直微妙かもしれません。 -

-

- また、本稿は実用的な内容ではありません - 。最後まで読み終えても、日々の暮らしや、キャリアに役立つ気づきは得られないないでしょう。ただその代わりに、 - - もしかしたら読後に「コンピュータサイエンスを学んでみたい」という気持ちが芽生えるかもしれません。 - -

- - ), - footer: { - content: ( - <> - -

- プログラマ向けのYコンビネータについての説明で最もおすすめなのは、 - 「 - - - Y Not - Adventures in Functional Programming - - - 」という動画です。これは、Rubyのプログラマで、Rakeの作者でもある故・Jim - Weirich氏がRubyConf - 2012にて行った講演です。英語ですが字幕付きで見ることができます。 -

- -

- 余談:{' '} - 本稿はTypeScriptとNext.jsで書いています。ソースコードは - - GitHubで公開中 - - です。 -

- - } - preview={{ - text: <>続きを読む, - content: ( - <> -

- ちなみに:{' '} - プログラマの方で、「Yコンビネータって何?」と思われた方は、↓の「続きを読む」を押してみてください。 -

- - ) - }} - /> - - ) - } - }, - { - title: <>さっそくはじめてみましょう!, - content: ( - <> - -

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

- - - ) - } - ]} - /> -) diff --git a/src/contents/1.jp.tsx b/src/contents/1.jp.tsx index 5f4ca258b..985e187f0 100644 --- a/src/contents/1.jp.tsx +++ b/src/contents/1.jp.tsx @@ -1,4 +1,601 @@ import React from 'react' import EpisodeCardList from 'src/components/EpisodeCardList' +import { + P, + Strong, + Em, + InlineHeader, + 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' +import EmojiSeparator from 'src/components/EmojiSeparator' +import EmojiNumber from 'src/components/EmojiNumber' +import NextLessonButton from 'src/components/NextLessonButton' +import * as R from 'src/components/Runners' -export default () => +export default () => ( + この話はフィクションです, + content: ( + <> +

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

+

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

+ , + , + + ]} + description={<>これが計算箱のアイコンです!} + /> + + ) + }, + { + title: <>ラムダ村の計算箱, + content: ( + <> +

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

+ ラムダ村の村人たち} + /> +

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

+ ✨, + , + + ]} + description={ + <> + 計算ができる魔法の道具「計算箱」 + + } + /> +

この計算箱がどんなものか、説明しましょう!

+ + ), + footer: { + content: ( + <> +

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

+ + ) + } + }, + { + title: <>計算箱の例, + content: ( + <> +

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

+ + 計算箱 + +
    + + 上には、数字の が入っています。 + + + 下には、1を足す印 + が入っています。 + +
+ , + 1️⃣, + + ]} + /> +

では次に、この計算箱はどのように使うかを説明しましょう!

+ + ) + }, + { + title: ( + <> + ボタン + + ), + content: ( + <> +

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

+ +

+ + 結果は になりました + + 。つまり、 + {' '} + が計算できたということです。 +

+
+

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

+ +

+ こちらは になり、すなわち{' '} + {' '} + が計算できました!🙂 +

+ + ) + }, + { + title: <>1を足す機能, + content: ( + <> +

ここまでをまとめると、下の計算箱のように、

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

ということです。

+ , + , + + ]} + /> +

+ これが、計算箱に備わっている機能のひとつ、「 + 1を足す機能 + 」です。この機能を使えば、 + + 何らかの数字に {' '} + を足す計算を行うことができる + + のです。 +

+ ✨, + , + + ]} + description={ + <> + 計算箱の1を足す機能: +
+ 何らかの数字に を足す + + } + /> + + ) + }, + { + title: <>1を引く機能, + content: ( + <> +

+ 計算箱は「1を足す」だけではなく、「1を引く + 」計算をすることもできます。こちらの計算箱を + + してみてください: +

+ +

+ 結果は になりました。すなわち{' '} + {' '} + が計算できたということです! + 🙂 +

+
+

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

+ + {' '} + を計算できる + +

+ これが、計算箱に備わっているふたつめの機能、「 + 1を引く機能 + 」です。この機能を使えば、何らかの数字から{' '} + を引く計算を行うことができるのです。 +

+ ✨, + , + + ]} + description={ + <> + 計算箱の1を引く機能: +
+ 何らかの数字から を引く + + } + /> + + ) + }, + { + title: ( + <> + 使えるのは と{' '} + だけ + + ), + content: ( + <> +

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

+ , + , + + ]} + description={ + <> + と{' '} + しか使えない + + } + /> +

+ それでは質問です。 と{' '} + しか使えないのであれば、たとえば{' '} + {' '} + {' '} + といった計算はどのように行えばいいのでしょうか?🤔 +

+ , + , + + ]} + description={<>これを計算したいときはどうすればいい?} + /> + + ) + }, + { + title: ( + <> + を2回使う + + ), + content: ( + <> +

+ 正解を教えましょう。 + {' '} + を計算したい場合、{' '} + + を2回 + + 使えばいいのです。 +

+ , + , + + ]} + description={ + <> + を2回使う + + } + /> +

+ こちらに {' '} + を2回使った計算箱を用意したので、実際に試してみましょう。 + +

+ +

+ 結果は になり、すなわち{' '} + {' '} + + が計算できました!🙂 +

+ + ) + }, + { + title: ( + <> + {' '} + も何回でも使える + + ), + content: ( + <> +

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

+ , + , + + ]} + /> + , + , + + ]} + description={ + <> + も{' '} + も何回でも使える + + } + /> +

+ たとえば、下の計算箱は、 + + を3回 + + 使うことで、 + {' '} + を計算してくれます。 +

+ +

+ 一方、下の計算箱は、 + + を4回 + + 使うことで、 + {' '} + を計算してくれます。 +

+ + + ) + }, + { + title: <>どんな大きな数字の足し算でも引き算でもできる, + content: ( + <> +

+ つまり、 + {' '} + を何度も使うことで、 + どんな大きな数字の足し算でも引き算でも行うことができます + 。 +

+ , + , + + ]} + noBottomMargin + /> + , + , + + ]} + description={ + <> + も{' '} + も何度も使えば、 +
+ どんな大きな数字でも足し算・引き算できる + + } + /> +

+ たとえば、 + {' '} + {' '} + を計算したかったら、どうすればいいでしょうか? +

+ , + , + + ]} + /> +

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

+ + を10回配置 + +

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

+ + ) + }, + { + title: <>ラムダ村の村人は計算がとても苦手, + content: ( + <> +

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

+ ➕, + , + + ]} + description={<>計算箱は足し算や引き算ができる} + /> +

+ そして、ラムダ村の村人は計算がとても苦手でした。 + だから、たとえば「 + {' '} + + 」のような単純な足し算をするのにも、村人たちは計算箱に頼りきっていました。 +

+ 🙂, + , + 🙂 + ]} + description={ + <> + 俺ら計算が苦手だから、 + {' '} + といった +
+ 単純な足し算も、計算箱がないとできない! + + } + /> + + ), + footer: { + content: ( + <> +

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

+ 掛け算や割り算は、計算箱ではできない} + /> +

+ しかし、計算が大の苦手だった村人たちにとって、足し算や引き算ができるだけでも大いにありがたいことでした。 +

+ + ) + } + }, + { + title: <>3つめの計算箱の機能, + content: ( + <> +

+ + 実は計算箱には、今回紹介した「 + 1を足す機能{' '} + + 」や「 + 1を引く機能{' '} + + 」以外にも、 + さらにもうひとつ + の機能があります。 + +

+ , + , + + ]} + description={<>3つめの機能がある} + /> +

次のページでは、計算箱の3つめの機能について紹介していきます!

+ + + ) + } + ]} + /> +) diff --git a/src/contents/1.v2.jp.tsx b/src/contents/1.v2.jp.tsx deleted file mode 100644 index cee955832..000000000 --- a/src/contents/1.v2.jp.tsx +++ /dev/null @@ -1,602 +0,0 @@ -import React from 'react' -import EpisodeCardList from 'src/components/EpisodeCardList' -import { - P, - Strong, - Em, - InlineHeader, - 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' -import EmojiSeparator from 'src/components/EmojiSeparator' -import EmojiNumber from 'src/components/EmojiNumber' -import NextLessonButton from 'src/components/NextLessonButton' -import * as R from 'src/components/Runners' - -export default () => ( - この話はフィクションです, - content: ( - <> -

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

-

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

- , - , - - ]} - description={<>これが計算箱のアイコンです!} - /> - - ) - }, - { - title: <>ラムダ村の計算箱, - content: ( - <> -

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

- ラムダ村の村人たち} - /> -

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

- ✨, - , - - ]} - description={ - <> - 計算ができる魔法の道具「計算箱」 - - } - /> -

この計算箱がどんなものか、説明しましょう!

- - ), - footer: { - content: ( - <> -

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

- - ) - } - }, - { - title: <>計算箱の例, - content: ( - <> -

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

- - 計算箱 - -
    - - 上には、数字の が入っています。 - - - 下には、1を足す印 - が入っています。 - -
- , - 1️⃣, - - ]} - /> -

では次に、この計算箱はどのように使うかを説明しましょう!

- - ) - }, - { - title: ( - <> - ボタン - - ), - content: ( - <> -

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

- -

- - 結果は になりました - - 。つまり、 - {' '} - が計算できたということです。 -

-
-

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

- -

- こちらは になり、すなわち{' '} - {' '} - が計算できました!🙂 -

- - ) - }, - { - title: <>1を足す機能, - content: ( - <> -

ここまでをまとめると、下の計算箱のように、

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

ということです。

- , - , - - ]} - /> -

- これが、計算箱に備わっている機能のひとつ、「 - 1を足す機能 - 」です。この機能を使えば、 - - 何らかの数字に {' '} - を足す計算を行うことができる - - のです。 -

- ✨, - , - - ]} - description={ - <> - 計算箱の1を足す機能: -
- 何らかの数字に を足す - - } - /> - - ) - }, - { - title: <>1を引く機能, - content: ( - <> -

- 計算箱は「1を足す」だけではなく、「1を引く - 」計算をすることもできます。こちらの計算箱を - - してみてください: -

- -

- 結果は になりました。すなわち{' '} - {' '} - が計算できたということです! - 🙂 -

-
-

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

- - {' '} - を計算できる - -

- これが、計算箱に備わっているふたつめの機能、「 - 1を引く機能 - 」です。この機能を使えば、何らかの数字から{' '} - を引く計算を行うことができるのです。 -

- ✨, - , - - ]} - description={ - <> - 計算箱の1を引く機能: -
- 何らかの数字から を引く - - } - /> - - ) - }, - { - title: ( - <> - 使えるのは と{' '} - だけ - - ), - content: ( - <> -

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

- , - , - - ]} - description={ - <> - と{' '} - しか使えない - - } - /> -

- それでは質問です。 と{' '} - しか使えないのであれば、たとえば{' '} - {' '} - {' '} - といった計算はどのように行えばいいのでしょうか?🤔 -

- , - , - - ]} - description={<>これを計算したいときはどうすればいい?} - /> - - ) - }, - { - title: ( - <> - を2回使う - - ), - content: ( - <> -

- 正解を教えましょう。 - {' '} - を計算したい場合、{' '} - - を2回 - - 使えばいいのです。 -

- , - , - - ]} - description={ - <> - を2回使う - - } - /> -

- こちらに {' '} - を2回使った計算箱を用意したので、実際に試してみましょう。 - -

- -

- 結果は になり、すなわち{' '} - {' '} - - が計算できました!🙂 -

- - ) - }, - { - title: ( - <> - {' '} - も何回でも使える - - ), - content: ( - <> -

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

- , - , - - ]} - /> - , - , - - ]} - description={ - <> - も{' '} - も何回でも使える - - } - /> -

- たとえば、下の計算箱は、 - - を3回 - - 使うことで、 - {' '} - を計算してくれます。 -

- -

- 一方、下の計算箱は、 - - を4回 - - 使うことで、 - {' '} - を計算してくれます。 -

- - - ) - }, - { - title: <>どんな大きな数字の足し算でも引き算でもできる, - content: ( - <> -

- つまり、 - {' '} - を何度も使うことで、 - どんな大きな数字の足し算でも引き算でも行うことができます - 。 -

- , - , - - ]} - noBottomMargin - /> - , - , - - ]} - description={ - <> - も{' '} - も何度も使えば、 -
- どんな大きな数字でも足し算・引き算できる - - } - /> -

- たとえば、 - {' '} - {' '} - を計算したかったら、どうすればいいでしょうか? -

- , - , - - ]} - /> -

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

- - を10回配置 - -

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

- - ) - }, - { - title: <>ラムダ村の村人は計算がとても苦手, - content: ( - <> -

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

- ➕, - , - - ]} - description={<>計算箱は足し算や引き算ができる} - /> -

- そして、ラムダ村の村人は計算がとても苦手でした。 - だから、たとえば「 - {' '} - - 」のような単純な足し算をするのにも、村人たちは計算箱に頼りきっていました。 -

- 🙂, - , - 🙂 - ]} - description={ - <> - 俺ら計算が苦手だから、 - {' '} - といった -
- 単純な足し算も、計算箱がないとできない! - - } - /> - - ), - footer: { - content: ( - <> -

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

- 掛け算や割り算は、計算箱ではできない} - /> -

- しかし、計算が大の苦手だった村人たちにとって、足し算や引き算ができるだけでも大いにありがたいことでした。 -

- - ) - } - }, - { - title: <>3つめの計算箱の機能, - content: ( - <> -

- - 実は計算箱には、今回紹介した「 - 1を足す機能{' '} - - 」や「 - 1を引く機能{' '} - - 」以外にも、 - さらにもうひとつ - の機能があります。 - -

- , - , - - ]} - description={<>3つめの機能がある} - /> -

次のページでは、計算箱の3つめの機能について紹介していきます!

- - - ) - } - ]} - /> -) diff --git a/src/contents/10.jp.tsx b/src/contents/10.jp.tsx index 5f4ca258b..66c74fddd 100644 --- a/src/contents/10.jp.tsx +++ b/src/contents/10.jp.tsx @@ -1,4 +1,1322 @@ import React from 'react' import EpisodeCardList from 'src/components/EpisodeCardList' +import { P, Em, Strong, Ul, UlLi, Hr } from 'src/components/ContentTags' +import H from 'src/components/H' +import BubbleQuotes from 'src/components/BubbleQuotes' +import EmojiNumber from 'src/components/EmojiNumber' +import BottomRightBadge from 'src/components/BottomRightBadge' +import EmojiSeparator from 'src/components/EmojiSeparator' +import CustomEmoji from 'src/components/CustomEmoji' +import ExpressionRunnerSeparator from 'src/components/ExpressionRunnerSeparator' +import EmojiWithText from 'src/components/EmojiWithText' +import Emoji from 'src/components/Emoji' +import ExpressionRunnerCaptionOnly from 'src/components/ExpressionRunnerCaptionOnly' +import TwoColGrid from 'src/components/TwoColGrid' +import * as R from 'src/components/Runners' +import NextLessonButton from 'src/components/NextLessonButton' -export default () => +export default () => ( + 返してもらった計算箱は…, + content: ( + <> + +

では、計算箱を返してやろう!

+ + ) + } + ]} + /> + 返してもらった計算箱 + +

あれ…これだけか?

+ + ) + }, + { + type: 'thinking', + children: ( + <> +

+ これは「1を足す機能{' '} + + 」がある計算箱だけど… +

+

+ 「1を引く機能{' '} + + 」がある計算箱や、「繰り返しの機能{' '} + 🔁」がある計算箱はどこにいったんだ? +

+ + ) + } + ]} + /> + + + 1を引く機能 + + + } + right={ + <> + + 繰り返しの機能 🔁 + + + + + } + /> + +

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

+

+ + いまお前たちに返せるのは、「 + 1を足す機能{' '} + + 」がある計算箱だけだ。 + +

+ + ) + }, + { + type: 'scared', + children: ( + <> +

な、なんだってー!

+ + ) + }, + { + type: 'crying', + children: ( + <> +

+ 話が違うじゃないか!さっきの問題を解いたら、計算箱を返してくれると言っただろう? +

+ + ) + }, + { + type: 'devil', + children: ( + <> +

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

+ + ) + }, + { + type: 'sad', + children: ( + <> +

そ、そんなー!嘘つきじゃないか!

+ + ) + }, + { + type: 'devil', + children: ( + <> +

まあ、わたしは悪魔だからな。

+ + ) + } + ]} + /> + + ) + }, + { + title: <>どうすればいい?, + content: ( + <> + +

+ じゃあ、どうしたらすべての機能を返してもらえるんだ? +

+ + ) + }, + { + type: 'devil', + children: ( + <> +

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

+ + ) + } + ]} + /> + + + + {' '} + の計算箱を、弁当箱で再現 + + +

+ だから、 + + 「1を引く機能{' '} + + 」や「 + 繰り返しの機能 🔁 + 」を返してほしかったら、 + + それらを同じように弁当箱で再現してみることだな! + + +

+ + ) + } + ]} + /> + + + 1を引く機能 + + + 弁当箱で再現} + /> + + } + right={ + <> + + 繰り返しの機能 🔁 + + + + + 弁当箱で再現} + /> + + } + /> + +

えー!

+

+ 「1を足す機能{' '} + + 」を再現するのにも苦戦したのに、「 + 1を引く機能{' '} + + 」や「 + 繰り返しの機能 🔁 + 」を再現するなんて、できっこないよ! +

+ + ) + }, + { + type: 'devil', + children: ( + <> +

だったら、それらは諦めることだな。

+ + ) + }, + { + type: 'sad', + children: ( + <> +

+ で、でも… + + それじゃ + 引き算や、大きな数の足し算・引き算 + ができないよ! + + 俺らは計算箱がないと何もできないんだ! +

+ + ) + }, + { + type: 'crying', + children: ( + <> +

頑張って弁当箱で再現するしかないのか…

+ + ) + } + ]} + /> + + ) + }, + { + title: ( + <> + + がある弁当箱のヒント + + ), + content: ( + <> + +

+ もちろん、ヒント無しでやれとは言わん。前回同様、ヒントを出してやろうじゃないか。 +

+

ミニオン、ヒントを説明したまえ!

+ + ) + }, + { + type: 'dog', + children: ( + <> +

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

+

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

+ + ) + } + ]} + /> + + それぞれの には +
+ 何らかの料理が入る +
+ +

なんか、めちゃくちゃ複雑な弁当箱だな…

+ + ) + }, + { + type: 'dog', + children: ( + <> +

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

+ + ) + } + ]} + /> + + それぞれの に、 +
+ ある法則に基づいて料理を入れると、 +
+ + がある弁当箱になる +
+ +

+ 上の + + がある弁当箱を、 +

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

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

+ + ) + } + ]} + /> + + に変換できる弁当箱と、 +
+ + がある弁当箱を合体させ… +
+ + + +
+ すると、結果は {' '} + になる +
+ +

+ つまり、計算箱の「1を引く機能{' '} + + 」を再現できるというわけだな。 +

+ + ) + } + ]} + /> + + ) + }, + { + title: <>サヤちゃんが考えた弁当箱, + content: ( + <> + +

+ しかし…こんな複雑な弁当箱の{' '} + {' '} + を正しい法則で埋めるなんて…何日かかってもできなさそうだ! +

+ + ) + } + ]} + /> + + それぞれの には +
+ 何らかの料理が入る +
+

+ 村人たちが困っていると、またサヤちゃんが何かひらめいたようです。 +

+ +

ねえねえ、サヤも試しにやってみたんだけど…

+ + ) + }, + { + type: 'roll', + children: ( + <> +

え…サヤちゃん、まさか答えが分かったというのかい?

+ + ) + }, + { + type: 'saya', + children: ( + <> +

とりあえずこれを見てみて!

+ + ) + } + ]} + /> + + 👧🏻 サヤちゃんの弁当箱 + + +

+ ふむふむ…まさか今回も一発で正解なんてことはありえないと思うけど、とりあえず試してみるか。 +

+

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

+ + + +

+ 今回は + + があるかどうかを確かめたいわけだから、 + {' '} + が計算できないといけない。 +

+ , + , + + ]} + /> +

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

+ ❓, + , + + ]} + description={ + <> + 結果が になればOK + + } + /> + + ) + } + ]} + /> + + に変換できる弁当箱と、 +
+ 👧🏻 サヤちゃんの弁当箱を合体させ… +
+ + + +
+ して、結果が になれば + 成功 🎉 +
+ それ以外なら失敗 😭 +
+ +

+ じゃあ、 + + してみよう! +

+ + ) + } + ]} + /> + + ) + }, + { + title: ( + <> + してみると… + + ), + content: ( + <> +

+ それでは、👧🏻{' '} + サヤちゃんの弁当箱を実行してみましょう! +

+

+ 途中まで早送りしてみますね。 + +

+ + +

複雑すぎて、目で追うのがしんどい…

+ + ) + }, + { + type: 'dog', + children: ( + <> +

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

+

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

+ + ) + }, + { + type: 'saya', + children: ( + <> +

+ それより見てみて! + + 途中で{' '} + {' '} + と{' '} + {' '} + が同じ になったよ! + +

+

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

+ + ) + } + ]} + /> + + +

+ そうですね!結果が狂わないように、 + {' '} + の を{' '} + に変えました。 +

+

+ では、最後まで + + してみてください! +

+ + ) + } + ]} + /> + + +

+ 最終的に残った以下の弁当箱は、 + に変換できる弁当箱です! +

+ + ) + } + ]} + /> + + + + +

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

+

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

+ + ) + } + ]} + /> + + に変換できる弁当箱と、 +
+ 👧🏻 サヤちゃんの弁当箱を合体させ… +
+ + + +
+ すると、結果が になる +
+ +

+ つまり、 + {' '} + が計算できたので、 + 成功です! 🎉 +

+ + ) + }, + { + type: 'saya', + children: ( + <> +

やったー!

+ + ) + }, + { + type: 'surprised', + children: ( + <> +

す、すごい…!

+ + ) + } + ]} + /> + + ) + }, + { + title: ( + <> + {' '} + はできる? + + ), + content: ( + <> + +

+ ぐぬぬ…しかし、 + {' '} + が計算できたからといって、 + + その弁当箱に + + があるとはまだ言い切れない + + ぞ。 +

+

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

+ + ) + } + ]} + /> + , + , + + ]} + description={<>これも計算できる?} + /> + +

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

+ + + +

+ 合体したものを + + して、 + + 結果が になればいい + + んだよね。 +

+ + ) + } + ]} + /> + + に変換できる弁当箱と、 +
+ 👧🏻 サヤちゃんの弁当箱を合体させ… +
+ + + +
+ して、結果が になれば + 成功 🎉 +
+ それ以外なら失敗 😭 +
+ +

+ まずは実行してみるね。 + +

+
    + + 今回は、最後まで止まらずに早送りするね! + + + 複雑なので、目で追わなくても大丈夫だよ! + + + ちょっと時間がかかるので、待てない方は下の「 + + → + + 」を押してね! + +
+ + ) + } + ]} + /> + + +

+ 最終的に残った以下の弁当箱は、 + に変換できる弁当箱です! +

+ + ) + } + ]} + /> + + + + +

+ つまり、 + {' '} + が計算できたので、 + またしても成功です! 🎉 +

+ + ) + }, + { + type: 'saya', + children: ( + <> +

わーい、わーい!

+ + ) + }, + { + type: 'devil', + children: ( + <> +

ぐぬぬ…

+ + ) + } + ]} + /> + + ) + }, + { + title: ( + <> + + がある法則 + + ), + content: ( + <> + +

+ まさか、こうも簡単に正解されるとは思わなかったが… + + サヤちゃんが考えた弁当箱は、 + + がある弁当箱だ! + {' '} + 🎉 +

+ + ) + } + ]} + /> + + 👧🏻 サヤちゃんが考えた弁当箱には +
+ + がある +
+ +

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

+ + ) + } + ]} + /> + + この法則に当てはまる弁当箱であれば、 +
+ + がある +
+ +

+ たしかにサヤちゃんの弁当箱は、上の法則に当てはまっている… +

+

+ よくこんなの分かったなあ。サヤちゃんは天才なのかもしれない! +

+ + ) + }, + { + type: 'saya', + children: ( + <> +

+ そんなことないよ!でも、これで「 + 1を引く機能{' '} + + 」を再現できたね! +

+ + ) + } + ]} + /> + + ) + }, + { + type: 'summary', + title: ( + <> + 「1を引く機能 + 」も再現できた! + + ), + content: ( + <> +

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

+ , + , + , + 🍱, + + ]} + description={ + <> + 計算箱の「1を引く機能{' '} + + 」は、 +
+ 弁当箱で「再現」することができる + + } + /> +

+ たとえば、以下のような {' '} + {' '} + を計算する計算箱をご覧ください。 +

+ + {' '} + を計算できる + +

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

+ + に変換できる弁当箱と +
+ + がある弁当箱を +
+ 合体すれば、 + {' '} + の計算箱を再現できる +
+

+ 上の + + ボタンを押すと、答えが {' '} + になるのを確認できます。 +

+
+

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

+ , + , + , + 🍱, + + ]} + description={ + <> + 計算箱の「1を引く機能{' '} + + 」も、 +
+ 弁当箱で「再現」することができる + + } + /> + + ) + }, + { + title: <>中級はここまで!, + content: ( + <> + + +

+ どうだ、「1を引く機能{' '} + + 」も、弁当箱で再現したぞ!(やったのは俺らじゃなくて{' '} + 👧🏻 サヤちゃんだけど…) +

+

+ 約束通り、「1を引く機能{' '} + + 」がある計算箱も返してもらう! +

+ + ) + }, + { + type: 'devil', + children: ( + <> +

ぐぬぬ…では、返してやろう!

+ + ) + }, + { + type: 'celebrate', + children: ( + <> +

やったー!

+ + ) + } + ]} + /> + + 「1を引く機能 + 」も返してもらった! + + +

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

+ + ) + } + ]} + /> + + + を{' '} +
+ 繰り返す +
+ + } + right={ + <> + + を{' '} +
+ 繰り返す +
+ + } + /> + +

+ 難しそう…しかし、こっちには 👧🏻{' '} + サヤちゃんがいる!彼女ならなんとかしてくれるはずだ! +

+ + ) + }, + { + type: 'devil', + children: ( + <> +

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

+ + ) + }, + { + type: 'brave', + children: ( + <> +

よーし、望むところだ!上級編へ進もう!

+ + ) + } + ]} + /> + + + ) + } + ]} + /> +) diff --git a/src/contents/10.v2.jp.tsx b/src/contents/10.v2.jp.tsx deleted file mode 100644 index 66c74fddd..000000000 --- a/src/contents/10.v2.jp.tsx +++ /dev/null @@ -1,1322 +0,0 @@ -import React from 'react' -import EpisodeCardList from 'src/components/EpisodeCardList' -import { P, Em, Strong, Ul, UlLi, Hr } from 'src/components/ContentTags' -import H from 'src/components/H' -import BubbleQuotes from 'src/components/BubbleQuotes' -import EmojiNumber from 'src/components/EmojiNumber' -import BottomRightBadge from 'src/components/BottomRightBadge' -import EmojiSeparator from 'src/components/EmojiSeparator' -import CustomEmoji from 'src/components/CustomEmoji' -import ExpressionRunnerSeparator from 'src/components/ExpressionRunnerSeparator' -import EmojiWithText from 'src/components/EmojiWithText' -import Emoji from 'src/components/Emoji' -import ExpressionRunnerCaptionOnly from 'src/components/ExpressionRunnerCaptionOnly' -import TwoColGrid from 'src/components/TwoColGrid' -import * as R from 'src/components/Runners' -import NextLessonButton from 'src/components/NextLessonButton' - -export default () => ( - 返してもらった計算箱は…, - content: ( - <> - -

では、計算箱を返してやろう!

- - ) - } - ]} - /> - 返してもらった計算箱 - -

あれ…これだけか?

- - ) - }, - { - type: 'thinking', - children: ( - <> -

- これは「1を足す機能{' '} - - 」がある計算箱だけど… -

-

- 「1を引く機能{' '} - - 」がある計算箱や、「繰り返しの機能{' '} - 🔁」がある計算箱はどこにいったんだ? -

- - ) - } - ]} - /> - - - 1を引く機能 - - - } - right={ - <> - - 繰り返しの機能 🔁 - - - - - } - /> - -

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

-

- - いまお前たちに返せるのは、「 - 1を足す機能{' '} - - 」がある計算箱だけだ。 - -

- - ) - }, - { - type: 'scared', - children: ( - <> -

な、なんだってー!

- - ) - }, - { - type: 'crying', - children: ( - <> -

- 話が違うじゃないか!さっきの問題を解いたら、計算箱を返してくれると言っただろう? -

- - ) - }, - { - type: 'devil', - children: ( - <> -

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

- - ) - }, - { - type: 'sad', - children: ( - <> -

そ、そんなー!嘘つきじゃないか!

- - ) - }, - { - type: 'devil', - children: ( - <> -

まあ、わたしは悪魔だからな。

- - ) - } - ]} - /> - - ) - }, - { - title: <>どうすればいい?, - content: ( - <> - -

- じゃあ、どうしたらすべての機能を返してもらえるんだ? -

- - ) - }, - { - type: 'devil', - children: ( - <> -

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

- - ) - } - ]} - /> - - - - {' '} - の計算箱を、弁当箱で再現 - - -

- だから、 - - 「1を引く機能{' '} - - 」や「 - 繰り返しの機能 🔁 - 」を返してほしかったら、 - - それらを同じように弁当箱で再現してみることだな! - - -

- - ) - } - ]} - /> - - - 1を引く機能 - - - 弁当箱で再現} - /> - - } - right={ - <> - - 繰り返しの機能 🔁 - - - - - 弁当箱で再現} - /> - - } - /> - -

えー!

-

- 「1を足す機能{' '} - - 」を再現するのにも苦戦したのに、「 - 1を引く機能{' '} - - 」や「 - 繰り返しの機能 🔁 - 」を再現するなんて、できっこないよ! -

- - ) - }, - { - type: 'devil', - children: ( - <> -

だったら、それらは諦めることだな。

- - ) - }, - { - type: 'sad', - children: ( - <> -

- で、でも… - - それじゃ - 引き算や、大きな数の足し算・引き算 - ができないよ! - - 俺らは計算箱がないと何もできないんだ! -

- - ) - }, - { - type: 'crying', - children: ( - <> -

頑張って弁当箱で再現するしかないのか…

- - ) - } - ]} - /> - - ) - }, - { - title: ( - <> - - がある弁当箱のヒント - - ), - content: ( - <> - -

- もちろん、ヒント無しでやれとは言わん。前回同様、ヒントを出してやろうじゃないか。 -

-

ミニオン、ヒントを説明したまえ!

- - ) - }, - { - type: 'dog', - children: ( - <> -

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

-

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

- - ) - } - ]} - /> - - それぞれの には -
- 何らかの料理が入る -
- -

なんか、めちゃくちゃ複雑な弁当箱だな…

- - ) - }, - { - type: 'dog', - children: ( - <> -

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

- - ) - } - ]} - /> - - それぞれの に、 -
- ある法則に基づいて料理を入れると、 -
- - がある弁当箱になる -
- -

- 上の - - がある弁当箱を、 -

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

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

- - ) - } - ]} - /> - - に変換できる弁当箱と、 -
- - がある弁当箱を合体させ… -
- - - -
- すると、結果は {' '} - になる -
- -

- つまり、計算箱の「1を引く機能{' '} - - 」を再現できるというわけだな。 -

- - ) - } - ]} - /> - - ) - }, - { - title: <>サヤちゃんが考えた弁当箱, - content: ( - <> - -

- しかし…こんな複雑な弁当箱の{' '} - {' '} - を正しい法則で埋めるなんて…何日かかってもできなさそうだ! -

- - ) - } - ]} - /> - - それぞれの には -
- 何らかの料理が入る -
-

- 村人たちが困っていると、またサヤちゃんが何かひらめいたようです。 -

- -

ねえねえ、サヤも試しにやってみたんだけど…

- - ) - }, - { - type: 'roll', - children: ( - <> -

え…サヤちゃん、まさか答えが分かったというのかい?

- - ) - }, - { - type: 'saya', - children: ( - <> -

とりあえずこれを見てみて!

- - ) - } - ]} - /> - - 👧🏻 サヤちゃんの弁当箱 - - -

- ふむふむ…まさか今回も一発で正解なんてことはありえないと思うけど、とりあえず試してみるか。 -

-

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

- - - -

- 今回は - - があるかどうかを確かめたいわけだから、 - {' '} - が計算できないといけない。 -

- , - , - - ]} - /> -

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

- ❓, - , - - ]} - description={ - <> - 結果が になればOK - - } - /> - - ) - } - ]} - /> - - に変換できる弁当箱と、 -
- 👧🏻 サヤちゃんの弁当箱を合体させ… -
- - - -
- して、結果が になれば - 成功 🎉 -
- それ以外なら失敗 😭 -
- -

- じゃあ、 - - してみよう! -

- - ) - } - ]} - /> - - ) - }, - { - title: ( - <> - してみると… - - ), - content: ( - <> -

- それでは、👧🏻{' '} - サヤちゃんの弁当箱を実行してみましょう! -

-

- 途中まで早送りしてみますね。 - -

- - -

複雑すぎて、目で追うのがしんどい…

- - ) - }, - { - type: 'dog', - children: ( - <> -

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

-

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

- - ) - }, - { - type: 'saya', - children: ( - <> -

- それより見てみて! - - 途中で{' '} - {' '} - と{' '} - {' '} - が同じ になったよ! - -

-

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

- - ) - } - ]} - /> - - -

- そうですね!結果が狂わないように、 - {' '} - の を{' '} - に変えました。 -

-

- では、最後まで - - してみてください! -

- - ) - } - ]} - /> - - -

- 最終的に残った以下の弁当箱は、 - に変換できる弁当箱です! -

- - ) - } - ]} - /> - - - - -

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

-

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

- - ) - } - ]} - /> - - に変換できる弁当箱と、 -
- 👧🏻 サヤちゃんの弁当箱を合体させ… -
- - - -
- すると、結果が になる -
- -

- つまり、 - {' '} - が計算できたので、 - 成功です! 🎉 -

- - ) - }, - { - type: 'saya', - children: ( - <> -

やったー!

- - ) - }, - { - type: 'surprised', - children: ( - <> -

す、すごい…!

- - ) - } - ]} - /> - - ) - }, - { - title: ( - <> - {' '} - はできる? - - ), - content: ( - <> - -

- ぐぬぬ…しかし、 - {' '} - が計算できたからといって、 - - その弁当箱に - - があるとはまだ言い切れない - - ぞ。 -

-

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

- - ) - } - ]} - /> - , - , - - ]} - description={<>これも計算できる?} - /> - -

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

- - - -

- 合体したものを - - して、 - - 結果が になればいい - - んだよね。 -

- - ) - } - ]} - /> - - に変換できる弁当箱と、 -
- 👧🏻 サヤちゃんの弁当箱を合体させ… -
- - - -
- して、結果が になれば - 成功 🎉 -
- それ以外なら失敗 😭 -
- -

- まずは実行してみるね。 - -

-
    - - 今回は、最後まで止まらずに早送りするね! - - - 複雑なので、目で追わなくても大丈夫だよ! - - - ちょっと時間がかかるので、待てない方は下の「 - - → - - 」を押してね! - -
- - ) - } - ]} - /> - - -

- 最終的に残った以下の弁当箱は、 - に変換できる弁当箱です! -

- - ) - } - ]} - /> - - - - -

- つまり、 - {' '} - が計算できたので、 - またしても成功です! 🎉 -

- - ) - }, - { - type: 'saya', - children: ( - <> -

わーい、わーい!

- - ) - }, - { - type: 'devil', - children: ( - <> -

ぐぬぬ…

- - ) - } - ]} - /> - - ) - }, - { - title: ( - <> - - がある法則 - - ), - content: ( - <> - -

- まさか、こうも簡単に正解されるとは思わなかったが… - - サヤちゃんが考えた弁当箱は、 - - がある弁当箱だ! - {' '} - 🎉 -

- - ) - } - ]} - /> - - 👧🏻 サヤちゃんが考えた弁当箱には -
- - がある -
- -

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

- - ) - } - ]} - /> - - この法則に当てはまる弁当箱であれば、 -
- - がある -
- -

- たしかにサヤちゃんの弁当箱は、上の法則に当てはまっている… -

-

- よくこんなの分かったなあ。サヤちゃんは天才なのかもしれない! -

- - ) - }, - { - type: 'saya', - children: ( - <> -

- そんなことないよ!でも、これで「 - 1を引く機能{' '} - - 」を再現できたね! -

- - ) - } - ]} - /> - - ) - }, - { - type: 'summary', - title: ( - <> - 「1を引く機能 - 」も再現できた! - - ), - content: ( - <> -

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

- , - , - , - 🍱, - - ]} - description={ - <> - 計算箱の「1を引く機能{' '} - - 」は、 -
- 弁当箱で「再現」することができる - - } - /> -

- たとえば、以下のような {' '} - {' '} - を計算する計算箱をご覧ください。 -

- - {' '} - を計算できる - -

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

- - に変換できる弁当箱と -
- - がある弁当箱を -
- 合体すれば、 - {' '} - の計算箱を再現できる -
-

- 上の - - ボタンを押すと、答えが {' '} - になるのを確認できます。 -

-
-

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

- , - , - , - 🍱, - - ]} - description={ - <> - 計算箱の「1を引く機能{' '} - - 」も、 -
- 弁当箱で「再現」することができる - - } - /> - - ) - }, - { - title: <>中級はここまで!, - content: ( - <> - - -

- どうだ、「1を引く機能{' '} - - 」も、弁当箱で再現したぞ!(やったのは俺らじゃなくて{' '} - 👧🏻 サヤちゃんだけど…) -

-

- 約束通り、「1を引く機能{' '} - - 」がある計算箱も返してもらう! -

- - ) - }, - { - type: 'devil', - children: ( - <> -

ぐぬぬ…では、返してやろう!

- - ) - }, - { - type: 'celebrate', - children: ( - <> -

やったー!

- - ) - } - ]} - /> - - 「1を引く機能 - 」も返してもらった! - - -

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

- - ) - } - ]} - /> - - - を{' '} -
- 繰り返す -
- - } - right={ - <> - - を{' '} -
- 繰り返す -
- - } - /> - -

- 難しそう…しかし、こっちには 👧🏻{' '} - サヤちゃんがいる!彼女ならなんとかしてくれるはずだ! -

- - ) - }, - { - type: 'devil', - children: ( - <> -

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

- - ) - }, - { - type: 'brave', - children: ( - <> -

よーし、望むところだ!上級編へ進もう!

- - ) - } - ]} - /> - - - ) - } - ]} - /> -) diff --git a/src/contents/11.jp.tsx b/src/contents/11.jp.tsx index 5f4ca258b..49c73ee6b 100644 --- a/src/contents/11.jp.tsx +++ b/src/contents/11.jp.tsx @@ -1,4 +1,970 @@ import React from 'react' import EpisodeCardList from 'src/components/EpisodeCardList' +import { + P, + Strong, + Hr, + Em, + Ul, + UlLi, + InlineHeader +} from 'src/components/ContentTags' +import H from 'src/components/H' +import BubbleQuotes from 'src/components/BubbleQuotes' +import EmojiNumber from 'src/components/EmojiNumber' +import EmojiSeparator from 'src/components/EmojiSeparator' +import CustomEmoji from 'src/components/CustomEmoji' +import ExpressionRunnerSeparator from 'src/components/ExpressionRunnerSeparator' +import ExpressionRunnerCaptionOnly from 'src/components/ExpressionRunnerCaptionOnly' +import Emoji from 'src/components/Emoji' +import TwoColGrid from 'src/components/TwoColGrid' +import InlineBorder from 'src/components/InlineBorder' +import * as R from 'src/components/Runners' +import NextLessonButton from 'src/components/NextLessonButton' +import YesNoButtons from 'src/components/YesNoButtons' +import { TwoPlusFour, Conclusion } from 'src/contents/2.jp' -export default () => +export default () => ( + 上級編へようこそ!, + content: ( + <> + , + 🤗, + + ]} + /> +

+ 中級編では、ラムダ村の村人たちは計算箱の「 + 1を足す機能 + 」と「1を引く機能 + 」を 😈{' '} + 悪魔から返してもらいました。どちらも、弁当箱で再現することができたのです。 +

+ + 「1を足す機能 」 + + + 弁当箱で再現 +
+ + 1を引く機能 + + + 弁当箱で再現 + + ) + }, + { + title: ( + <> + 「繰り返しの機能 🔁 + 」の復習 + + ), + content: ( + <> +

+ 一方、「繰り返しの機能 🔁 + 」は、まだ返してもらっていません。これを弁当箱で再現できないと返してもらえないのです。 +

+ + + を{' '} +
+ 繰り返す +
+ + } + right={ + <> + + を{' '} +
+ 繰り返す +
+ + } + /> +

+ 「繰り返しの機能 🔁 + 」について忘れてしまった方も多いと思うので、ここで復習をしましょう。 +

+

+ まず、こちらの計算箱をご覧になり、 + +

+ + + ) + }, + { + title: <>大きな数の足し算や引き算に役立つ, + content: ( + <> +

+ こちらも復習になりますが、ラムダ村の村人たちにとって、計算箱の「 + 繰り返しの機能 🔁 + 」は、 + + 大きな数の足し算や引き算をするときに欠かせない機能 + + でした。 +

+ ✨, 🔁, ]} + description={<>大きな数の足し算・引き算に役立つ} + /> +

+ たとえば、 + {' '} + {' '} + を計算したい場合、繰り返しの機能を使わないと、 + を10回配置する必要があります。 +

+ + を10回配置 + +

+ + しかし、 + の数が大きくなると、 + {' '} + の数を間違えてしまう可能性があります。 + + そうすると、正しい計算ができません。 +

+ ❌, + , + + ]} + description={ + <> + の数を間違えやすい + + } + /> +

+ 一方、繰り返しの機能を使えば、 + {' '} + {' '} + といった計算も、以下のようにシンプルになります。 + の数を間違えることもありません。 +

+ + {' '} + 回繰り返す + + + + ) + }, + { + title: <>どうやって再現する?, + content: ( + <> + , + 🔁, + , + 🍱, + + ]} + description={ + <> + 計算箱の「繰り返しの機能 🔁 + 」を、 +
+ 弁当箱でどう「再現」する? + + } + /> +

+ ラムダ村の村人たちは、計算箱の「繰り返しの機能{' '} + 🔁」を 😈{' '} + 悪魔から返してもらうべく、弁当箱で繰り返しの機能を再現しようと頑張っていました。しかし… +

+ +

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

+

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

+ + ) + }, + { + type: 'saya', + children: ( + <> +

サヤも、さっぱり分からないなあ…

+ + ) + }, + { + type: 'crying', + children: ( + <> +

サヤちゃんでも分からないなんて…もうお手上げだ!

+ + ) + } + ]} + /> +

+ すると、悩んでいる村人たちのもとに、悪魔の助手の 🐶{' '} + ミニオンがやってきました。 +

+ +

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

+ + ) + }, + { + type: 'crying', + children: ( + <> +

おお、ミニオン!お願いだ、ヒントを教えてくれ!

+ + ) + }, + { + type: 'dog', + children: ( + <> +

+ 分かりました、ではまず、計算箱の「 + 条件分岐の機能 ↕️ + 」について教えましょう。 +

+ + ) + }, + { + type: 'thinking', + children: ( + <> +

+ 「条件分岐の機能 ↕️ + 」だって?何だそりゃ? +

+ + ) + } + ]} + /> + + ) + }, + { + title: <>条件分岐の機能, + content: ( + <> + +

まず、こちらの計算箱をご覧ください。

+ + ) + } + ]} + /> + + 「条件分岐の機能 ↕️」がある計算箱 + + +

なんだこれは?

+
    + + 左側に {' '} + {' '} + {' '} + という3種類の印があり、 + + + それぞれ {' '} + {' '} + {' '} + が入っている。 + +
+ + ) + }, + { + type: 'dog', + children: ( + <> +

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

+

+ 具体例で説明したほうが分かりやすいと思うので、 + + {' '} + {' '} + {' '} + に何か適当な数字を入れてみてください! + +

+ + ) + }, + { + type: 'thinking', + children: ( + <> +

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

+

+ これで、 + + を押すとどうなるのかな? +

+ + ) + } + ]} + /> + + +

+ になった! +

+ + ) + }, + { + type: 'dog', + children: ( + <> +

では、どうしてこうなったか説明しますね!

+ + ) + } + ]} + /> + + ) + }, + { + title: ( + <> + 真ん中が かどうか + + ), + content: ( + <> + +

+ 「条件分岐の機能 ↕️ + 」はまず、 + + {' '} + に入っている数字が かどうか + + チェックします。 +

+ + ) + } + ]} + /> + + +

+ {' '} + に入っている数字は なので、{' '} + + ではないよ。 + +

+ + ) + }, + { + type: 'dog', + children: ( + <> +

+ そうですね。このように真ん中が{' '} + ではない場合、 + + {' '} + に入っている数字が最終的に残るのです。 + +

+ + ) + } + ]} + /> + + + + に入っていた{' '} + が残る + + +

+ なるほど、だから が残るのか! +

+ + ) + } + ]} + /> + + ) + }, + { + type: 'yesNoQuiz', + title: ( + <> + + + ), + content: ( + <> + +

+ では、もうひとつ例を紹介します。こちらは、 + {' '} + にしてみましょう。こちらの計算箱をご覧ください。 +

+ + ) + } + ]} + /> + + +

+ 質問: これを + {' '} + すると、最終的に以下のようになるでしょうか? +

+ + ) + } + ]} + /> + + + + ) + }, + { + title: ( + <> + + + ), + content: ( + <> + +

+ + 残るのは ではなく、 + になります。 + +

+ + ) + } + ]} + /> + + +

どうしてこうなったか説明しましょう。

+

+ こちらも、真ん中の数字が {' '} + かどうかチェックします。 +

+ + ) + } + ]} + /> + + +

+ 今回は真ん中が {' '} + ですね。この場合は前回と逆で、 + + {' '} + に入っている数字が最終的に残ります。 + +

+ + ) + } + ]} + /> + + + + に入っていた{' '} + が残る + + +

なるほど…

+ + ) + } + ]} + /> + + ) + }, + { + type: 'summary', + title: ( + <> + + + ), + content: ( + <> +

+ まとめると、この「 + 条件分岐の機能 ↕️ + 」の法則は以下の通りです。 +

+ + 「条件分岐の機能 ↕️」がある計算箱 + +

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

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

+ なるほど、「 + + 真ん中が かどうか? + + 」という「 + 条件」によって上下に「 + 分岐」するから、「 + 条件分岐の機能 ↕️ + 」なのか。 +

+ + ) + } + ]} + /> + + ) + }, + { + title: <>繰り返しの機能と関連がある, + content: ( + <> + +

+ この「 + 条件分岐の機能 ↕️ + 」は、 + + 実は計算箱にもともと備わっていた隠れ機能 + + なんです。 +

+ + ) + } + ]} + /> + 計算箱に備わっていた隠れ機能} + /> + +

+ へー、そんなこと、ラムダ村の俺らは誰も知らなかったぞ! +

+ + ) + }, + { + type: 'dog', + children: ( + <> +

+ そうなんです。「 + 条件分岐の機能 ↕️ + 」は + + あまり役に立たないので、いつしか忘れ去られてしまった + + のです。 +

+ + ) + }, + { + type: 'thinking', + children: ( + <> +

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

+ + ) + }, + { + type: 'dog', + children: ( + <> +

+ しかし、この「 + 条件分岐の機能 ↕️ + 」は、 + + 実は「 + 繰り返しの機能 🔁 + 」と関連がある + + のです。 +

+ + ) + } + ]} + /> + + 「条件分岐の機能 ↕️ + 」は、 +
繰り返しの機能 🔁 + 」と関連がある + + } + /> + +

え、そうなの?

+ + ) + }, + { + type: 'dog', + children: ( + <> +

+ はい。ここが重要なのですが…村人のみなさんは「 + 繰り返しの機能 🔁 + 」を弁当箱で再現できずに苦労していましたよね。 +

+ + ) + }, + { + type: 'sad', + children: ( + <> +

うん、どうしていいか全然分からない…

+ + ) + }, + { + type: 'dog', + children: ( + <> +

+ 実は、「繰り返しの機能{' '} + 🔁 + 」を弁当箱で再現する一番の近道は、まず「 + 条件分岐の機能 ↕️ + 」を弁当箱で再現することなんです。 +

+ + ) + } + ]} + /> + , + ↕️, + , + 🍱, + + ]} + description={ + <> + 「条件分岐の機能 ↕️ + 」を +
+ 弁当箱で再現できれば… + + } + /> + + , + 🔁, + , + 🍱, + + ]} + description={ + <> + 「繰り返しの機能 🔁 + 」も +
+ 弁当箱で再現できる! + + } + /> + +

なんと!

+ + ) + }, + { + type: 'dog', + children: ( + <> +

+ だからまずは、「条件分岐の機能{' '} + ↕️ + 」を弁当箱で再現する、という問題にチャレンジしてみてください! +

+

+ これが解ければ、「繰り返しの機能{' '} + 🔁 + 」を弁当箱で再現するのに一歩近づきますよ。 +

+ + ) + } + ]} + /> + + 「条件分岐の機能 ↕️」を… + + + + 弁当箱で再現できたら… + + } + /> + + + 「繰り返しの機能 🔁 + 」を +
+ 再現するのに一歩近づく! +
+ +

そうか。よーし、やってみよう!

+ + ) + } + ]} + /> +

+ というわけで、次のページでは、「条件分岐の機能{' '} + ↕️」を弁当箱で再現してみます。次に進みましょう! +

+ + + ) + } + ]} + /> +) diff --git a/src/contents/11.v2.jp.tsx b/src/contents/11.v2.jp.tsx deleted file mode 100644 index 9e8c9d240..000000000 --- a/src/contents/11.v2.jp.tsx +++ /dev/null @@ -1,970 +0,0 @@ -import React from 'react' -import EpisodeCardList from 'src/components/EpisodeCardList' -import { - P, - Strong, - Hr, - Em, - Ul, - UlLi, - InlineHeader -} from 'src/components/ContentTags' -import H from 'src/components/H' -import BubbleQuotes from 'src/components/BubbleQuotes' -import EmojiNumber from 'src/components/EmojiNumber' -import EmojiSeparator from 'src/components/EmojiSeparator' -import CustomEmoji from 'src/components/CustomEmoji' -import ExpressionRunnerSeparator from 'src/components/ExpressionRunnerSeparator' -import ExpressionRunnerCaptionOnly from 'src/components/ExpressionRunnerCaptionOnly' -import Emoji from 'src/components/Emoji' -import TwoColGrid from 'src/components/TwoColGrid' -import InlineBorder from 'src/components/InlineBorder' -import * as R from 'src/components/Runners' -import NextLessonButton from 'src/components/NextLessonButton' -import YesNoButtons from 'src/components/YesNoButtons' -import { TwoPlusFour, Conclusion } from 'src/contents/2.v2.jp' - -export default () => ( - 上級編へようこそ!, - content: ( - <> - , - 🤗, - - ]} - /> -

- 中級編では、ラムダ村の村人たちは計算箱の「 - 1を足す機能 - 」と「1を引く機能 - 」を 😈{' '} - 悪魔から返してもらいました。どちらも、弁当箱で再現することができたのです。 -

- - 「1を足す機能 」 - - - 弁当箱で再現 -
- - 1を引く機能 - - - 弁当箱で再現 - - ) - }, - { - title: ( - <> - 「繰り返しの機能 🔁 - 」の復習 - - ), - content: ( - <> -

- 一方、「繰り返しの機能 🔁 - 」は、まだ返してもらっていません。これを弁当箱で再現できないと返してもらえないのです。 -

- - - を{' '} -
- 繰り返す -
- - } - right={ - <> - - を{' '} -
- 繰り返す -
- - } - /> -

- 「繰り返しの機能 🔁 - 」について忘れてしまった方も多いと思うので、ここで復習をしましょう。 -

-

- まず、こちらの計算箱をご覧になり、 - -

- - - ) - }, - { - title: <>大きな数の足し算や引き算に役立つ, - content: ( - <> -

- こちらも復習になりますが、ラムダ村の村人たちにとって、計算箱の「 - 繰り返しの機能 🔁 - 」は、 - - 大きな数の足し算や引き算をするときに欠かせない機能 - - でした。 -

- ✨, 🔁, ]} - description={<>大きな数の足し算・引き算に役立つ} - /> -

- たとえば、 - {' '} - {' '} - を計算したい場合、繰り返しの機能を使わないと、 - を10回配置する必要があります。 -

- - を10回配置 - -

- - しかし、 - の数が大きくなると、 - {' '} - の数を間違えてしまう可能性があります。 - - そうすると、正しい計算ができません。 -

- ❌, - , - - ]} - description={ - <> - の数を間違えやすい - - } - /> -

- 一方、繰り返しの機能を使えば、 - {' '} - {' '} - といった計算も、以下のようにシンプルになります。 - の数を間違えることもありません。 -

- - {' '} - 回繰り返す - - - - ) - }, - { - title: <>どうやって再現する?, - content: ( - <> - , - 🔁, - , - 🍱, - - ]} - description={ - <> - 計算箱の「繰り返しの機能 🔁 - 」を、 -
- 弁当箱でどう「再現」する? - - } - /> -

- ラムダ村の村人たちは、計算箱の「繰り返しの機能{' '} - 🔁」を 😈{' '} - 悪魔から返してもらうべく、弁当箱で繰り返しの機能を再現しようと頑張っていました。しかし… -

- -

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

-

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

- - ) - }, - { - type: 'saya', - children: ( - <> -

サヤも、さっぱり分からないなあ…

- - ) - }, - { - type: 'crying', - children: ( - <> -

サヤちゃんでも分からないなんて…もうお手上げだ!

- - ) - } - ]} - /> -

- すると、悩んでいる村人たちのもとに、悪魔の助手の 🐶{' '} - ミニオンがやってきました。 -

- -

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

- - ) - }, - { - type: 'crying', - children: ( - <> -

おお、ミニオン!お願いだ、ヒントを教えてくれ!

- - ) - }, - { - type: 'dog', - children: ( - <> -

- 分かりました、ではまず、計算箱の「 - 条件分岐の機能 ↕️ - 」について教えましょう。 -

- - ) - }, - { - type: 'thinking', - children: ( - <> -

- 「条件分岐の機能 ↕️ - 」だって?何だそりゃ? -

- - ) - } - ]} - /> - - ) - }, - { - title: <>条件分岐の機能, - content: ( - <> - -

まず、こちらの計算箱をご覧ください。

- - ) - } - ]} - /> - - 「条件分岐の機能 ↕️」がある計算箱 - - -

なんだこれは?

-
    - - 左側に {' '} - {' '} - {' '} - という3種類の印があり、 - - - それぞれ {' '} - {' '} - {' '} - が入っている。 - -
- - ) - }, - { - type: 'dog', - children: ( - <> -

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

-

- 具体例で説明したほうが分かりやすいと思うので、 - - {' '} - {' '} - {' '} - に何か適当な数字を入れてみてください! - -

- - ) - }, - { - type: 'thinking', - children: ( - <> -

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

-

- これで、 - - を押すとどうなるのかな? -

- - ) - } - ]} - /> - - -

- になった! -

- - ) - }, - { - type: 'dog', - children: ( - <> -

では、どうしてこうなったか説明しますね!

- - ) - } - ]} - /> - - ) - }, - { - title: ( - <> - 真ん中が かどうか - - ), - content: ( - <> - -

- 「条件分岐の機能 ↕️ - 」はまず、 - - {' '} - に入っている数字が かどうか - - チェックします。 -

- - ) - } - ]} - /> - - -

- {' '} - に入っている数字は なので、{' '} - - ではないよ。 - -

- - ) - }, - { - type: 'dog', - children: ( - <> -

- そうですね。このように真ん中が{' '} - ではない場合、 - - {' '} - に入っている数字が最終的に残るのです。 - -

- - ) - } - ]} - /> - - - - に入っていた{' '} - が残る - - -

- なるほど、だから が残るのか! -

- - ) - } - ]} - /> - - ) - }, - { - type: 'yesNoQuiz', - title: ( - <> - - - ), - content: ( - <> - -

- では、もうひとつ例を紹介します。こちらは、 - {' '} - にしてみましょう。こちらの計算箱をご覧ください。 -

- - ) - } - ]} - /> - - -

- 質問: これを - {' '} - すると、最終的に以下のようになるでしょうか? -

- - ) - } - ]} - /> - - - - ) - }, - { - title: ( - <> - - - ), - content: ( - <> - -

- - 残るのは ではなく、 - になります。 - -

- - ) - } - ]} - /> - - -

どうしてこうなったか説明しましょう。

-

- こちらも、真ん中の数字が {' '} - かどうかチェックします。 -

- - ) - } - ]} - /> - - -

- 今回は真ん中が {' '} - ですね。この場合は前回と逆で、 - - {' '} - に入っている数字が最終的に残ります。 - -

- - ) - } - ]} - /> - - - - に入っていた{' '} - が残る - - -

なるほど…

- - ) - } - ]} - /> - - ) - }, - { - type: 'summary', - title: ( - <> - - - ), - content: ( - <> -

- まとめると、この「 - 条件分岐の機能 ↕️ - 」の法則は以下の通りです。 -

- - 「条件分岐の機能 ↕️」がある計算箱 - -

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

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

- なるほど、「 - - 真ん中が かどうか? - - 」という「 - 条件」によって上下に「 - 分岐」するから、「 - 条件分岐の機能 ↕️ - 」なのか。 -

- - ) - } - ]} - /> - - ) - }, - { - title: <>繰り返しの機能と関連がある, - content: ( - <> - -

- この「 - 条件分岐の機能 ↕️ - 」は、 - - 実は計算箱にもともと備わっていた隠れ機能 - - なんです。 -

- - ) - } - ]} - /> - 計算箱に備わっていた隠れ機能} - /> - -

- へー、そんなこと、ラムダ村の俺らは誰も知らなかったぞ! -

- - ) - }, - { - type: 'dog', - children: ( - <> -

- そうなんです。「 - 条件分岐の機能 ↕️ - 」は - - あまり役に立たないので、いつしか忘れ去られてしまった - - のです。 -

- - ) - }, - { - type: 'thinking', - children: ( - <> -

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

- - ) - }, - { - type: 'dog', - children: ( - <> -

- しかし、この「 - 条件分岐の機能 ↕️ - 」は、 - - 実は「 - 繰り返しの機能 🔁 - 」と関連がある - - のです。 -

- - ) - } - ]} - /> - - 「条件分岐の機能 ↕️ - 」は、 -
繰り返しの機能 🔁 - 」と関連がある - - } - /> - -

え、そうなの?

- - ) - }, - { - type: 'dog', - children: ( - <> -

- はい。ここが重要なのですが…村人のみなさんは「 - 繰り返しの機能 🔁 - 」を弁当箱で再現できずに苦労していましたよね。 -

- - ) - }, - { - type: 'sad', - children: ( - <> -

うん、どうしていいか全然分からない…

- - ) - }, - { - type: 'dog', - children: ( - <> -

- 実は、「繰り返しの機能{' '} - 🔁 - 」を弁当箱で再現する一番の近道は、まず「 - 条件分岐の機能 ↕️ - 」を弁当箱で再現することなんです。 -

- - ) - } - ]} - /> - , - ↕️, - , - 🍱, - - ]} - description={ - <> - 「条件分岐の機能 ↕️ - 」を -
- 弁当箱で再現できれば… - - } - /> - - , - 🔁, - , - 🍱, - - ]} - description={ - <> - 「繰り返しの機能 🔁 - 」も -
- 弁当箱で再現できる! - - } - /> - -

なんと!

- - ) - }, - { - type: 'dog', - children: ( - <> -

- だからまずは、「条件分岐の機能{' '} - ↕️ - 」を弁当箱で再現する、という問題にチャレンジしてみてください! -

-

- これが解ければ、「繰り返しの機能{' '} - 🔁 - 」を弁当箱で再現するのに一歩近づきますよ。 -

- - ) - } - ]} - /> - - 「条件分岐の機能 ↕️」を… - - - - 弁当箱で再現できたら… - - } - /> - - - 「繰り返しの機能 🔁 - 」を -
- 再現するのに一歩近づく! -
- -

そうか。よーし、やってみよう!

- - ) - } - ]} - /> -

- というわけで、次のページでは、「条件分岐の機能{' '} - ↕️」を弁当箱で再現してみます。次に進みましょう! -

- - - ) - } - ]} - /> -) diff --git a/src/contents/12.jp.tsx b/src/contents/12.jp.tsx index 5f4ca258b..9c92a5e33 100644 --- a/src/contents/12.jp.tsx +++ b/src/contents/12.jp.tsx @@ -1,4 +1,882 @@ import React from 'react' import EpisodeCardList from 'src/components/EpisodeCardList' +import { P, Strong, Em, Ul, UlLi } from 'src/components/ContentTags' +import H from 'src/components/H' +import BubbleQuotes from 'src/components/BubbleQuotes' +import EmojiNumber from 'src/components/EmojiNumber' +import EmojiSeparator from 'src/components/EmojiSeparator' +import CustomEmoji from 'src/components/CustomEmoji' +import ExpressionRunnerSeparator from 'src/components/ExpressionRunnerSeparator' +import ExpressionRunnerCaptionOnly from 'src/components/ExpressionRunnerCaptionOnly' +import TwoColGrid from 'src/components/TwoColGrid' +import Emoji from 'src/components/Emoji' +import InlineBorder from 'src/components/InlineBorder' +import * as R from 'src/components/Runners' +import NextLessonButton from 'src/components/NextLessonButton' -export default () => +export default () => ( + 条件分岐の再現, + content: ( + <> +

+ 村人たちは与えられたヒントをもとに、「 + 条件分岐の機能 ↕️ + 」を弁当箱で再現しようとしていました。 +

+ + 「条件分岐の機能 ↕️」を… + + + + 弁当箱で再現できる? + + } + /> + +

+ 復習すると、上の計算箱は、 + + もし に{' '} + を入れたら下の{' '} + が残り… + +

+ + ) + } + ]} + /> + + {' '} + を入れた場合… + + + + に入っている{' '} + が残る + + +

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

+ + ) + } + ]} + /> + + {' '} + 以外の数字を入れた場合… + + + + に入っている{' '} + が残る + + +

+ これを弁当箱で再現するには、どうすればいいんだろう…? +

+ + ) + } + ]} + /> + + ) + }, + { + title: <>サヤちゃんの案, + content: ( + <> +

するといつものように、サヤちゃんが何かひらめいたようです。

+ +

サヤもちょっと考えてみた!これを見てくれる?

+ + ) + } + ]} + /> + + 「条件分岐の機能 ↕️」を… + + + + 👧🏻 弁当箱で再現してみた! + + +

なんと!もうひらめいたの?

+ + ) + }, + { + type: 'saya', + children: ( + <> +

+ うん! + + まず、一番下の「 + + {' '} + に変換できる弁当箱 + + 」のところに、 + + こちらの {' '} + に変換できる弁当箱 + + を入れてみるね。 + +

+ + + +

+ 入れてみると次のようになるよ。 + +

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

+ {' '} + に変換できる弁当箱が残った! +

+ + ) + }, + { + type: 'saya', + children: ( + <> +

+ うん、これって「条件分岐の機能{' '} + ↕️」を使ったときと同じだよね? +

+ + ) + } + ]} + /> +

+ 「条件分岐の機能 ↕️」を使った場合: +

+ + {' '} + を入れた場合… + + + + に入っている{' '} + が残る + +

+ 👧🏻 サヤの弁当箱を使った場合: +

+ + 一番下に に変換できる +
+ 弁当箱を入れた場合 +
+ + + が残る + + +

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

+ + ) + } + ]} + /> + + ) + }, + { + title: ( + <> + 以外の数字を入れた場合 + + ), + content: ( + <> + +

+ じゃあ、次は{' '} + + に変換できる弁当箱を{' '} + に入れてみる + + ね! +

+ + + +

+ 入れてみると次のようになるよ。 + +

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

+ おお、今度は先ほどと逆に、{' '} + {' '} + に変換できる弁当箱が残った! +

+ + ) + }, + { + type: 'saya', + children: ( + <> +

+ これも、「条件分岐の機能{' '} + ↕️」を使ったときと同じだよね? +

+ + ) + } + ]} + /> +

+ 「条件分岐の機能 ↕️」を使った場合: +

+ + {' '} + を入れた場合… + + + + に入っている{' '} + が残る + +

+ 👧🏻 サヤの弁当箱を使った場合: +

+ + 一番下に に変換できる +
+ 弁当箱を入れた場合 +
+ + + が残る + + +

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

+ + ) + } + ]} + /> + + ) + }, + { + title: ( + <> + {' '} + {' '} + 全てを埋める + + ), + content: ( + <> + +

+ とういうことは、やっぱりサヤちゃんの弁当箱が、「 + 条件分岐の機能 ↕️ + 」の再現としては正解なのかな? +

+ + ) + } + ]} + /> + + 「条件分岐の機能 ↕️」を… + + + + 👧🏻 弁当箱で再現してみた! + + +

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

+
    + + + {' '} + {' '} + {' '} + の全てを埋めてみて、 + + + + + それをサヤの弁当箱でも再現できるかやってみるよ! + + +
+ + ) + }, + { + type: 'thinking', + children: ( + <> +

ん?どういうこと?

+ + ) + }, + { + type: 'saya', + children: ( + <> +

たとえば、

+
    + + + 計算箱の {' '} + {' '} + に、 + + + + + それぞれ {' '} + {' '} + を入れた場合… + + + + 最終的に が残るよね。 + +
+ + ) + } + ]} + /> + + {' '} + ではないので… + + + + に入っていた{' '} + が残る + + +

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

+

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

+ + ) + } + ]} + /> + + {' '} + {' '} + に{' '} + {' '} + を入れてみた + + + + + に変換できる弁当箱 +
+ になれば成功 🎉 +
+
+ +

+ では、 + {' '} + {' '} + にそれぞれ変換できる弁当箱を入れてみたよ。(黄色の部分) +

+

+ というわけで、 + +

+
    + + 複雑なので、目で追わなくても大丈夫だよ! + + + ちょっと時間がかかるので、待てない方は下の「 + + → + + 」を押してね! + +
+ + ) + } + ]} + /> + + 黄色の部分は、上から順に +
+ に変換できる弁当箱、 +
+ に変換できる弁当箱、 +
+ に変換できる弁当箱。 +
+ +

+ 最終的に残ったこちらの弁当箱は、 + に変換できる弁当箱だね。 +

+ + + +

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

+ + ) + }, + { + type: 'celebrate', + children: ( + <> +

やったー、さすがサヤちゃん!

+ + ) + } + ]} + /> + + ) + }, + { + type: 'summary', + title: ( + <> + + + ), + content: ( + <> + +

お見事!サヤさん、正解です!

+ + ) + }, + { + type: 'saya', + children: ( + <> +

やったー!

+ + ) + }, + { + type: 'dog', + children: ( + <> +

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

+ + ) + } + ]} + /> + + 「条件分岐の機能 ↕️」は… + + + + 以下の法則に当てはまる弁当箱で +
+ 再現できる +
+ +

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

+ + ) + } + ]} + /> + , + ↕️, + , + 🍱, + ↕️ + ]} + description={ + <> + 計算箱の「条件分岐の機能 ↕️ + 」も、 +
+ 弁当箱で「再現」することができる + + } + /> + + ) + }, + { + title: <>繰り返しの機能は?, + content: ( + <> + +

うーん、条件分岐の機能を再現できたのはいいけど…

+

+ 俺たちがやらないといけないのは、「 + 繰り返しの機能 🔁 + 」を弁当箱で再現することだよね。 +

+ + ) + } + ]} + /> + + + を{' '} +
+ 繰り返す +
+ + } + right={ + <> + + を{' '} +
+ 繰り返す +
+ + } + /> + +

+ そうですね。しかし、上級その1でぼくが言ったことを思い出して下さい。 +

+

+ 「繰り返しの機能 🔁 + 」は、「 + 条件分岐の機能 ↕️ + 」と関連があるのです。 +

+ + ) + } + ]} + /> + + 「繰り返しの機能 🔁 + 」は、 +
条件分岐の機能 ↕️ + 」と関連がある + + } + /> + +

+ だから、先ほど「 + 条件分岐の機能 ↕️ + 」を弁当箱で再現したことによって、 +

+

+ みなさんは「繰り返しの機能{' '} + 🔁 + 」を弁当箱で再現するのに大きく近づいたのです。 +

+ + ) + } + ]} + /> + , + ↕️, + , + 🍱, + ↕️ + ]} + description={ + <> + 「条件分岐の機能 ↕️ + 」を +
+ 弁当箱で再現したことにより… + + } + /> + + , + 🔁, + , + 🍱, + + ]} + description={ + <> + 「繰り返しの機能 🔁 + 」を +
+ 弁当箱で再現するのに大きく近づいた! + + } + /> + +

うーん…そう言われても、どういうことやらさっぱり…

+ + ) + }, + { + type: 'dog', + children: ( + <> +

+ では、 + 次のページでまたヒントを出しましょう! +

+

というわけで、先に進んでみてください。

+ + ) + } + ]} + /> + + + ) + } + ]} + /> +) diff --git a/src/contents/12.v2.jp.tsx b/src/contents/12.v2.jp.tsx deleted file mode 100644 index 9c92a5e33..000000000 --- a/src/contents/12.v2.jp.tsx +++ /dev/null @@ -1,882 +0,0 @@ -import React from 'react' -import EpisodeCardList from 'src/components/EpisodeCardList' -import { P, Strong, Em, Ul, UlLi } from 'src/components/ContentTags' -import H from 'src/components/H' -import BubbleQuotes from 'src/components/BubbleQuotes' -import EmojiNumber from 'src/components/EmojiNumber' -import EmojiSeparator from 'src/components/EmojiSeparator' -import CustomEmoji from 'src/components/CustomEmoji' -import ExpressionRunnerSeparator from 'src/components/ExpressionRunnerSeparator' -import ExpressionRunnerCaptionOnly from 'src/components/ExpressionRunnerCaptionOnly' -import TwoColGrid from 'src/components/TwoColGrid' -import Emoji from 'src/components/Emoji' -import InlineBorder from 'src/components/InlineBorder' -import * as R from 'src/components/Runners' -import NextLessonButton from 'src/components/NextLessonButton' - -export default () => ( - 条件分岐の再現, - content: ( - <> -

- 村人たちは与えられたヒントをもとに、「 - 条件分岐の機能 ↕️ - 」を弁当箱で再現しようとしていました。 -

- - 「条件分岐の機能 ↕️」を… - - - - 弁当箱で再現できる? - - } - /> - -

- 復習すると、上の計算箱は、 - - もし に{' '} - を入れたら下の{' '} - が残り… - -

- - ) - } - ]} - /> - - {' '} - を入れた場合… - - - - に入っている{' '} - が残る - - -

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

- - ) - } - ]} - /> - - {' '} - 以外の数字を入れた場合… - - - - に入っている{' '} - が残る - - -

- これを弁当箱で再現するには、どうすればいいんだろう…? -

- - ) - } - ]} - /> - - ) - }, - { - title: <>サヤちゃんの案, - content: ( - <> -

するといつものように、サヤちゃんが何かひらめいたようです。

- -

サヤもちょっと考えてみた!これを見てくれる?

- - ) - } - ]} - /> - - 「条件分岐の機能 ↕️」を… - - - - 👧🏻 弁当箱で再現してみた! - - -

なんと!もうひらめいたの?

- - ) - }, - { - type: 'saya', - children: ( - <> -

- うん! - - まず、一番下の「 - - {' '} - に変換できる弁当箱 - - 」のところに、 - - こちらの {' '} - に変換できる弁当箱 - - を入れてみるね。 - -

- - - -

- 入れてみると次のようになるよ。 - -

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

- {' '} - に変換できる弁当箱が残った! -

- - ) - }, - { - type: 'saya', - children: ( - <> -

- うん、これって「条件分岐の機能{' '} - ↕️」を使ったときと同じだよね? -

- - ) - } - ]} - /> -

- 「条件分岐の機能 ↕️」を使った場合: -

- - {' '} - を入れた場合… - - - - に入っている{' '} - が残る - -

- 👧🏻 サヤの弁当箱を使った場合: -

- - 一番下に に変換できる -
- 弁当箱を入れた場合 -
- - - が残る - - -

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

- - ) - } - ]} - /> - - ) - }, - { - title: ( - <> - 以外の数字を入れた場合 - - ), - content: ( - <> - -

- じゃあ、次は{' '} - - に変換できる弁当箱を{' '} - に入れてみる - - ね! -

- - - -

- 入れてみると次のようになるよ。 - -

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

- おお、今度は先ほどと逆に、{' '} - {' '} - に変換できる弁当箱が残った! -

- - ) - }, - { - type: 'saya', - children: ( - <> -

- これも、「条件分岐の機能{' '} - ↕️」を使ったときと同じだよね? -

- - ) - } - ]} - /> -

- 「条件分岐の機能 ↕️」を使った場合: -

- - {' '} - を入れた場合… - - - - に入っている{' '} - が残る - -

- 👧🏻 サヤの弁当箱を使った場合: -

- - 一番下に に変換できる -
- 弁当箱を入れた場合 -
- - - が残る - - -

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

- - ) - } - ]} - /> - - ) - }, - { - title: ( - <> - {' '} - {' '} - 全てを埋める - - ), - content: ( - <> - -

- とういうことは、やっぱりサヤちゃんの弁当箱が、「 - 条件分岐の機能 ↕️ - 」の再現としては正解なのかな? -

- - ) - } - ]} - /> - - 「条件分岐の機能 ↕️」を… - - - - 👧🏻 弁当箱で再現してみた! - - -

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

-
    - - - {' '} - {' '} - {' '} - の全てを埋めてみて、 - - - - - それをサヤの弁当箱でも再現できるかやってみるよ! - - -
- - ) - }, - { - type: 'thinking', - children: ( - <> -

ん?どういうこと?

- - ) - }, - { - type: 'saya', - children: ( - <> -

たとえば、

-
    - - - 計算箱の {' '} - {' '} - に、 - - - - - それぞれ {' '} - {' '} - を入れた場合… - - - - 最終的に が残るよね。 - -
- - ) - } - ]} - /> - - {' '} - ではないので… - - - - に入っていた{' '} - が残る - - -

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

-

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

- - ) - } - ]} - /> - - {' '} - {' '} - に{' '} - {' '} - を入れてみた - - - - - に変換できる弁当箱 -
- になれば成功 🎉 -
-
- -

- では、 - {' '} - {' '} - にそれぞれ変換できる弁当箱を入れてみたよ。(黄色の部分) -

-

- というわけで、 - -

-
    - - 複雑なので、目で追わなくても大丈夫だよ! - - - ちょっと時間がかかるので、待てない方は下の「 - - → - - 」を押してね! - -
- - ) - } - ]} - /> - - 黄色の部分は、上から順に -
- に変換できる弁当箱、 -
- に変換できる弁当箱、 -
- に変換できる弁当箱。 -
- -

- 最終的に残ったこちらの弁当箱は、 - に変換できる弁当箱だね。 -

- - - -

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

- - ) - }, - { - type: 'celebrate', - children: ( - <> -

やったー、さすがサヤちゃん!

- - ) - } - ]} - /> - - ) - }, - { - type: 'summary', - title: ( - <> - - - ), - content: ( - <> - -

お見事!サヤさん、正解です!

- - ) - }, - { - type: 'saya', - children: ( - <> -

やったー!

- - ) - }, - { - type: 'dog', - children: ( - <> -

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

- - ) - } - ]} - /> - - 「条件分岐の機能 ↕️」は… - - - - 以下の法則に当てはまる弁当箱で -
- 再現できる -
- -

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

- - ) - } - ]} - /> - , - ↕️, - , - 🍱, - ↕️ - ]} - description={ - <> - 計算箱の「条件分岐の機能 ↕️ - 」も、 -
- 弁当箱で「再現」することができる - - } - /> - - ) - }, - { - title: <>繰り返しの機能は?, - content: ( - <> - -

うーん、条件分岐の機能を再現できたのはいいけど…

-

- 俺たちがやらないといけないのは、「 - 繰り返しの機能 🔁 - 」を弁当箱で再現することだよね。 -

- - ) - } - ]} - /> - - - を{' '} -
- 繰り返す -
- - } - right={ - <> - - を{' '} -
- 繰り返す -
- - } - /> - -

- そうですね。しかし、上級その1でぼくが言ったことを思い出して下さい。 -

-

- 「繰り返しの機能 🔁 - 」は、「 - 条件分岐の機能 ↕️ - 」と関連があるのです。 -

- - ) - } - ]} - /> - - 「繰り返しの機能 🔁 - 」は、 -
条件分岐の機能 ↕️ - 」と関連がある - - } - /> - -

- だから、先ほど「 - 条件分岐の機能 ↕️ - 」を弁当箱で再現したことによって、 -

-

- みなさんは「繰り返しの機能{' '} - 🔁 - 」を弁当箱で再現するのに大きく近づいたのです。 -

- - ) - } - ]} - /> - , - ↕️, - , - 🍱, - ↕️ - ]} - description={ - <> - 「条件分岐の機能 ↕️ - 」を -
- 弁当箱で再現したことにより… - - } - /> - - , - 🔁, - , - 🍱, - - ]} - description={ - <> - 「繰り返しの機能 🔁 - 」を -
- 弁当箱で再現するのに大きく近づいた! - - } - /> - -

うーん…そう言われても、どういうことやらさっぱり…

- - ) - }, - { - type: 'dog', - children: ( - <> -

- では、 - 次のページでまたヒントを出しましょう! -

-

というわけで、先に進んでみてください。

- - ) - } - ]} - /> - - - ) - } - ]} - /> -) diff --git a/src/contents/13.jp.tsx b/src/contents/13.jp.tsx index 5f4ca258b..8e632cb0f 100644 --- a/src/contents/13.jp.tsx +++ b/src/contents/13.jp.tsx @@ -1,4 +1,1140 @@ import React from 'react' import EpisodeCardList from 'src/components/EpisodeCardList' +import { P, Strong, Em, Ul, UlLi } from 'src/components/ContentTags' +import H from 'src/components/H' +import BubbleQuotes from 'src/components/BubbleQuotes' +import Emoji from 'src/components/Emoji' +import EmojiNumber from 'src/components/EmojiNumber' +import ExpressionRunnerSeparator from 'src/components/ExpressionRunnerSeparator' +import CustomEmoji from 'src/components/CustomEmoji' +import EmojiForLetter from 'src/components/EmojiForLetter' +import EmojiSeparator from 'src/components/EmojiSeparator' +import TwoColGrid from 'src/components/TwoColGrid' +import InlineBorder from 'src/components/InlineBorder' +import * as R from 'src/components/Runners' +import ExpressionRunnerCaptionOnly from 'src/components/ExpressionRunnerCaptionOnly' +import NextLessonButton from 'src/components/NextLessonButton' -export default () => +export default () => ( + とても複雑な弁当箱, + content: ( + <> + +

+ では、これから「繰り返しの機能{' '} + 🔁 + 」を弁当箱で再現するのに役立つヒントを出していきますね。 +

+ + ) + } + ]} + /> + + + を{' '} +
+ 繰り返す +
+ + } + right={ + <> + + を{' '} +
+ 繰り返す +
+ + } + /> + +

まずは、こちらの弁当箱をご覧ください。

+ + ) + } + ]} + /> + + +
+ するとどうなる? +
+ +

めちゃくちゃ複雑な弁当箱だなあ…

+ + ) + }, + { + type: 'dog', + children: ( + <> +

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

+ + ) + }, + { + type: 'sad', + children: ( + <> +

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

+ + ) + }, + { + type: 'saya', + children: ( + <> +

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

+ + 👧🏻 結果は {' '} + になると思う! + + + ) + }, + { + type: 'dog', + children: ( + <> +

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

+ + ) + }, + { + type: 'surprised', + children: ( + <> +

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

+

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

+ + ) + }, + { + type: 'saya', + children: ( + <> +

+ ううん、そんなことはしてないよ。じゃあ、どうやって解いたかを教えてあげるね! +

+ + ) + } + ]} + /> + + ) + }, + { + title: <>計算箱に置き換える, + content: ( + <> + +

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

+ + ) + } + ]} + /> + + 一番上の部分と、 +
+ 右の真ん中の部分に注目 +
+ +

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

+ + + +

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

+ + + + + ) + }, + { + type: 'saya', + children: ( + <> +

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

+ + ) + } + ]} + /> + + それぞれ {' '} + に置き換えてみる + + +

なるほど…!

+ + ) + }, + { + type: 'saya', + children: ( + <> +

次に、この右の黄色の部分に注目してみて!

+ + ) + } + ]} + /> + 右の部分に注目 + +

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

+ + + がある弁当箱 + + + ) + }, + { + type: 'saya', + children: ( + <> +

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

+ + ) + } + ]} + /> + + に置き換えてみる + + +

なるほど、だいぶシンプルになってきたぞ…

+ + ) + }, + { + type: 'saya', + children: ( + <> +

最後に、右下の全ての部分に注目してみて!

+ + ) + } + ]} + /> + 右下の全ての部分に注目 + +

+ そういればこれは、前回やった「 + 条件分岐の機能 ↕️ + 」に変換できる弁当箱と同じだ! +

+ + 「条件分岐の機能 ↕️ + 」に変換できる弁当箱 + + + ) + }, + { + type: 'saya', + children: ( + <> +

+ そう!だから、右下の部分を「 + 条件分岐の機能 ↕️ + 」に置き換えるんだ。 +

+ + 「条件分岐の機能 ↕️ + 」に置き換える + +

+ 以下のように置き換えてみるよ。 + + 複雑なので、↓の置き換え方は読み飛ばしても大丈夫! + +

+
    + + 上にある {' '} + は{' '} + の部分へ + + + その下にある は{' '} + の部分へ + + + 一番下の は{' '} + の部分へ + +
+

置き換えるとこうなります!

+ + ) + } + ]} + /> + + 「条件分岐の機能 ↕️ + 」
+ の部分を置き換えた後 +
+ +

なんと、超シンプルになった!

+ + ) + } + ]} + /> + + ) + }, + { + title: <>あとは実行するだけ, + content: ( + <> + +

+ あとは、これを + {' '} + するだけだよ。というわけで、 + +

+ + ) + } + ]} + /> + + +

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

+

+ +

+ + ) + } + ]} + /> + + +

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

+ + 👧🏻 結果は {' '} + になった! + + + ) + }, + { + type: 'thinking', + children: ( + <> +

たしかに…!

+ + ) + } + ]} + /> + + ) + }, + { + title: <>そのまま実行していたら?, + content: ( + <> + +

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

+

+ サヤちゃんは、もともとの弁当箱を、それぞれの要素に対応する計算箱に置き換えてから実行したけど… +

+ + ) + } + ]} + /> + + 🍱 もともとの弁当箱を… + + + + 対応する計算箱に置き換える + + +

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

+

とりあえず、確かめてみるか。

+ + ) + }, + { + type: 'dog', + children: ( + <> +

+ では、もともとの弁当箱を + + してみましょう! +

+
    + + ステップが非常に多いので、 + 3倍速で早送りします!{' '} + + + + + 早送り中は、目に優しくなるように弁当箱を半透明にしています。 + + + + 待てない方は、「 + + → + + 」を押して下さい! + +
+ + ) + } + ]} + /> + + +

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

+ + + +

+ つまり、 + {' '} + すると、結果は になるのです。 +

+ + + ) + }, + { + type: 'surprised', + children: ( + <> +

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

+

+ ということは、サヤちゃんのやり方は間違ってなかったのか… +

+ + ) + } + ]} + /> + + ) + }, + { + type: 'summary', + title: <>ここまでの振り返り, + content: ( + <> + +

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

+

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

+ + ) + } + ]} + /> + + 🍱 弁当箱の一部分を… + + + + 同じ効果がある 計算箱と置き換える + + +

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

+ + ) + } + ]} + /> + 🍱, + , + + ]} + description={<>弁当箱の一部分を計算箱と置き換えても…} + /> + + + + 実行したら +
+ 結果は同じになる! +
+
+ +

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

+ + ) + }, + { + type: 'dog', + children: ( + <> +

+ はい。 + + 複雑な弁当箱は、それぞれの部分をシンプルな計算箱に置き換えると分かりやすくなります。 + + 結果は変わらないのだから、積極的に置き換えていくべき + + + ということですね。 +

+ + ) + } + ]} + /> + + 🍱 複雑な弁当箱は… + + + + それぞれの部分を +
+ シンプルな計算箱に置き換えると +
+ 分かりやすくなる +
+ + + + ちなみに、どちらの場合も +
+ 実行結果は になる +
+
+ + ) + }, + { + title: <>繰り返しの機能との繋がり, + content: ( + <> + +

+ でもさあ…質問なんだけど、 + + この話って、「 + 繰り返しの機能 🔁 + 」の何の関係があるの? + +

+ + ) + } + ]} + /> + + + を{' '} +
+ 繰り返す +
+ + } + right={ + <> + + を{' '} +
+ 繰り返す +
+ + } + /> +

すると、サヤちゃんがまた何かに気づいたようです。

+ +

+ ねえねえ、面白いことを発見したんだけど、ちょっと見てくれる? +

+

こちらが、先ほどの弁当箱だけど…

+ + ) + } + ]} + /> + 先ほどの弁当箱 + +

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

+ + ) + } + ]} + /> + + 黄色が追加した部分 + + +

ふむふむ…何やら複雑になったなあ。

+ + ) + }, + { + type: 'saya', + children: ( + <> +

+ では、この弁当箱を + してみて! +

+

(次の回で早送りするけど、今回は省略します!)

+ + ) + } + ]} + /> + + +

+ 結果は になったけど…? +

+ + ) + }, + { + type: 'saya', + children: ( + <> +

+ この って、 + + 実行前の弁当箱に入っていたふたつの数字である、 + と{' '} + を足した数 + + だよね? +

+ + ) + } + ]} + /> + + 黄色の部分の と{' '} + を足した数 + + +

確かにそうだな…

+ + ) + }, + { + type: 'saya', + children: ( + <> +

+ じゃあたとえば、 + + もともとの弁当箱に入ってる {' '} + と の部分を… + +

+

+ + と{' '} + {' '} + にそれぞれ変えてみたらどうなる + + と思う? +

+ , + , + + ]} + noBottomMargin + /> + , + , + + ]} + noTopMargin + description={<>数字を変えてみたらどうなる?} + /> +

+ 下の弁当箱で変えてみたので、 + を押してみて! +

+ + ) + } + ]} + /> + + + 数字の部分を と{' '} + に変えてみた + + + +

+ 今度は、 + になった! +

+ + ) + }, + { + type: 'saya', + children: ( + <> +

+ これは、 + {' '} + を足した結果だよね。 +

+ + ) + }, + { + type: 'thinking', + children: ( + <> +

+ ということは…サヤちゃんの弁当箱は下のように、 + 🅰️🅱️{' '} + に入っている数字を足し算してくれるのかな? +

+ + ) + } + ]} + /> + + + 🅰️ 🅱️{' '} + を計算してくれる?🤔 + + + +

でも、思い出してみて!

+

+ 「繰り返しの機能 🔁 + 」を使っても、以下のように同じように + 🅰️ + {' '} + 🅱️{' '} + を計算することができるよね。 +

+ + ) + } + ]} + /> + + 🅰️ 🅱️ を計算 + + +

+ たとえば、以下のようにすれば {' '} + {' '} + を計算できるよね。 +

+ 以下のようにすれば… + + + + + {' '} + を計算できる + + + ) + }, + { + type: 'thinking', + children: ( + <> +

確かに。とういうことはもしかして…

+

+ 以下のような「繰り返しの機能{' '} + 🔁」を使った計算箱は… +

+ + ) + } + ]} + /> + + 「繰り返しの機能 🔁 + 」を使った計算箱は… + + +

+ さっきのサヤちゃんが考えた弁当箱で「 + 再現」できているのか…? +

+ + ) + } + ]} + /> + + 以下の弁当箱で「再現」できている? + 🤔 + + +

+ もしそうなら…「繰り返しの機能{' '} + 🔁 + 」を弁当箱で再現できた、ということになるぞ! +

+ + ) + } + ]} + /> + , + 🔁, + , + 🍱, + 🔁 + ]} + description={ + <> + 「繰り返しの機能 🔁 + 」を +
+ 弁当箱で再現できたかも? + + } + /> + +

+ では、本当に再現できたのかどうか、次のページで確かめてみましょう!先に進んでみてください! +

+ + ) + } + ]} + /> + + + ) + } + ]} + /> +) diff --git a/src/contents/13.v2.jp.tsx b/src/contents/13.v2.jp.tsx deleted file mode 100644 index 8e632cb0f..000000000 --- a/src/contents/13.v2.jp.tsx +++ /dev/null @@ -1,1140 +0,0 @@ -import React from 'react' -import EpisodeCardList from 'src/components/EpisodeCardList' -import { P, Strong, Em, Ul, UlLi } from 'src/components/ContentTags' -import H from 'src/components/H' -import BubbleQuotes from 'src/components/BubbleQuotes' -import Emoji from 'src/components/Emoji' -import EmojiNumber from 'src/components/EmojiNumber' -import ExpressionRunnerSeparator from 'src/components/ExpressionRunnerSeparator' -import CustomEmoji from 'src/components/CustomEmoji' -import EmojiForLetter from 'src/components/EmojiForLetter' -import EmojiSeparator from 'src/components/EmojiSeparator' -import TwoColGrid from 'src/components/TwoColGrid' -import InlineBorder from 'src/components/InlineBorder' -import * as R from 'src/components/Runners' -import ExpressionRunnerCaptionOnly from 'src/components/ExpressionRunnerCaptionOnly' -import NextLessonButton from 'src/components/NextLessonButton' - -export default () => ( - とても複雑な弁当箱, - content: ( - <> - -

- では、これから「繰り返しの機能{' '} - 🔁 - 」を弁当箱で再現するのに役立つヒントを出していきますね。 -

- - ) - } - ]} - /> - - - を{' '} -
- 繰り返す -
- - } - right={ - <> - - を{' '} -
- 繰り返す -
- - } - /> - -

まずは、こちらの弁当箱をご覧ください。

- - ) - } - ]} - /> - - -
- するとどうなる? -
- -

めちゃくちゃ複雑な弁当箱だなあ…

- - ) - }, - { - type: 'dog', - children: ( - <> -

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

- - ) - }, - { - type: 'sad', - children: ( - <> -

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

- - ) - }, - { - type: 'saya', - children: ( - <> -

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

- - 👧🏻 結果は {' '} - になると思う! - - - ) - }, - { - type: 'dog', - children: ( - <> -

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

- - ) - }, - { - type: 'surprised', - children: ( - <> -

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

-

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

- - ) - }, - { - type: 'saya', - children: ( - <> -

- ううん、そんなことはしてないよ。じゃあ、どうやって解いたかを教えてあげるね! -

- - ) - } - ]} - /> - - ) - }, - { - title: <>計算箱に置き換える, - content: ( - <> - -

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

- - ) - } - ]} - /> - - 一番上の部分と、 -
- 右の真ん中の部分に注目 -
- -

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

- - - -

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

- - - - - ) - }, - { - type: 'saya', - children: ( - <> -

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

- - ) - } - ]} - /> - - それぞれ {' '} - に置き換えてみる - - -

なるほど…!

- - ) - }, - { - type: 'saya', - children: ( - <> -

次に、この右の黄色の部分に注目してみて!

- - ) - } - ]} - /> - 右の部分に注目 - -

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

- - - がある弁当箱 - - - ) - }, - { - type: 'saya', - children: ( - <> -

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

- - ) - } - ]} - /> - - に置き換えてみる - - -

なるほど、だいぶシンプルになってきたぞ…

- - ) - }, - { - type: 'saya', - children: ( - <> -

最後に、右下の全ての部分に注目してみて!

- - ) - } - ]} - /> - 右下の全ての部分に注目 - -

- そういればこれは、前回やった「 - 条件分岐の機能 ↕️ - 」に変換できる弁当箱と同じだ! -

- - 「条件分岐の機能 ↕️ - 」に変換できる弁当箱 - - - ) - }, - { - type: 'saya', - children: ( - <> -

- そう!だから、右下の部分を「 - 条件分岐の機能 ↕️ - 」に置き換えるんだ。 -

- - 「条件分岐の機能 ↕️ - 」に置き換える - -

- 以下のように置き換えてみるよ。 - - 複雑なので、↓の置き換え方は読み飛ばしても大丈夫! - -

-
    - - 上にある {' '} - は{' '} - の部分へ - - - その下にある は{' '} - の部分へ - - - 一番下の は{' '} - の部分へ - -
-

置き換えるとこうなります!

- - ) - } - ]} - /> - - 「条件分岐の機能 ↕️ - 」
- の部分を置き換えた後 -
- -

なんと、超シンプルになった!

- - ) - } - ]} - /> - - ) - }, - { - title: <>あとは実行するだけ, - content: ( - <> - -

- あとは、これを - {' '} - するだけだよ。というわけで、 - -

- - ) - } - ]} - /> - - -

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

-

- -

- - ) - } - ]} - /> - - -

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

- - 👧🏻 結果は {' '} - になった! - - - ) - }, - { - type: 'thinking', - children: ( - <> -

たしかに…!

- - ) - } - ]} - /> - - ) - }, - { - title: <>そのまま実行していたら?, - content: ( - <> - -

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

-

- サヤちゃんは、もともとの弁当箱を、それぞれの要素に対応する計算箱に置き換えてから実行したけど… -

- - ) - } - ]} - /> - - 🍱 もともとの弁当箱を… - - - - 対応する計算箱に置き換える - - -

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

-

とりあえず、確かめてみるか。

- - ) - }, - { - type: 'dog', - children: ( - <> -

- では、もともとの弁当箱を - - してみましょう! -

-
    - - ステップが非常に多いので、 - 3倍速で早送りします!{' '} - - - - - 早送り中は、目に優しくなるように弁当箱を半透明にしています。 - - - - 待てない方は、「 - - → - - 」を押して下さい! - -
- - ) - } - ]} - /> - - -

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

- - - -

- つまり、 - {' '} - すると、結果は になるのです。 -

- - - ) - }, - { - type: 'surprised', - children: ( - <> -

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

-

- ということは、サヤちゃんのやり方は間違ってなかったのか… -

- - ) - } - ]} - /> - - ) - }, - { - type: 'summary', - title: <>ここまでの振り返り, - content: ( - <> - -

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

-

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

- - ) - } - ]} - /> - - 🍱 弁当箱の一部分を… - - - - 同じ効果がある 計算箱と置き換える - - -

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

- - ) - } - ]} - /> - 🍱, - , - - ]} - description={<>弁当箱の一部分を計算箱と置き換えても…} - /> - - - - 実行したら -
- 結果は同じになる! -
-
- -

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

- - ) - }, - { - type: 'dog', - children: ( - <> -

- はい。 - - 複雑な弁当箱は、それぞれの部分をシンプルな計算箱に置き換えると分かりやすくなります。 - - 結果は変わらないのだから、積極的に置き換えていくべき - - - ということですね。 -

- - ) - } - ]} - /> - - 🍱 複雑な弁当箱は… - - - - それぞれの部分を -
- シンプルな計算箱に置き換えると -
- 分かりやすくなる -
- - - - ちなみに、どちらの場合も -
- 実行結果は になる -
-
- - ) - }, - { - title: <>繰り返しの機能との繋がり, - content: ( - <> - -

- でもさあ…質問なんだけど、 - - この話って、「 - 繰り返しの機能 🔁 - 」の何の関係があるの? - -

- - ) - } - ]} - /> - - - を{' '} -
- 繰り返す -
- - } - right={ - <> - - を{' '} -
- 繰り返す -
- - } - /> -

すると、サヤちゃんがまた何かに気づいたようです。

- -

- ねえねえ、面白いことを発見したんだけど、ちょっと見てくれる? -

-

こちらが、先ほどの弁当箱だけど…

- - ) - } - ]} - /> - 先ほどの弁当箱 - -

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

- - ) - } - ]} - /> - - 黄色が追加した部分 - - -

ふむふむ…何やら複雑になったなあ。

- - ) - }, - { - type: 'saya', - children: ( - <> -

- では、この弁当箱を - してみて! -

-

(次の回で早送りするけど、今回は省略します!)

- - ) - } - ]} - /> - - -

- 結果は になったけど…? -

- - ) - }, - { - type: 'saya', - children: ( - <> -

- この って、 - - 実行前の弁当箱に入っていたふたつの数字である、 - と{' '} - を足した数 - - だよね? -

- - ) - } - ]} - /> - - 黄色の部分の と{' '} - を足した数 - - -

確かにそうだな…

- - ) - }, - { - type: 'saya', - children: ( - <> -

- じゃあたとえば、 - - もともとの弁当箱に入ってる {' '} - と の部分を… - -

-

- - と{' '} - {' '} - にそれぞれ変えてみたらどうなる - - と思う? -

- , - , - - ]} - noBottomMargin - /> - , - , - - ]} - noTopMargin - description={<>数字を変えてみたらどうなる?} - /> -

- 下の弁当箱で変えてみたので、 - を押してみて! -

- - ) - } - ]} - /> - - - 数字の部分を と{' '} - に変えてみた - - - -

- 今度は、 - になった! -

- - ) - }, - { - type: 'saya', - children: ( - <> -

- これは、 - {' '} - を足した結果だよね。 -

- - ) - }, - { - type: 'thinking', - children: ( - <> -

- ということは…サヤちゃんの弁当箱は下のように、 - 🅰️🅱️{' '} - に入っている数字を足し算してくれるのかな? -

- - ) - } - ]} - /> - - - 🅰️ 🅱️{' '} - を計算してくれる?🤔 - - - -

でも、思い出してみて!

-

- 「繰り返しの機能 🔁 - 」を使っても、以下のように同じように - 🅰️ - {' '} - 🅱️{' '} - を計算することができるよね。 -

- - ) - } - ]} - /> - - 🅰️ 🅱️ を計算 - - -

- たとえば、以下のようにすれば {' '} - {' '} - を計算できるよね。 -

- 以下のようにすれば… - - - - - {' '} - を計算できる - - - ) - }, - { - type: 'thinking', - children: ( - <> -

確かに。とういうことはもしかして…

-

- 以下のような「繰り返しの機能{' '} - 🔁」を使った計算箱は… -

- - ) - } - ]} - /> - - 「繰り返しの機能 🔁 - 」を使った計算箱は… - - -

- さっきのサヤちゃんが考えた弁当箱で「 - 再現」できているのか…? -

- - ) - } - ]} - /> - - 以下の弁当箱で「再現」できている? - 🤔 - - -

- もしそうなら…「繰り返しの機能{' '} - 🔁 - 」を弁当箱で再現できた、ということになるぞ! -

- - ) - } - ]} - /> - , - 🔁, - , - 🍱, - 🔁 - ]} - description={ - <> - 「繰り返しの機能 🔁 - 」を -
- 弁当箱で再現できたかも? - - } - /> - -

- では、本当に再現できたのかどうか、次のページで確かめてみましょう!先に進んでみてください! -

- - ) - } - ]} - /> - - - ) - } - ]} - /> -) diff --git a/src/contents/14.jp.tsx b/src/contents/14.jp.tsx index 5f4ca258b..46ef7e8f8 100644 --- a/src/contents/14.jp.tsx +++ b/src/contents/14.jp.tsx @@ -1,4 +1,1268 @@ import React from 'react' import EpisodeCardList from 'src/components/EpisodeCardList' +import { P, Strong, Em, Ul, UlLi } from 'src/components/ContentTags' +import H from 'src/components/H' +import BubbleQuotes from 'src/components/BubbleQuotes' +import Emoji from 'src/components/Emoji' +import EmojiNumber from 'src/components/EmojiNumber' +import ExpressionRunnerSeparator from 'src/components/ExpressionRunnerSeparator' +import InlineBorder from 'src/components/InlineBorder' +import CustomEmoji from 'src/components/CustomEmoji' +import EmojiSeparator from 'src/components/EmojiSeparator' +import TwoColGrid from 'src/components/TwoColGrid' +import * as R from 'src/components/Runners' +import NextLessonButton from 'src/components/NextLessonButton' -export default () => +export default () => ( + +

前回では…

+ + ), + content: ( + <> +

+ 前回は、 + + 計算箱の「繰り返しの機能 🔁 + 」を、👧🏻{' '} + サヤちゃんが考えた以下の弁当箱を使えば再現できるかも? + + というところで終わりました。 +

+ + 「繰り返しの機能 🔁 + 」を使った計算箱は… + + + + 以下の弁当箱で「再現」できている? + 🤔 + +

今回は、これを実際に検証していきましょう!

+ + ) + }, + { + title: <>早送りしてみる, + content: ( + <> + +

+ では、前回同様 + + {' '} + 🅰️、 + 🅱️{' '} + + を入れてみるね。 +

+

+ 前回話した通り、 + + すると{' '} + になる + + よ。 +

+ + ) + } + ]} + /> + + に + + +

+ では、 + + これを今回は + {' '} + してみるね!早送りをすることで、どういう原理になっているかが分かるかも。 + +

+

+ 時間がかかるので、何度も止めながらやっていくよ。というわけで、 + +

+
    + + 複雑なので、目で追わなくても大丈夫だよ! + + + ちょっと時間がかかるので、待てない方は下の「 + + → + + 」を押してね! + +
+ + ) + } + ]} + /> + + +

めちゃくちゃ複雑だなあ…

+ + ) + }, + { + type: 'saya', + children: ( + <> +

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

+ + ) + } + ]} + /> + + 真ん中の黄色の部分に注目 + + +

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

+ + ) + } + ]} + /> + + 先ほどの弁当箱の黄色の部分
+ 🍱 と置き換えて省略した +
+ +

この時点で、

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

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

+ + ) + } + ]} + /> + + + には{' '} + が入っている + + + +

ん?なんでそれを覚えておく必要があるんだい?

+ + ) + }, + { + type: 'saya', + children: ( + <> +

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

+

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

+ + ) + } + ]} + /> + + + + + ) + }, + { + title: <>2回目は…, + content: ( + <> + +

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

+ + ) + } + ]} + /> + + 🍱 の部分を… + + + 省略前の状態に戻す + +

+ では、続きを見てみよう! + +

+ + ) + } + ]} + /> + + +

+ あれ…この黄色の部分は、前回省略したのとまったく同じだ! +

+ + ) + } + ]} + /> + + 黄色の部分は、前回省略したのとまったく同じ + + +

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

+

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

+ + ) + } + ]} + /> + + + 黄色の部分を 🍱 で省略してみた + + + +

前回と比べてみると、下の黄色の部分が違うね!

+ + ) + } + ]} + /> + + + 前回と比べると… + + + } + right={ + <> + + 黄色の部分が違う + + + } + /> + +

そう。特に注目すべきなのは以下の二点だよ。

+
    + + 先ほど には{' '} + が入っていたが、 + + 今回は が入っている + + + + + 一番下に {' '} + が追加されている + + +
+ + ) + }, + { + type: 'thinking', + children: ( + <> +

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

+ + ) + } + ]} + /> + , + , + + ]} + description={ + <> + が1減った + + } + /> + +

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

+

続けて確かめてみるか。

+ + ) + } + ]} + /> + + ) + }, + { + title: <>3回目は…, + content: ( + <> + +

+ 再度、🍱 を省略する前の状態に戻したよ。 + +

+ + ) + } + ]} + /> + + +

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

+ + ) + } + ]} + /> + 黄色の部分は前回と同じなので… + + + また 🍱 で省略してみた + + +

では、前回とまた比べてみよう!

+ + ) + } + ]} + /> + + + 前回と比べると… + + + } + right={ + <> + + 黄色の部分が違う + + + } + /> + +

特に注目すべきなのは…

+
    + + 先ほど には{' '} + が入っていたが、 + + 今回は が入っている + + + + + またしても、一番下に {' '} + が追加されている + + +
+ + ) + }, + { + type: 'thinking', + children: ( + <> +

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

+

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

+ + ) + } + ]} + /> + , + , + , + , + + ]} + description={ + <> + が1ずつ減っている + + } + /> + +

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

+

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

+ + ) + }, + { + type: 'saya', + children: ( + <> +

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

+ + ) + } + ]} + /> + + ) + }, + { + title: <>4回目。これが最後!, + content: ( + <> + +

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

+ + ) + } + ]} + /> + + +

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

+ + ) + } + ]} + /> + 黄色の部分は前回と同じなので… + + + また 🍱 で省略してみた + + +

では、前回とまた比べてみよう!

+ + ) + } + ]} + /> + + + 前回と比べると… + + + } + right={ + <> + + 黄色の部分が違う + + + } + /> + +

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

+ + ) + }, + { + type: 'saya', + children: ( + <> +

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

+ + ) + } + ]} + /> + + + + +

+ あとは、単純に {' '} + {' '} + {' '} + を計算するだけなので… +

+

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

+ + ) + } + ]} + /> + + + + 最終結果は + + +

では、ここまでを振り返ってみよう!

+ + ) + } + ]} + /> + + ) + }, + { + type: 'summary', + title: <>ここまでの振り返り, + content: ( + <> + +

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

+ + ) + } + ]} + /> + + 数字の {' '} + が入っていた + + +

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

+ + ) + } + ]} + /> + 終了直前に以下のようになった + +

+ 上のやつは、 + を{' '} + {' '} + 回繰り返すから、以下のように「 + 繰り返しの機能 🔁 + 」を使った計算箱とまったく同じだ! +

+ + ) + } + ]} + /> + これと全く同じ! + +

+ そう。つまり上の「 + 繰り返しの機能 🔁 + 」を使った計算箱は、今回早送りした弁当箱で再現できるということなんだ。 +

+ + ) + } + ]} + /> + + この「 + 繰り返しの機能 🔁 + 」を使った +
+ 計算箱は… +
+ + + この弁当箱で「再現」できる! + + +

なるほど!

+ + ) + }, + { + type: 'saya', + children: ( + <> +

他にもたとえば、以下のような計算箱でも…

+ + ) + } + ]} + /> + こちらの計算箱も… + +

同じように弁当箱で再現することができるよ。

+ + ) + } + ]} + /> + この弁当箱で再現できる + +

+ 実際、 + + 上の弁当箱を早送りすると、終了直前に下のようになる + + からね。時間がかかるから、ここではやらないけど… +

+ + ) + } + ]} + /> + + 上の弁当箱を早送りすると、 +
+ 終了直前に下のようになる +
+ +

+ まとめると、以下のような「 + 繰り返しの機能 🔁 + 」を使った計算箱は… +

+ + ) + } + ]} + /> + + 以下のような「繰り返しの機能 🔁 + 」
+ を使った計算箱は… +
+ +

次のように弁当箱で再現することができるんだ。

+ + ) + } + ]} + /> + + この弁当箱で「再現」できる! + + + ) + }, + { + title: <>繰り返しの機能を再現できた!, + content: ( + <> + +

+ サヤちゃん、正解です!見事、「 + 繰り返しの機能 + 」を弁当箱で再現しましたね!🎉 +

+ + ) + }, + { + type: 'saya', + children: ( + <> +

やったー!

+ + ) + } + ]} + /> + , + 🔁, + , + 🍱, + 🔁 + ]} + description={ + <> + 「繰り返しの機能 🔁 + 」を +
+ 弁当箱で再現できた!🎉 + + } + /> + +

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

+ + ) + } + ]} + /> + これはどうやって弁当箱で再現する? + +

+ おそらく、先ほどの弁当箱で右上にあった{' '} + を{' '} + {' '} + に変えるだけでいいんじゃないかな? +

+ + ) + } + ]} + /> + + + 先ほどの弁当箱で右上にあった +
+ を{' '} + に変えるだけ(黄色の部分) +
+
+ +

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

+ + ) + }, + { + type: 'surprised', + children: ( + <> +

へー、そんなに簡単なんだ!

+ + ) + } + ]} + /> + + ) + }, + { + type: 'summary', + title: <>魔法のYコンビネータ, + content: ( + <> + +

+ しかし…弁当箱を使って、計算箱の「 + 繰り返しの機能 🔁 + 」を再現できるのはすごいなあ。 +

+ + ) + }, + { + type: 'dog', + children: ( + <> +

+ そうですね。そして、 + + それを可能にしているのは、先ほどのいくつかの弁当箱において、 + 下半分の部分に使われていた + こちらの弁当箱です + + 。 +

+ + ) + } + ]} + /> + + 先ほどのいくつかの弁当箱において、 +
+ 下半分の部分に使われていた +
+ こちらの弁当箱が、 +
繰り返しの機能 🔁 + 」の再現を +
+ 可能にしていた +
+ +

なるほど。この部分は毎回必ず使われていたね。

+

これが、繰り返しを可能にしていたのかあ…

+ + ) + }, + { + type: 'dog', + children: ( + <> +

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

+ + ) + }, + { + type: 'surprised', + children: ( + <> +

へー、そうなんだ。何ていう呼び名なの?

+ + ) + }, + { + type: 'dog', + children: ( + <> +

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

+ + ) + } + ]} + /> + + この弁当箱の名は「Yコンビネータ」 + + +

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

+ + ) + }, + { + type: 'dog', + children: ( + <> +

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

+ + ) + } + ]} + /> + + この法則に当てはまる弁当箱は全部 +
Yコンビネータ」 +
+ +

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

+

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

+ + ) + }, + { + type: 'smile', + children: ( + <> +

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

+ + ) + } + ]} + /> + + 魔法のYコンビネータ + + } + /> + + ) + }, + { + title: <>繰り返しの機能を返してもらえる?, + content: ( + <> +

+ 「繰り返しの機能 🔁 + 」をみごと弁当箱で再現した村人たちは、悪魔のもとに行きました。 +

+ +

+ どうだ、「繰り返しの機能{' '} + 🔁」を弁当箱で再現したぞ! +

+

+ 約束通り、「 + 繰り返しの機能 🔁 + 」は返してもらう!これで、計算箱のすべての機能をお前から取り返せるぞ! +

+ + ) + }, + { + type: 'devil', + children: ( + <> +

うぐぐ…

+ + ) + } + ]} + /> +

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

+ + + ) + } + ]} + /> +) diff --git a/src/contents/14.v2.jp.tsx b/src/contents/14.v2.jp.tsx deleted file mode 100644 index 46ef7e8f8..000000000 --- a/src/contents/14.v2.jp.tsx +++ /dev/null @@ -1,1268 +0,0 @@ -import React from 'react' -import EpisodeCardList from 'src/components/EpisodeCardList' -import { P, Strong, Em, Ul, UlLi } from 'src/components/ContentTags' -import H from 'src/components/H' -import BubbleQuotes from 'src/components/BubbleQuotes' -import Emoji from 'src/components/Emoji' -import EmojiNumber from 'src/components/EmojiNumber' -import ExpressionRunnerSeparator from 'src/components/ExpressionRunnerSeparator' -import InlineBorder from 'src/components/InlineBorder' -import CustomEmoji from 'src/components/CustomEmoji' -import EmojiSeparator from 'src/components/EmojiSeparator' -import TwoColGrid from 'src/components/TwoColGrid' -import * as R from 'src/components/Runners' -import NextLessonButton from 'src/components/NextLessonButton' - -export default () => ( - -

前回では…

- - ), - content: ( - <> -

- 前回は、 - - 計算箱の「繰り返しの機能 🔁 - 」を、👧🏻{' '} - サヤちゃんが考えた以下の弁当箱を使えば再現できるかも? - - というところで終わりました。 -

- - 「繰り返しの機能 🔁 - 」を使った計算箱は… - - - - 以下の弁当箱で「再現」できている? - 🤔 - -

今回は、これを実際に検証していきましょう!

- - ) - }, - { - title: <>早送りしてみる, - content: ( - <> - -

- では、前回同様 - - {' '} - 🅰️、 - 🅱️{' '} - - を入れてみるね。 -

-

- 前回話した通り、 - - すると{' '} - になる - - よ。 -

- - ) - } - ]} - /> - - に - - -

- では、 - - これを今回は - {' '} - してみるね!早送りをすることで、どういう原理になっているかが分かるかも。 - -

-

- 時間がかかるので、何度も止めながらやっていくよ。というわけで、 - -

-
    - - 複雑なので、目で追わなくても大丈夫だよ! - - - ちょっと時間がかかるので、待てない方は下の「 - - → - - 」を押してね! - -
- - ) - } - ]} - /> - - -

めちゃくちゃ複雑だなあ…

- - ) - }, - { - type: 'saya', - children: ( - <> -

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

- - ) - } - ]} - /> - - 真ん中の黄色の部分に注目 - - -

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

- - ) - } - ]} - /> - - 先ほどの弁当箱の黄色の部分
- 🍱 と置き換えて省略した -
- -

この時点で、

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

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

- - ) - } - ]} - /> - - - には{' '} - が入っている - - - -

ん?なんでそれを覚えておく必要があるんだい?

- - ) - }, - { - type: 'saya', - children: ( - <> -

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

-

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

- - ) - } - ]} - /> - - - - - ) - }, - { - title: <>2回目は…, - content: ( - <> - -

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

- - ) - } - ]} - /> - - 🍱 の部分を… - - - 省略前の状態に戻す - -

- では、続きを見てみよう! - -

- - ) - } - ]} - /> - - -

- あれ…この黄色の部分は、前回省略したのとまったく同じだ! -

- - ) - } - ]} - /> - - 黄色の部分は、前回省略したのとまったく同じ - - -

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

-

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

- - ) - } - ]} - /> - - - 黄色の部分を 🍱 で省略してみた - - - -

前回と比べてみると、下の黄色の部分が違うね!

- - ) - } - ]} - /> - - - 前回と比べると… - - - } - right={ - <> - - 黄色の部分が違う - - - } - /> - -

そう。特に注目すべきなのは以下の二点だよ。

-
    - - 先ほど には{' '} - が入っていたが、 - - 今回は が入っている - - - - - 一番下に {' '} - が追加されている - - -
- - ) - }, - { - type: 'thinking', - children: ( - <> -

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

- - ) - } - ]} - /> - , - , - - ]} - description={ - <> - が1減った - - } - /> - -

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

-

続けて確かめてみるか。

- - ) - } - ]} - /> - - ) - }, - { - title: <>3回目は…, - content: ( - <> - -

- 再度、🍱 を省略する前の状態に戻したよ。 - -

- - ) - } - ]} - /> - - -

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

- - ) - } - ]} - /> - 黄色の部分は前回と同じなので… - - - また 🍱 で省略してみた - - -

では、前回とまた比べてみよう!

- - ) - } - ]} - /> - - - 前回と比べると… - - - } - right={ - <> - - 黄色の部分が違う - - - } - /> - -

特に注目すべきなのは…

-
    - - 先ほど には{' '} - が入っていたが、 - - 今回は が入っている - - - - - またしても、一番下に {' '} - が追加されている - - -
- - ) - }, - { - type: 'thinking', - children: ( - <> -

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

-

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

- - ) - } - ]} - /> - , - , - , - , - - ]} - description={ - <> - が1ずつ減っている - - } - /> - -

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

-

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

- - ) - }, - { - type: 'saya', - children: ( - <> -

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

- - ) - } - ]} - /> - - ) - }, - { - title: <>4回目。これが最後!, - content: ( - <> - -

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

- - ) - } - ]} - /> - - -

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

- - ) - } - ]} - /> - 黄色の部分は前回と同じなので… - - - また 🍱 で省略してみた - - -

では、前回とまた比べてみよう!

- - ) - } - ]} - /> - - - 前回と比べると… - - - } - right={ - <> - - 黄色の部分が違う - - - } - /> - -

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

- - ) - }, - { - type: 'saya', - children: ( - <> -

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

- - ) - } - ]} - /> - - - - -

- あとは、単純に {' '} - {' '} - {' '} - を計算するだけなので… -

-

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

- - ) - } - ]} - /> - - - - 最終結果は - - -

では、ここまでを振り返ってみよう!

- - ) - } - ]} - /> - - ) - }, - { - type: 'summary', - title: <>ここまでの振り返り, - content: ( - <> - -

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

- - ) - } - ]} - /> - - 数字の {' '} - が入っていた - - -

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

- - ) - } - ]} - /> - 終了直前に以下のようになった - -

- 上のやつは、 - を{' '} - {' '} - 回繰り返すから、以下のように「 - 繰り返しの機能 🔁 - 」を使った計算箱とまったく同じだ! -

- - ) - } - ]} - /> - これと全く同じ! - -

- そう。つまり上の「 - 繰り返しの機能 🔁 - 」を使った計算箱は、今回早送りした弁当箱で再現できるということなんだ。 -

- - ) - } - ]} - /> - - この「 - 繰り返しの機能 🔁 - 」を使った -
- 計算箱は… -
- - - この弁当箱で「再現」できる! - - -

なるほど!

- - ) - }, - { - type: 'saya', - children: ( - <> -

他にもたとえば、以下のような計算箱でも…

- - ) - } - ]} - /> - こちらの計算箱も… - -

同じように弁当箱で再現することができるよ。

- - ) - } - ]} - /> - この弁当箱で再現できる - -

- 実際、 - - 上の弁当箱を早送りすると、終了直前に下のようになる - - からね。時間がかかるから、ここではやらないけど… -

- - ) - } - ]} - /> - - 上の弁当箱を早送りすると、 -
- 終了直前に下のようになる -
- -

- まとめると、以下のような「 - 繰り返しの機能 🔁 - 」を使った計算箱は… -

- - ) - } - ]} - /> - - 以下のような「繰り返しの機能 🔁 - 」
- を使った計算箱は… -
- -

次のように弁当箱で再現することができるんだ。

- - ) - } - ]} - /> - - この弁当箱で「再現」できる! - - - ) - }, - { - title: <>繰り返しの機能を再現できた!, - content: ( - <> - -

- サヤちゃん、正解です!見事、「 - 繰り返しの機能 - 」を弁当箱で再現しましたね!🎉 -

- - ) - }, - { - type: 'saya', - children: ( - <> -

やったー!

- - ) - } - ]} - /> - , - 🔁, - , - 🍱, - 🔁 - ]} - description={ - <> - 「繰り返しの機能 🔁 - 」を -
- 弁当箱で再現できた!🎉 - - } - /> - -

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

- - ) - } - ]} - /> - これはどうやって弁当箱で再現する? - -

- おそらく、先ほどの弁当箱で右上にあった{' '} - を{' '} - {' '} - に変えるだけでいいんじゃないかな? -

- - ) - } - ]} - /> - - - 先ほどの弁当箱で右上にあった -
- を{' '} - に変えるだけ(黄色の部分) -
-
- -

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

- - ) - }, - { - type: 'surprised', - children: ( - <> -

へー、そんなに簡単なんだ!

- - ) - } - ]} - /> - - ) - }, - { - type: 'summary', - title: <>魔法のYコンビネータ, - content: ( - <> - -

- しかし…弁当箱を使って、計算箱の「 - 繰り返しの機能 🔁 - 」を再現できるのはすごいなあ。 -

- - ) - }, - { - type: 'dog', - children: ( - <> -

- そうですね。そして、 - - それを可能にしているのは、先ほどのいくつかの弁当箱において、 - 下半分の部分に使われていた - こちらの弁当箱です - - 。 -

- - ) - } - ]} - /> - - 先ほどのいくつかの弁当箱において、 -
- 下半分の部分に使われていた -
- こちらの弁当箱が、 -
繰り返しの機能 🔁 - 」の再現を -
- 可能にしていた -
- -

なるほど。この部分は毎回必ず使われていたね。

-

これが、繰り返しを可能にしていたのかあ…

- - ) - }, - { - type: 'dog', - children: ( - <> -

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

- - ) - }, - { - type: 'surprised', - children: ( - <> -

へー、そうなんだ。何ていう呼び名なの?

- - ) - }, - { - type: 'dog', - children: ( - <> -

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

- - ) - } - ]} - /> - - この弁当箱の名は「Yコンビネータ」 - - -

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

- - ) - }, - { - type: 'dog', - children: ( - <> -

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

- - ) - } - ]} - /> - - この法則に当てはまる弁当箱は全部 -
Yコンビネータ」 -
- -

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

-

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

- - ) - }, - { - type: 'smile', - children: ( - <> -

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

- - ) - } - ]} - /> - - 魔法のYコンビネータ - - } - /> - - ) - }, - { - title: <>繰り返しの機能を返してもらえる?, - content: ( - <> -

- 「繰り返しの機能 🔁 - 」をみごと弁当箱で再現した村人たちは、悪魔のもとに行きました。 -

- -

- どうだ、「繰り返しの機能{' '} - 🔁」を弁当箱で再現したぞ! -

-

- 約束通り、「 - 繰り返しの機能 🔁 - 」は返してもらう!これで、計算箱のすべての機能をお前から取り返せるぞ! -

- - ) - }, - { - type: 'devil', - children: ( - <> -

うぐぐ…

- - ) - } - ]} - /> -

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

- - - ) - } - ]} - /> -) diff --git a/src/contents/15.jp.tsx b/src/contents/15.jp.tsx index 5f4ca258b..7196a76f1 100644 --- a/src/contents/15.jp.tsx +++ b/src/contents/15.jp.tsx @@ -1,4 +1,972 @@ import React from 'react' import EpisodeCardList from 'src/components/EpisodeCardList' +import { P, Strong, Em, Ul, UlLi } from 'src/components/ContentTags' +import H from 'src/components/H' +import BubbleQuotes from 'src/components/BubbleQuotes' +import Emoji from 'src/components/Emoji' +import EmojiSeparator from 'src/components/EmojiSeparator' +import EmojiNumber from 'src/components/EmojiNumber' +import ExpressionRunnerSeparator from 'src/components/ExpressionRunnerSeparator' +import CustomEmoji from 'src/components/CustomEmoji' +import TwoColGrid from 'src/components/TwoColGrid' +import * as R from 'src/components/Runners' +import NextLessonButton from 'src/components/NextLessonButton' +import ExpressionRunnerCaptionOnly from 'src/components/ExpressionRunnerCaptionOnly' -export default () => +export default () => ( + 勝利!, + content: ( + <> + +

+ では約束通り、「繰り返しの機能{' '} + 🔁」を返してやろう! +

+ + ) + } + ]} + /> + 繰り返しの機能を返してもらった!} + /> + +

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

+ + ) + } + ]} + /> + , + , + 🔁 + ]} + description={<>計算箱のすべての機能を返してもらった!} + /> + +

+ これで、以前と同じように、計算箱を使って日々の計算を行うことができる! +

+

+ 難しい足し算や引き算でも、計算箱があればへっちゃらだ! +

+ + ) + } + ]} + /> + + + 🅰️ 🅱️ を計算 + + + } + right={ + <> + + 🅰️ 🅱️ を計算 + + + } + /> + +

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

+ + ) + }, + { + type: 'roll', + children: ( + <> +

ん…なんだ?まだ何か言いたいことがあるのか?

+ + ) + } + ]} + /> + + ) + }, + { + title: <>この弁当箱は…?, + content: ( + <> + +

まず、こちらの弁当箱を見てみな。

+ + ) + } + ]} + /> + + +

なんだ、この弁当箱は?

+

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

+ + ) + }, + { + type: 'devil', + children: ( + <> +

+ とりあえず、 + と{' '} + {' '} + に適当な数字を当てはめてみな! +

+ + ) + }, + { + type: 'thinking', + children: ( + <> +

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

+ + + +

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

+ + + +

それぞれの部分に入れてみよう。

+ + ) + } + ]} + /> + + {' '} + に変換できる +
+ 弁当箱を入れてみた +
+ +

+ では、これを + {' '} + するとどうなるか確かめてみな! +

+ + ) + } + ]} + /> + + ) + }, + { + title: <>早送りしてみると…, + content: ( + <> +

+ では、 + 。 +

+
    + + 複雑なので、目で追わなくても大丈夫です! + + + ちょっと時間がかかるので、待てない方は下の「 + + → + + 」を押してください! + +
+ + +

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

+ + + + + ) + } + ]} + /> + + ) + }, + { + title: <>足し算ができる, + content: ( + <> + +

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

+ + ) + }, + { + type: 'thinking', + children: ( + <> +

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

+ + ) + } + ]} + /> + + {' '} + を入れると… + + + + に変換できる弁当箱に + + +

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

+ + ) + }, + { + type: 'devil', + children: ( + <> +

+ その通りだ!先ほどの弁当箱は、 + + と{' '} + に数字を入れ、 + {' '} + すると… + +

+

+ + 結果は {' '} + {' '} + になるんだ。 + +

+ + ) + } + ]} + /> + + と{' '} + に数字を入れ、 +
+ +
+ すると… +
+ + , + , + + ]} + description={ + <> + 結果は {' '} + {' '} + になる + + } + /> + +

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

+ + ) + }, + { + type: 'surprised', + children: ( + <> +

なんてこった…

+

+ 前回、俺らは 🅰️ {' '} + 🅱️ を計算するのに、以下のように「 + 繰り返しの機能 🔁 + 」を再現できる弁当箱を使っていたが… +

+ + 🅰️ 🅱️{' '} + を計算 + +

+ こんな複雑なことをしなくても、弁当箱で足し算をすることができるというわけか。 +

+ + ) + }, + { + type: 'devil', + children: ( + <> +

まさに、その通りだ!

+ + ) + } + ]} + /> + + ) + }, + { + title: <>もうひとつの弁当箱, + content: ( + <> + +

+ では、こちらの弁当箱は何ができる弁当箱か分かるかな? +

+ + ) + } + ]} + /> + + +

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

+

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

+ + ) + }, + { + type: 'devil', + children: ( + <> +

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

+ + ) + } + ]} + /> + + {' '} + に変換できる +
+ 弁当箱を入れてみた +
+ +

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

+ + + + + ) + } + ]} + /> + + ) + }, + { + title: <>掛け算ができる, + content: ( + <> + +

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

+ + ) + } + ]} + /> + + {' '} + を入れると… + + + + に変換できる弁当箱に + + +

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

+ + ) + }, + { + type: 'devil', + children: ( + <> +

+ その通りだ!先ほどの弁当箱は、 + + と{' '} + に数字を入れ、 + {' '} + すると… + +

+

+ + 結果は {' '} + ✖️{' '} + になるんだ。 + +

+ + ) + } + ]} + /> + + と{' '} + に数字を入れ、 +
+ +
+ すると… +
+ + , + ✖️, + + ]} + description={ + <> + 結果は {' '} + ✖️ {' '} + になる + + } + /> + +

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

+ + ) + } + ]} + /> + + ) + }, + { + title: <>四則演算ができる, + content: ( + <> + +

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

+ + ) + }, + { + type: 'devil', + children: ( + <> +

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

+

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

+ + ) + } + ]} + /> + 弁当箱は四則演算の全てができる} + /> + + ) + }, + { + title: <>Yコンビネータと組み合わせると, + content: ( + <> + +

+ また、前回「繰り返しの機能{' '} + 🔁」を再現するのに使った「 + Yコンビネータ + 」の弁当箱と組み合わせることで、さらに複雑な計算をすることもできる。 +

+ + 前回「繰り返しの機能 🔁 + 」を +
+ 再現するのに使った「Yコンビネータ」 +
+ + ) + }, + { + type: 'thinking', + children: ( + <> +

どういうこと?

+ + ) + }, + { + type: 'devil', + children: ( + <> +

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

+

+ たとえば、「 + {' '} + の階乗」は、以下のようになる。 +

+ , + ✖️, + , + ✖️, + + ]} + description={ + <> + の階乗 + + } + /> +

+ 同じように、「 + {' '} + の階乗」は、以下のようになる。 +

+ , + ✖️, + , + ✖️, + , + ✖️, + + ]} + description={ + <> + の階乗 + + } + /> + + ) + }, + { + type: 'thinking', + children: ( + <> +

ふむふむ…

+ + ) + }, + { + type: 'devil', + children: ( + <> +

+ この「階乗」は、 + Yコンビネータ + を使った弁当箱で計算することができるんだ。 +

+

+ たとえば以下の弁当箱は、 + + の階乗、すなわち{' '} + ✖️{' '} + ✖️{' '} + ✖️{' '} + を計算してくれる。 + +

+ + ) + } + ]} + /> + + この、下半分が「Yコンビネータ」の +
+ 弁当箱を使えば… +
+ + + の階乗、すなわち +
+ ✖️{' '} + ✖️{' '} + ✖️{' '} + を計算できる! +
+ +

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

+

+ ( + + ちなみに、右の方に ✖️{' '} + の印がある。これは先ほど紹介した、掛け算ができる弁当箱をスペースの都合で省略しただけだ。 + + ) +

+ + ) + }, + { + type: 'thinking', + children: ( + <> +

上の弁当箱は複雑すぎてよく分からないけど…

+
    + + 「階乗」は、「 + 1になるまで掛け算を繰り返す + 」ということだから、 + + + + 「繰り返す」のを可能にする「 + Yコンビネータ + 」の弁当箱が必要 + + というわけかな…? + +
+ + ) + }, + { + type: 'devil', + children: ( + <> +

その通りだ!上の弁当箱を理解する必要はないが…

+

+ + 「Yコンビネータ + 」の弁当箱は、掛け算を計算できる弁当箱と組み合わせることによって、階乗のように複雑な計算を行うこともできる + + 、ということさえ分かれば十分だ。 +

+ + ) + } + ]} + /> + + 「Yコンビネータ」の弁当箱は、 +
+ 掛け算を計算できる弁当箱と +
+ 組み合わせることによって、 +
+ 階乗のような複雑な計算もできる +
+ + ) + }, + { + title: <>弁当箱にできない計算はあるの?, + content: ( + <> + +

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

+ + ) + } + ]} + /> + , + 🍱, + + ]} + description={<>弁当箱は、計算箱以上にパワフル!} + /> + +

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

+ + ) + }, + { + type: 'devil', + children: ( + <> +

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

+

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

+ + ) + }, + { + type: 'crying', + children: ( + <> +

長かった…やっと終わるのか!じゃあ、先に進もう!

+ + ) + } + ]} + /> + + + ) + } + ]} + /> +) diff --git a/src/contents/15.v2.jp.tsx b/src/contents/15.v2.jp.tsx deleted file mode 100644 index 7196a76f1..000000000 --- a/src/contents/15.v2.jp.tsx +++ /dev/null @@ -1,972 +0,0 @@ -import React from 'react' -import EpisodeCardList from 'src/components/EpisodeCardList' -import { P, Strong, Em, Ul, UlLi } from 'src/components/ContentTags' -import H from 'src/components/H' -import BubbleQuotes from 'src/components/BubbleQuotes' -import Emoji from 'src/components/Emoji' -import EmojiSeparator from 'src/components/EmojiSeparator' -import EmojiNumber from 'src/components/EmojiNumber' -import ExpressionRunnerSeparator from 'src/components/ExpressionRunnerSeparator' -import CustomEmoji from 'src/components/CustomEmoji' -import TwoColGrid from 'src/components/TwoColGrid' -import * as R from 'src/components/Runners' -import NextLessonButton from 'src/components/NextLessonButton' -import ExpressionRunnerCaptionOnly from 'src/components/ExpressionRunnerCaptionOnly' - -export default () => ( - 勝利!, - content: ( - <> - -

- では約束通り、「繰り返しの機能{' '} - 🔁」を返してやろう! -

- - ) - } - ]} - /> - 繰り返しの機能を返してもらった!} - /> - -

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

- - ) - } - ]} - /> - , - , - 🔁 - ]} - description={<>計算箱のすべての機能を返してもらった!} - /> - -

- これで、以前と同じように、計算箱を使って日々の計算を行うことができる! -

-

- 難しい足し算や引き算でも、計算箱があればへっちゃらだ! -

- - ) - } - ]} - /> - - - 🅰️ 🅱️ を計算 - - - } - right={ - <> - - 🅰️ 🅱️ を計算 - - - } - /> - -

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

- - ) - }, - { - type: 'roll', - children: ( - <> -

ん…なんだ?まだ何か言いたいことがあるのか?

- - ) - } - ]} - /> - - ) - }, - { - title: <>この弁当箱は…?, - content: ( - <> - -

まず、こちらの弁当箱を見てみな。

- - ) - } - ]} - /> - - -

なんだ、この弁当箱は?

-

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

- - ) - }, - { - type: 'devil', - children: ( - <> -

- とりあえず、 - と{' '} - {' '} - に適当な数字を当てはめてみな! -

- - ) - }, - { - type: 'thinking', - children: ( - <> -

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

- - - -

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

- - - -

それぞれの部分に入れてみよう。

- - ) - } - ]} - /> - - {' '} - に変換できる -
- 弁当箱を入れてみた -
- -

- では、これを - {' '} - するとどうなるか確かめてみな! -

- - ) - } - ]} - /> - - ) - }, - { - title: <>早送りしてみると…, - content: ( - <> -

- では、 - 。 -

-
    - - 複雑なので、目で追わなくても大丈夫です! - - - ちょっと時間がかかるので、待てない方は下の「 - - → - - 」を押してください! - -
- - -

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

- - - - - ) - } - ]} - /> - - ) - }, - { - title: <>足し算ができる, - content: ( - <> - -

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

- - ) - }, - { - type: 'thinking', - children: ( - <> -

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

- - ) - } - ]} - /> - - {' '} - を入れると… - - - - に変換できる弁当箱に - - -

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

- - ) - }, - { - type: 'devil', - children: ( - <> -

- その通りだ!先ほどの弁当箱は、 - - と{' '} - に数字を入れ、 - {' '} - すると… - -

-

- - 結果は {' '} - {' '} - になるんだ。 - -

- - ) - } - ]} - /> - - と{' '} - に数字を入れ、 -
- -
- すると… -
- - , - , - - ]} - description={ - <> - 結果は {' '} - {' '} - になる - - } - /> - -

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

- - ) - }, - { - type: 'surprised', - children: ( - <> -

なんてこった…

-

- 前回、俺らは 🅰️ {' '} - 🅱️ を計算するのに、以下のように「 - 繰り返しの機能 🔁 - 」を再現できる弁当箱を使っていたが… -

- - 🅰️ 🅱️{' '} - を計算 - -

- こんな複雑なことをしなくても、弁当箱で足し算をすることができるというわけか。 -

- - ) - }, - { - type: 'devil', - children: ( - <> -

まさに、その通りだ!

- - ) - } - ]} - /> - - ) - }, - { - title: <>もうひとつの弁当箱, - content: ( - <> - -

- では、こちらの弁当箱は何ができる弁当箱か分かるかな? -

- - ) - } - ]} - /> - - -

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

-

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

- - ) - }, - { - type: 'devil', - children: ( - <> -

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

- - ) - } - ]} - /> - - {' '} - に変換できる -
- 弁当箱を入れてみた -
- -

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

- - - - - ) - } - ]} - /> - - ) - }, - { - title: <>掛け算ができる, - content: ( - <> - -

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

- - ) - } - ]} - /> - - {' '} - を入れると… - - - - に変換できる弁当箱に - - -

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

- - ) - }, - { - type: 'devil', - children: ( - <> -

- その通りだ!先ほどの弁当箱は、 - - と{' '} - に数字を入れ、 - {' '} - すると… - -

-

- - 結果は {' '} - ✖️{' '} - になるんだ。 - -

- - ) - } - ]} - /> - - と{' '} - に数字を入れ、 -
- -
- すると… -
- - , - ✖️, - - ]} - description={ - <> - 結果は {' '} - ✖️ {' '} - になる - - } - /> - -

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

- - ) - } - ]} - /> - - ) - }, - { - title: <>四則演算ができる, - content: ( - <> - -

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

- - ) - }, - { - type: 'devil', - children: ( - <> -

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

-

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

- - ) - } - ]} - /> - 弁当箱は四則演算の全てができる} - /> - - ) - }, - { - title: <>Yコンビネータと組み合わせると, - content: ( - <> - -

- また、前回「繰り返しの機能{' '} - 🔁」を再現するのに使った「 - Yコンビネータ - 」の弁当箱と組み合わせることで、さらに複雑な計算をすることもできる。 -

- - 前回「繰り返しの機能 🔁 - 」を -
- 再現するのに使った「Yコンビネータ」 -
- - ) - }, - { - type: 'thinking', - children: ( - <> -

どういうこと?

- - ) - }, - { - type: 'devil', - children: ( - <> -

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

-

- たとえば、「 - {' '} - の階乗」は、以下のようになる。 -

- , - ✖️, - , - ✖️, - - ]} - description={ - <> - の階乗 - - } - /> -

- 同じように、「 - {' '} - の階乗」は、以下のようになる。 -

- , - ✖️, - , - ✖️, - , - ✖️, - - ]} - description={ - <> - の階乗 - - } - /> - - ) - }, - { - type: 'thinking', - children: ( - <> -

ふむふむ…

- - ) - }, - { - type: 'devil', - children: ( - <> -

- この「階乗」は、 - Yコンビネータ - を使った弁当箱で計算することができるんだ。 -

-

- たとえば以下の弁当箱は、 - - の階乗、すなわち{' '} - ✖️{' '} - ✖️{' '} - ✖️{' '} - を計算してくれる。 - -

- - ) - } - ]} - /> - - この、下半分が「Yコンビネータ」の -
- 弁当箱を使えば… -
- - - の階乗、すなわち -
- ✖️{' '} - ✖️{' '} - ✖️{' '} - を計算できる! -
- -

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

-

- ( - - ちなみに、右の方に ✖️{' '} - の印がある。これは先ほど紹介した、掛け算ができる弁当箱をスペースの都合で省略しただけだ。 - - ) -

- - ) - }, - { - type: 'thinking', - children: ( - <> -

上の弁当箱は複雑すぎてよく分からないけど…

-
    - - 「階乗」は、「 - 1になるまで掛け算を繰り返す - 」ということだから、 - - - - 「繰り返す」のを可能にする「 - Yコンビネータ - 」の弁当箱が必要 - - というわけかな…? - -
- - ) - }, - { - type: 'devil', - children: ( - <> -

その通りだ!上の弁当箱を理解する必要はないが…

-

- - 「Yコンビネータ - 」の弁当箱は、掛け算を計算できる弁当箱と組み合わせることによって、階乗のように複雑な計算を行うこともできる - - 、ということさえ分かれば十分だ。 -

- - ) - } - ]} - /> - - 「Yコンビネータ」の弁当箱は、 -
- 掛け算を計算できる弁当箱と -
- 組み合わせることによって、 -
- 階乗のような複雑な計算もできる -
- - ) - }, - { - title: <>弁当箱にできない計算はあるの?, - content: ( - <> - -

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

- - ) - } - ]} - /> - , - 🍱, - - ]} - description={<>弁当箱は、計算箱以上にパワフル!} - /> - -

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

- - ) - }, - { - type: 'devil', - children: ( - <> -

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

-

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

- - ) - }, - { - type: 'crying', - children: ( - <> -

長かった…やっと終わるのか!じゃあ、先に進もう!

- - ) - } - ]} - /> - - - ) - } - ]} - /> -) diff --git a/src/contents/16.jp.tsx b/src/contents/16.jp.tsx index 5f4ca258b..49e2a8d04 100644 --- a/src/contents/16.jp.tsx +++ b/src/contents/16.jp.tsx @@ -1,4 +1,1000 @@ import React from 'react' import EpisodeCardList from 'src/components/EpisodeCardList' +import { + P, + Strong, + InlineHeader, + Em, + ExternalLink, + Img, + CenteredCode, + Pre, + Code, + Ol, + OlLi +} from 'src/components/ContentTags' +import EmojiSeparator from 'src/components/EmojiSeparator' +import EmojiNumber from 'src/components/EmojiNumber' +import ExpressionRunnerSeparator from 'src/components/ExpressionRunnerSeparator' +import H from 'src/components/H' +import Emoji from 'src/components/Emoji' +import CustomEmoji from 'src/components/CustomEmoji' +import BubbleQuotes from 'src/components/BubbleQuotes' +import * as R from 'src/components/Runners' +import CardContent from 'src/components/CardContent' -export default () => +export default () => ( + これが最後のページです!, + content: ( + <> +

+ これが最後のページです。ここまで読んでくださり、ありがとうございます! +

+ お疲れ様でした!} + /> +

+ さて、前回の最後に、ラムダ村の村人は次のような質問をしました。 +

+ +

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

+ + ) + } + ]} + /> +

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

+ + そもそも、弁当箱というアイデアは +
+ どうやって生まれたのか? + + } + /> +

+ そのためには、 + ラムダ村の世界ではなく、現実世界の歴史 + を知る必要があります。 +

+ 現実世界の歴史を知る必要がある} + /> +

+ というわけで、これから現実世界の話をしますが、お付き合いいただけると嬉しいです。ラムダ村の話からはいったん離れますが、このページの最後で戻ってきます。 +

+ + ), + footer: { + content: ( + <> +

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

+

+ コンピュータ史に詳しい方のなかには、怒り心頭に発する方が出てくるかもしれません。雑な歴史の紹介であることをお許しください。 +

+ + ) + } + }, + { + title: <>そもそもコンピュータとは何か, + content: ( + <> +

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

+ そもそもコンピュータとは何か?} + /> +

+ 「コンピュータ」というとパソコンやタブレット、スマホ、ロボットを思い浮かべる方が多いかもしれません。 +

+ +

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

+ + コンピュータは本質的には「計算機」 + + } + /> +

+ コンピュータを使えば情報を瞬時に検索できたり、美しいCGを描いたりすることができます。最近はAIを使って顔認証や会話ができるようになりました。 +

+

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

+ コンピュータは、大量の計算を行える計算機} + /> + + ) + }, + { + title: <>計算機の歴史, + content: ( + <> +

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

+

+ 歴史を振り返ると、たとえば昔の日本では、中国から伝わった + そろばん 🧮{' '} + が計算機の主役でしたね。 +

+ + 昔の日本で「計算機」といえば +
+ そろばんだった + + } + /> +

+ 一方、海の向こうのアメリカでは、1890年に「 + タビュレーティングマシン + 」という計算機が台頭しました。 +

+

+ Hollerith_census_machine_at_the_Computer_History_Museum + シリコンバレーのコンピュータ歴史博物館に展示されているタビュレーティングマシン( + + 撮影: Anton Chiang, CC BY 2.0 + + ) + + } + /> +

+

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

+ + アメリカでは「タビュレーティングマシン」 +
+ という計算機が国勢調査で使われた + + } + /> +

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

+ + ) + }, + { + title: <>計算機「科学」のはじまり, + content: ( + <> +

+ 上記の「タビュレーティングマシン」を皮切りに、計算機は20世紀に入ってどんどん進化していき、アナログだったものが電子化され、今の「コンピュータ」と呼ばれるような機械になっていきました。 +

+ 計算機は20世紀にどんどん進化した} + /> +

+ 一方同時期に、計算機について科学する学問である、 + 「コンピュータサイエンス = 計算機科学 + 」 + も生まれ、進化していきました。コンピュータサイエンスの研究者たちは、「 + + 計算機の作り方や使い方をどう工夫すれば、より効率的に問題を解けるのか + + 」といった問いに取り組んだのです。 +

+ + コンピュータサイエンス: +
+ 計算機の作り方や使い方をどう工夫 +
+ すれば、より効率的に問題を解けるのか + + } + /> +

+ このコンピュータサイエンスの礎を築いた + と言われているのが、英国の数学者である + アラン・チューリング + と、米国の数学者である + アロンゾ・チャーチ + です。ふたりの研究が、学問としてのコンピュータサイエンスの大本になっているのです。 +

+ + アラン・チューリング
+ アロンゾ・チャーチによる +
+ 研究が、コンピュータサイエンスの礎となった + + } + /> + + ) + }, + { + title: <>空想上の計算機, + content: ( + <> +

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

+ + チューリングと + チャーチは、 +
+ とある論理の問題に別々に取り組んでいた + + } + /> +

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

+

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

+ + + 問題を解くために、ふたりはそれぞれ +
空想上の計算機」を頭の中で設計した。 +
もしこういった計算機が存在したら…」と +
+ 仮定した上で理論を展開して問題を解いた + + } + /> +

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

+

+ イギリスの数学者のチューリングは「 + チューリングマシン + 」という空想上の計算機を考案しました。ここでは詳しく説明しませんが、 + + このチューリングマシンの仕組みはシンプルながら、現代のコンピュータの仕組みと非常に似ており、20世紀のコンピュータの発展に大きな影響を与えたのです。 + +

+ + チューリングは、「 + チューリングマシン」 +
+ という、現代のコンピュータに似ている +
+ 空想上の計算機を頭の中で考えた + + } + /> +

+ 一方、ほぼ時を同じくして、アメリカの数学者のチャーチは「 + ラムダ計算 + 」という空想上の計算機を考案しました。では、この「 + ラムダ計算 + 」とはどんな仕組みだったのでしょうか。 +

+ + チャーチは、「 + ラムダ計算」という +
+ 空想上の計算機を頭の中で考えた + + } + /> +

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

+ + チャーチが考えた空想上の計算機 +
ラムダ計算 + 」は、弁当箱と仕組みが同じ + + } + /> + + ) + }, + { + title: <>ラムダ計算と弁当箱, + content: ( + <> +

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

+

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

+ λA.B C +

+ 上のラムダ計算の記述式は、以下の弁当箱とまったく同じことを表しています。 +

+ + 上のラムダ計算の記述式は、 +
+ この弁当箱とまったく同じ +
+

+ 上の弁当箱は、 + すると 🅱️{' '} + になります。 + +

+ +

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

+ λA.B C + + B +

+ もちろん、もっと複雑なラムダ計算の記述式もあります。たとえば、こちらをご覧ください。この記述式は、何を表しているか分かりますか? +

+ λA.(λB.A(B B))(λB.A(B B)) +

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

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

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

+ , + , + 🍱 + ]} + description={ + <> + 本稿では、実はラムダ計算を教えていた。 +
+ ラムダ計算の記述式は見た目が複雑なので、 +
+ + という形で教える +
+ ことで、とっつきやすくしていた。 + + } + /> + + ) + }, + { + title: <>村人の質問に戻ると…, + content: ( + <> +

ここで、ラムダ村の村人の質問に戻りましょう。

+ +

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

+ + ) + } + ]} + /> +

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

+ +

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

+ + ) + } + ]} + /> +

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

+

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

+ , + , + 💻 + ]} + description={ + <> + ラムダ計算は、現代のコンピュータが行える +
+ すべての計算を行うことができる + + } + /> +

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

+ 🍱, + , + 💻 + ]} + description={ + <> + 弁当箱も、現代のコンピュータが行える +
+ すべての計算を行うことができる + + } + /> +

+ チャーチが考案した「ラムダ計算」は、少なくとも当時は空想上の計算機でした。 + + 当時は今のようなコンピュータも、プログラミング言語もありませんでしたから、ラムダ計算の記述式を書いても、自動で実行することはできませんでした。 + +

+ 👨🏻‍🦳, + 💭, + + ]} + description={ + <> + 「ラムダ計算」はあくまで空想上の +
+ 計算機。実際には存在しなかった + + } + /> +

+ しかし、「 + + これから先にどんなに強力な計算機が登場しても、その計算機が行える計算ならば、ラムダ計算でも『理論上は』行うことができる + + 」と、 + 1930年代に証明された + のです。 +

+ + ), + footer: { + content: ( + <> +

+ ちなみに:{' '} + チャーチが考案したラムダ計算だけでなく、チューリングが考案した空想上の計算機「チューリングマシン」も、ラムダ計算と同じく、現代のコンピュータが行えるすべての計算を行うことができると証明されました。 +

+ + ) + } + }, + { + title: <>ラムダ計算の影響, + content: ( + <> +

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

+ ✨, + , + + ]} + description={ + <> + ラムダ計算は、コンピュータサイエンスの +
+ 発展に大きな影響を与えた + + } + /> +

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

+

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

+ Python言語} + /> +

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

+ (lambda A: 'B')('C') +

+ 上のコードは、先ほどの以下のラムダ計算と全く同じ処理をします。 +

+ λA.B C +

+ 先ほどのラムダ計算では、結果は「B」になりました。同じように、上のPythonのコードも、実行すると結果は「B」になります。 +

+ (lambda A: 'B')('C') + + 'B' +

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

+ + ) + }, + { + title: <>工夫すること, + content: ( + <> +

+ そろそろ終わりが近づいてきましたが、最後に「 + コンピュータサイエンス = 計算機科学 + 」についてもう一言だけお話をさせてください。 +

+

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

+

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

+ 弁当箱の基本の法則は非常にシンプル + + + + + + + + +

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

+ + 弁当箱を工夫すれば、四則演算や、 +
+ 条件分岐や、繰り返しを行うことができる + + } + /> +

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

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

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

+

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

+ + シンプルでも工夫次第で +
+ 複雑な計算ができる弁当箱に、 +
+ コンピュータサイエンスのエッセンスが +
+ 詰まっている + + } + /> + + ) + }, + { + title: <>コンピュータサイエンスの他の分野でも同じ, + content: ( + <> +

+ 今回は時間の都合で、たくさんあるコンピュータサイエンスの題材のうち、ラムダ計算(弁当箱)しか紹介できませんでした。 +

+

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

+

+ たとえば、「 + + コンピュータをどう工夫して + 使えば、美しいCGや、人工知能や、仮想通貨が作れるだろう? + + 」といった感じですね。 +

+ + コンピュータをどう工夫して使えば、 +
+ 美しいCGや、人工知能や、 +
+ 仮想通貨が作れるだろう? + + } + /> +

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

+ + ) + }, + { + type: 'summary', + title: <>まとめ, + content: ( + <> +

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

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

最後に、「その後」の話をしましょう。

+

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

+ + チューリングマシンを考案した +
+ アラン・チューリングは、 +
+ ラムダ計算を考案した +
+ チャーチに弟子入りした + + } + /> +

+ その後チューリングはイギリスに戻り、第2次世界大戦でドイツ軍の暗号通信「エニグマ」を解読しました。その後、彼は人工知能の分野でも先駆的な役割を果たし、「人工知能の父」とも呼ばれるようになりました。 +

+ チューリングは「人工知能の父」に} + /> +

+ 英国の数学者だったチューリングは同性愛者で、当時は同性愛行為が違法だったため、若い男性との性的関係を持ったことが発覚し有罪になりました。彼は薬品投与による「化学的去勢」を受け続け、42歳になる直前に毒物を服用して亡くなってしまいました。 +

+

+ チューリングが亡くなってから55年後の2009年、英政府はチューリングに対する迫害を謝罪し、2013年には亡きチューリングに恩赦が与えられました。 +

+

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

+ + ) + }, + { + title: <>その後: ラムダ村, + content: ( + <> +

ではその後、ラムダ村はどうなったかというと…

+

+ 村人たち + は、何でも計算できる弁当箱を村の外の人たちに売りさばき、大金持ちになろうと頑張っています。 +

+ 弁当箱を売りさばいて稼ぐぞ!} + /> +

+ 悪魔 + は暇になったので、日々ミニオン + に新しい芸を覚えさせようとしていますが、なかなかうまくいっていません。 +

+ + ミニオン、「おすわり」しなさい! +
+ 何度言ったらわかるんだ! + + } + /> +

+ そして、年頃になったサヤちゃん + は、好きなアーティストのコンサートにもっと参戦したいからと言って、ラムダ村を出ていきました。 +

+ 今日も自担が尊い〜} + /> +

+ 以上でおしまいです!ここまでお付き合いくださり、本当にありがとうございました。 +

+ + ), + footer: { + content: ( + <> + +

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

+
+                      
+    (b => a(c => b(b)(c)))(b =>
+      a(c => b(b)(c))
+    ))(f => n =>
+    n === 0 ? 1 : n * f(n - 1)
+  )(4)
+)`}
+                      >
+                    
+

+ 上のコードをブラウザの開発者ツールにコピーして実行すると、「 + の階乗」である「 + 24 + 」が出力されます。また、下から2行目にある + 4 + {' '} + をたとえば 5 に変えると、 + の階乗である「120 + 」が出力されます。 +

+

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

+ + } + preview={{ + text: <>続きを読む, + content: ( + <> +

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

+ + ) + }} + /> + + ) + } + } + ]} + /> +) diff --git a/src/contents/16.v2.jp.tsx b/src/contents/16.v2.jp.tsx deleted file mode 100644 index 49e2a8d04..000000000 --- a/src/contents/16.v2.jp.tsx +++ /dev/null @@ -1,1000 +0,0 @@ -import React from 'react' -import EpisodeCardList from 'src/components/EpisodeCardList' -import { - P, - Strong, - InlineHeader, - Em, - ExternalLink, - Img, - CenteredCode, - Pre, - Code, - Ol, - OlLi -} from 'src/components/ContentTags' -import EmojiSeparator from 'src/components/EmojiSeparator' -import EmojiNumber from 'src/components/EmojiNumber' -import ExpressionRunnerSeparator from 'src/components/ExpressionRunnerSeparator' -import H from 'src/components/H' -import Emoji from 'src/components/Emoji' -import CustomEmoji from 'src/components/CustomEmoji' -import BubbleQuotes from 'src/components/BubbleQuotes' -import * as R from 'src/components/Runners' -import CardContent from 'src/components/CardContent' - -export default () => ( - これが最後のページです!, - content: ( - <> -

- これが最後のページです。ここまで読んでくださり、ありがとうございます! -

- お疲れ様でした!} - /> -

- さて、前回の最後に、ラムダ村の村人は次のような質問をしました。 -

- -

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

- - ) - } - ]} - /> -

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

- - そもそも、弁当箱というアイデアは -
- どうやって生まれたのか? - - } - /> -

- そのためには、 - ラムダ村の世界ではなく、現実世界の歴史 - を知る必要があります。 -

- 現実世界の歴史を知る必要がある} - /> -

- というわけで、これから現実世界の話をしますが、お付き合いいただけると嬉しいです。ラムダ村の話からはいったん離れますが、このページの最後で戻ってきます。 -

- - ), - footer: { - content: ( - <> -

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

-

- コンピュータ史に詳しい方のなかには、怒り心頭に発する方が出てくるかもしれません。雑な歴史の紹介であることをお許しください。 -

- - ) - } - }, - { - title: <>そもそもコンピュータとは何か, - content: ( - <> -

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

- そもそもコンピュータとは何か?} - /> -

- 「コンピュータ」というとパソコンやタブレット、スマホ、ロボットを思い浮かべる方が多いかもしれません。 -

- -

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

- - コンピュータは本質的には「計算機」 - - } - /> -

- コンピュータを使えば情報を瞬時に検索できたり、美しいCGを描いたりすることができます。最近はAIを使って顔認証や会話ができるようになりました。 -

-

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

- コンピュータは、大量の計算を行える計算機} - /> - - ) - }, - { - title: <>計算機の歴史, - content: ( - <> -

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

-

- 歴史を振り返ると、たとえば昔の日本では、中国から伝わった - そろばん 🧮{' '} - が計算機の主役でしたね。 -

- - 昔の日本で「計算機」といえば -
- そろばんだった - - } - /> -

- 一方、海の向こうのアメリカでは、1890年に「 - タビュレーティングマシン - 」という計算機が台頭しました。 -

-

- Hollerith_census_machine_at_the_Computer_History_Museum - シリコンバレーのコンピュータ歴史博物館に展示されているタビュレーティングマシン( - - 撮影: Anton Chiang, CC BY 2.0 - - ) - - } - /> -

-

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

- - アメリカでは「タビュレーティングマシン」 -
- という計算機が国勢調査で使われた - - } - /> -

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

- - ) - }, - { - title: <>計算機「科学」のはじまり, - content: ( - <> -

- 上記の「タビュレーティングマシン」を皮切りに、計算機は20世紀に入ってどんどん進化していき、アナログだったものが電子化され、今の「コンピュータ」と呼ばれるような機械になっていきました。 -

- 計算機は20世紀にどんどん進化した} - /> -

- 一方同時期に、計算機について科学する学問である、 - 「コンピュータサイエンス = 計算機科学 - 」 - も生まれ、進化していきました。コンピュータサイエンスの研究者たちは、「 - - 計算機の作り方や使い方をどう工夫すれば、より効率的に問題を解けるのか - - 」といった問いに取り組んだのです。 -

- - コンピュータサイエンス: -
- 計算機の作り方や使い方をどう工夫 -
- すれば、より効率的に問題を解けるのか - - } - /> -

- このコンピュータサイエンスの礎を築いた - と言われているのが、英国の数学者である - アラン・チューリング - と、米国の数学者である - アロンゾ・チャーチ - です。ふたりの研究が、学問としてのコンピュータサイエンスの大本になっているのです。 -

- - アラン・チューリング
- アロンゾ・チャーチによる -
- 研究が、コンピュータサイエンスの礎となった - - } - /> - - ) - }, - { - title: <>空想上の計算機, - content: ( - <> -

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

- - チューリングと - チャーチは、 -
- とある論理の問題に別々に取り組んでいた - - } - /> -

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

-

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

- - - 問題を解くために、ふたりはそれぞれ -
空想上の計算機」を頭の中で設計した。 -
もしこういった計算機が存在したら…」と -
- 仮定した上で理論を展開して問題を解いた - - } - /> -

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

-

- イギリスの数学者のチューリングは「 - チューリングマシン - 」という空想上の計算機を考案しました。ここでは詳しく説明しませんが、 - - このチューリングマシンの仕組みはシンプルながら、現代のコンピュータの仕組みと非常に似ており、20世紀のコンピュータの発展に大きな影響を与えたのです。 - -

- - チューリングは、「 - チューリングマシン」 -
- という、現代のコンピュータに似ている -
- 空想上の計算機を頭の中で考えた - - } - /> -

- 一方、ほぼ時を同じくして、アメリカの数学者のチャーチは「 - ラムダ計算 - 」という空想上の計算機を考案しました。では、この「 - ラムダ計算 - 」とはどんな仕組みだったのでしょうか。 -

- - チャーチは、「 - ラムダ計算」という -
- 空想上の計算機を頭の中で考えた - - } - /> -

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

- - チャーチが考えた空想上の計算機 -
ラムダ計算 - 」は、弁当箱と仕組みが同じ - - } - /> - - ) - }, - { - title: <>ラムダ計算と弁当箱, - content: ( - <> -

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

-

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

- λA.B C -

- 上のラムダ計算の記述式は、以下の弁当箱とまったく同じことを表しています。 -

- - 上のラムダ計算の記述式は、 -
- この弁当箱とまったく同じ -
-

- 上の弁当箱は、 - すると 🅱️{' '} - になります。 - -

- -

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

- λA.B C - - B -

- もちろん、もっと複雑なラムダ計算の記述式もあります。たとえば、こちらをご覧ください。この記述式は、何を表しているか分かりますか? -

- λA.(λB.A(B B))(λB.A(B B)) -

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

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

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

- , - , - 🍱 - ]} - description={ - <> - 本稿では、実はラムダ計算を教えていた。 -
- ラムダ計算の記述式は見た目が複雑なので、 -
- - という形で教える -
- ことで、とっつきやすくしていた。 - - } - /> - - ) - }, - { - title: <>村人の質問に戻ると…, - content: ( - <> -

ここで、ラムダ村の村人の質問に戻りましょう。

- -

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

- - ) - } - ]} - /> -

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

- -

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

- - ) - } - ]} - /> -

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

-

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

- , - , - 💻 - ]} - description={ - <> - ラムダ計算は、現代のコンピュータが行える -
- すべての計算を行うことができる - - } - /> -

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

- 🍱, - , - 💻 - ]} - description={ - <> - 弁当箱も、現代のコンピュータが行える -
- すべての計算を行うことができる - - } - /> -

- チャーチが考案した「ラムダ計算」は、少なくとも当時は空想上の計算機でした。 - - 当時は今のようなコンピュータも、プログラミング言語もありませんでしたから、ラムダ計算の記述式を書いても、自動で実行することはできませんでした。 - -

- 👨🏻‍🦳, - 💭, - - ]} - description={ - <> - 「ラムダ計算」はあくまで空想上の -
- 計算機。実際には存在しなかった - - } - /> -

- しかし、「 - - これから先にどんなに強力な計算機が登場しても、その計算機が行える計算ならば、ラムダ計算でも『理論上は』行うことができる - - 」と、 - 1930年代に証明された - のです。 -

- - ), - footer: { - content: ( - <> -

- ちなみに:{' '} - チャーチが考案したラムダ計算だけでなく、チューリングが考案した空想上の計算機「チューリングマシン」も、ラムダ計算と同じく、現代のコンピュータが行えるすべての計算を行うことができると証明されました。 -

- - ) - } - }, - { - title: <>ラムダ計算の影響, - content: ( - <> -

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

- ✨, - , - - ]} - description={ - <> - ラムダ計算は、コンピュータサイエンスの -
- 発展に大きな影響を与えた - - } - /> -

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

-

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

- Python言語} - /> -

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

- (lambda A: 'B')('C') -

- 上のコードは、先ほどの以下のラムダ計算と全く同じ処理をします。 -

- λA.B C -

- 先ほどのラムダ計算では、結果は「B」になりました。同じように、上のPythonのコードも、実行すると結果は「B」になります。 -

- (lambda A: 'B')('C') - - 'B' -

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

- - ) - }, - { - title: <>工夫すること, - content: ( - <> -

- そろそろ終わりが近づいてきましたが、最後に「 - コンピュータサイエンス = 計算機科学 - 」についてもう一言だけお話をさせてください。 -

-

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

-

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

- 弁当箱の基本の法則は非常にシンプル - - - - - - - - -

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

- - 弁当箱を工夫すれば、四則演算や、 -
- 条件分岐や、繰り返しを行うことができる - - } - /> -

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

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

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

-

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

- - シンプルでも工夫次第で -
- 複雑な計算ができる弁当箱に、 -
- コンピュータサイエンスのエッセンスが -
- 詰まっている - - } - /> - - ) - }, - { - title: <>コンピュータサイエンスの他の分野でも同じ, - content: ( - <> -

- 今回は時間の都合で、たくさんあるコンピュータサイエンスの題材のうち、ラムダ計算(弁当箱)しか紹介できませんでした。 -

-

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

-

- たとえば、「 - - コンピュータをどう工夫して - 使えば、美しいCGや、人工知能や、仮想通貨が作れるだろう? - - 」といった感じですね。 -

- - コンピュータをどう工夫して使えば、 -
- 美しいCGや、人工知能や、 -
- 仮想通貨が作れるだろう? - - } - /> -

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

- - ) - }, - { - type: 'summary', - title: <>まとめ, - content: ( - <> -

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

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

最後に、「その後」の話をしましょう。

-

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

- - チューリングマシンを考案した -
- アラン・チューリングは、 -
- ラムダ計算を考案した -
- チャーチに弟子入りした - - } - /> -

- その後チューリングはイギリスに戻り、第2次世界大戦でドイツ軍の暗号通信「エニグマ」を解読しました。その後、彼は人工知能の分野でも先駆的な役割を果たし、「人工知能の父」とも呼ばれるようになりました。 -

- チューリングは「人工知能の父」に} - /> -

- 英国の数学者だったチューリングは同性愛者で、当時は同性愛行為が違法だったため、若い男性との性的関係を持ったことが発覚し有罪になりました。彼は薬品投与による「化学的去勢」を受け続け、42歳になる直前に毒物を服用して亡くなってしまいました。 -

-

- チューリングが亡くなってから55年後の2009年、英政府はチューリングに対する迫害を謝罪し、2013年には亡きチューリングに恩赦が与えられました。 -

-

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

- - ) - }, - { - title: <>その後: ラムダ村, - content: ( - <> -

ではその後、ラムダ村はどうなったかというと…

-

- 村人たち - は、何でも計算できる弁当箱を村の外の人たちに売りさばき、大金持ちになろうと頑張っています。 -

- 弁当箱を売りさばいて稼ぐぞ!} - /> -

- 悪魔 - は暇になったので、日々ミニオン - に新しい芸を覚えさせようとしていますが、なかなかうまくいっていません。 -

- - ミニオン、「おすわり」しなさい! -
- 何度言ったらわかるんだ! - - } - /> -

- そして、年頃になったサヤちゃん - は、好きなアーティストのコンサートにもっと参戦したいからと言って、ラムダ村を出ていきました。 -

- 今日も自担が尊い〜} - /> -

- 以上でおしまいです!ここまでお付き合いくださり、本当にありがとうございました。 -

- - ), - footer: { - content: ( - <> - -

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

-
-                      
-    (b => a(c => b(b)(c)))(b =>
-      a(c => b(b)(c))
-    ))(f => n =>
-    n === 0 ? 1 : n * f(n - 1)
-  )(4)
-)`}
-                      >
-                    
-

- 上のコードをブラウザの開発者ツールにコピーして実行すると、「 - の階乗」である「 - 24 - 」が出力されます。また、下から2行目にある - 4 - {' '} - をたとえば 5 に変えると、 - の階乗である「120 - 」が出力されます。 -

-

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

- - } - preview={{ - text: <>続きを読む, - content: ( - <> -

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

- - ) - }} - /> - - ) - } - } - ]} - /> -) diff --git a/src/contents/2.jp.tsx b/src/contents/2.jp.tsx index 5f4ca258b..22d8c9a88 100644 --- a/src/contents/2.jp.tsx +++ b/src/contents/2.jp.tsx @@ -1,4 +1,613 @@ -import React from 'react' +/** @jsx jsx */ +import { css, jsx } from '@emotion/core' import EpisodeCardList from 'src/components/EpisodeCardList' +import { + InlineHeader, + P, + Strong, + Em, + Ul, + UlLi +} from 'src/components/ContentTags' +import CustomEmoji from 'src/components/CustomEmoji' +import EmojiSeparator from 'src/components/EmojiSeparator' +import EmojiNumber from 'src/components/EmojiNumber' +import Emoji from 'src/components/Emoji' +import H from 'src/components/H' +import * as R from 'src/components/Runners' +import YesNoButtons from 'src/components/YesNoButtons' +import ExpressionRunnerSeparator from 'src/components/ExpressionRunnerSeparator' +import NextLessonButton from 'src/components/NextLessonButton' +import InlineBorder from 'src/components/InlineBorder' -export default () => +export const TwoPlusFour = () => ( + <> + +

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

+ + + + が4回繰り返される + + + + {' '} + を計算できました! + + +) + +export const Conclusion = () => ( + <> +

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

+ + 繰り返しの機能を使えば、 +
+ 確実に足し算や引き算を行うことができる! + + } + /> + +) + +export default () => ( + 繰り返しの機能, + content: ( + <> +

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

+ 🌲, + 🙂, + , + 🙂, + 🌲 + ]} + description={<>ラムダ村の村人と、計算箱} + /> +

+ そして、足し算を可能にする「 + 1を足す機能{' '} + + 」や、引き算を可能にする「 + 1を引く機能{' '} + 」 について紹介しました。 +

+ , + , + + ]} + description={<>1を足す機能と1を引く機能} + /> +

+ 今回は、3つめの計算箱の機能である「 + 繰り返しの機能 🔁 + 」について説明します。 +

+ ✨, 🔁, ]} + description={<>繰り返しの機能} + /> +

+ まずは + + からはじめましょう! +

+ + ) + }, + { + type: 'yesNoQuiz', + title: ( + <> + + + ), + // CHANGE QUIZ: Suppose that they want to do 10 - 9 ... are they doing it right or not? The answer should be no, they made a mistake + content: ( + <> +

+ あるラムダ村の村人は、計算箱を使って {' '} + {' '} + を計算しようとしていました。 +

+ , + , + , + 🤔, + + ]} + description={ + <> + ラムダ村の村人は計算が苦手だったので、 +
+ 簡単な計算でも計算箱に頼っていたのです。 + + } + /> +

+ というわけでラムダ村の村人は、以下のような計算箱を + + しようとしました。 +

+ + 😉「これで {' '} + を計算しよう!」 + +

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

+ + + ) + }, + { + title: ( + <> + + + ), + content: ( + <> +

+ + +

+ +

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

+ + {' '} + を計算できなかった! + + } + /> +

どうしてこうなったか、お分かりでしょうか?

+ + ) + }, + { + title: ( + <> + {' '} + の数を間違えないようにするには + + ), + content: ( + <> +

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

+ ❌, + , + + ]} + description={ + <> + の数が間違っていた + + } + /> +

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

+ , + , + , + , + , + , + , + + ]} + description={ + <> + {' '} + が8個必要だったが、7個しかなかった + + } + /> +

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

+ , + 🤔, + + ]} + description={ + <> + どうすれば、 + や{' '} + の数を間違えずにすむのか? + + } + /> + + ) + }, + { + title: <>繰り返しの機能, + content: ( + <> +

+ 実は計算箱には、こういったミスを防ぐために役立つ「 + 繰り返しの機能 🔁 + 」が備わっています。 +

+ ✨, 🔁, ]} + description={<>繰り返しの機能} + /> +

+ どんな機能か紹介しましょう。 + : +

+ +

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

+ + ) + }, + { + title: ( + <> + を繰り返す + + ), + content: ( + <> +

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

+ + + + の下に {' '} + が8個出現しました + +

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

+ + +
, + + ]} + /> + + , + , + , + , + , + , + , + + ]} + description={ + <> + が8回繰り返される + + } + /> +

+ ということは {' '} + を計算してくれるので、結果は{' '} + になります。 + +

+ +

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

+ + ) + }, + { + title: ( + <> + も繰り返せる + + ), + content: ( + <> +

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

+ +

+ こうすれば、 + {' '} + を計算できるというわけですね。 +

+ + ) + }, + { + title: <>繰り返しの機能, + content: ( + <> +

つまり、下の計算箱のように、

+ +
    + + + の左側に何らかの数字{' '} + + + {' '} + が入っている場合、 + + + + + すると、 + が{' '} + 回分繰り返される。 + + +
+

+ これが、計算箱の「 + 繰り返しの機能 🔁 + 」です。 +

+ ✨, 🔁, ]} + description={<>繰り返しの機能} + /> +

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

+ + を{' '} + 回分繰り返す + + + ) + }, + { + title: ( + <> + 🅰️ 🅱️ を計算するには + + ), + content: ( + <> +

+ ということは、もし例えば 🅰️ {' '} + 🅱️{' '} + を計算箱で計算したかったら、以下のような計算箱を用意すればいいのです。 +

+ + 🅰️ 🅱️ を計算 + +

+ たとえば、 + {' '} + を計算するには、🅰️ に{' '} + を、🅱️ に{' '} + を入れます。 +

+ +

+ 後は + + するだけで、 + {' '} + を計算してくれます。 +

+ + を3回繰り返します + + + + {' '} + を計算できました! + +

+ このようにすれば、 + の数を間違えることはありませんね! +

+ + ) + }, + { + title: <>引き算も同じ, + content: ( + <> +

+ 引き算でも同じです。🅰️ {' '} + 🅱️{' '} + を計算するには、以下のような計算箱を使えばできます。 +

+ + 🅰️ 🅱️ を計算 + + + ) + }, + { + title: <>確実に足し算や引き算を行う, + content: ( + <> + + + ) + }, + { + title: <>ラムダ村にとって、計算箱は必要不可欠, + content: ( + <> +

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

+ 🌲, + 😍, + , + 😍, + 🌲 + ]} + description={<>「計算箱が無いとやってけない!」} + /> +

+ 村人たちは、計算箱の + + 「1を足す機能{' '} + + 」、「 + 1を引く機能{' '} + + 」、そして今回紹介した「 + 繰り返しの機能 🔁 + 」を組み合わせる + + ことで、足し算や引き算を正確に行っていたのです。 +

+ , + , + 🔁 + ]} + description={ + <> + 計算箱の3つの機能を組み合わせることで、 +
+ 足し算や引き算を正確に行うことができる + + } + /> +

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

+ +

詳しくは次のページでお話します!

+ + + ) + } + ]} + /> +) diff --git a/src/contents/2.v2.jp.tsx b/src/contents/2.v2.jp.tsx deleted file mode 100644 index 22d8c9a88..000000000 --- a/src/contents/2.v2.jp.tsx +++ /dev/null @@ -1,613 +0,0 @@ -/** @jsx jsx */ -import { css, jsx } from '@emotion/core' -import EpisodeCardList from 'src/components/EpisodeCardList' -import { - InlineHeader, - P, - Strong, - Em, - Ul, - UlLi -} from 'src/components/ContentTags' -import CustomEmoji from 'src/components/CustomEmoji' -import EmojiSeparator from 'src/components/EmojiSeparator' -import EmojiNumber from 'src/components/EmojiNumber' -import Emoji from 'src/components/Emoji' -import H from 'src/components/H' -import * as R from 'src/components/Runners' -import YesNoButtons from 'src/components/YesNoButtons' -import ExpressionRunnerSeparator from 'src/components/ExpressionRunnerSeparator' -import NextLessonButton from 'src/components/NextLessonButton' -import InlineBorder from 'src/components/InlineBorder' - -export const TwoPlusFour = () => ( - <> - -

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

- - - - が4回繰り返される - - - - {' '} - を計算できました! - - -) - -export const Conclusion = () => ( - <> -

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

- - 繰り返しの機能を使えば、 -
- 確実に足し算や引き算を行うことができる! - - } - /> - -) - -export default () => ( - 繰り返しの機能, - content: ( - <> -

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

- 🌲, - 🙂, - , - 🙂, - 🌲 - ]} - description={<>ラムダ村の村人と、計算箱} - /> -

- そして、足し算を可能にする「 - 1を足す機能{' '} - - 」や、引き算を可能にする「 - 1を引く機能{' '} - 」 について紹介しました。 -

- , - , - - ]} - description={<>1を足す機能と1を引く機能} - /> -

- 今回は、3つめの計算箱の機能である「 - 繰り返しの機能 🔁 - 」について説明します。 -

- ✨, 🔁, ]} - description={<>繰り返しの機能} - /> -

- まずは - - からはじめましょう! -

- - ) - }, - { - type: 'yesNoQuiz', - title: ( - <> - - - ), - // CHANGE QUIZ: Suppose that they want to do 10 - 9 ... are they doing it right or not? The answer should be no, they made a mistake - content: ( - <> -

- あるラムダ村の村人は、計算箱を使って {' '} - {' '} - を計算しようとしていました。 -

- , - , - , - 🤔, - - ]} - description={ - <> - ラムダ村の村人は計算が苦手だったので、 -
- 簡単な計算でも計算箱に頼っていたのです。 - - } - /> -

- というわけでラムダ村の村人は、以下のような計算箱を - - しようとしました。 -

- - 😉「これで {' '} - を計算しよう!」 - -

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

- - - ) - }, - { - title: ( - <> - - - ), - content: ( - <> -

- - -

- -

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

- - {' '} - を計算できなかった! - - } - /> -

どうしてこうなったか、お分かりでしょうか?

- - ) - }, - { - title: ( - <> - {' '} - の数を間違えないようにするには - - ), - content: ( - <> -

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

- ❌, - , - - ]} - description={ - <> - の数が間違っていた - - } - /> -

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

- , - , - , - , - , - , - , - - ]} - description={ - <> - {' '} - が8個必要だったが、7個しかなかった - - } - /> -

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

- , - 🤔, - - ]} - description={ - <> - どうすれば、 - や{' '} - の数を間違えずにすむのか? - - } - /> - - ) - }, - { - title: <>繰り返しの機能, - content: ( - <> -

- 実は計算箱には、こういったミスを防ぐために役立つ「 - 繰り返しの機能 🔁 - 」が備わっています。 -

- ✨, 🔁, ]} - description={<>繰り返しの機能} - /> -

- どんな機能か紹介しましょう。 - : -

- -

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

- - ) - }, - { - title: ( - <> - を繰り返す - - ), - content: ( - <> -

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

- - - - の下に {' '} - が8個出現しました - -

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

- - -
, - - ]} - /> - - , - , - , - , - , - , - , - - ]} - description={ - <> - が8回繰り返される - - } - /> -

- ということは {' '} - を計算してくれるので、結果は{' '} - になります。 - -

- -

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

- - ) - }, - { - title: ( - <> - も繰り返せる - - ), - content: ( - <> -

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

- -

- こうすれば、 - {' '} - を計算できるというわけですね。 -

- - ) - }, - { - title: <>繰り返しの機能, - content: ( - <> -

つまり、下の計算箱のように、

- -
    - - - の左側に何らかの数字{' '} - - - {' '} - が入っている場合、 - - - - - すると、 - が{' '} - 回分繰り返される。 - - -
-

- これが、計算箱の「 - 繰り返しの機能 🔁 - 」です。 -

- ✨, 🔁, ]} - description={<>繰り返しの機能} - /> -

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

- - を{' '} - 回分繰り返す - - - ) - }, - { - title: ( - <> - 🅰️ 🅱️ を計算するには - - ), - content: ( - <> -

- ということは、もし例えば 🅰️ {' '} - 🅱️{' '} - を計算箱で計算したかったら、以下のような計算箱を用意すればいいのです。 -

- - 🅰️ 🅱️ を計算 - -

- たとえば、 - {' '} - を計算するには、🅰️ に{' '} - を、🅱️ に{' '} - を入れます。 -

- -

- 後は - - するだけで、 - {' '} - を計算してくれます。 -

- - を3回繰り返します - - - - {' '} - を計算できました! - -

- このようにすれば、 - の数を間違えることはありませんね! -

- - ) - }, - { - title: <>引き算も同じ, - content: ( - <> -

- 引き算でも同じです。🅰️ {' '} - 🅱️{' '} - を計算するには、以下のような計算箱を使えばできます。 -

- - 🅰️ 🅱️ を計算 - - - ) - }, - { - title: <>確実に足し算や引き算を行う, - content: ( - <> - - - ) - }, - { - title: <>ラムダ村にとって、計算箱は必要不可欠, - content: ( - <> -

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

- 🌲, - 😍, - , - 😍, - 🌲 - ]} - description={<>「計算箱が無いとやってけない!」} - /> -

- 村人たちは、計算箱の - - 「1を足す機能{' '} - - 」、「 - 1を引く機能{' '} - - 」、そして今回紹介した「 - 繰り返しの機能 🔁 - 」を組み合わせる - - ことで、足し算や引き算を正確に行っていたのです。 -

- , - , - 🔁 - ]} - description={ - <> - 計算箱の3つの機能を組み合わせることで、 -
- 足し算や引き算を正確に行うことができる - - } - /> -

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

- -

詳しくは次のページでお話します!

- - - ) - } - ]} - /> -) diff --git a/src/contents/3.jp.tsx b/src/contents/3.jp.tsx index 5f4ca258b..09911507b 100644 --- a/src/contents/3.jp.tsx +++ b/src/contents/3.jp.tsx @@ -1,4 +1,705 @@ import React from 'react' import EpisodeCardList from 'src/components/EpisodeCardList' +import { + P, + Strong, + Em, + Ul, + UlLi, + Hr, + InlineHeader +} from 'src/components/ContentTags' +import EmojiSeparator from 'src/components/EmojiSeparator' +import ExpressionRunnerSeparator from 'src/components/ExpressionRunnerSeparator' +import YesNoButtons from 'src/components/YesNoButtons' +import CustomEmoji from 'src/components/CustomEmoji' +import Emoji from 'src/components/Emoji' +import EmojiWithText from 'src/components/EmojiWithText' +import H from 'src/components/H' +import BubbleQuotes from 'src/components/BubbleQuotes' +import * as R from 'src/components/Runners' +import NextLessonButton from 'src/components/NextLessonButton' -export default () => +export default () => ( + 悪魔、現る, + content: ( + <> +

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

+ +

村人たちは、悪魔を見て震え上がりました。

+ + ひぇぇ、何も悪いことしていないのに、悪魔がやってきた! +

+ ) + }, + { + type: 'crying', + children:

怖いよー!もうおしまいだ!

+ } + ]} + /> +

悪魔はこうささやきました。

+ + 安心しろ、お前たちの命だけは助けてやる…だが、お前たちが大事にしている + + 計算箱 + + は、すべて没収させてもらうぞ! +

+ ) + }, + { + type: 'scared', + children:

えー!計算箱を没収だって?そんな無慈悲な!

+ } + ]} + /> + + ) + }, + { + title: <>なぜ計算箱を没収?, + content: ( + <> +

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

+ 🌲, + 😈, + , + 🌲 + ]} + /> +

ラムダ村からは、計算箱がすべて無くなってしまいました。

+ + 😈 計算箱は没収だ! + +

+ 足し算や引き算をするのに計算箱に頼り切っていた村人たちは嘆きました。 +

+ 悪魔め、どうして俺らから計算箱を取り上げるんだ!

+ ) + }, + { + type: 'sad', + children: ( +

+ 俺らは計算が大の苦手なんだ。 + 計算箱がないと、足し算や引き算ができなくなって、村の経済活動が成り立たなくなるんだぞ! +

+ ) + } + ]} + /> +

悪魔は答えます。

+ +

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

+

+ お前たちは簡単な計算をするのにでも計算箱に頼り切っているだろう。そんなことだから、いつまでたっても計算が上達しないんだ。 +

+

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

+ + ) + }, + { + type: 'sad', + children:

そんな…勉強なんてしたくないよ!

+ } + ]} + /> + + ) + }, + { + title: <>悪魔からの挑戦状, + content: ( + <> +

+ なんとか計算箱を返してもらえないか、村人たちは悪魔にお願いしました。 +

+ お願いだ、何でもするから計算箱を返してくれないか?

+ ) + }, + { + type: 'crying', + children:

頼む、この通りだ!

+ }, + { + type: 'devil', + children: ( +

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

+ ) + } + ]} + /> +

悪魔が言うチャンスとは、どういうことなのでしょうか?

+ +

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

+

+ 日頃から頭を使ってこなかったお前たちには、おそらくムリだろうがな!わはは! +

+ + ) + }, + { + type: 'sad', + children:

パ、パズルだって…?俺らに解けるかなあ?

+ }, + { + type: 'brave', + children: ( + <> +

+ 難しそう…しかし、やるしかない!計算箱を取り返すんだ! +

+

+ 悪魔よ、その挑戦、受けて立つぞ! +

+ + ) + }, + { + type: 'devil', + children: ( + <> +

ほほう…いい度胸だ。では、はじめよう!

+ + ) + } + ]} + /> +

+ こうして、村人たちは計算箱を返してもらうべく、悪魔が出題するパズルに挑戦することになりました。 +

+ + + ) + }, + { + title: ( + <> + + + ), + content: ( + <> + +

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

+ + ) + } + ]} + /> + + の一例 + +
    + + このように、 + + には、実際の弁当箱のように、 + + 四角の中にいくつかマスがあり、それぞれのマスの中に料理が入っています + + 。 + + + 上の例だと、上段には + + が入っており、 + + + 下段には + + がふたつ入っています。 + +
+ +

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

+ + ) + }, + { + type: 'devil', + children: ( + <> +

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

+

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

+ + ) + } + ]} + /> + + ) + }, + { + title: ( + <> + 弁当箱を + + する + + ), + content: ( + <> +

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

+ + +

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

+ + ) + } + ]} + /> + + + + +

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

+

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

+ + ) + }, + { + type: 'thinking', + children: ( + <> +

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

+ + ) + } + ]} + /> + + ) + }, + { + title: ( + <> + 他の + + + ), + content: ( + <> +

+ + は、どれもある法則に則って + + されます。 +

+ +

+ その法則について語る前に、まずは他の + + を見てみましょう。 +

+
+

+ こちらは、上段には + + 、下段には + と + + が入っています。 + +

+ +

+ 今回は + が残りました。 +

+
+

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

+

+ こちらは、上段には + + が、下段には + + がふたつ入っています。 + +

+ +

+ 今回は + {' '} + が残りました。 +

+
+

+ こちらは、上段には + + 、下段には + と + + が入っています。 + +

+ +

+ 今回は + が残りました。 +

+
+

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

+ + + ) + }, + { + title: <>法則が分かった?, + content: ( + <> + + +

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

+ + ) + }, + { + type: 'thinking', + children: ( + <> +

う、うーん…

+ + ) + }, + { + type: 'devil', + children: ( + <> +

+ 参考までに、今回紹介した4つの例をもう一度載せておこう。 +

+ + ) + } + ]} + /> +

+ 例その1: +

+ + + +

+ 例その2: +

+ + + +

+ 例その3: +

+ + + +

+ 例その4: +

+ + + + +

ふーむ、なんとなく法則が見えてきたような…?

+ + ) + }, + { + type: 'devil', + children: ( + <> +

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

+ + ) + }, + { + type: 'crying', + children: ( + <> +

自信ないけど…やるしかない!

+ + ) + } + ]} + /> + + ) + }, + { + type: 'yesNoQuiz', + title: ( + <> + + 、その1 + + ), + content: ( + <> +

+ これまでに4種類の + + を紹介しましたが、どれも + + する際にある法則に従っています。それが分かったかどうか、 ふたつの + + でチェックしてみましょう! +

+ +

+ {' '} + : +

+ +

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

+ + + + ) + }, + { + type: 'yesNoQuiz', + title: ( + <> + + 、その2 + + ), + content: ( + <> +

+ こちらの + を + + すると、 +

+ +

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

+ + + + ) + }, + { + title: <>答え合わせ, + content: ( + <> +

それぞれ実行すると、次のようになります。

+

+ 1問目: +

+ +

+ つまり + + 1問目の + + + でした。 +

+

+ 2問目: +

+ +

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

+ + ) + }, + { + title: <>法則は次のページに, + content: ( + <> +

+ 果たして、ラムダ村の村人は、 + + の法則が分かったのでしょうか? +

+ +

+ 法則が分かった方も、よく分からなかった方も、ぜひ次に進んでみてください。 +

+ + + ) + } + ]} + /> +) diff --git a/src/contents/3.v2.jp.tsx b/src/contents/3.v2.jp.tsx deleted file mode 100644 index 09911507b..000000000 --- a/src/contents/3.v2.jp.tsx +++ /dev/null @@ -1,705 +0,0 @@ -import React from 'react' -import EpisodeCardList from 'src/components/EpisodeCardList' -import { - P, - Strong, - Em, - Ul, - UlLi, - Hr, - InlineHeader -} from 'src/components/ContentTags' -import EmojiSeparator from 'src/components/EmojiSeparator' -import ExpressionRunnerSeparator from 'src/components/ExpressionRunnerSeparator' -import YesNoButtons from 'src/components/YesNoButtons' -import CustomEmoji from 'src/components/CustomEmoji' -import Emoji from 'src/components/Emoji' -import EmojiWithText from 'src/components/EmojiWithText' -import H from 'src/components/H' -import BubbleQuotes from 'src/components/BubbleQuotes' -import * as R from 'src/components/Runners' -import NextLessonButton from 'src/components/NextLessonButton' - -export default () => ( - 悪魔、現る, - content: ( - <> -

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

- -

村人たちは、悪魔を見て震え上がりました。

- - ひぇぇ、何も悪いことしていないのに、悪魔がやってきた! -

- ) - }, - { - type: 'crying', - children:

怖いよー!もうおしまいだ!

- } - ]} - /> -

悪魔はこうささやきました。

- - 安心しろ、お前たちの命だけは助けてやる…だが、お前たちが大事にしている - - 計算箱 - - は、すべて没収させてもらうぞ! -

- ) - }, - { - type: 'scared', - children:

えー!計算箱を没収だって?そんな無慈悲な!

- } - ]} - /> - - ) - }, - { - title: <>なぜ計算箱を没収?, - content: ( - <> -

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

- 🌲, - 😈, - , - 🌲 - ]} - /> -

ラムダ村からは、計算箱がすべて無くなってしまいました。

- - 😈 計算箱は没収だ! - -

- 足し算や引き算をするのに計算箱に頼り切っていた村人たちは嘆きました。 -

- 悪魔め、どうして俺らから計算箱を取り上げるんだ!

- ) - }, - { - type: 'sad', - children: ( -

- 俺らは計算が大の苦手なんだ。 - 計算箱がないと、足し算や引き算ができなくなって、村の経済活動が成り立たなくなるんだぞ! -

- ) - } - ]} - /> -

悪魔は答えます。

- -

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

-

- お前たちは簡単な計算をするのにでも計算箱に頼り切っているだろう。そんなことだから、いつまでたっても計算が上達しないんだ。 -

-

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

- - ) - }, - { - type: 'sad', - children:

そんな…勉強なんてしたくないよ!

- } - ]} - /> - - ) - }, - { - title: <>悪魔からの挑戦状, - content: ( - <> -

- なんとか計算箱を返してもらえないか、村人たちは悪魔にお願いしました。 -

- お願いだ、何でもするから計算箱を返してくれないか?

- ) - }, - { - type: 'crying', - children:

頼む、この通りだ!

- }, - { - type: 'devil', - children: ( -

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

- ) - } - ]} - /> -

悪魔が言うチャンスとは、どういうことなのでしょうか?

- -

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

-

- 日頃から頭を使ってこなかったお前たちには、おそらくムリだろうがな!わはは! -

- - ) - }, - { - type: 'sad', - children:

パ、パズルだって…?俺らに解けるかなあ?

- }, - { - type: 'brave', - children: ( - <> -

- 難しそう…しかし、やるしかない!計算箱を取り返すんだ! -

-

- 悪魔よ、その挑戦、受けて立つぞ! -

- - ) - }, - { - type: 'devil', - children: ( - <> -

ほほう…いい度胸だ。では、はじめよう!

- - ) - } - ]} - /> -

- こうして、村人たちは計算箱を返してもらうべく、悪魔が出題するパズルに挑戦することになりました。 -

- - - ) - }, - { - title: ( - <> - - - ), - content: ( - <> - -

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

- - ) - } - ]} - /> - - の一例 - -
    - - このように、 - - には、実際の弁当箱のように、 - - 四角の中にいくつかマスがあり、それぞれのマスの中に料理が入っています - - 。 - - - 上の例だと、上段には - - が入っており、 - - - 下段には - - がふたつ入っています。 - -
- -

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

- - ) - }, - { - type: 'devil', - children: ( - <> -

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

-

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

- - ) - } - ]} - /> - - ) - }, - { - title: ( - <> - 弁当箱を - - する - - ), - content: ( - <> -

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

- - -

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

- - ) - } - ]} - /> - - - - -

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

-

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

- - ) - }, - { - type: 'thinking', - children: ( - <> -

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

- - ) - } - ]} - /> - - ) - }, - { - title: ( - <> - 他の - - - ), - content: ( - <> -

- - は、どれもある法則に則って - - されます。 -

- -

- その法則について語る前に、まずは他の - - を見てみましょう。 -

-
-

- こちらは、上段には - - 、下段には - と - - が入っています。 - -

- -

- 今回は - が残りました。 -

-
-

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

-

- こちらは、上段には - - が、下段には - - がふたつ入っています。 - -

- -

- 今回は - {' '} - が残りました。 -

-
-

- こちらは、上段には - - 、下段には - と - - が入っています。 - -

- -

- 今回は - が残りました。 -

-
-

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

- - - ) - }, - { - title: <>法則が分かった?, - content: ( - <> - - -

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

- - ) - }, - { - type: 'thinking', - children: ( - <> -

う、うーん…

- - ) - }, - { - type: 'devil', - children: ( - <> -

- 参考までに、今回紹介した4つの例をもう一度載せておこう。 -

- - ) - } - ]} - /> -

- 例その1: -

- - - -

- 例その2: -

- - - -

- 例その3: -

- - - -

- 例その4: -

- - - - -

ふーむ、なんとなく法則が見えてきたような…?

- - ) - }, - { - type: 'devil', - children: ( - <> -

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

- - ) - }, - { - type: 'crying', - children: ( - <> -

自信ないけど…やるしかない!

- - ) - } - ]} - /> - - ) - }, - { - type: 'yesNoQuiz', - title: ( - <> - - 、その1 - - ), - content: ( - <> -

- これまでに4種類の - - を紹介しましたが、どれも - - する際にある法則に従っています。それが分かったかどうか、 ふたつの - - でチェックしてみましょう! -

- -

- {' '} - : -

- -

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

- - - - ) - }, - { - type: 'yesNoQuiz', - title: ( - <> - - 、その2 - - ), - content: ( - <> -

- こちらの - を - - すると、 -

- -

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

- - - - ) - }, - { - title: <>答え合わせ, - content: ( - <> -

それぞれ実行すると、次のようになります。

-

- 1問目: -

- -

- つまり - - 1問目の - - - でした。 -

-

- 2問目: -

- -

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

- - ) - }, - { - title: <>法則は次のページに, - content: ( - <> -

- 果たして、ラムダ村の村人は、 - - の法則が分かったのでしょうか? -

- -

- 法則が分かった方も、よく分からなかった方も、ぜひ次に進んでみてください。 -

- - - ) - } - ]} - /> -) diff --git a/src/contents/4.jp.tsx b/src/contents/4.jp.tsx index 5f4ca258b..78a23de16 100644 --- a/src/contents/4.jp.tsx +++ b/src/contents/4.jp.tsx @@ -1,4 +1,1017 @@ import React from 'react' import EpisodeCardList from 'src/components/EpisodeCardList' +import { P, Strong, Em, Hr, InlineHeader } from 'src/components/ContentTags' +import BottomRightBadge from 'src/components/BottomRightBadge' +import BubbleQuotes from 'src/components/BubbleQuotes' +import EmojiSeparator from 'src/components/EmojiSeparator' +import Emoji from 'src/components/Emoji' +import EmojiWithText from 'src/components/EmojiWithText' +import EmojiForLetter from 'src/components/EmojiForLetter' +import * as R from 'src/components/Runners' +import ExpressionRunnerSeparator from 'src/components/ExpressionRunnerSeparator' +import H from 'src/components/H' +import NextLessonButton from 'src/components/NextLessonButton' -export default () => +export const BasicRules = ({ + includeFuncUnbound +}: { + includeFuncUnbound?: boolean +}) => ( + <> +

+ 1. 印をつける:{' '} + {' '} + {' '} + {includeFuncUnbound && ( + <> + {' '} + + )} + +

+ +

+ 2. 一致チェック:{' '} + {' '} + {' '} + +

+ +

+ 3. コピーする:{' '} + {' '} + ↘️{' '} + +

+ +

+ 4. 消す: 💥{' '} + {' '} + +

+ + + + +) + +export default () => ( + 法則が分かった!, + content: ( + <> + +

+ どうやら、ラムダ村の村人たちは + + の法則を見抜いたようです! +

+ +

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

+ + ) + }, + { + type: 'devil', + children: ( + <> +

+ なんと…本当に分かったというなら、説明してみることだな! +

+ + ) + } + ]} + /> + + ) + }, + { + title: <>下のふたつの料理が同じの場合, + content: ( + <> + +

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

+

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

+ + ) + } + ]} + /> + + 下の料理が同じ (両方とも ) + + + + 上にあった が残る + +
+ + 下の料理が同じ (両方とも ) + + + + 上にあった と{' '} + が残る + + +

+ そして、以下が + + の1問目の答えだ。 +

+ + ) + } + ]} + /> + + 下の料理が同じ (両方とも ) + + + + 上にあった が残る + + + ) + }, + { + title: <>下のふたつの料理が異なる場合, + content: ( + <> + +

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

+

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

+ + ) + } + ]} + /> + + 下の料理が異なる ( と{' '} + ) + + + + 右下にあった が残る + +
+ + 下の料理が異なる ( と{' '} + ) + + + + 右下にあった が残る + + +

+ そして、以下が + + の2問目の答えだ。 +

+ + ) + } + ]} + /> + + 下の料理が異なる ( と{' '} + ) + + + + 右下にあった が残る + + +

どうだ、これが正解だろう!

+ + ) + } + ]} + /> + + ) + }, + { + title: <>正解!, + content: ( + <> + + +

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

+

+ 今まで勉強を怠けてきたわりには、なかなかやるじゃないか。 +

+ + ) + }, + { + type: 'celebrate', + children: ( + <> +

やった!やった!

+ + ) + }, + { + type: 'devil', + children: ( + <> +

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

+ + ) + }, + { + type: 'scared', + children: ( + <> +

えー、なんで?

+ + ) + }, + { + type: 'devil', + children: ( + <> +

+ 次のページから、さらに難しい + + を解いてもらう。そのためには、 + + + の法則を明確にする必要がある。 + +

+ + ) + }, + { + type: 'thinking', + children: ( + <> +

法則を明確にする?どういうこと?

+ + ) + }, + { + type: 'devil', + children: ( + <> +

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

+ + ) + }, + { + type: 'surprised', + children: ( + <> +

えー、そうなのか…

+ + ) + }, + { + type: 'devil', + children: ( + <> +

+ さらに複雑なパズルを解くには、もっと法則をハッキリさせる、すなわち明確化する必要があるんだ。 +

+

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

+ + ) + }, + { + type: 'thinking', + children: ( + <> +

+ うーん、よくわからないけど、とりあえずその明確な法則とやらを聞いてみよう。 +

+ + ) + } + ]} + /> + + ) + }, + { + title: ( + <> + + の明確な法則 + + ), + type: 'summary', + content: ( + <> + +

+ では、 + + の明確な法則をまとめてみよう。 +

+ + ) + } + ]} + /> + + +

続いて、それぞれのステップについて解説していくぞ。

+ + ) + } + ]} + /> + + ) + }, + { + title: ( + <> + 1. 印をつける{' '} + {' '} + {' '} + + + ), + content: ( + <> +

+ それぞれのステップについて、 こちらの + + を使って説明していきます。 +

+ +

+ まず、 + + 上の料理には{' '} + + 、左の料理には + + 、右の料理には + + の印をつけます。 + +

+ , + , + + ]} + /> +

+ +

+ + +

+ に + + の印が、下の + + ふたつにそれぞれ + + と + + の印がついた! +

+ + ) + } + ]} + /> + + ) + }, + { + title: ( + <> + 2. 一致チェック{' '} + {' '} + {' '} + + + ), + content: ( + <> +

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

+ , + , + + ]} + /> +

+ +

+ + +

+ + と + + の + + がついた! +

+ + ) + } + ]} + /> + + ) + }, + { + title: ( + <> + 3. コピーする:{' '} + {' '} + ↘️{' '} + + + ), + content: ( + <> +

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

+ , + ↘️, + + ]} + /> +

+ +

+ + +

+ + の + が + + の部分にコピーされた! +

+ + ) + } + ]} + /> + + ) + }, + { + title: ( + <> + 4. 消す: 💥{' '} + {' '} + + + ), + content: ( + <> +

+ 最後に、 + + と + + が消えます。 + +

+ 💥, + , + + ]} + /> +

+ +

+ + +

+ + と + + が💥になった! +

+ + ) + } + ]} + /> +

+ そして、最終的に + + だけになります。 + +

+ +

以上です!

+ + ) + }, + { + title: <>上にふたつの料理がある場合, + content: ( + <> + +

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

+ + ) + } + ]} + /> + + 上にふたつの料理がある +
(と + ) +
+

+ この場合、上にある + と + + には + + 両方とも + + の印がつきます。 + +

+ + 両方とも + + の印がつく + +

+ そして、 + + が一致したあとに… +

+ +

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

+ +

+ 最後に、 + と + + が消え… +

+ +

+ と + + が残るのです。 +

+ + + ) + }, + { + title: ( + <> + + で見てみましょう + + ), + content: ( + <> +

+ では、最初から最後まで + で見てみましょう。 + 機能を使うと、 + 各ステップを自動で見ていくことができます。 +

+ +

+ こちらは、先ほどの例です。 + +

+ +

+ こちらは、上にふたつの料理がある例です。 + +

+ + + ) + }, + { + type: 'summary', + title: ( + <> + + + ), + content: ( + <> +

というわけで、ここまでをまとめてみましょう。

+ + +

なるほど、そういう仕組みになっていたのか!

+ + ) + }, + { + type: 'thinking', + children: ( + <> +

+ こうやってルールを明確にすれば、パズルが複雑になっても応用が効く気がする。 +

+ + ) + } + ]} + /> + + ) + }, + { + title: <>一致しなかったら?, + content: ( + <> + , + , + + ]} + /> + +

+ では、 + + もし + + と + + が一致しなかったらどうするの? + +

+

+ たとえば下の弁当箱の場合は、 + + と + + が一致しないよね。 +

+ + ) + } + ]} + /> +

+ +

+ +

+ こういう場合は、 + + コピーはせずに、ただ + と + + を消すだけです。 + + +

+ +

+ そして、最終的に + + だけになります。 + +

+ + + ) + }, + { + title: ( + <> + + で見てみましょう + + ), + content: ( + <> +

+ + と + + が一致しなかった場合も、最初から最後まで + で見てみましょう。 +

+ +

+ こちらは、先ほどの例です。 + +

+ +

+ こちらは、上にふたつの料理がある例です。 + +

+ + + ) + }, + { + title: ( + <> + : 一致しなかった場合 + + ), + type: 'summary', + content: ( + <> +

+ + と + + が一致しなかった場合、 + + コピーはせずに、ただ + と + + を消す + + 。 +

+ + + + + ) + }, + { + title: <>以上です!, + content: ( + <> + +

+ 以上が、 + + の明確な法則だ。理解できたかな? +

+ + ) + }, + { + type: 'thinking', + children: ( + <> +

な、なんとか…でも、まだ覚えきれてないなあ。

+ + ) + }, + { + type: 'devil', + children: ( + <> +

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

+ + ) + }, + { + type: 'relieved', + children: ( + <> +

+ ホッ、よかった… (悪魔って意外と優しいんじゃ? + 🤔) +

+ + ) + }, + { + type: 'devil', + children: ( + <> +

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

+ + ) + }, + { + type: 'brave', + children: ( + <> +

望むところだ!

+ + ) + } + ]} + /> + + + ) + } + ]} + /> +) diff --git a/src/contents/4.v2.jp.tsx b/src/contents/4.v2.jp.tsx deleted file mode 100644 index 78a23de16..000000000 --- a/src/contents/4.v2.jp.tsx +++ /dev/null @@ -1,1017 +0,0 @@ -import React from 'react' -import EpisodeCardList from 'src/components/EpisodeCardList' -import { P, Strong, Em, Hr, InlineHeader } from 'src/components/ContentTags' -import BottomRightBadge from 'src/components/BottomRightBadge' -import BubbleQuotes from 'src/components/BubbleQuotes' -import EmojiSeparator from 'src/components/EmojiSeparator' -import Emoji from 'src/components/Emoji' -import EmojiWithText from 'src/components/EmojiWithText' -import EmojiForLetter from 'src/components/EmojiForLetter' -import * as R from 'src/components/Runners' -import ExpressionRunnerSeparator from 'src/components/ExpressionRunnerSeparator' -import H from 'src/components/H' -import NextLessonButton from 'src/components/NextLessonButton' - -export const BasicRules = ({ - includeFuncUnbound -}: { - includeFuncUnbound?: boolean -}) => ( - <> -

- 1. 印をつける:{' '} - {' '} - {' '} - {includeFuncUnbound && ( - <> - {' '} - - )} - -

- -

- 2. 一致チェック:{' '} - {' '} - {' '} - -

- -

- 3. コピーする:{' '} - {' '} - ↘️{' '} - -

- -

- 4. 消す: 💥{' '} - {' '} - -

- - - - -) - -export default () => ( - 法則が分かった!, - content: ( - <> - -

- どうやら、ラムダ村の村人たちは - - の法則を見抜いたようです! -

- -

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

- - ) - }, - { - type: 'devil', - children: ( - <> -

- なんと…本当に分かったというなら、説明してみることだな! -

- - ) - } - ]} - /> - - ) - }, - { - title: <>下のふたつの料理が同じの場合, - content: ( - <> - -

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

-

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

- - ) - } - ]} - /> - - 下の料理が同じ (両方とも ) - - - - 上にあった が残る - -
- - 下の料理が同じ (両方とも ) - - - - 上にあった と{' '} - が残る - - -

- そして、以下が - - の1問目の答えだ。 -

- - ) - } - ]} - /> - - 下の料理が同じ (両方とも ) - - - - 上にあった が残る - - - ) - }, - { - title: <>下のふたつの料理が異なる場合, - content: ( - <> - -

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

-

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

- - ) - } - ]} - /> - - 下の料理が異なる ( と{' '} - ) - - - - 右下にあった が残る - -
- - 下の料理が異なる ( と{' '} - ) - - - - 右下にあった が残る - - -

- そして、以下が - - の2問目の答えだ。 -

- - ) - } - ]} - /> - - 下の料理が異なる ( と{' '} - ) - - - - 右下にあった が残る - - -

どうだ、これが正解だろう!

- - ) - } - ]} - /> - - ) - }, - { - title: <>正解!, - content: ( - <> - - -

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

-

- 今まで勉強を怠けてきたわりには、なかなかやるじゃないか。 -

- - ) - }, - { - type: 'celebrate', - children: ( - <> -

やった!やった!

- - ) - }, - { - type: 'devil', - children: ( - <> -

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

- - ) - }, - { - type: 'scared', - children: ( - <> -

えー、なんで?

- - ) - }, - { - type: 'devil', - children: ( - <> -

- 次のページから、さらに難しい - - を解いてもらう。そのためには、 - - - の法則を明確にする必要がある。 - -

- - ) - }, - { - type: 'thinking', - children: ( - <> -

法則を明確にする?どういうこと?

- - ) - }, - { - type: 'devil', - children: ( - <> -

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

- - ) - }, - { - type: 'surprised', - children: ( - <> -

えー、そうなのか…

- - ) - }, - { - type: 'devil', - children: ( - <> -

- さらに複雑なパズルを解くには、もっと法則をハッキリさせる、すなわち明確化する必要があるんだ。 -

-

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

- - ) - }, - { - type: 'thinking', - children: ( - <> -

- うーん、よくわからないけど、とりあえずその明確な法則とやらを聞いてみよう。 -

- - ) - } - ]} - /> - - ) - }, - { - title: ( - <> - - の明確な法則 - - ), - type: 'summary', - content: ( - <> - -

- では、 - - の明確な法則をまとめてみよう。 -

- - ) - } - ]} - /> - - -

続いて、それぞれのステップについて解説していくぞ。

- - ) - } - ]} - /> - - ) - }, - { - title: ( - <> - 1. 印をつける{' '} - {' '} - {' '} - - - ), - content: ( - <> -

- それぞれのステップについて、 こちらの - - を使って説明していきます。 -

- -

- まず、 - - 上の料理には{' '} - - 、左の料理には - - 、右の料理には - - の印をつけます。 - -

- , - , - - ]} - /> -

- -

- - -

- に - - の印が、下の - - ふたつにそれぞれ - - と - - の印がついた! -

- - ) - } - ]} - /> - - ) - }, - { - title: ( - <> - 2. 一致チェック{' '} - {' '} - {' '} - - - ), - content: ( - <> -

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

- , - , - - ]} - /> -

- -

- - -

- - と - - の - - がついた! -

- - ) - } - ]} - /> - - ) - }, - { - title: ( - <> - 3. コピーする:{' '} - {' '} - ↘️{' '} - - - ), - content: ( - <> -

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

- , - ↘️, - - ]} - /> -

- -

- - -

- - の - が - - の部分にコピーされた! -

- - ) - } - ]} - /> - - ) - }, - { - title: ( - <> - 4. 消す: 💥{' '} - {' '} - - - ), - content: ( - <> -

- 最後に、 - - と - - が消えます。 - -

- 💥, - , - - ]} - /> -

- -

- - -

- - と - - が💥になった! -

- - ) - } - ]} - /> -

- そして、最終的に - - だけになります。 - -

- -

以上です!

- - ) - }, - { - title: <>上にふたつの料理がある場合, - content: ( - <> - -

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

- - ) - } - ]} - /> - - 上にふたつの料理がある -
(と - ) -
-

- この場合、上にある - と - - には - - 両方とも - - の印がつきます。 - -

- - 両方とも - - の印がつく - -

- そして、 - - が一致したあとに… -

- -

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

- -

- 最後に、 - と - - が消え… -

- -

- と - - が残るのです。 -

- - - ) - }, - { - title: ( - <> - - で見てみましょう - - ), - content: ( - <> -

- では、最初から最後まで - で見てみましょう。 - 機能を使うと、 - 各ステップを自動で見ていくことができます。 -

- -

- こちらは、先ほどの例です。 - -

- -

- こちらは、上にふたつの料理がある例です。 - -

- - - ) - }, - { - type: 'summary', - title: ( - <> - - - ), - content: ( - <> -

というわけで、ここまでをまとめてみましょう。

- - -

なるほど、そういう仕組みになっていたのか!

- - ) - }, - { - type: 'thinking', - children: ( - <> -

- こうやってルールを明確にすれば、パズルが複雑になっても応用が効く気がする。 -

- - ) - } - ]} - /> - - ) - }, - { - title: <>一致しなかったら?, - content: ( - <> - , - , - - ]} - /> - -

- では、 - - もし - - と - - が一致しなかったらどうするの? - -

-

- たとえば下の弁当箱の場合は、 - - と - - が一致しないよね。 -

- - ) - } - ]} - /> -

- -

- -

- こういう場合は、 - - コピーはせずに、ただ - と - - を消すだけです。 - - -

- -

- そして、最終的に - - だけになります。 - -

- - - ) - }, - { - title: ( - <> - - で見てみましょう - - ), - content: ( - <> -

- - と - - が一致しなかった場合も、最初から最後まで - で見てみましょう。 -

- -

- こちらは、先ほどの例です。 - -

- -

- こちらは、上にふたつの料理がある例です。 - -

- - - ) - }, - { - title: ( - <> - : 一致しなかった場合 - - ), - type: 'summary', - content: ( - <> -

- - と - - が一致しなかった場合、 - - コピーはせずに、ただ - と - - を消す - - 。 -

- - - - - ) - }, - { - title: <>以上です!, - content: ( - <> - -

- 以上が、 - - の明確な法則だ。理解できたかな? -

- - ) - }, - { - type: 'thinking', - children: ( - <> -

な、なんとか…でも、まだ覚えきれてないなあ。

- - ) - }, - { - type: 'devil', - children: ( - <> -

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

- - ) - }, - { - type: 'relieved', - children: ( - <> -

- ホッ、よかった… (悪魔って意外と優しいんじゃ? - 🤔) -

- - ) - }, - { - type: 'devil', - children: ( - <> -

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

- - ) - }, - { - type: 'brave', - children: ( - <> -

望むところだ!

- - ) - } - ]} - /> - - - ) - } - ]} - /> -) diff --git a/src/contents/5.jp.tsx b/src/contents/5.jp.tsx index 5f4ca258b..dbefe0d03 100644 --- a/src/contents/5.jp.tsx +++ b/src/contents/5.jp.tsx @@ -1,4 +1,1788 @@ import React from 'react' import EpisodeCardList from 'src/components/EpisodeCardList' +import { + P, + Em, + Strong, + Ul, + UlLi, + Ol, + OlLi, + InlineHeader, + Hr +} from 'src/components/ContentTags' +import BubbleQuotes from 'src/components/BubbleQuotes' +import H from 'src/components/H' +import EmojiWithText from 'src/components/EmojiWithText' +import EmojiForLetter from 'src/components/EmojiForLetter' +import EmojiSeparator from 'src/components/EmojiSeparator' +import CustomEmoji from 'src/components/CustomEmoji' +import Emoji from 'src/components/Emoji' +import InlinePrioritiesLabel from 'src/components/InlinePrioritiesLabel' +import InlineBackground from 'src/components/InlineBackground' +import BottomRightBadge from 'src/components/BottomRightBadge' +import YesNoButtons from 'src/components/YesNoButtons' +import * as R from 'src/components/Runners' +import NextLessonButton from 'src/components/NextLessonButton' -export default () => +export default () => ( + 3段の弁当箱, + content: ( + <> + +

+ ここからは、より複雑な + + を解いてもらおう。たとえば、こういうパズルだ。 +

+ + ) + } + ]} + /> + + 3段の + + + +

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

+ + ) + }, + { + type: 'thinking', + children: ( + <> +

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

+

+ 今までの弁当箱では、 + 横に3つの料理が並んだことはなかった。 +

+ + ) + }, + { + type: 'devil', + children: ( + <> +

+ そうだな。そしてさらに、 + + 1 や{' '} + 2 + という数字が左端に表示されている + + のに気づいたかな? +

+ + ) + }, + { + type: 'thinking', + children: ( + <> +

たしかに。

+

こういうパズルは、どうやって解けばいいんだろう?

+ + ) + }, + { + type: 'devil', + children: ( + <> +

+ ではまず、こういった3段の + + の解き方を説明しよう。 +

+

+ そして + + 説明した後に、 + + を出題し、お前たちに自力で解いてもらう + + ぞ。 +

+ + ) + }, + { + type: 'brave', + children: ( + <> +

よし、やってやる!

+ + ) + } + ]} + /> + + ) + }, + { + title: ( + <> + 先に1のペアに注目 + + ), + content: ( + <> +

+ 3段の + + を解く際には、まず + + 左上と左下に + 1 + の印がある部分に注目します。 + +

+ 1, + 🍱, + 1 + ]} + /> +

+ +

+ + +

+ 1 + のペアがピンク色の + 1 + になり、一番上の背景が暗い色{' '} + になった! +

+ + ) + }, + { + type: 'thinking', + children: ( + <> +

+ なるほど、 + + 暗い色 {' '} + の部分は無視して、 + + 1 + + のペアの部分に注目する + + ということか。 +

+ + ) + } + ]} + /> + + ) + }, + { + title: ( + <> + {' '} + {' '} + + 、そして + + + ), + content: ( + <> +

+ 次に、1 + のペアの部分に{' '} + {' '} + {' '} + {' '} + などの印をつけます。 + +

+ + +

+ + 下段真ん中の には、 + {' '} + の印がついた! + +

+ + ) + } + ]} + /> + , + , + + ]} + /> + +

+ そう、前回では登場しなかったが、 + + {' '} + {' '} + {' '} + のどれにも該当しない、 + 下段の真ん中にある料理には{' '} + {' '} + をつけるんだ。 + +

+ + ) + }, + { + type: 'thinking', + children: ( + <> +

+ なるほど。じゃあ、 + {' '} + がついた料理はどうなるんだ? +

+ + ) + } + ]} + /> + + ) + }, + { + title: ( + <> + {' '} + は無視していい + + ), + content: ( + <> +

+ {' '} + の印がついた料理は、いったん無視してください。 +

+ , + 🙄, + + ]} + description={ + <> + {' '} + はいったん無視する + + } + /> +

前回も話した通り、続いて以下のステップを行いますが、

+
    + + 一致チェック:{' '} + {' '} + {' '} + + + + コピーする:{' '} + {' '} + ↘️{' '} + + + + 消す: 💥{' '} + {' '} + + +
+

+ + どれも{' '} + {' '} + は関係ありません。だから、無視していいのです。 + +

+ +

なるほど。じゃあ、続きを見ていこう!

+ + ) + } + ]} + /> + + ) + }, + { + title: ( + <> + 1 + のペア部分を終わらせる + + ), + content: ( + <> +

+ では、1 + のペア部分を終わらせましょう。前回の復習になります。 +

+

+ まず、 + + と + + が一致するかチェックし、一致した料理には、 + を付けます。 + + +

+ +

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

+ +

+ 最後に、 + + と + + が消えます。 + +

+ + +

+ + 上記のどのステップにおいても、 + {' '} + は関係なかった + + だろう? +

+ + ) + }, + { + type: 'thinking', + children: ( + <> +

+ なるほど、だから、 + {' '} + はいったん無視していいのか。 +

+ + ) + } + ]} + /> + + ) + }, + { + title: ( + <> + 1が消え、 + 2が + 1に + + ), + content: ( + <> +

+ さらに続きを見ていきましょう。 + +

+ +
    + + と + + が消えると同時に、 + + + 1が消え、 + 2が + 1になりました。 + +
+ 2, + , + 1 + ]} + /> + + ) + }, + { + title: ( + <> + 残った1 + のペアを終わらせる + + ), + content: ( + <> + +

+ 残った弁当箱は、前のページで見たのと同じようなやつだ! +

+ + ) + }, + { + type: 'devil', + children: ( + <> +

+ そうだ、あとは前回とやり方は変わらない。 + + で最後まで見てみよう。 +

+ + ) + } + ]} + /> +

+ +

+ + +

+ 最後に が残った! +

+ + ) + }, + { + type: 'devil', + children: ( + <> +

これで終了だ!どうだ、理解できたかな?

+ + ) + }, + { + type: 'thinking', + children: ( + <> +

うーん、なんとなく…

+ + ) + }, + { + type: 'devil', + children: ( + <> +

+ では復習のために、最初から最後まで + + で見てみよう。 +

+ + ) + } + ]} + /> +

+ +

+ + +

まとめると、

+
    + + + まず先に{' '} + 1{' '} + のペアからはじめる。 + + + + + 下段の真ん中にある料理には{' '} + {' '} + をつける。 + {' '} + は、いったん無視して構わない。 + + + + + 1 + のペアが終わると、 + 2が + 1 + になるので、また繰り返す。 + + +
+

こんなところかな?

+ + ) + }, + { + type: 'devil', + children: ( + <> +

+ その通り。では、 + + そろそろ + + の時間だ! + +

+ + ) + }, + { + type: 'crying', + children: ( + <> +

えー、ちゃんと解けるか、不安だなあ…

+ + ) + } + ]} + /> + + ) + }, + { + type: 'yesNoQuiz', + title: ( + <> + + + ), + content: ( + <> +

+ : +

+ +

+ +

+ + + + ) + }, + { + title: ( + <> + + + ), + content: ( + <> + +

+ + + だと思う! + + 最後には + + が残るはずだ。 +

+

+ + で見てみよう! +

+ + ) + } + ]} + /> +

+ では、 + +

+ + +

+ やった!最後に + + が残ったので、⭕️が正解だ! +

+ + ) + }, + { + type: 'devil', + children: ( + <> +

ぐぬぬ…やるじゃないか!

+ + ) + } + ]} + /> + + ) + }, + { + title: <>ふたつの細かい法則, + content: ( + <> + +

どうだ、そろそろ計算箱を返す気になったか?

+ + ) + }, + { + type: 'devil', + children: ( + <> +

+ まだドヤ顔をするような時間じゃないぞ。弁当箱の「 + 細かい法則 + 」に関する問題を出していないからな。 +

+ + ) + }, + { + type: 'thinking', + children: ( + <> +

+ 弁当箱の「 + 細かい法則 + 」だって?何のことだ? +

+ + ) + }, + { + type: 'devil', + children: ( + <> +

+ まず、こちらの + + を見てみな。 +

+ + ) + } + ]} + /> + + 1 + のペアがふたつある + + +

+ 今まで見たことない形のパズルだ。 + + 1 + のペアがふたつある + + なあ… +

+ + ) + }, + { + type: 'devil', + children: ( + <> +

+ 続いて、こちらの + + を見てみな。 +

+ + ) + } + ]} + /> + + 一番下の料理が + + ひとつだけ + + +

+ これも見たことない形だなあ… + + 一番下に入っている料理が + + ひとつだけだ。 + +

+ + ) + }, + { + type: 'devil', + children: ( + <> +

+ そうだ。こういったパズルを解くには、これから紹介する弁当箱の「 + 細かい法則 + 」を知っておかないといけない。 +

+

+ その法則はふたつある。 + 順番に紹介していこう!もちろん、 + + もやるからな! +

+ + ) + }, + { + type: 'crying', + children: ( + <> +

+ えー、また + + か!いつになったら計算箱を返してくれるんだ! +

+ + ) + }, + { + type: 'devil', + children: ( + <> +

+ まあそう焦るな。 + + + 次からはじまる中級編で、とても難しい問題を出題する。 + + このページで紹介した法則を応用すれば解ける問題だ。それに答えることができたら、計算箱を返してやろう! + +

+ + ) + }, + { + type: 'surprised', + children: ( + <> +

+ え、ということはもうすぐ返してもらえるのか!じゃあ、あと少し頑張ろう! +

+ + ) + } + ]} + /> + + ) + }, + { + title: ( + <> + 細かい法則その1: 一番左の + 1のペアからはじめる + + ), + content: ( + <> +

+ まずは、こちらの + + から見ていきましょう。 +

+ + 1 + のペアがふたつある + +

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

+ + 左側にある + 1 + のペアからはじめる + +

+ では、 + {' '} + {' '} + {' '} + + はどうなるのか見ていきましょう。 +

+ , + , + , + + ]} + /> +

+ まず、上の + + には + + の印がつきます。 +

+ +

+ 次に、左の + + には + + の印がつきます。 +

+ +

+ そして、右の + + には + + の印がつきます。 +

+ + +

+ なるほど、 + + 弁当箱の右端に接している料理にはすべて + + の印がつく + + のか。 +

+ + ) + } + ]} + /> +

+ 最後に、残った + + には + + の印がつきます。 +

+ + +

+ + {' '} + {' '} + {' '} + のどれにも該当しない場合には + + の印がつく + + んだな。 +

+ + ) + } + ]} + /> +

+ そして、 + と + + にある + + が一致するので… +

+ +

+ + にある + + が、 + の + + のところにコピーされます。 +

+ + +

なるほど、見た目ほど複雑じゃなさそうだ。

+ + ) + } + ]} + /> + +

+ では、ここからは + + で見ていきましょう! +

+ + +

+ 最後は + + だけが残った! +

+ + ) + }, + { + type: 'devil', + children: ( + <> +

+ そうだ。理解できたかな?では、ここで + + の時間だ! +

+ + ) + } + ]} + /> + + ) + }, + { + type: 'yesNoQuiz', + title: ( + <> + + + ), + content: ( + <> +

+ : +

+ +

+ +

+ + + + ) + }, + { + title: ( + <> + + + ), + content: ( + <> + +

+ + + だと思う! + + 最後には + + ではなく、 + + が残るはずだ。 +

+

+ + で見てみよう! +

+ + ) + } + ]} + /> +

+ では、 + +

+ + +

+ やった!最後に + + ではなく + + が残ったので、が正解だ! +

+ + ) + } + ]} + /> + + ) + }, + { + type: 'sideNote', + title: ( + <> + 補足: 左端に1 + のペアがない場合 + + ), + content: ( + <> +

+ 。 +

+

+ 先ほどの + + で登場した弁当箱とほとんど同じですが、 + + 1 + のペアが弁当箱の左端になく、内側だけにあります。 + +

+ + 1 + のペアが内側だけにある + +

+ このような場合、 + + 内側の + 1 + のペアの部分からはじめます。 + +

+ + 内側の1 + のペアからはじめる + +

+ 残りは + + で見てみましょう。 + +

+ +

+ まとめると、 + + 1 + のペアが弁当箱の左端にない場合は、内側の + 1 + のペアからはじめればいい + + のです。 +

+ + ) + }, + { + title: ( + <> + 細かい法則その2: 1 + のペアのからはじめられない場合、 + 2のペアからはじめる + + ), + content: ( + <> +

+ 続いて、こちらの + + をご覧ください。 +

+ + 一番下の料理が + + ひとつだけ + + +

+ これも、やはり + 1 + のペアからはじめてみるのかな? +

+ + ) + }, + { + type: 'thinking', + children: ( + <> +

+ でもその場合、 + + 一番下の段には + + しかない。 + +

+

+ この + + には、 + + {' '} + {' '} + {' '} + のうち、どの印をつければいいのだろう? + +

+ + ) + } + ]} + /> + + には、 +
+ {' '} + {' '} + {' '} + のうちどの印をつければいい? +
+

+ 答えは、「どの印もつけることができない + 」です。 + + 一番下の段にひとつしか料理がない場合、どの印をつけることもできないのです + + 。 +

+ ❌, + , + + ]} + description={ + <> + には、 +
+ {' '} + {' '} + {' '} + のどれもつけられない + + } + /> +

+ ということはつまり、 + + 1 + のペアからはじめることができない + + 、ということになります。 +

+ ❌, + 1, + + ]} + description={ + <> + 1{' '} + のペアからはじめられない + + } + /> + +

じゃあ、どうすればいいんだ?

+ + ) + } + ]} + /> +

+ 上記のように1 + のペアからはじめられない場合は、 + + 2 + のペアからはじめます。 + +

+ + 2のペアからはじめる + + +

+ なるほど、 + 2 + のペアからはじめれば、 + + 下の段に + + がふたつあるから、 + {' '} + と{' '} + {' '} + の印をつけられるね。 + +

+ + ) + } + ]} + /> +

+ その通り。 + {' '} + {' '} + + は以下の通りになります。 +

+ +

+ 残りは + + で見ていきましょう: +

+ + +

+ 最終的に + と + + が残った! +

+ + ) + }, + { + type: 'thinking', + children: ( + <> +

+ + このふたつが残った時点で、もうこれ以上進められないから、そこで終了する + + というわけか。 +

+

+ + 最後に残る料理がひとつだけ、とは限らない + + んだね。 +

+ + ) + }, + { + type: 'devil', + children: ( + <> +

+ その通りだ。では、ここで + + の時間だ。 +

+

+ + これが初級最後の + + になるぞ! + +

+ + ) + } + ]} + /> + + ) + }, + { + type: 'yesNoQuiz', + title: ( + <> + + + ), + content: ( + <> +

+ : +

+ +

+ +

+ + + + ) + }, + { + title: ( + <> + + + ), + content: ( + <> + +

+ + + だと思う! + + 最後には + と + + が残るはずだ。 +

+

+ + で見てみよう! +

+ + ) + } + ]} + /> +

+ では、 + +

+ + +

+ やった!最後に + と + + が残ったので、⭕️が正解だ! +

+ + ) + } + ]} + /> + + ) + }, + { + type: 'summary', + title: ( + <> + + + ), + content: ( + <> +

+ 3段の弁当箱は、以下のように解きます。 +

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

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

+ + + +

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

+ + 1 + のペアが弁当箱の左端にない場合は、 +
+ 内側の1 + のペアからはじめる +
+
+

+ 細かい法則2.{' '} + 下段にひとつの料理しかなく、 + 1 + のペアからはじめられない場合、 + + 2 + のペアからはじめます。 + +

+ + + + +

これ全部覚えきれるか、不安だなあ…

+ + ) + }, + { + type: 'devil', + children: ( + <> +

+ + 安心しろ、これらの法則を暗記する必要はない。 + + なんとなく「 + こういう法則があるんだな + 」と頭に入れておけば大丈夫だ。 +

+ + ) + } + ]} + /> + + ) + }, + { + title: <>初級はここまで!, + content: ( + <> + + +

+ どうだ、 + + をすべて解いたぞ! +

+ + ) + }, + { + type: 'devil', + children: ( + <> +

+ やるじゃないか。 + + というわけで、初級編はここで終わりだ。次からは中級編に入る。 + +

+

+ さきほど約束した通り、 + + + 次からはじまる中級編で、とても難しい問題を出題する。 + + このページで紹介した法則を応用すれば解ける問題だ。それに答えることができたら、計算箱を返してやろう! + +

+ + ) + }, + { + type: 'brave', + children: ( + <> +

+ その難しい問題とやらを解けば、本当に計算箱を返してもらえるのか? +

+ + ) + }, + { + type: 'devil', + children: ( + <> +

ああ、悪魔に二言はないからな。

+ + ) + }, + { + type: 'brave', + children: ( + <> +

よーし、やってやるぞ!中級編に進もう!

+ + ) + } + ]} + /> + + + ) + } + ]} + /> +) diff --git a/src/contents/5.v2.jp.tsx b/src/contents/5.v2.jp.tsx deleted file mode 100644 index dbefe0d03..000000000 --- a/src/contents/5.v2.jp.tsx +++ /dev/null @@ -1,1788 +0,0 @@ -import React from 'react' -import EpisodeCardList from 'src/components/EpisodeCardList' -import { - P, - Em, - Strong, - Ul, - UlLi, - Ol, - OlLi, - InlineHeader, - Hr -} from 'src/components/ContentTags' -import BubbleQuotes from 'src/components/BubbleQuotes' -import H from 'src/components/H' -import EmojiWithText from 'src/components/EmojiWithText' -import EmojiForLetter from 'src/components/EmojiForLetter' -import EmojiSeparator from 'src/components/EmojiSeparator' -import CustomEmoji from 'src/components/CustomEmoji' -import Emoji from 'src/components/Emoji' -import InlinePrioritiesLabel from 'src/components/InlinePrioritiesLabel' -import InlineBackground from 'src/components/InlineBackground' -import BottomRightBadge from 'src/components/BottomRightBadge' -import YesNoButtons from 'src/components/YesNoButtons' -import * as R from 'src/components/Runners' -import NextLessonButton from 'src/components/NextLessonButton' - -export default () => ( - 3段の弁当箱, - content: ( - <> - -

- ここからは、より複雑な - - を解いてもらおう。たとえば、こういうパズルだ。 -

- - ) - } - ]} - /> - - 3段の - - - -

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

- - ) - }, - { - type: 'thinking', - children: ( - <> -

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

-

- 今までの弁当箱では、 - 横に3つの料理が並んだことはなかった。 -

- - ) - }, - { - type: 'devil', - children: ( - <> -

- そうだな。そしてさらに、 - - 1 や{' '} - 2 - という数字が左端に表示されている - - のに気づいたかな? -

- - ) - }, - { - type: 'thinking', - children: ( - <> -

たしかに。

-

こういうパズルは、どうやって解けばいいんだろう?

- - ) - }, - { - type: 'devil', - children: ( - <> -

- ではまず、こういった3段の - - の解き方を説明しよう。 -

-

- そして - - 説明した後に、 - - を出題し、お前たちに自力で解いてもらう - - ぞ。 -

- - ) - }, - { - type: 'brave', - children: ( - <> -

よし、やってやる!

- - ) - } - ]} - /> - - ) - }, - { - title: ( - <> - 先に1のペアに注目 - - ), - content: ( - <> -

- 3段の - - を解く際には、まず - - 左上と左下に - 1 - の印がある部分に注目します。 - -

- 1, - 🍱, - 1 - ]} - /> -

- -

- - -

- 1 - のペアがピンク色の - 1 - になり、一番上の背景が暗い色{' '} - になった! -

- - ) - }, - { - type: 'thinking', - children: ( - <> -

- なるほど、 - - 暗い色 {' '} - の部分は無視して、 - - 1 - - のペアの部分に注目する - - ということか。 -

- - ) - } - ]} - /> - - ) - }, - { - title: ( - <> - {' '} - {' '} - - 、そして - - - ), - content: ( - <> -

- 次に、1 - のペアの部分に{' '} - {' '} - {' '} - {' '} - などの印をつけます。 - -

- - -

- - 下段真ん中の には、 - {' '} - の印がついた! - -

- - ) - } - ]} - /> - , - , - - ]} - /> - -

- そう、前回では登場しなかったが、 - - {' '} - {' '} - {' '} - のどれにも該当しない、 - 下段の真ん中にある料理には{' '} - {' '} - をつけるんだ。 - -

- - ) - }, - { - type: 'thinking', - children: ( - <> -

- なるほど。じゃあ、 - {' '} - がついた料理はどうなるんだ? -

- - ) - } - ]} - /> - - ) - }, - { - title: ( - <> - {' '} - は無視していい - - ), - content: ( - <> -

- {' '} - の印がついた料理は、いったん無視してください。 -

- , - 🙄, - - ]} - description={ - <> - {' '} - はいったん無視する - - } - /> -

前回も話した通り、続いて以下のステップを行いますが、

-
    - - 一致チェック:{' '} - {' '} - {' '} - - - - コピーする:{' '} - {' '} - ↘️{' '} - - - - 消す: 💥{' '} - {' '} - - -
-

- - どれも{' '} - {' '} - は関係ありません。だから、無視していいのです。 - -

- -

なるほど。じゃあ、続きを見ていこう!

- - ) - } - ]} - /> - - ) - }, - { - title: ( - <> - 1 - のペア部分を終わらせる - - ), - content: ( - <> -

- では、1 - のペア部分を終わらせましょう。前回の復習になります。 -

-

- まず、 - - と - - が一致するかチェックし、一致した料理には、 - を付けます。 - - -

- -

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

- -

- 最後に、 - - と - - が消えます。 - -

- - -

- - 上記のどのステップにおいても、 - {' '} - は関係なかった - - だろう? -

- - ) - }, - { - type: 'thinking', - children: ( - <> -

- なるほど、だから、 - {' '} - はいったん無視していいのか。 -

- - ) - } - ]} - /> - - ) - }, - { - title: ( - <> - 1が消え、 - 2が - 1に - - ), - content: ( - <> -

- さらに続きを見ていきましょう。 - -

- -
    - - と - - が消えると同時に、 - - - 1が消え、 - 2が - 1になりました。 - -
- 2, - , - 1 - ]} - /> - - ) - }, - { - title: ( - <> - 残った1 - のペアを終わらせる - - ), - content: ( - <> - -

- 残った弁当箱は、前のページで見たのと同じようなやつだ! -

- - ) - }, - { - type: 'devil', - children: ( - <> -

- そうだ、あとは前回とやり方は変わらない。 - - で最後まで見てみよう。 -

- - ) - } - ]} - /> -

- -

- - -

- 最後に が残った! -

- - ) - }, - { - type: 'devil', - children: ( - <> -

これで終了だ!どうだ、理解できたかな?

- - ) - }, - { - type: 'thinking', - children: ( - <> -

うーん、なんとなく…

- - ) - }, - { - type: 'devil', - children: ( - <> -

- では復習のために、最初から最後まで - - で見てみよう。 -

- - ) - } - ]} - /> -

- -

- - -

まとめると、

-
    - - - まず先に{' '} - 1{' '} - のペアからはじめる。 - - - - - 下段の真ん中にある料理には{' '} - {' '} - をつける。 - {' '} - は、いったん無視して構わない。 - - - - - 1 - のペアが終わると、 - 2が - 1 - になるので、また繰り返す。 - - -
-

こんなところかな?

- - ) - }, - { - type: 'devil', - children: ( - <> -

- その通り。では、 - - そろそろ - - の時間だ! - -

- - ) - }, - { - type: 'crying', - children: ( - <> -

えー、ちゃんと解けるか、不安だなあ…

- - ) - } - ]} - /> - - ) - }, - { - type: 'yesNoQuiz', - title: ( - <> - - - ), - content: ( - <> -

- : -

- -

- -

- - - - ) - }, - { - title: ( - <> - - - ), - content: ( - <> - -

- - - だと思う! - - 最後には - - が残るはずだ。 -

-

- - で見てみよう! -

- - ) - } - ]} - /> -

- では、 - -

- - -

- やった!最後に - - が残ったので、⭕️が正解だ! -

- - ) - }, - { - type: 'devil', - children: ( - <> -

ぐぬぬ…やるじゃないか!

- - ) - } - ]} - /> - - ) - }, - { - title: <>ふたつの細かい法則, - content: ( - <> - -

どうだ、そろそろ計算箱を返す気になったか?

- - ) - }, - { - type: 'devil', - children: ( - <> -

- まだドヤ顔をするような時間じゃないぞ。弁当箱の「 - 細かい法則 - 」に関する問題を出していないからな。 -

- - ) - }, - { - type: 'thinking', - children: ( - <> -

- 弁当箱の「 - 細かい法則 - 」だって?何のことだ? -

- - ) - }, - { - type: 'devil', - children: ( - <> -

- まず、こちらの - - を見てみな。 -

- - ) - } - ]} - /> - - 1 - のペアがふたつある - - -

- 今まで見たことない形のパズルだ。 - - 1 - のペアがふたつある - - なあ… -

- - ) - }, - { - type: 'devil', - children: ( - <> -

- 続いて、こちらの - - を見てみな。 -

- - ) - } - ]} - /> - - 一番下の料理が - - ひとつだけ - - -

- これも見たことない形だなあ… - - 一番下に入っている料理が - - ひとつだけだ。 - -

- - ) - }, - { - type: 'devil', - children: ( - <> -

- そうだ。こういったパズルを解くには、これから紹介する弁当箱の「 - 細かい法則 - 」を知っておかないといけない。 -

-

- その法則はふたつある。 - 順番に紹介していこう!もちろん、 - - もやるからな! -

- - ) - }, - { - type: 'crying', - children: ( - <> -

- えー、また - - か!いつになったら計算箱を返してくれるんだ! -

- - ) - }, - { - type: 'devil', - children: ( - <> -

- まあそう焦るな。 - - - 次からはじまる中級編で、とても難しい問題を出題する。 - - このページで紹介した法則を応用すれば解ける問題だ。それに答えることができたら、計算箱を返してやろう! - -

- - ) - }, - { - type: 'surprised', - children: ( - <> -

- え、ということはもうすぐ返してもらえるのか!じゃあ、あと少し頑張ろう! -

- - ) - } - ]} - /> - - ) - }, - { - title: ( - <> - 細かい法則その1: 一番左の - 1のペアからはじめる - - ), - content: ( - <> -

- まずは、こちらの - - から見ていきましょう。 -

- - 1 - のペアがふたつある - -

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

- - 左側にある - 1 - のペアからはじめる - -

- では、 - {' '} - {' '} - {' '} - - はどうなるのか見ていきましょう。 -

- , - , - , - - ]} - /> -

- まず、上の - - には - - の印がつきます。 -

- -

- 次に、左の - - には - - の印がつきます。 -

- -

- そして、右の - - には - - の印がつきます。 -

- - -

- なるほど、 - - 弁当箱の右端に接している料理にはすべて - - の印がつく - - のか。 -

- - ) - } - ]} - /> -

- 最後に、残った - - には - - の印がつきます。 -

- - -

- - {' '} - {' '} - {' '} - のどれにも該当しない場合には - - の印がつく - - んだな。 -

- - ) - } - ]} - /> -

- そして、 - と - - にある - - が一致するので… -

- -

- - にある - - が、 - の - - のところにコピーされます。 -

- - -

なるほど、見た目ほど複雑じゃなさそうだ。

- - ) - } - ]} - /> - -

- では、ここからは - - で見ていきましょう! -

- - -

- 最後は - - だけが残った! -

- - ) - }, - { - type: 'devil', - children: ( - <> -

- そうだ。理解できたかな?では、ここで - - の時間だ! -

- - ) - } - ]} - /> - - ) - }, - { - type: 'yesNoQuiz', - title: ( - <> - - - ), - content: ( - <> -

- : -

- -

- -

- - - - ) - }, - { - title: ( - <> - - - ), - content: ( - <> - -

- - - だと思う! - - 最後には - - ではなく、 - - が残るはずだ。 -

-

- - で見てみよう! -

- - ) - } - ]} - /> -

- では、 - -

- - -

- やった!最後に - - ではなく - - が残ったので、が正解だ! -

- - ) - } - ]} - /> - - ) - }, - { - type: 'sideNote', - title: ( - <> - 補足: 左端に1 - のペアがない場合 - - ), - content: ( - <> -

- 。 -

-

- 先ほどの - - で登場した弁当箱とほとんど同じですが、 - - 1 - のペアが弁当箱の左端になく、内側だけにあります。 - -

- - 1 - のペアが内側だけにある - -

- このような場合、 - - 内側の - 1 - のペアの部分からはじめます。 - -

- - 内側の1 - のペアからはじめる - -

- 残りは - - で見てみましょう。 - -

- -

- まとめると、 - - 1 - のペアが弁当箱の左端にない場合は、内側の - 1 - のペアからはじめればいい - - のです。 -

- - ) - }, - { - title: ( - <> - 細かい法則その2: 1 - のペアのからはじめられない場合、 - 2のペアからはじめる - - ), - content: ( - <> -

- 続いて、こちらの - - をご覧ください。 -

- - 一番下の料理が - - ひとつだけ - - -

- これも、やはり - 1 - のペアからはじめてみるのかな? -

- - ) - }, - { - type: 'thinking', - children: ( - <> -

- でもその場合、 - - 一番下の段には - - しかない。 - -

-

- この - - には、 - - {' '} - {' '} - {' '} - のうち、どの印をつければいいのだろう? - -

- - ) - } - ]} - /> - - には、 -
- {' '} - {' '} - {' '} - のうちどの印をつければいい? -
-

- 答えは、「どの印もつけることができない - 」です。 - - 一番下の段にひとつしか料理がない場合、どの印をつけることもできないのです - - 。 -

- ❌, - , - - ]} - description={ - <> - には、 -
- {' '} - {' '} - {' '} - のどれもつけられない - - } - /> -

- ということはつまり、 - - 1 - のペアからはじめることができない - - 、ということになります。 -

- ❌, - 1, - - ]} - description={ - <> - 1{' '} - のペアからはじめられない - - } - /> - -

じゃあ、どうすればいいんだ?

- - ) - } - ]} - /> -

- 上記のように1 - のペアからはじめられない場合は、 - - 2 - のペアからはじめます。 - -

- - 2のペアからはじめる - - -

- なるほど、 - 2 - のペアからはじめれば、 - - 下の段に - - がふたつあるから、 - {' '} - と{' '} - {' '} - の印をつけられるね。 - -

- - ) - } - ]} - /> -

- その通り。 - {' '} - {' '} - - は以下の通りになります。 -

- -

- 残りは - - で見ていきましょう: -

- - -

- 最終的に - と - - が残った! -

- - ) - }, - { - type: 'thinking', - children: ( - <> -

- - このふたつが残った時点で、もうこれ以上進められないから、そこで終了する - - というわけか。 -

-

- - 最後に残る料理がひとつだけ、とは限らない - - んだね。 -

- - ) - }, - { - type: 'devil', - children: ( - <> -

- その通りだ。では、ここで - - の時間だ。 -

-

- - これが初級最後の - - になるぞ! - -

- - ) - } - ]} - /> - - ) - }, - { - type: 'yesNoQuiz', - title: ( - <> - - - ), - content: ( - <> -

- : -

- -

- -

- - - - ) - }, - { - title: ( - <> - - - ), - content: ( - <> - -

- - - だと思う! - - 最後には - と - - が残るはずだ。 -

-

- - で見てみよう! -

- - ) - } - ]} - /> -

- では、 - -

- - -

- やった!最後に - と - - が残ったので、⭕️が正解だ! -

- - ) - } - ]} - /> - - ) - }, - { - type: 'summary', - title: ( - <> - - - ), - content: ( - <> -

- 3段の弁当箱は、以下のように解きます。 -

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

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

- - - -

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

- - 1 - のペアが弁当箱の左端にない場合は、 -
- 内側の1 - のペアからはじめる -
-
-

- 細かい法則2.{' '} - 下段にひとつの料理しかなく、 - 1 - のペアからはじめられない場合、 - - 2 - のペアからはじめます。 - -

- - - - -

これ全部覚えきれるか、不安だなあ…

- - ) - }, - { - type: 'devil', - children: ( - <> -

- - 安心しろ、これらの法則を暗記する必要はない。 - - なんとなく「 - こういう法則があるんだな - 」と頭に入れておけば大丈夫だ。 -

- - ) - } - ]} - /> - - ) - }, - { - title: <>初級はここまで!, - content: ( - <> - - -

- どうだ、 - - をすべて解いたぞ! -

- - ) - }, - { - type: 'devil', - children: ( - <> -

- やるじゃないか。 - - というわけで、初級編はここで終わりだ。次からは中級編に入る。 - -

-

- さきほど約束した通り、 - - - 次からはじまる中級編で、とても難しい問題を出題する。 - - このページで紹介した法則を応用すれば解ける問題だ。それに答えることができたら、計算箱を返してやろう! - -

- - ) - }, - { - type: 'brave', - children: ( - <> -

- その難しい問題とやらを解けば、本当に計算箱を返してもらえるのか? -

- - ) - }, - { - type: 'devil', - children: ( - <> -

ああ、悪魔に二言はないからな。

- - ) - }, - { - type: 'brave', - children: ( - <> -

よーし、やってやるぞ!中級編に進もう!

- - ) - } - ]} - /> - - - ) - } - ]} - /> -) diff --git a/src/contents/6.jp.tsx b/src/contents/6.jp.tsx index 5f4ca258b..da72b2248 100644 --- a/src/contents/6.jp.tsx +++ b/src/contents/6.jp.tsx @@ -1,4 +1,1314 @@ -import React from 'react' +/** @jsx jsx */ +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, + InlineHeader +} from 'src/components/ContentTags' +import BubbleQuotes from 'src/components/BubbleQuotes' +import EmojiSeparator from 'src/components/EmojiSeparator' +import CustomEmoji from 'src/components/CustomEmoji' +import EmojiNumber from 'src/components/EmojiNumber' +import Emoji from 'src/components/Emoji' +import H from 'src/components/H' +import YesNoButtons from 'src/components/YesNoButtons' +import InlinePrioritiesLabel from 'src/components/InlinePrioritiesLabel' +import ExpressionRunnerButton from 'src/components/ExpressionRunnerButton' +import * as R from 'src/components/Runners' +import EmojiWithText from 'src/components/EmojiWithText' +import EmojiForLetter from 'src/components/EmojiForLetter' +import ExpressionRunnerSeparator from 'src/components/ExpressionRunnerSeparator' +import NextLessonButton from 'src/components/NextLessonButton' -export default () => +export default () => ( + 中級編へようこそ!, + content: ( + <> + +

+ ここからは中級編だ。 + + 約束した通り、この中級編で出題する難しい問題に答えることができたら、計算箱を返してやろう! + +

+ + ) + }, + { + type: 'brave', + children: ( + <> +

よーし、やってやる!

+ + ) + }, + { + type: 'devil', + children: ( + <> +

+ 問題を出す前に、わたしの助手 + をここに呼ばせてもらおう。 +

+ + ) + }, + { + type: 'thinking', + children: ( + <> +

なに、お前の助手だって?

+ + ) + }, + { + type: 'devil', + children: ( + <> +

いま呼ぶから、ちょっと待つんだな。

+

+ …いでよ、「ミニオン」! +

+ + ) + } + ]} + /> + 悪魔の助手・ミニオン、ここに参上!} + /> + +

+ どうも、ミニオン + です。お呼びですか、ご主人さま? +

+ + ) + }, + { + type: 'devil', + children: ( + <> +

+ よく来てくれた!こいつがわたしの助手、 + ミニオンだ。 +

+ + ) + }, + { + type: 'roll', + children: ( + <> +

なんだ、ただのわんこじゃないか。

+ + ) + }, + { + type: 'devil', + children: ( + <> +

+ ミニオンはそんじょそこらの犬とは違う。 + とっておきの芸 + を持っているからな。 +

+

ミニオン、こいつらにお前の芸を見せてやるんだ!

+ + ) + }, + { + type: 'dog', + children: ( + <> +

わかりました、ご主人さま!

+ + ) + } + ]} + /> + + ) + }, + { + title: <>ミニオンの芸, + content: ( + <> + 🍱, + 🐶, + + ]} + /> + +

+ こちらの + + をご覧ください! +

+ + ) + } + ]} + /> + + +

一見、普通の弁当箱に見えるけれど…

+ + ) + }, + { + type: 'dog', + children: ( + <> +

+ ぼくは、 + この弁当箱を計算箱に変える + ことができるんです! +

+

+ + {' '} + を押してみてください! + +

+ + ) + } + ]} + /> + + +

+ すごい、計算箱の になった! +

+ + ) + }, + { + type: 'dog', + children: ( + <> +

+ そうなんです。ぼくは、 + ある法則に基づいて + 、弁当箱を計算箱に変える芸を持っているんです。 +

+

+ その法則がどんなものか、当ててみてください! +

+ + ) + }, + { + type: 'thinking', + children: ( + <> +

+ ふーむ、どんな法則なんだろう?ほかの例も見ないと分からないなあ。 +

+ + ) + } + ]} + /> + + ) + }, + { + title: <>どんな法則?, + content: ( + <> + +

+ では、こちらに3つの弁当箱を用意しました。それぞれ + + を押してみてください! +

+ + ) + } + ]} + /> + + + + +

+ + どれも料理は違うけど、法則は似ているような…? + +

+ + ) + }, + { + type: 'dog', + children: ( + <> +

+ どれも、ある法則に基づいて計算箱に変えているんですが、分かりましたか? +

+ + ) + }, + { + type: 'surprised', + children: ( + <> +

あ、分かったぞ!

+ + ) + } + ]} + /> + + ) + }, + { + type: 'yesNoQuiz', + title: ( + <> + + + ), + content: ( + <> + +

それでは、こちらの弁当箱を…

+ + ) + } + ]} + /> + + +

+ ぼくが計算箱に変換すると、次のようになるでしょうか? +

+ + ) + } + ]} + /> + + + + ) + }, + { + title: ( + <> + + + ), + content: ( + <> + +

+ + + だと思う! + + 変換すると になるはずだ。 +

+ + ) + }, + { + type: 'dog', + children: ( + <> +

+ では、 + + を押してみてくだださい! +

+ + ) + } + ]} + /> + + +

+ やった! になったので、 + ⭕️が正解だ! +

+ + ) + }, + { + type: 'dog', + children: ( + <> +

では、法則を説明しましょう!

+ + ) + } + ]} + /> + + ) + }, + { + type: 'summary', + title: <>法則の説明, + content: ( + <> + +

+ ぼくが計算箱に変換できるのは、以下のような形の弁当箱なんです。 +

+ + ) + } + ]} + /> + + + + +

+ たとえば、先ほど例に出したこちらの弁当箱をご覧ください。 +

+ + ) + } + ]} + /> + + +

+ まず、 + + が一番左にあるので、すべての + 🅰️ + の印をつけてみます。 +

+ + ) + } + ]} + /> + + + が一番左にあるので、 +
+ すべての + 🅰️ + の印をつける +
+ +

+ 次に、 + + が真ん中にあるので、すべての + 🅱️ + の印をつけてみます。 +

+ + ) + } + ]} + /> + + + が真ん中にあるので、 +
+ すべての + 🅱️ + の印をつける +
+ +

上の弁当箱は、こちらの法則と一致していますね。

+ + + +

つまり、ぼくが計算箱に変換できるということです。

+ + ) + }, + { + type: 'thinking', + children: ( + <> +

なるほど。

+ + ) + }, + { + type: 'dog', + children: ( + <> +

+ + では、計算箱に変換した場合、何の数字になるのでしょうか? + + 答えを言うと、 + + 右下にある🅰️がついた料理の数 + + が、変換後の計算箱の数字になります。 +

+ + ) + } + ]} + /> + + 右下にある🅰️ + がついた料理の数が、 +
+ 変換後の計算箱の数字 +
+ +

+ 先ほどの弁当箱の場合、 + + 右下には🅰️がついた + + が「2個」あります。 + +

+

+ だから、これをぼくが計算箱に変換すると{' '} + になるというわけです。 +

+ + ) + } + ]} + /> + + + + + + +

なるほど。

+ + ) + }, + { + type: 'dog', + children: ( + <> +

+ ここでは と{' '} + を使いました。 + + しかし他の料理でも、同じ法則に沿っていれば、計算箱に変換したときに同じ数字になります。 + +

+

+ たとえば、 と{' '} + を以下のように配置した場合… +

+ + ) + } + ]} + /> + + +

+ 🅰️🅱️{' '} + は以下のようになるので… +

+ + ) + } + ]} + /> + + は一番左にあるので 🅰️{' '} + を、 +
+ は真ん中にあるので 🅱️{' '} + をつける +
+ +

+ 計算箱に変換したときに先ほどと同じく{' '} + になります。 +

+ + ) + } + ]} + /> + + + + + + +

+ つまり、 + + 弁当箱に入っているのがどんな料理だろうと、 + 🅰️🅱️{' '} + の印をつけた際に、同じ法則に沿っていれば同じ計算箱に変換される + + というわけです。 +

+ + ) + }, + { + type: 'thinking', + children: ( + <> +

なるほど。

+ + ) + }, + { + type: 'dog', + children: ( + <> +

何か質問はございますか?

+ + ) + }, + { + type: 'thinking', + children: ( + <> +

+ ひとつ質問がある。 + + 上の弁当箱には{' '} + 1{' '} + 2{' '} + といった番号が出てきたけど… + +

+

+ たとえば、 「 + + 1{' '} + 2{' '} + がこういう並び順でなければ、計算箱に変換できない + + 」といった決まりはあるの? +

+ + ) + }, + { + type: 'dog', + children: ( + <> +

+ 厳密に言うとあるのですが、本稿を読み進める上では気にしなくても結構です。 +

+

+ つまり、計算箱に変換する際には、 + + 1 や + 2{' '} + などの番号は無視し、🅰️ と{' '} + 🅱️{' '} + といった料理の法則だけに注目してください。 + +

+ + ) + }, + { + type: 'smile', + children: ( + <> +

了解!

+ + ) + } + ]} + /> + + ) + }, + { + title: <>他の弁当箱の例, + content: ( + <> + +

+ + で出した弁当箱にも、🅰️🅱️ + の印をつけてみましょう。まずは + : +

+ + ) + } + ]} + /> + + +

+ 上の弁当箱に、先ほどの法則にしたがって🅰️ + と🅱️の印をつけると、 + + 右下には🅰️がついた + + が「4個」あります。 + +

+

+ だから、これをぼくが計算箱に変換すると{' '} + になるというわけです。 +

+ + ) + } + ]} + /> + + + + + + + ) + }, + { + title: ( + <> + になる場合 + + ), + content: ( + <> + +

+ 続いて + + 。このページの冒頭で紹介した弁当箱です。 +

+ + ) + } + ]} + /> + + +

+ 上の弁当箱に、先ほどの法則にしたがって🅰️ + と🅱️の印をつけると、 + + 右下には🅰️がついた + が + ひとつもありません。 + +

+

+ つまり、 + + 🅰️の数は「ゼロ個」 + + というわけです。 +

+

+ だから、これをぼくが計算箱に変換すると{' '} + になります。 +

+ + ) + } + ]} + /> + + + + + + +

+ なるほど、 + + 右下の🅰️ + の数がゼロになる場合もあるんだね。 + +

+ + ) + } + ]} + /> + + ) + }, + { + title: <>実行してから変換, + content: ( + <> + +

+ さらにぼくは、 + + 弁当箱を + + してから計算箱に変換する + + こともできます。 +

+

+ ためしに、 + + 次の弁当箱の下にある、「 + + 」ボタンを押してみてください。 + +

+ + ) + } + ]} + /> + + +

+ になった! +

+ + ) + }, + { + type: 'dog', + children: ( + <> +

+ では、理由を説明しますね。まず、もともとの弁当箱を実行するとどうなるか、 + + で見てみましょう。 + +

+ + ) + } + ]} + /> + + +

+ つまり、もともとの弁当箱を + + すると、次のような弁当箱になります。 +

+ + ) + } + ]} + /> + + +

+ + これは先ほど説明した通り、計算箱に変換すると{' '} + になります。 + +

+ + ) + } + ]} + /> + + + + + + +

このような、

+
    + + + まず弁当箱を + + し、 + + + + + 実行し終えたら、続いて{' '} + する + + +
+

というふたつのステップを、

+

+ + + +

+

…を押すことで、一度に行うことができるのです。

+ + ) + } + ]} + /> + + + + + + + + +

+ なるほど、「実行」と「 + 計算箱に変換」を + 一括で行う + こともできる、ということだな。 +

+ + ) + } + ]} + /> + + ) + }, + { + type: 'yesNoQuiz', + title: ( + <> + + + ), + content: ( + <> + +

+ では、ここで最後に + + をやってみましょう。 +

+

こちらの弁当箱を…

+ + ) + } + ]} + /> + + +

+ 「 + + 」すると、下のようになるでしょうか? +

+ + ) + } + ]} + /> + + + + ) + }, + { + title: ( + <> + + + ), + content: ( + <> + +

+ + + だと思う! + + 変換すると ではなく、 + になるはずだ。 +

+ + ) + }, + { + type: 'dog', + children: ( + <> +

+ では、 + + を押してみてくだださい! +

+ + ) + } + ]} + /> + + +

+ やった! になったので、 + が正解だ! +

+ + ) + }, + { + type: 'dog', + children: ( + <> +

その通りです!

+

+ 確認のために、もともとの弁当箱を + + してみましょう。 + +

+ + ) + } + ]} + /> + + +

+ つまり、もともとの弁当箱を + + すると、次のような弁当箱になります。 +

+ + ) + } + ]} + /> + + +

+ + これは、計算箱に変換すると {' '} + になります。 + +

+ + ) + } + ]} + /> + + + + + + +

+ というわけで、もともとの弁当箱を + すると ではなく{' '} + になるので、クイズの正解は{' '} + でした! +

+ + ) + } + ]} + /> + + ) + }, + { + title: <>次のページで、難しい問題を出します, + content: ( + <> + +

ミニオン、説明ご苦労だった!

+ + ) + }, + { + type: 'dog', + children: ( + <> +

お安い御用です、ご主人さま!

+ + ) + }, + { + type: 'devil', + children: ( + <> +

+ それでは以前約束した通り、 + + 次のページで、 + ミニオンとともに難しい問題を出題する + 。それに答えることができたら、計算箱を返してやろう! + +

+ + ) + }, + { + type: 'brave', + children: ( + <> +

+ やっと計算箱を問題にチャレンジできるということだな。よーし、次のページに進むぞ! +

+ + ) + } + ]} + /> + + + ), + footer: { + content: ( + <> +

+ 🐶 ちなみに「 + ミニオン」と名付けたのは、弁( + ベン + )当箱を計(ケイ)算箱に変換できるからです。 +

+ + ) + } + } + ]} + /> +) diff --git a/src/contents/6.v2.jp.tsx b/src/contents/6.v2.jp.tsx deleted file mode 100644 index da72b2248..000000000 --- a/src/contents/6.v2.jp.tsx +++ /dev/null @@ -1,1314 +0,0 @@ -/** @jsx jsx */ -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, - InlineHeader -} from 'src/components/ContentTags' -import BubbleQuotes from 'src/components/BubbleQuotes' -import EmojiSeparator from 'src/components/EmojiSeparator' -import CustomEmoji from 'src/components/CustomEmoji' -import EmojiNumber from 'src/components/EmojiNumber' -import Emoji from 'src/components/Emoji' -import H from 'src/components/H' -import YesNoButtons from 'src/components/YesNoButtons' -import InlinePrioritiesLabel from 'src/components/InlinePrioritiesLabel' -import ExpressionRunnerButton from 'src/components/ExpressionRunnerButton' -import * as R from 'src/components/Runners' -import EmojiWithText from 'src/components/EmojiWithText' -import EmojiForLetter from 'src/components/EmojiForLetter' -import ExpressionRunnerSeparator from 'src/components/ExpressionRunnerSeparator' -import NextLessonButton from 'src/components/NextLessonButton' - -export default () => ( - 中級編へようこそ!, - content: ( - <> - -

- ここからは中級編だ。 - - 約束した通り、この中級編で出題する難しい問題に答えることができたら、計算箱を返してやろう! - -

- - ) - }, - { - type: 'brave', - children: ( - <> -

よーし、やってやる!

- - ) - }, - { - type: 'devil', - children: ( - <> -

- 問題を出す前に、わたしの助手 - をここに呼ばせてもらおう。 -

- - ) - }, - { - type: 'thinking', - children: ( - <> -

なに、お前の助手だって?

- - ) - }, - { - type: 'devil', - children: ( - <> -

いま呼ぶから、ちょっと待つんだな。

-

- …いでよ、「ミニオン」! -

- - ) - } - ]} - /> - 悪魔の助手・ミニオン、ここに参上!} - /> - -

- どうも、ミニオン - です。お呼びですか、ご主人さま? -

- - ) - }, - { - type: 'devil', - children: ( - <> -

- よく来てくれた!こいつがわたしの助手、 - ミニオンだ。 -

- - ) - }, - { - type: 'roll', - children: ( - <> -

なんだ、ただのわんこじゃないか。

- - ) - }, - { - type: 'devil', - children: ( - <> -

- ミニオンはそんじょそこらの犬とは違う。 - とっておきの芸 - を持っているからな。 -

-

ミニオン、こいつらにお前の芸を見せてやるんだ!

- - ) - }, - { - type: 'dog', - children: ( - <> -

わかりました、ご主人さま!

- - ) - } - ]} - /> - - ) - }, - { - title: <>ミニオンの芸, - content: ( - <> - 🍱, - 🐶, - - ]} - /> - -

- こちらの - - をご覧ください! -

- - ) - } - ]} - /> - - -

一見、普通の弁当箱に見えるけれど…

- - ) - }, - { - type: 'dog', - children: ( - <> -

- ぼくは、 - この弁当箱を計算箱に変える - ことができるんです! -

-

- - {' '} - を押してみてください! - -

- - ) - } - ]} - /> - - -

- すごい、計算箱の になった! -

- - ) - }, - { - type: 'dog', - children: ( - <> -

- そうなんです。ぼくは、 - ある法則に基づいて - 、弁当箱を計算箱に変える芸を持っているんです。 -

-

- その法則がどんなものか、当ててみてください! -

- - ) - }, - { - type: 'thinking', - children: ( - <> -

- ふーむ、どんな法則なんだろう?ほかの例も見ないと分からないなあ。 -

- - ) - } - ]} - /> - - ) - }, - { - title: <>どんな法則?, - content: ( - <> - -

- では、こちらに3つの弁当箱を用意しました。それぞれ - - を押してみてください! -

- - ) - } - ]} - /> - - - - -

- - どれも料理は違うけど、法則は似ているような…? - -

- - ) - }, - { - type: 'dog', - children: ( - <> -

- どれも、ある法則に基づいて計算箱に変えているんですが、分かりましたか? -

- - ) - }, - { - type: 'surprised', - children: ( - <> -

あ、分かったぞ!

- - ) - } - ]} - /> - - ) - }, - { - type: 'yesNoQuiz', - title: ( - <> - - - ), - content: ( - <> - -

それでは、こちらの弁当箱を…

- - ) - } - ]} - /> - - -

- ぼくが計算箱に変換すると、次のようになるでしょうか? -

- - ) - } - ]} - /> - - - - ) - }, - { - title: ( - <> - - - ), - content: ( - <> - -

- - - だと思う! - - 変換すると になるはずだ。 -

- - ) - }, - { - type: 'dog', - children: ( - <> -

- では、 - - を押してみてくだださい! -

- - ) - } - ]} - /> - - -

- やった! になったので、 - ⭕️が正解だ! -

- - ) - }, - { - type: 'dog', - children: ( - <> -

では、法則を説明しましょう!

- - ) - } - ]} - /> - - ) - }, - { - type: 'summary', - title: <>法則の説明, - content: ( - <> - -

- ぼくが計算箱に変換できるのは、以下のような形の弁当箱なんです。 -

- - ) - } - ]} - /> - - - - -

- たとえば、先ほど例に出したこちらの弁当箱をご覧ください。 -

- - ) - } - ]} - /> - - -

- まず、 - - が一番左にあるので、すべての - 🅰️ - の印をつけてみます。 -

- - ) - } - ]} - /> - - - が一番左にあるので、 -
- すべての - 🅰️ - の印をつける -
- -

- 次に、 - - が真ん中にあるので、すべての - 🅱️ - の印をつけてみます。 -

- - ) - } - ]} - /> - - - が真ん中にあるので、 -
- すべての - 🅱️ - の印をつける -
- -

上の弁当箱は、こちらの法則と一致していますね。

- - - -

つまり、ぼくが計算箱に変換できるということです。

- - ) - }, - { - type: 'thinking', - children: ( - <> -

なるほど。

- - ) - }, - { - type: 'dog', - children: ( - <> -

- - では、計算箱に変換した場合、何の数字になるのでしょうか? - - 答えを言うと、 - - 右下にある🅰️がついた料理の数 - - が、変換後の計算箱の数字になります。 -

- - ) - } - ]} - /> - - 右下にある🅰️ - がついた料理の数が、 -
- 変換後の計算箱の数字 -
- -

- 先ほどの弁当箱の場合、 - - 右下には🅰️がついた - - が「2個」あります。 - -

-

- だから、これをぼくが計算箱に変換すると{' '} - になるというわけです。 -

- - ) - } - ]} - /> - - - - - - -

なるほど。

- - ) - }, - { - type: 'dog', - children: ( - <> -

- ここでは と{' '} - を使いました。 - - しかし他の料理でも、同じ法則に沿っていれば、計算箱に変換したときに同じ数字になります。 - -

-

- たとえば、 と{' '} - を以下のように配置した場合… -

- - ) - } - ]} - /> - - -

- 🅰️🅱️{' '} - は以下のようになるので… -

- - ) - } - ]} - /> - - は一番左にあるので 🅰️{' '} - を、 -
- は真ん中にあるので 🅱️{' '} - をつける -
- -

- 計算箱に変換したときに先ほどと同じく{' '} - になります。 -

- - ) - } - ]} - /> - - - - - - -

- つまり、 - - 弁当箱に入っているのがどんな料理だろうと、 - 🅰️🅱️{' '} - の印をつけた際に、同じ法則に沿っていれば同じ計算箱に変換される - - というわけです。 -

- - ) - }, - { - type: 'thinking', - children: ( - <> -

なるほど。

- - ) - }, - { - type: 'dog', - children: ( - <> -

何か質問はございますか?

- - ) - }, - { - type: 'thinking', - children: ( - <> -

- ひとつ質問がある。 - - 上の弁当箱には{' '} - 1{' '} - 2{' '} - といった番号が出てきたけど… - -

-

- たとえば、 「 - - 1{' '} - 2{' '} - がこういう並び順でなければ、計算箱に変換できない - - 」といった決まりはあるの? -

- - ) - }, - { - type: 'dog', - children: ( - <> -

- 厳密に言うとあるのですが、本稿を読み進める上では気にしなくても結構です。 -

-

- つまり、計算箱に変換する際には、 - - 1 や - 2{' '} - などの番号は無視し、🅰️ と{' '} - 🅱️{' '} - といった料理の法則だけに注目してください。 - -

- - ) - }, - { - type: 'smile', - children: ( - <> -

了解!

- - ) - } - ]} - /> - - ) - }, - { - title: <>他の弁当箱の例, - content: ( - <> - -

- - で出した弁当箱にも、🅰️🅱️ - の印をつけてみましょう。まずは - : -

- - ) - } - ]} - /> - - -

- 上の弁当箱に、先ほどの法則にしたがって🅰️ - と🅱️の印をつけると、 - - 右下には🅰️がついた - - が「4個」あります。 - -

-

- だから、これをぼくが計算箱に変換すると{' '} - になるというわけです。 -

- - ) - } - ]} - /> - - - - - - - ) - }, - { - title: ( - <> - になる場合 - - ), - content: ( - <> - -

- 続いて - - 。このページの冒頭で紹介した弁当箱です。 -

- - ) - } - ]} - /> - - -

- 上の弁当箱に、先ほどの法則にしたがって🅰️ - と🅱️の印をつけると、 - - 右下には🅰️がついた - が - ひとつもありません。 - -

-

- つまり、 - - 🅰️の数は「ゼロ個」 - - というわけです。 -

-

- だから、これをぼくが計算箱に変換すると{' '} - になります。 -

- - ) - } - ]} - /> - - - - - - -

- なるほど、 - - 右下の🅰️ - の数がゼロになる場合もあるんだね。 - -

- - ) - } - ]} - /> - - ) - }, - { - title: <>実行してから変換, - content: ( - <> - -

- さらにぼくは、 - - 弁当箱を - - してから計算箱に変換する - - こともできます。 -

-

- ためしに、 - - 次の弁当箱の下にある、「 - - 」ボタンを押してみてください。 - -

- - ) - } - ]} - /> - - -

- になった! -

- - ) - }, - { - type: 'dog', - children: ( - <> -

- では、理由を説明しますね。まず、もともとの弁当箱を実行するとどうなるか、 - - で見てみましょう。 - -

- - ) - } - ]} - /> - - -

- つまり、もともとの弁当箱を - - すると、次のような弁当箱になります。 -

- - ) - } - ]} - /> - - -

- - これは先ほど説明した通り、計算箱に変換すると{' '} - になります。 - -

- - ) - } - ]} - /> - - - - - - -

このような、

-
    - - - まず弁当箱を - - し、 - - - - - 実行し終えたら、続いて{' '} - する - - -
-

というふたつのステップを、

-

- - - -

-

…を押すことで、一度に行うことができるのです。

- - ) - } - ]} - /> - - - - - - - - -

- なるほど、「実行」と「 - 計算箱に変換」を - 一括で行う - こともできる、ということだな。 -

- - ) - } - ]} - /> - - ) - }, - { - type: 'yesNoQuiz', - title: ( - <> - - - ), - content: ( - <> - -

- では、ここで最後に - - をやってみましょう。 -

-

こちらの弁当箱を…

- - ) - } - ]} - /> - - -

- 「 - - 」すると、下のようになるでしょうか? -

- - ) - } - ]} - /> - - - - ) - }, - { - title: ( - <> - - - ), - content: ( - <> - -

- - - だと思う! - - 変換すると ではなく、 - になるはずだ。 -

- - ) - }, - { - type: 'dog', - children: ( - <> -

- では、 - - を押してみてくだださい! -

- - ) - } - ]} - /> - - -

- やった! になったので、 - が正解だ! -

- - ) - }, - { - type: 'dog', - children: ( - <> -

その通りです!

-

- 確認のために、もともとの弁当箱を - - してみましょう。 - -

- - ) - } - ]} - /> - - -

- つまり、もともとの弁当箱を - - すると、次のような弁当箱になります。 -

- - ) - } - ]} - /> - - -

- - これは、計算箱に変換すると {' '} - になります。 - -

- - ) - } - ]} - /> - - - - - - -

- というわけで、もともとの弁当箱を - すると ではなく{' '} - になるので、クイズの正解は{' '} - でした! -

- - ) - } - ]} - /> - - ) - }, - { - title: <>次のページで、難しい問題を出します, - content: ( - <> - -

ミニオン、説明ご苦労だった!

- - ) - }, - { - type: 'dog', - children: ( - <> -

お安い御用です、ご主人さま!

- - ) - }, - { - type: 'devil', - children: ( - <> -

- それでは以前約束した通り、 - - 次のページで、 - ミニオンとともに難しい問題を出題する - 。それに答えることができたら、計算箱を返してやろう! - -

- - ) - }, - { - type: 'brave', - children: ( - <> -

- やっと計算箱を問題にチャレンジできるということだな。よーし、次のページに進むぞ! -

- - ) - } - ]} - /> - - - ), - footer: { - content: ( - <> -

- 🐶 ちなみに「 - ミニオン」と名付けたのは、弁( - ベン - )当箱を計(ケイ)算箱に変換できるからです。 -

- - ) - } - } - ]} - /> -) diff --git a/src/contents/7.jp.tsx b/src/contents/7.jp.tsx index 5f4ca258b..2e6dbc766 100644 --- a/src/contents/7.jp.tsx +++ b/src/contents/7.jp.tsx @@ -1,4 +1,1306 @@ import React from 'react' import EpisodeCardList from 'src/components/EpisodeCardList' +import { P, Em, Strong, Ul, UlLi } from 'src/components/ContentTags' +import CustomEmoji from 'src/components/CustomEmoji' +import BubbleQuotes from 'src/components/BubbleQuotes' +import EmojiNumber from 'src/components/EmojiNumber' +import Emoji from 'src/components/Emoji' +import EmojiForLetter from 'src/components/EmojiForLetter' +import H from 'src/components/H' +import ExpressionRunnerSeparator from 'src/components/ExpressionRunnerSeparator' +import ExpressionRunnerCaptionOnly from 'src/components/ExpressionRunnerCaptionOnly' +import EmojiSeparator from 'src/components/EmojiSeparator' +import * as R from 'src/components/Runners' +import EmojiWithText from 'src/components/EmojiWithText' +import InlinePrioritiesLabel from 'src/components/InlinePrioritiesLabel' +import NextLessonButton from 'src/components/NextLessonButton' -export default () => +export default () => ( + 問題の説明, + content: ( + <> + +

+ では約束通り、 + + これから出す問題に答えることができたら、計算箱を返してやろう! + +

+

+ この問題は非常に難しい + から覚悟するんだな。ミニオン、問題を説明するんだ! +

+ + ) + }, + { + type: 'dog', + children: ( + <> +

+ わかりました。まず、 + 。 +

+

+ {' '} + がたくさんありますが、それぞれの{' '} + + {' '} + には何らかの料理が入ります。 + +

+ + ) + } + ]} + /> + + それぞれの には +
+ 何らかの料理が入る +
+ +

何だか複雑そうな弁当箱だなあ…

+ + ) + }, + { + type: 'dog', + children: ( + <> +

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

+ + ) + } + ]} + /> + + それぞれの に、 +
+ ある法則に基づいて料理を入れると、 +
+ + がある弁当箱になる +
+ +

+ 背景に {' '} + の模様がついた! +

+ + ) + }, + { + type: 'dog', + children: ( + <> +

+ そうですね。背景にある{' '} + {' '} + の模様は単に、 + + があるということを表しているだけです。 +

+ + ) + }, + { + type: 'thinking', + children: ( + <> +

+ その + + ってどういう効果なの? +

+ + ) + }, + { + type: 'dog', + children: ( + <> +

これから説明しますね!

+ + ) + } + ]} + /> + + ) + }, + { + title: ( + <> + になる + + ), + content: ( + <> + +

+ : +

+ + ) + } + ]} + /> + + +

+ 前回の復習ですが、この弁当箱は、ぼくが計算箱に変換すると{' '} + になります。 +

+ + ) + } + ]} + /> + + + + + + +

+ では上の弁当箱を、先ほどの + + がある弁当箱と合体させてみます。 +

+ + ) + } + ]} + /> + + + がある弁当箱と合体 + + +

+ では、この弁当箱を「 + + + + 」するとどうなるか見てみましょう。 +

+ + ) + } + ]} + /> + + +

+ になった! +

+ + ) + }, + { + type: 'dog', + children: ( + <> +

そうなんです!つまり、

+
    + + + に変換できる弁当箱と、 + + + + + 先ほどの + + がある弁当箱を合体させて、 + + + + + 「 + 」すると、 + + + + + 結果は になる + + +
+

ということです。

+ + ) + } + ]} + /> + + に変換できる弁当箱と、 +
+ + がある弁当箱を合体させ… +
+ + + +
+ すると、結果は になる +
+ +

+ つまり大雑把に言えば、 + + が{' '} + になった + + というわけです。 +

+ + ) + } + ]} + /> + + ) + }, + { + title: ( + <> + になる + + ), + content: ( + <> + +

+ 続いて、 + 。 +

+ + ) + } + ]} + /> + + +

+ この弁当箱は、ぼくが計算箱に変換すると{' '} + になります。 +

+ + ) + } + ]} + /> + + + + + + +

+ この弁当箱も、 + + 先ほどの + + がある弁当箱と合体させてみました。 + +

+ + ) + } + ]} + /> + + + がある弁当箱と合体 + + +

+ こちらを「 + + + + 」するとどうなるか確かめてみてください! +

+ + ) + } + ]} + /> + + +

+ になった! +

+ + ) + }, + { + type: 'dog', + children: ( + <> +

そうなんです!まとめると、以下のようになります。

+ + ) + } + ]} + /> + + + に変換できる弁当箱と、 +
+ + がある弁当箱を合体させ… +
+ + + +
+ すると、結果は になる +
+ +

+ ざっくり言うと、今度は{' '} + + が{' '} + になった + + のです。 +

+ + ) + } + ]} + /> + + ) + }, + { + type: 'summary', + title: <>まとめ, + content: ( + <> + +

まとめると、

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

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

+ + ) + } + ]} + /> + + に変換できる弁当箱と、 +
+ + がある弁当箱を合体させ… +
+ + + +
+ すると、結果は {' '} + になる +
+ + ) + }, + { + title: ( + <> + 計算箱の と同じようなもの + + ), + content: ( + <> + +

+ ここで思い出してほしいのですが、 + + 計算箱では、 + {' '} + を使えば、「1を足す」計算を行うことができましたよね + + 。 +

+ + ) + } + ]} + /> + + 計算箱の場合 + + + + +

+ すなわち、この + がある弁当箱は… +

+ + ) + } + ]} + /> + + この + がある弁当箱は… + + +

+ + 計算箱における {' '} + と同じようなもの + + 、と言えるでしょう。 +

+ + ) + } + ]} + /> + + + 計算箱における、 + と同じようなもの + + + + ) + }, + { + title: <>計算箱を賭けた問題, + content: ( + <> + +

+ では、ここで問題です。 + + この弁当箱に、どのような法則に基づいて{' '} + {' '} + に料理を入れると… + +

+ + ) + } + ]} + /> + + + どのような法則に基づいて {' '} + に料理を入れると… + + + +

+ 先ほどのような、 + + + がある弁当箱になるでしょう? + +

+ + ) + } + ]} + /> + + + + がある弁当箱になる? + + + +

+ + ある法則に基づいて{' '} + {' '} + に料理を入れた時に限り + + 、 + がある弁当箱になります。 +

+

+ それがどんな法則が、当ててみよう! + という問題です。 +

+ + ) + } + ]} + /> + , + 🐶, + + ]} + description={ + <> + それぞれの {' '} + に何を入れたら +
+ + がある弁当箱になる? + + } + /> + +

+ この問題こそが、以前から話していた「難しい問題」だ。 + これを解けたら、約束通り計算箱を返してやろう! +

+ + ) + } + ]} + /> + + ) + }, + { + title: ( + <> + 試しに適当な料理を入れてみる + + ), + content: ( + <> + +

+ うーん… + + 問題を完全に理解できた自信がないし、どうやって解けばいいかさっぱり分からない! + +

+ + ) + }, + { + type: 'dog', + children: ( + <> +

大丈夫、安心してください!

+

+ + 試しに、 + {' '} + に適当な料理を入れてみると、問題を理解できると思います。 + +

+ + ) + } + ]} + /> + + {' '} + に適当な料理を入れてみて下さい!🐶 + + +

+ わかった。じゃあとりあえず、 + {' '} + に適当な料理を入れてみよう。 +

+

+ + 、 + 、 + + を適当な組み合わせで{' '} + {' '} + に入れてみたよ。 + +

+ + ) + } + ]} + /> + + {' '} + を適当に{' '} + に入れてみた + + +

問題をもう一度解説すると、

+
    + + 上の弁当箱を + + ある数字 {' '} + に変換できる弁当箱と合体させ、 + + + + + + して、 + + + + + {' '} + になれば + 成功 🎉 + 、それ以外なら失敗{' '} + 😭 + + +
+

ということになります。

+ + ) + } + ]} + /> + + に変換できる弁当箱と、 +
+ 先ほどの弁当箱を合体させ… +
+ + + +
+ して、結果が {' '} + {' '} + になれば + 成功 🎉 +
+ それ以外なら失敗 😭 +
+ +

+ なるほど。 + + があれば成功 🎉、 + それ以外なら失敗 😭{' '} + というわけだね。 +

+ + ) + } + ]} + /> + + ) + }, + { + title: ( + <> + + があるかチェック + + ), + content: ( + <> + +

+ それでは冒頭でも紹介した、 {' '} + に変換できる弁当箱を使って試してみましょう。 +

+ + ) + } + ]} + /> + + に変換できる弁当箱 + + +

+ これを先ほどの弁当箱と組み合わせて、 + + し、 + + {' '} + を計算できればいい + + んだな。 +

+

+ すなわち、 + + 結果が になれば + 成功 🎉、それ以外なら + 失敗 😭{' '} + + というわけか。 +

+ + ) + } + ]} + /> + + に変換できる弁当箱と、 +
+ 先ほどの弁当箱を合体させ… +
+ + + +
+ して、結果が になれば + 成功 🎉 +
+ それ以外なら失敗 😭 +
+ +

+ ではまず、この弁当箱を実行したらどうなるか見ていきましょう! +

+

+ +

+

+ 初級その5で説明した通り、 + + 1 + のペアがふたつ以上ある場合は、一番左の + 1 + のペアからはじめます。 + +

+ + ) + } + ]} + /> + + + + +

+ 続いて、また + + 1 + のペアからはじめたいのですが、 + 1 + のペアの一番下の段にひとつの料理( + + )しかないので不可能です。 + +

+

+ というわけで、初級その5で説明した通り、 + + 次は + 2 + のペアからはじめます。 + +

+ + ) + } + ]} + /> + + + + +

+ 次も前回と同じく、 + 1 + のペアからはじめたいのですが、 + 1 + のペアの一番下の段にひとつの料理( + + )しかないので不可能です。 +

+

+ というわけで、再度 + + 2 + のペアからはじめます。 + +

+

+ +

+ + ) + } + ]} + /> + + + + +

つまり、最終的に以下のようになりました!

+ + ) + } + ]} + /> + 実行結果 + + ) + }, + { + title: <>計算箱に変換できない, + content: ( + <> + +

+ 実行を終えたので、 + {' '} + したいところですが… +

+

+ 残念ながら、 + + この弁当箱はぼくが計算箱に変換することができません。 + +

+ + ) + } + ]} + /> + 計算箱に変換できない + +

+ 理由はもちろん、 + 以下の法則に沿っていないからです。 +

+ + + +

+ + 右上には 🅱️{' '} + の料理がひとつないといけませんが、ここでは{' '} + 🅰️ になっている + + ので、計算箱に変換できないのです。 +

+ + ) + } + ]} + /> + + 右上の料理が 🅱️ ではなく、🅰️なので +
+ 計算箱に変換できない +
+ +

+ ダメか… + + もし仮に右上が + + ではなくて + + だったら、 + に変換できていたのになあ。 + +

+ + ) + } + ]} + /> + + も仮にし右上が + +
+ だったら、 + に変換できていた +
+ + + + ) + }, + { + title: ( + <> + + は無い + + ), + content: ( + <> + +

+ つまり、実行しても{' '} + {' '} + に変換できる弁当箱にならなかった +

+ + ) + } + ]} + /> + + に変換できる弁当箱と合体させ… + + + + 実行したところ、 +
+ + {' '} + に変換できる弁当箱にならなかった + +
+ +

+ + 先ほどあなたが適当に{' '} + {' '} + に料理を入れた弁当箱に、 + + は無い + + のです。 +

+ + ) + } + ]} + /> + + + は無い + + +

+ 残念…やっぱり、適当に{' '} + {' '} + に料理を埋めても正解にはならないかあ… +

+ + ) + }, + { + type: 'dog', + children: ( + <> +

では、もう一度ふりだしに戻りましょう。

+

+ + この弁当箱に、どのような法則に基づいて{' '} + {' '} + に料理を入れると… + +

+ + ) + } + ]} + /> + + + どのような法則に基づいて {' '} + に料理を入れると… + + + +

+ + + がある弁当箱になるでしょう? + +

+ + ) + } + ]} + /> + + + + がある弁当箱になる? + + + +

うーん…分からない!

+ + ) + } + ]} + /> + + ) + }, + { + title: <>答えは次のページに, + content: ( + <> +

+ せっかく計算箱を返してもらえるチャンスなのに、問題が難しくて村人は苦労しているようですね。 +

+ +

+ しかし、次のページで答えが判明します。 + ぜひ先に進んでみてください! +

+ + + ) + } + ]} + /> +) diff --git a/src/contents/7.v2.jp.tsx b/src/contents/7.v2.jp.tsx deleted file mode 100644 index 2e6dbc766..000000000 --- a/src/contents/7.v2.jp.tsx +++ /dev/null @@ -1,1306 +0,0 @@ -import React from 'react' -import EpisodeCardList from 'src/components/EpisodeCardList' -import { P, Em, Strong, Ul, UlLi } from 'src/components/ContentTags' -import CustomEmoji from 'src/components/CustomEmoji' -import BubbleQuotes from 'src/components/BubbleQuotes' -import EmojiNumber from 'src/components/EmojiNumber' -import Emoji from 'src/components/Emoji' -import EmojiForLetter from 'src/components/EmojiForLetter' -import H from 'src/components/H' -import ExpressionRunnerSeparator from 'src/components/ExpressionRunnerSeparator' -import ExpressionRunnerCaptionOnly from 'src/components/ExpressionRunnerCaptionOnly' -import EmojiSeparator from 'src/components/EmojiSeparator' -import * as R from 'src/components/Runners' -import EmojiWithText from 'src/components/EmojiWithText' -import InlinePrioritiesLabel from 'src/components/InlinePrioritiesLabel' -import NextLessonButton from 'src/components/NextLessonButton' - -export default () => ( - 問題の説明, - content: ( - <> - -

- では約束通り、 - - これから出す問題に答えることができたら、計算箱を返してやろう! - -

-

- この問題は非常に難しい - から覚悟するんだな。ミニオン、問題を説明するんだ! -

- - ) - }, - { - type: 'dog', - children: ( - <> -

- わかりました。まず、 - 。 -

-

- {' '} - がたくさんありますが、それぞれの{' '} - - {' '} - には何らかの料理が入ります。 - -

- - ) - } - ]} - /> - - それぞれの には -
- 何らかの料理が入る -
- -

何だか複雑そうな弁当箱だなあ…

- - ) - }, - { - type: 'dog', - children: ( - <> -

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

- - ) - } - ]} - /> - - それぞれの に、 -
- ある法則に基づいて料理を入れると、 -
- - がある弁当箱になる -
- -

- 背景に {' '} - の模様がついた! -

- - ) - }, - { - type: 'dog', - children: ( - <> -

- そうですね。背景にある{' '} - {' '} - の模様は単に、 - - があるということを表しているだけです。 -

- - ) - }, - { - type: 'thinking', - children: ( - <> -

- その - - ってどういう効果なの? -

- - ) - }, - { - type: 'dog', - children: ( - <> -

これから説明しますね!

- - ) - } - ]} - /> - - ) - }, - { - title: ( - <> - になる - - ), - content: ( - <> - -

- : -

- - ) - } - ]} - /> - - -

- 前回の復習ですが、この弁当箱は、ぼくが計算箱に変換すると{' '} - になります。 -

- - ) - } - ]} - /> - - - - - - -

- では上の弁当箱を、先ほどの - - がある弁当箱と合体させてみます。 -

- - ) - } - ]} - /> - - - がある弁当箱と合体 - - -

- では、この弁当箱を「 - - - - 」するとどうなるか見てみましょう。 -

- - ) - } - ]} - /> - - -

- になった! -

- - ) - }, - { - type: 'dog', - children: ( - <> -

そうなんです!つまり、

-
    - - - に変換できる弁当箱と、 - - - - - 先ほどの - - がある弁当箱を合体させて、 - - - - - 「 - 」すると、 - - - - - 結果は になる - - -
-

ということです。

- - ) - } - ]} - /> - - に変換できる弁当箱と、 -
- - がある弁当箱を合体させ… -
- - - -
- すると、結果は になる -
- -

- つまり大雑把に言えば、 - - が{' '} - になった - - というわけです。 -

- - ) - } - ]} - /> - - ) - }, - { - title: ( - <> - になる - - ), - content: ( - <> - -

- 続いて、 - 。 -

- - ) - } - ]} - /> - - -

- この弁当箱は、ぼくが計算箱に変換すると{' '} - になります。 -

- - ) - } - ]} - /> - - - - - - -

- この弁当箱も、 - - 先ほどの - - がある弁当箱と合体させてみました。 - -

- - ) - } - ]} - /> - - - がある弁当箱と合体 - - -

- こちらを「 - - - - 」するとどうなるか確かめてみてください! -

- - ) - } - ]} - /> - - -

- になった! -

- - ) - }, - { - type: 'dog', - children: ( - <> -

そうなんです!まとめると、以下のようになります。

- - ) - } - ]} - /> - - - に変換できる弁当箱と、 -
- - がある弁当箱を合体させ… -
- - - -
- すると、結果は になる -
- -

- ざっくり言うと、今度は{' '} - - が{' '} - になった - - のです。 -

- - ) - } - ]} - /> - - ) - }, - { - type: 'summary', - title: <>まとめ, - content: ( - <> - -

まとめると、

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

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

- - ) - } - ]} - /> - - に変換できる弁当箱と、 -
- - がある弁当箱を合体させ… -
- - - -
- すると、結果は {' '} - になる -
- - ) - }, - { - title: ( - <> - 計算箱の と同じようなもの - - ), - content: ( - <> - -

- ここで思い出してほしいのですが、 - - 計算箱では、 - {' '} - を使えば、「1を足す」計算を行うことができましたよね - - 。 -

- - ) - } - ]} - /> - - 計算箱の場合 - - - - -

- すなわち、この - がある弁当箱は… -

- - ) - } - ]} - /> - - この - がある弁当箱は… - - -

- - 計算箱における {' '} - と同じようなもの - - 、と言えるでしょう。 -

- - ) - } - ]} - /> - - - 計算箱における、 - と同じようなもの - - - - ) - }, - { - title: <>計算箱を賭けた問題, - content: ( - <> - -

- では、ここで問題です。 - - この弁当箱に、どのような法則に基づいて{' '} - {' '} - に料理を入れると… - -

- - ) - } - ]} - /> - - - どのような法則に基づいて {' '} - に料理を入れると… - - - -

- 先ほどのような、 - - - がある弁当箱になるでしょう? - -

- - ) - } - ]} - /> - - - - がある弁当箱になる? - - - -

- - ある法則に基づいて{' '} - {' '} - に料理を入れた時に限り - - 、 - がある弁当箱になります。 -

-

- それがどんな法則が、当ててみよう! - という問題です。 -

- - ) - } - ]} - /> - , - 🐶, - - ]} - description={ - <> - それぞれの {' '} - に何を入れたら -
- - がある弁当箱になる? - - } - /> - -

- この問題こそが、以前から話していた「難しい問題」だ。 - これを解けたら、約束通り計算箱を返してやろう! -

- - ) - } - ]} - /> - - ) - }, - { - title: ( - <> - 試しに適当な料理を入れてみる - - ), - content: ( - <> - -

- うーん… - - 問題を完全に理解できた自信がないし、どうやって解けばいいかさっぱり分からない! - -

- - ) - }, - { - type: 'dog', - children: ( - <> -

大丈夫、安心してください!

-

- - 試しに、 - {' '} - に適当な料理を入れてみると、問題を理解できると思います。 - -

- - ) - } - ]} - /> - - {' '} - に適当な料理を入れてみて下さい!🐶 - - -

- わかった。じゃあとりあえず、 - {' '} - に適当な料理を入れてみよう。 -

-

- - 、 - 、 - - を適当な組み合わせで{' '} - {' '} - に入れてみたよ。 - -

- - ) - } - ]} - /> - - {' '} - を適当に{' '} - に入れてみた - - -

問題をもう一度解説すると、

-
    - - 上の弁当箱を - - ある数字 {' '} - に変換できる弁当箱と合体させ、 - - - - - - して、 - - - - - {' '} - になれば - 成功 🎉 - 、それ以外なら失敗{' '} - 😭 - - -
-

ということになります。

- - ) - } - ]} - /> - - に変換できる弁当箱と、 -
- 先ほどの弁当箱を合体させ… -
- - - -
- して、結果が {' '} - {' '} - になれば - 成功 🎉 -
- それ以外なら失敗 😭 -
- -

- なるほど。 - - があれば成功 🎉、 - それ以外なら失敗 😭{' '} - というわけだね。 -

- - ) - } - ]} - /> - - ) - }, - { - title: ( - <> - - があるかチェック - - ), - content: ( - <> - -

- それでは冒頭でも紹介した、 {' '} - に変換できる弁当箱を使って試してみましょう。 -

- - ) - } - ]} - /> - - に変換できる弁当箱 - - -

- これを先ほどの弁当箱と組み合わせて、 - - し、 - - {' '} - を計算できればいい - - んだな。 -

-

- すなわち、 - - 結果が になれば - 成功 🎉、それ以外なら - 失敗 😭{' '} - - というわけか。 -

- - ) - } - ]} - /> - - に変換できる弁当箱と、 -
- 先ほどの弁当箱を合体させ… -
- - - -
- して、結果が になれば - 成功 🎉 -
- それ以外なら失敗 😭 -
- -

- ではまず、この弁当箱を実行したらどうなるか見ていきましょう! -

-

- -

-

- 初級その5で説明した通り、 - - 1 - のペアがふたつ以上ある場合は、一番左の - 1 - のペアからはじめます。 - -

- - ) - } - ]} - /> - - - - -

- 続いて、また - - 1 - のペアからはじめたいのですが、 - 1 - のペアの一番下の段にひとつの料理( - - )しかないので不可能です。 - -

-

- というわけで、初級その5で説明した通り、 - - 次は - 2 - のペアからはじめます。 - -

- - ) - } - ]} - /> - - - - -

- 次も前回と同じく、 - 1 - のペアからはじめたいのですが、 - 1 - のペアの一番下の段にひとつの料理( - - )しかないので不可能です。 -

-

- というわけで、再度 - - 2 - のペアからはじめます。 - -

-

- -

- - ) - } - ]} - /> - - - - -

つまり、最終的に以下のようになりました!

- - ) - } - ]} - /> - 実行結果 - - ) - }, - { - title: <>計算箱に変換できない, - content: ( - <> - -

- 実行を終えたので、 - {' '} - したいところですが… -

-

- 残念ながら、 - - この弁当箱はぼくが計算箱に変換することができません。 - -

- - ) - } - ]} - /> - 計算箱に変換できない - -

- 理由はもちろん、 - 以下の法則に沿っていないからです。 -

- - - -

- - 右上には 🅱️{' '} - の料理がひとつないといけませんが、ここでは{' '} - 🅰️ になっている - - ので、計算箱に変換できないのです。 -

- - ) - } - ]} - /> - - 右上の料理が 🅱️ ではなく、🅰️なので -
- 計算箱に変換できない -
- -

- ダメか… - - もし仮に右上が - - ではなくて - - だったら、 - に変換できていたのになあ。 - -

- - ) - } - ]} - /> - - も仮にし右上が - -
- だったら、 - に変換できていた -
- - - - ) - }, - { - title: ( - <> - - は無い - - ), - content: ( - <> - -

- つまり、実行しても{' '} - {' '} - に変換できる弁当箱にならなかった -

- - ) - } - ]} - /> - - に変換できる弁当箱と合体させ… - - - - 実行したところ、 -
- - {' '} - に変換できる弁当箱にならなかった - -
- -

- - 先ほどあなたが適当に{' '} - {' '} - に料理を入れた弁当箱に、 - - は無い - - のです。 -

- - ) - } - ]} - /> - - - は無い - - -

- 残念…やっぱり、適当に{' '} - {' '} - に料理を埋めても正解にはならないかあ… -

- - ) - }, - { - type: 'dog', - children: ( - <> -

では、もう一度ふりだしに戻りましょう。

-

- - この弁当箱に、どのような法則に基づいて{' '} - {' '} - に料理を入れると… - -

- - ) - } - ]} - /> - - - どのような法則に基づいて {' '} - に料理を入れると… - - - -

- - - がある弁当箱になるでしょう? - -

- - ) - } - ]} - /> - - - - がある弁当箱になる? - - - -

うーん…分からない!

- - ) - } - ]} - /> - - ) - }, - { - title: <>答えは次のページに, - content: ( - <> -

- せっかく計算箱を返してもらえるチャンスなのに、問題が難しくて村人は苦労しているようですね。 -

- -

- しかし、次のページで答えが判明します。 - ぜひ先に進んでみてください! -

- - - ) - } - ]} - /> -) diff --git a/src/contents/8.jp.tsx b/src/contents/8.jp.tsx index 5f4ca258b..f6b84d0d8 100644 --- a/src/contents/8.jp.tsx +++ b/src/contents/8.jp.tsx @@ -1,4 +1,1195 @@ import React from 'react' import EpisodeCardList from 'src/components/EpisodeCardList' +import { + P, + Strong, + Em, + Ul, + UlLi, + InlineHeader, + Hr +} from 'src/components/ContentTags' +import CustomEmoji from 'src/components/CustomEmoji' +import BubbleQuotes from 'src/components/BubbleQuotes' +import EmojiNumber from 'src/components/EmojiNumber' +import Emoji from 'src/components/Emoji' +import H from 'src/components/H' +import ExpressionRunnerSeparator from 'src/components/ExpressionRunnerSeparator' +import ExpressionRunnerCaptionOnly from 'src/components/ExpressionRunnerCaptionOnly' +import EmojiSeparator from 'src/components/EmojiSeparator' +import * as R from 'src/components/Runners' +import InlinePrioritiesLabel from 'src/components/InlinePrioritiesLabel' +import EmojiWithText from 'src/components/EmojiWithText' +import NextLessonButton from 'src/components/NextLessonButton' -export default () => +export default () => ( + サヤちゃん現る, + content: ( + <> + 😭, + , + 😭 + ]} + /> +

ラムダ村の村人たちは、前回の問題に四苦八苦していました。

+ + + どのような法則に基づいて {' '} + に料理を入れると… + + + + + + がある弁当箱になる? + + + +

だめだ…全然分からない!

+ + ) + }, + { + type: 'sad', + children: ( + <> +

+ これを解かないと計算箱を返してもらえないのに…どうしよう… +

+ + ) + } + ]} + /> +

+ その時です。ラムダ村に暮らす少女のサヤちゃん{' '} + 👧🏻{' '} + が、問題に苦戦している村人たちに話しかけてきました。 +

+ + ラムダ村に暮らす少女のサヤちゃん + + } + /> + +

ねえねえ、みんな何してるの?

+ + ) + }, + { + type: 'sad', + children: ( + <> +

おお、サヤちゃんか。

+

+ にっくき悪魔 😈{' '} + に計算箱を奪われてしまったんだ。奴が出題した問題を解かないと計算箱を返してもらえないんだけど、俺らには難しくて解けないんだよ。 +

+

その問題は以下の通りさ。

+ + ) + } + ]} + /> + + どのような法則に基づいて +
+ {' '} + に料理を入れると… +
+ + {' '} + に変換できる弁当箱と合体させて +
+ + すると、 +
+ 結果が {' '} + {' '} + になる? +
+ + + +

ふーん、じゃあサヤも解くのを手伝うよ!

+ + ) + }, + { + type: 'roll', + children: ( + <> +

+ 手伝ってくれるのはありがたいけど、この問題はママゴトじゃないんだよ。俺らがどれだけ頑張っても分からなかったんだ。 +

+ + ) + } + ]} + /> + + ) + }, + { + title: <>サヤちゃんの弁当箱, + content: ( + <> +

+ サヤちゃんは少し考えた後、 + に料理を入れてみました。 +

+ +

+ ねえねえ、サヤも {' '} + に料理を入れてみたんだけど、見てくれる? +

+ + ) + } + ]} + /> + + 👧🏻 サヤちゃんの弁当箱 + + +

+ ふむふむ…どうせ上手くいかないと思うけど、試してみるか。 +

+

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

+ + + +

+ + して、 + + 結果が になるか + + 確かめてみよう。 +

+ + ) + } + ]} + /> + + に変換できる弁当箱と、 +
+ 👧🏻 サヤちゃんの弁当箱を合体させ… +
+ + + +
+ して、結果が になれば + 成功 🎉 +
+ それ以外なら失敗 😭 +
+ +

+ じゃあ、 + + してみよう! +

+ + ) + } + ]} + /> + + ) + }, + { + title: ( + <> + してみると… + + ), + content: ( + <> +

+ それでは、👧🏻{' '} + サヤちゃんの弁当箱を実行してみましょう! +

+

+ まず、 + + 1 + のペアがふたつ以上あるので、一番左の + 1 + のペアからはじめます。 + + +

+ + + +

+ 続いて、また + + 1 + のペアからはじめたいのですが、 + 1 + のペアの一番下の段にひとつの料理( + + )しかないので不可能です。 + +

+

+ というわけで、 + + 次は + 2 + のペアからはじめます。 + +

+ + + +

+ 次も前回と同じく、 + 1 + のペアからはじめたいのですが、 + 1 + のペアの一番下の段にひとつの料理( + + )しかないので不可能です。 +

+

+ というわけで、再度 + + 2 + のペアからはじめます。 + +

+ + + +

つまり、最終的に以下のようになりました!

+ + +

こ、これはもしや…?

+ + ) + } + ]} + /> + + ) + }, + { + title: ( + <> + に変換できる + + ), + content: ( + <> + +

+ この弁当箱は、 + に変換できます! +

+ + ) + } + ]} + /> + + + + + + +

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

+

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

+ + ) + } + ]} + /> + + に変換できる弁当箱と、 +
+ 👧🏻 サヤちゃんの弁当箱を合体させ… +
+ + + +
+ すると、結果が になる +
+ +

+ つまり、 + {' '} + が計算できたので、 + 成功です! 🎉 +

+ + ) + }, + { + type: 'saya', + children: ( + <> +

やったー!

+ + ) + }, + { + type: 'surprised', + children: ( + <> +

+ そんなバカな…!俺らがどれだけ頭をひねっても分からなかったのに、サヤちゃんにいとも簡単に解かれるなんて! +

+ + ) + } + ]} + /> + + ) + }, + { + title: ( + <> + {' '} + はできる? + + ), + content: ( + <> + +

+ いや、まだ分からんぞ。 + {' '} + ができるからといって、 + + 他の数字に対しても + + があるとは限らない。 + +

+

+ たとえば、 + + {' '} + も計算できるのかどうか、 + + 確かめてみないと。 +

+ + ) + } + ]} + /> + , + , + + ]} + description={<>これも計算できる?} + /> + +

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

+ + + +

+ 合体したものを + + して、 + + 結果が になればいい + + んだよね。 +

+ + ) + } + ]} + /> + + に変換できる弁当箱と、 +
+ 👧🏻 サヤちゃんの弁当箱を合体させ… +
+ + + +
+ して、結果が になれば + 成功 🎉 +
+ それ以外なら失敗 😭 +
+ +

+ まずは実行してみるね。 + +

+

今回は、最後まで止まらずに早送りします!

+ + ) + } + ]} + /> + + +

結果はこうなったよ!

+ + ) + } + ]} + /> + + +

+ この弁当箱は、 + に変換できます! +

+ + ) + } + ]} + /> + + + + + + +

+ つまり、 + {' '} + が計算できたので、 + またしても成功です! 🎉 +

+ + ) + }, + { + type: 'saya', + children: ( + <> +

わーい、わーい!

+ + ) + }, + { + type: 'surprised', + children: ( + <> +

す、すごい…!

+ + ) + } + ]} + /> + + ) + }, + { + title: ( + <> + + がある法則 + + ), + content: ( + <> + +

+ ではここで正解を言いましょう。 + + サヤちゃんが考えた弁当箱は、 + + がある弁当箱です。 + +

+

+ だから、サヤちゃんの答えが正解です! + おめでとうございます!🎉 +

+ + ) + } + ]} + /> + + 👧🏻 サヤちゃんが考えた弁当箱には +
+ + がある +
+ +

わーい、ミニオンさんありがとう!

+ + ) + }, + { + type: 'dog', + children: ( + <> +

+ さらに言うと、サヤちゃんが考えた弁当箱以外にも、 + + 以下の法則に当てはまる弁当箱であれば、 どれでも + + があります。 + +

+ + ) + } + ]} + /> + + この法則に当てはまる弁当箱であれば、 +
+ + がある +
+ +

サヤが考えた弁当箱の場合、

+
    + + 🅰️ + + + 🅱️ + + + は{' '} + + +
+

ということかな?

+ + ) + } + ]} + /> + + 🅰️
+ 🅱️
+ +
+ +

+ その通りです。サヤちゃんが考えた弁当箱は、ちゃんとこの法則に当てはまっているのです。 +

+ + この法則に当てはまる弁当箱であれば、 +
+ + がある +
+ + ) + } + ]} + /> + + ) + }, + { + title: <>同じ法則の、他の弁当箱も試してみる, + content: ( + <> + +

+ じゃあ、たとえばこの弁当箱でも、同じ法則に沿っているから、 + + があるってこと? +

+ + 同じ法則で料理を入れてみた。 +
+ + はあるか? +
+

+ 🅰️ には 、 + 🅱️ には 、 + には{' '} + + を当てはめてみたよ。 +

+ + ) + }, + { + type: 'dog', + children: ( + <> +

+ はい、 + + はありますよ。 +

+

+ + 試しに、 + + に変換できるこちらの弁当箱と合体させて + + してみましょう。 + +

+ + + +

+ すなわち、 + + 結果が {' '} + に変換できる弁当箱になれば、 + {' '} + を計算できたので成功 + + になります。 +

+ + ) + } + ]} + /> +

+ +

+ + +

+ 結果、 + {' '} + に変換できる弁当箱が残りました! +

+ + + + + ) + }, + { + type: 'thinking', + children: ( + <> +

+ なるほど、 + {' '} + になったので、やっぱりこちらの弁当箱にも + + があるということか。 +

+ + サヤちゃんの弁当箱と同じく、 +
+ こちらの弁当箱にも + + がある +
+ + ) + } + ]} + /> + + ) + }, + { + type: 'summary', + title: <>立ち止まって振り返ろう, + content: ( + <> + +

+ 俺らふだん頭を使っていないから、情報量が多すぎて疲れてしまった… +

+

ちょっとひと休みしてもらえないか?

+ + ) + }, + { + type: 'dog', + children: ( + <> +

いいですよ!

+

+ ちなみに現時点で、中級編も半分を終えました + 。つまり、本稿の折り返し地点を越えたということです。 + 残るは中級編の残り半分と、上級編のみです。 +

+

+ いい機会なので、少し立ち止まって振り返ってみましょう。 +

+ + ) + } + ]} + /> +

+ まずこちらをご覧ください。これは、 + {' '} + を計算できる計算箱ですね。 +

+ + {' '} + を計算できる計算箱。 +
+ 実行すると + になる +
+

+ 中級編でこれまで学んだことを一言でまとめると、 + + 上の計算箱の「1を足す機能{' '} + + 」は、弁当箱で「再現」できる + + 、ということです。 +

+ , + , + , + 🍱, + + ]} + description={ + <> + 計算箱の「1を足す機能{' '} + + 」は、 +
+ 弁当箱で「再現」することができる + + } + /> +

復習になりますが、3つのステップで説明しますね。

+

+ ステップ1: まず、 + + 計算箱の の代わりに、 + + 🐶 ミニオンの芸で {' '} + に変換できる + + 弁当箱 + + を用意します。 +

+ + すると、 +
+ + になる + + 弁当箱(先ほども登場しました)。 +
+

+ ステップ2: 次に、 + + 計算箱の の代わりに、 + + + がある弁当箱を用意します。 +

+ + + がある弁当箱 +
(👧🏻 サヤちゃんが考えた弁当箱です) +
+

+ ステップ3:{' '} + このふたつを合体させれば、先ほども説明した通り、 + + すると{' '} + になります + + ね。 +

+ + に変換できる弁当箱と +
+ + がある弁当箱を合体 +
+

+ つまり、先ほど登場した {' '} + {' '} + を計算できる計算箱は、 +

+ +

+ こちらの弁当箱で「再現」できるということです。 +

+ + {' '} + の計算箱を、弁当箱で再現 + + + ) + }, + { + type: 'summary', + title: <>もっと複雑な計算箱も再現できる, + content: ( + <> +

+ もちろん、もっと複雑な計算箱も再現できます。たとえば、初級その1に登場したこちらの計算箱をご覧ください。 +

+ +

+ これを弁当箱で再現するには、 + + に変換できる弁当箱と、 + + がある弁当箱を「2個」合体させればいい + + のです。 +

+ + に変換できる弁当箱と +
+ + がある弁当箱を「2個
+ 合体すれば、 + {' '} + の計算箱を再現できる +
+

+ 上の弁当箱は実行に時間がかかるので、ここでは早送りはしませんが、 + + 上の + {' '} + ボタンを押すと、答えが {' '} + になるのを確認できます。 + +

+
+

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

+ , + , + , + 🍱, + + ]} + description={ + <> + 計算箱の「1を足す機能{' '} + + 」は、 +
+ 弁当箱で「再現」することができる + + } + /> + + ) + }, + { + type: 'summary', + title: <>他の機能も再現できる?, + content: ( + <> +

+ ここで疑問なのですが、初級で説明した通り、計算箱には「 + 1を足す機能 + 」以外にも、「1を引く機能{' '} + + 」や、「繰り返しの機能 🔁 + 」がありましたよね。 +

+ + 「1を引く機能 + 」の例 + + + 「繰り返しの機能 🔁 + 」の例 +
+ ({' '} + 回繰り返す) +
+

+ + これらの機能も、弁当箱で再現することができるのでしょうか? + +

+ , + 🍱, + 🔁 + ]} + description={ + <> + 「1を引く機能 + 」や「繰り返しの機能 🔁 + 」も、 +
+ 弁当箱で「再現」できる? + + } + /> +

+ この疑問については、後に答えが明らかになります。 + とりあえず、話をラムダ村に戻しましょう! +

+ 話を戻しましょう!} + /> + + ) + }, + { + title: <>話を戻すと…, + content: ( + <> +

+ 悪魔による難しい問題に見事答えられたことで、村人たちは大喜びでした。 +

+ +

+ やった!サヤちゃんのおかげで問題に答えられたぞ!これで計算箱を返してもらえる! +

+ + ) + } + ]} + /> +

しかし、当のサヤちゃんには何か腑に落ちない点があるようです。

+ +

+ ミニオンさん、 + おかしなことに気づいちゃったんだけど… +

+ + ) + }, + { + type: 'dog', + children: ( + <> +

はい、「おかしなこと」とは何ですか?

+ + ) + } + ]} + /> +

+ サヤちゃんが気づいた、「おかしなこと + 」とは何なのでしょうか?次のページで説明していきます! +

+ + + + ) + } + ]} + /> +) diff --git a/src/contents/8.v2.jp.tsx b/src/contents/8.v2.jp.tsx deleted file mode 100644 index f6b84d0d8..000000000 --- a/src/contents/8.v2.jp.tsx +++ /dev/null @@ -1,1195 +0,0 @@ -import React from 'react' -import EpisodeCardList from 'src/components/EpisodeCardList' -import { - P, - Strong, - Em, - Ul, - UlLi, - InlineHeader, - Hr -} from 'src/components/ContentTags' -import CustomEmoji from 'src/components/CustomEmoji' -import BubbleQuotes from 'src/components/BubbleQuotes' -import EmojiNumber from 'src/components/EmojiNumber' -import Emoji from 'src/components/Emoji' -import H from 'src/components/H' -import ExpressionRunnerSeparator from 'src/components/ExpressionRunnerSeparator' -import ExpressionRunnerCaptionOnly from 'src/components/ExpressionRunnerCaptionOnly' -import EmojiSeparator from 'src/components/EmojiSeparator' -import * as R from 'src/components/Runners' -import InlinePrioritiesLabel from 'src/components/InlinePrioritiesLabel' -import EmojiWithText from 'src/components/EmojiWithText' -import NextLessonButton from 'src/components/NextLessonButton' - -export default () => ( - サヤちゃん現る, - content: ( - <> - 😭, - , - 😭 - ]} - /> -

ラムダ村の村人たちは、前回の問題に四苦八苦していました。

- - - どのような法則に基づいて {' '} - に料理を入れると… - - - - - - がある弁当箱になる? - - - -

だめだ…全然分からない!

- - ) - }, - { - type: 'sad', - children: ( - <> -

- これを解かないと計算箱を返してもらえないのに…どうしよう… -

- - ) - } - ]} - /> -

- その時です。ラムダ村に暮らす少女のサヤちゃん{' '} - 👧🏻{' '} - が、問題に苦戦している村人たちに話しかけてきました。 -

- - ラムダ村に暮らす少女のサヤちゃん - - } - /> - -

ねえねえ、みんな何してるの?

- - ) - }, - { - type: 'sad', - children: ( - <> -

おお、サヤちゃんか。

-

- にっくき悪魔 😈{' '} - に計算箱を奪われてしまったんだ。奴が出題した問題を解かないと計算箱を返してもらえないんだけど、俺らには難しくて解けないんだよ。 -

-

その問題は以下の通りさ。

- - ) - } - ]} - /> - - どのような法則に基づいて -
- {' '} - に料理を入れると… -
- - {' '} - に変換できる弁当箱と合体させて -
- - すると、 -
- 結果が {' '} - {' '} - になる? -
- - - -

ふーん、じゃあサヤも解くのを手伝うよ!

- - ) - }, - { - type: 'roll', - children: ( - <> -

- 手伝ってくれるのはありがたいけど、この問題はママゴトじゃないんだよ。俺らがどれだけ頑張っても分からなかったんだ。 -

- - ) - } - ]} - /> - - ) - }, - { - title: <>サヤちゃんの弁当箱, - content: ( - <> -

- サヤちゃんは少し考えた後、 - に料理を入れてみました。 -

- -

- ねえねえ、サヤも {' '} - に料理を入れてみたんだけど、見てくれる? -

- - ) - } - ]} - /> - - 👧🏻 サヤちゃんの弁当箱 - - -

- ふむふむ…どうせ上手くいかないと思うけど、試してみるか。 -

-

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

- - - -

- - して、 - - 結果が になるか - - 確かめてみよう。 -

- - ) - } - ]} - /> - - に変換できる弁当箱と、 -
- 👧🏻 サヤちゃんの弁当箱を合体させ… -
- - - -
- して、結果が になれば - 成功 🎉 -
- それ以外なら失敗 😭 -
- -

- じゃあ、 - - してみよう! -

- - ) - } - ]} - /> - - ) - }, - { - title: ( - <> - してみると… - - ), - content: ( - <> -

- それでは、👧🏻{' '} - サヤちゃんの弁当箱を実行してみましょう! -

-

- まず、 - - 1 - のペアがふたつ以上あるので、一番左の - 1 - のペアからはじめます。 - - -

- - - -

- 続いて、また - - 1 - のペアからはじめたいのですが、 - 1 - のペアの一番下の段にひとつの料理( - - )しかないので不可能です。 - -

-

- というわけで、 - - 次は - 2 - のペアからはじめます。 - -

- - - -

- 次も前回と同じく、 - 1 - のペアからはじめたいのですが、 - 1 - のペアの一番下の段にひとつの料理( - - )しかないので不可能です。 -

-

- というわけで、再度 - - 2 - のペアからはじめます。 - -

- - - -

つまり、最終的に以下のようになりました!

- - -

こ、これはもしや…?

- - ) - } - ]} - /> - - ) - }, - { - title: ( - <> - に変換できる - - ), - content: ( - <> - -

- この弁当箱は、 - に変換できます! -

- - ) - } - ]} - /> - - - - - - -

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

-

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

- - ) - } - ]} - /> - - に変換できる弁当箱と、 -
- 👧🏻 サヤちゃんの弁当箱を合体させ… -
- - - -
- すると、結果が になる -
- -

- つまり、 - {' '} - が計算できたので、 - 成功です! 🎉 -

- - ) - }, - { - type: 'saya', - children: ( - <> -

やったー!

- - ) - }, - { - type: 'surprised', - children: ( - <> -

- そんなバカな…!俺らがどれだけ頭をひねっても分からなかったのに、サヤちゃんにいとも簡単に解かれるなんて! -

- - ) - } - ]} - /> - - ) - }, - { - title: ( - <> - {' '} - はできる? - - ), - content: ( - <> - -

- いや、まだ分からんぞ。 - {' '} - ができるからといって、 - - 他の数字に対しても - - があるとは限らない。 - -

-

- たとえば、 - - {' '} - も計算できるのかどうか、 - - 確かめてみないと。 -

- - ) - } - ]} - /> - , - , - - ]} - description={<>これも計算できる?} - /> - -

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

- - - -

- 合体したものを - - して、 - - 結果が になればいい - - んだよね。 -

- - ) - } - ]} - /> - - に変換できる弁当箱と、 -
- 👧🏻 サヤちゃんの弁当箱を合体させ… -
- - - -
- して、結果が になれば - 成功 🎉 -
- それ以外なら失敗 😭 -
- -

- まずは実行してみるね。 - -

-

今回は、最後まで止まらずに早送りします!

- - ) - } - ]} - /> - - -

結果はこうなったよ!

- - ) - } - ]} - /> - - -

- この弁当箱は、 - に変換できます! -

- - ) - } - ]} - /> - - - - - - -

- つまり、 - {' '} - が計算できたので、 - またしても成功です! 🎉 -

- - ) - }, - { - type: 'saya', - children: ( - <> -

わーい、わーい!

- - ) - }, - { - type: 'surprised', - children: ( - <> -

す、すごい…!

- - ) - } - ]} - /> - - ) - }, - { - title: ( - <> - - がある法則 - - ), - content: ( - <> - -

- ではここで正解を言いましょう。 - - サヤちゃんが考えた弁当箱は、 - - がある弁当箱です。 - -

-

- だから、サヤちゃんの答えが正解です! - おめでとうございます!🎉 -

- - ) - } - ]} - /> - - 👧🏻 サヤちゃんが考えた弁当箱には -
- - がある -
- -

わーい、ミニオンさんありがとう!

- - ) - }, - { - type: 'dog', - children: ( - <> -

- さらに言うと、サヤちゃんが考えた弁当箱以外にも、 - - 以下の法則に当てはまる弁当箱であれば、 どれでも - - があります。 - -

- - ) - } - ]} - /> - - この法則に当てはまる弁当箱であれば、 -
- - がある -
- -

サヤが考えた弁当箱の場合、

-
    - - 🅰️ - - - 🅱️ - - - は{' '} - - -
-

ということかな?

- - ) - } - ]} - /> - - 🅰️
- 🅱️
- -
- -

- その通りです。サヤちゃんが考えた弁当箱は、ちゃんとこの法則に当てはまっているのです。 -

- - この法則に当てはまる弁当箱であれば、 -
- - がある -
- - ) - } - ]} - /> - - ) - }, - { - title: <>同じ法則の、他の弁当箱も試してみる, - content: ( - <> - -

- じゃあ、たとえばこの弁当箱でも、同じ法則に沿っているから、 - - があるってこと? -

- - 同じ法則で料理を入れてみた。 -
- - はあるか? -
-

- 🅰️ には 、 - 🅱️ には 、 - には{' '} - - を当てはめてみたよ。 -

- - ) - }, - { - type: 'dog', - children: ( - <> -

- はい、 - - はありますよ。 -

-

- - 試しに、 - - に変換できるこちらの弁当箱と合体させて - - してみましょう。 - -

- - - -

- すなわち、 - - 結果が {' '} - に変換できる弁当箱になれば、 - {' '} - を計算できたので成功 - - になります。 -

- - ) - } - ]} - /> -

- -

- - -

- 結果、 - {' '} - に変換できる弁当箱が残りました! -

- - - - - ) - }, - { - type: 'thinking', - children: ( - <> -

- なるほど、 - {' '} - になったので、やっぱりこちらの弁当箱にも - - があるということか。 -

- - サヤちゃんの弁当箱と同じく、 -
- こちらの弁当箱にも - - がある -
- - ) - } - ]} - /> - - ) - }, - { - type: 'summary', - title: <>立ち止まって振り返ろう, - content: ( - <> - -

- 俺らふだん頭を使っていないから、情報量が多すぎて疲れてしまった… -

-

ちょっとひと休みしてもらえないか?

- - ) - }, - { - type: 'dog', - children: ( - <> -

いいですよ!

-

- ちなみに現時点で、中級編も半分を終えました - 。つまり、本稿の折り返し地点を越えたということです。 - 残るは中級編の残り半分と、上級編のみです。 -

-

- いい機会なので、少し立ち止まって振り返ってみましょう。 -

- - ) - } - ]} - /> -

- まずこちらをご覧ください。これは、 - {' '} - を計算できる計算箱ですね。 -

- - {' '} - を計算できる計算箱。 -
- 実行すると - になる -
-

- 中級編でこれまで学んだことを一言でまとめると、 - - 上の計算箱の「1を足す機能{' '} - - 」は、弁当箱で「再現」できる - - 、ということです。 -

- , - , - , - 🍱, - - ]} - description={ - <> - 計算箱の「1を足す機能{' '} - - 」は、 -
- 弁当箱で「再現」することができる - - } - /> -

復習になりますが、3つのステップで説明しますね。

-

- ステップ1: まず、 - - 計算箱の の代わりに、 - - 🐶 ミニオンの芸で {' '} - に変換できる - - 弁当箱 - - を用意します。 -

- - すると、 -
- - になる - - 弁当箱(先ほども登場しました)。 -
-

- ステップ2: 次に、 - - 計算箱の の代わりに、 - - - がある弁当箱を用意します。 -

- - - がある弁当箱 -
(👧🏻 サヤちゃんが考えた弁当箱です) -
-

- ステップ3:{' '} - このふたつを合体させれば、先ほども説明した通り、 - - すると{' '} - になります - - ね。 -

- - に変換できる弁当箱と -
- - がある弁当箱を合体 -
-

- つまり、先ほど登場した {' '} - {' '} - を計算できる計算箱は、 -

- -

- こちらの弁当箱で「再現」できるということです。 -

- - {' '} - の計算箱を、弁当箱で再現 - - - ) - }, - { - type: 'summary', - title: <>もっと複雑な計算箱も再現できる, - content: ( - <> -

- もちろん、もっと複雑な計算箱も再現できます。たとえば、初級その1に登場したこちらの計算箱をご覧ください。 -

- -

- これを弁当箱で再現するには、 - - に変換できる弁当箱と、 - - がある弁当箱を「2個」合体させればいい - - のです。 -

- - に変換できる弁当箱と -
- - がある弁当箱を「2個
- 合体すれば、 - {' '} - の計算箱を再現できる -
-

- 上の弁当箱は実行に時間がかかるので、ここでは早送りはしませんが、 - - 上の - {' '} - ボタンを押すと、答えが {' '} - になるのを確認できます。 - -

-
-

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

- , - , - , - 🍱, - - ]} - description={ - <> - 計算箱の「1を足す機能{' '} - - 」は、 -
- 弁当箱で「再現」することができる - - } - /> - - ) - }, - { - type: 'summary', - title: <>他の機能も再現できる?, - content: ( - <> -

- ここで疑問なのですが、初級で説明した通り、計算箱には「 - 1を足す機能 - 」以外にも、「1を引く機能{' '} - - 」や、「繰り返しの機能 🔁 - 」がありましたよね。 -

- - 「1を引く機能 - 」の例 - - - 「繰り返しの機能 🔁 - 」の例 -
- ({' '} - 回繰り返す) -
-

- - これらの機能も、弁当箱で再現することができるのでしょうか? - -

- , - 🍱, - 🔁 - ]} - description={ - <> - 「1を引く機能 - 」や「繰り返しの機能 🔁 - 」も、 -
- 弁当箱で「再現」できる? - - } - /> -

- この疑問については、後に答えが明らかになります。 - とりあえず、話をラムダ村に戻しましょう! -

- 話を戻しましょう!} - /> - - ) - }, - { - title: <>話を戻すと…, - content: ( - <> -

- 悪魔による難しい問題に見事答えられたことで、村人たちは大喜びでした。 -

- -

- やった!サヤちゃんのおかげで問題に答えられたぞ!これで計算箱を返してもらえる! -

- - ) - } - ]} - /> -

しかし、当のサヤちゃんには何か腑に落ちない点があるようです。

- -

- ミニオンさん、 - おかしなことに気づいちゃったんだけど… -

- - ) - }, - { - type: 'dog', - children: ( - <> -

はい、「おかしなこと」とは何ですか?

- - ) - } - ]} - /> -

- サヤちゃんが気づいた、「おかしなこと - 」とは何なのでしょうか?次のページで説明していきます! -

- - - - ) - } - ]} - /> -) diff --git a/src/contents/9.jp.tsx b/src/contents/9.jp.tsx index 5f4ca258b..a728a82f1 100644 --- a/src/contents/9.jp.tsx +++ b/src/contents/9.jp.tsx @@ -1,4 +1,1237 @@ import React from 'react' import EpisodeCardList from 'src/components/EpisodeCardList' +import { P, Em, Strong, Ul, UlLi } from 'src/components/ContentTags' +import H from 'src/components/H' +import BubbleQuotes from 'src/components/BubbleQuotes' +import EmojiNumber from 'src/components/EmojiNumber' +import EmojiWithText from 'src/components/EmojiWithText' +import EmojiSeparator from 'src/components/EmojiSeparator' +import ExpressionRunnerSeparator from 'src/components/ExpressionRunnerSeparator' +import CustomEmoji from 'src/components/CustomEmoji' +import EmojiForLetterWithBottomRightBadgeWrapper from 'src/components/EmojiForLetterWithBottomRightBadgeWrapper' +import EmojiForLetter from 'src/components/EmojiForLetter' +import Emoji from 'src/components/Emoji' +import BottomRightBadge from 'src/components/BottomRightBadge' +import TwoColGrid from 'src/components/TwoColGrid' +import * as R from 'src/components/Runners' +import NextLessonButton from 'src/components/NextLessonButton' -export default () => +export default () => ( + サヤちゃんの疑問, + content: ( + <> +

+ サヤちゃんは、 + + がある弁当箱について、あることに気が付きました。 +

+ +

ねえねえ、見てほしいものがあるんだけど。

+

+ まず、 + + これは に変換できる弁当箱 + + だよね。 +

+ + ) + } + ]} + /> + + + + +

うん、そうだけど、それがどうしたの?

+ + ) + }, + { + type: 'saya', + children: ( + <> +

+ これを、前回サヤが考えた + + がある弁当箱と合体させて、 + {' '} + すると、どうなると思う? +

+ + ) + } + ]} + /> + + + と合体させて、 +
+ +
+ するとどうなる? +
+ +

+ そりゃあ、 + + {' '} + を計算できるんだから、 + になるに決まっている + + だろう? +

+ + ) + } + ]} + /> + , + , + + ]} + description={ + <> + 結果は になるはず…? + + } + /> + +

+ じゃあ、 + + してみてよ! +

+ + ) + } + ]} + /> + + ) + }, + { + title: <>実行してみると…, + content: ( + <> +

+ それでは、 + +

+ + +

+ 実行を終えたので、 + {' '} + したいところですが… +

+

+ 残念ながら、 + + この弁当箱はぼくが計算箱に変換することができません。 + +

+ + ) + } + ]} + /> + 計算箱に変換できない + +

+ 理由はもちろん、 + 以下の法則に沿っていないからです。 +

+ + + +

+ + 右上には 🅱️ の料理が「 + ひとつだけ + 」ある必要があります。しかし、 + + ここでは 🅱️ の料理が + ふたつもある + + ので、計算箱に変換できないのです。 + +

+ + ) + } + ]} + /> + + 右上に 🅱️ がふたつあるので、 +
+ 計算箱に変換できない +
+ +

+ お、おかしい…なんで {' '} + に変換できる弁当箱にならないんだ?前回はちゃんとできていたのに… +

+ + ) + } + ]} + /> + + ) + }, + { + title: <>前回と比較してみよう, + content: ( + <> + +

+ では、前回と比較してみましょう。前回実行したのは、こちらの弁当箱でした。 +

+

+ + 先ほどと唯一違うのは、上の部分に{' '} + のかわりに{' '} + が入っている + + ところです。(黄色で示しています) +

+ + ) + } + ]} + /> +

+ +

+ + 前回実行した弁当箱: +
+ 上の部分は に変換できる。 +
+ + 先ほどと違うのは、上の の部分。 + +
+ それ以外はすべて先ほどと同じ。 +
+ +

+ こちらは、最終的に {' '} + に変換できる弁当箱になりますね。 +

+ + ) + } + ]} + /> + + + + +

うーん、どうして結果に違いが出るんだろう?

+ + ) + } + ]} + /> + + ) + }, + { + title: ( + <> + と{' '} + {' '} + に同じ料理があると、結果が狂う + + ), + content: ( + <> + +

では、ここでネタばらしをしましょう。

+

+ こちらに、先ほど + 失敗した例をもう一度表示しています。 +

+ + ) + } + ]} + /> + + 先ほど{' '} + + {' '} + を計算できなかった + + 例 + + +

+ 次に、 + {' '} + {' '} + {' '} + {' '} + の印をつけてみます。 +

+ + ) + } + ]} + /> + + +

+ ここで、 + + {' '} + と{' '} + {' '} + の両方に、 + がある + + のに注目してみてください。 +

+ + ) + } + ]} + /> + + と{' '} + {' '} + の両方に + がある + + +

+ 実は、上のように{' '} + + {' '} + と{' '} + {' '} + に同じ料理があると、実行結果が狂ってしまう + + のです。 +

+

+ 実行結果が狂ってしまうから、 + {' '} + {' '} + を計算できない、ということになります。 +

+ + ) + } + ]} + /> + , + , + + ]} + description={ + <> + + {' '} + と{' '} + {' '} + に同じ料理があると、 +
+ 実行結果が狂う +
+
+ (この場合は が問題) + + } + /> + +

へー、そうなんだ!どうして結果が狂うの?

+ + ) + }, + { + type: 'dog', + children: ( + <> +

+ この例だと複雑すぎて説明が難しいので、 + 簡単な例を使って説明しますね! +

+ + ) + } + ]} + /> + + ) + }, + { + title: ( + <> + と{' '} + {' '} + に同じ料理がない場合とある場合 + + ), + content: ( + <> + +

+ では、簡単な例で説明します。次のふたつの例をご覧ください。 +

+
    + + 左側は、 + {' '} + と{' '} + {' '} + が違います。 + + + 右側は、 + {' '} + と{' '} + {' '} + が同じ + + です。 + +
+

それぞれを進めてみますね。

+ + ) + } + ]} + /> + + + {' '} + と{' '} + {' '} + が違う {' '} + + + + + + + + + + + + } + right={ + <> + + {' '} + と{' '} + {' '} + が同じ {' '} + + + + + + + + + + + + } + /> + +

+ + 左側は、下のふたつが違うけど、右側は下のふたつが同じになった! + +

+ + ) + }, + { + type: 'dog', + children: ( + <> +

そうなんです。このまま最後まで実行すると、

+
    + + 左側は{' '} + {' '} + の が残るのに対し、 + + + 右側は{' '} + {' '} + の が残ります。 + +
+ + ) + } + ]} + /> + + + + + + + + } + right={ + <> + + + + + + + + + } + /> + +

+ というわけで、 + {' '} + と{' '} + {' '} + に同じ料理がない場合とある場合で、最終的な結果が狂ってくることがお分かりいただけたでしょうか。 +

+ + ) + } + ]} + /> + , + , + + ]} + description={ + <> + + {' '} + と{' '} + {' '} + に同じ料理があると、 +
+ 実行結果が狂う +
+ + } + /> + + ) + }, + { + title: <>話を戻すと…, + content: ( + <> + +

+ では、先ほど {' '} + {' '} + を計算できなかった弁当箱に話を戻しましょう。 +

+

+ {' '} + と{' '} + {' '} + の両方に + {' '} + があるので、結果が狂うのですね。 +

+ + ) + } + ]} + /> + + + {' '} + を計算できなかった + + 理由: +
+ と{' '} + {' '} + の両方に +
+ あるせいで、結果が狂ったから +
+ +

じゃあ、どうすればいいんだろう?

+ + ) + }, + { + type: 'saya', + children: ( + <> +

+ + {' '} + と{' '} + {' '} + のどちらかの + {' '} + を別の料理に変えれば、上手くいく + + というわけだよね。 +

+

+ じゃあ… + + ミニオンさんお願い!特別ルール + を設けてくれないかな? + +

+ + ) + }, + { + type: 'dog', + children: ( + <> +

どういうことですか?

+ + ) + }, + { + type: 'saya', + children: ( + <> +

+ + に、「 + + {' '} + と{' '} + {' '} + に同じ料理が登場したら、どちらかを別な料理に変える + + 」という特別ルールを設けてほしいんだ。 +

+ + ) + } + ]} + /> + , + 🙇🏻‍♀️, + + ]} + description={ + <> + + {' '} + と{' '} + {' '} + に同じ料理が登場したら、 +
+ どちらかを別な料理に変える +
+
+ という特別ルールを設けてほしい + + } + /> + +

+ 分かりました、いいですよ! +

+ + ) + }, + { + type: 'saya', + children: ( + <> +

やったー、ありがとう!

+ + ) + }, + { + type: 'roll', + children: ( + <> +

え、そんなに簡単にルールを改変してくれるの…?

+ + ) + } + ]} + /> + + ) + }, + { + title: <>特別ルール, + content: ( + <> + +

それでは、

+
    + + + {' '} + と{' '} + {' '} + に同じ料理が登場したら、 + + + + + 自動的に{' '} + {' '} + を別の料理に変える + + +
+

という特別ルールを設けましょう。

+ + ) + } + ]} + /> + , + , + + ]} + description={ + <> + と{' '} + {' '} + に同じ料理が登場したら、 +
+ + 自動的に{' '} + {' '} + が別の料理に変わる + + + } + /> + +

+ つまり、先ほどのように{' '} + {' '} + と{' '} + {' '} + に同じ料理が登場した場合… +

+ + ) + } + ]} + /> + + +

+ + {' '} + の + が自動的に別の料理に変わります。 + +

+

+ + 何に変わるかについてですが、 + + まだ使われていない料理にランダムで変わります + + 。ここでは、 + になりました。 + +

+ + ) + } + ]} + /> + + + + , + , + + + + ]} + description={ + <> + の + が、まだ +
+ 使われていない + に変わる + + } + /> + +

+ これで、 + {' '} + と{' '} + {' '} + が被らなくなりました。 +

+

+ では、最後まで進めてみましょう。 + +

+ + ) + } + ]} + /> + + +

+ やった!無事、 + に変換できる弁当箱になった! +

+ + ) + } + ]} + /> + + + + +

+ ということは、 + {' '} + を計算できたということだね! +

+ + ) + }, + { + type: 'dog', + children: ( + <> +

+ その通りです。では、そろそろ今回のまとめに入りましょう! +

+ + ) + } + ]} + /> + + ) + }, + { + type: 'summary', + title: ( + <> + + + ), + content: ( + <> +

+ 前回サヤちゃんが考えた + + がある弁当箱は、 +

+ + + がある弁当箱 + +

+ 次の + + に変換できる弁当箱 + + と組み合わせた場合、 +

+ + + +

+ と{' '} + {' '} + に同じ料理があり、そのままだと結果が狂ってしまいます。 +

+ + と{' '} + {' '} + の両方に + がある + +

しかし、今回から新たに以下の特別ルールが適用されます:

+
    + + + と{' '} + {' '} + に同じ料理が登場したら、 + + + + + 自動的に{' '} + {' '} + を別の料理に変える + + +
+ +

+ これにより、正しく {' '} + を計算できるようになります。 +

+ +

うーん、このことを覚えておくのが難しそうだなあ…

+ + ) + }, + { + type: 'dog', + children: ( + <> +

+ ご心配なく! + + この特別ルールは次のページ以降で登場する弁当箱でも使われますが、 + + 暗記する必要はありません。 +

+

+ なんとなく「 + こういう法則があるんだな + 」と思ってくだされば大丈夫です! +

+ + ) + } + ]} + /> + + ) + }, + { + title: <>これで完璧!, + content: ( + <> + +

+ いろいろあったけど、これで、 + + がある弁当箱は完璧にマスターしたぞ! +

+

悪魔よ、約束通り計算箱は返してもらう!

+ + ) + }, + { + type: 'devil', + children: ( + <> +

うぐぐ…

+ + ) + } + ]} + /> +

+ 果たして、村人たちは計算箱を取り戻せたのでしょうか?次のページで確かめてみましょう! +

+ + + ) + } + ]} + /> +) diff --git a/src/contents/9.v2.jp.tsx b/src/contents/9.v2.jp.tsx deleted file mode 100644 index a728a82f1..000000000 --- a/src/contents/9.v2.jp.tsx +++ /dev/null @@ -1,1237 +0,0 @@ -import React from 'react' -import EpisodeCardList from 'src/components/EpisodeCardList' -import { P, Em, Strong, Ul, UlLi } from 'src/components/ContentTags' -import H from 'src/components/H' -import BubbleQuotes from 'src/components/BubbleQuotes' -import EmojiNumber from 'src/components/EmojiNumber' -import EmojiWithText from 'src/components/EmojiWithText' -import EmojiSeparator from 'src/components/EmojiSeparator' -import ExpressionRunnerSeparator from 'src/components/ExpressionRunnerSeparator' -import CustomEmoji from 'src/components/CustomEmoji' -import EmojiForLetterWithBottomRightBadgeWrapper from 'src/components/EmojiForLetterWithBottomRightBadgeWrapper' -import EmojiForLetter from 'src/components/EmojiForLetter' -import Emoji from 'src/components/Emoji' -import BottomRightBadge from 'src/components/BottomRightBadge' -import TwoColGrid from 'src/components/TwoColGrid' -import * as R from 'src/components/Runners' -import NextLessonButton from 'src/components/NextLessonButton' - -export default () => ( - サヤちゃんの疑問, - content: ( - <> -

- サヤちゃんは、 - - がある弁当箱について、あることに気が付きました。 -

- -

ねえねえ、見てほしいものがあるんだけど。

-

- まず、 - - これは に変換できる弁当箱 - - だよね。 -

- - ) - } - ]} - /> - - - - -

うん、そうだけど、それがどうしたの?

- - ) - }, - { - type: 'saya', - children: ( - <> -

- これを、前回サヤが考えた - - がある弁当箱と合体させて、 - {' '} - すると、どうなると思う? -

- - ) - } - ]} - /> - - - と合体させて、 -
- -
- するとどうなる? -
- -

- そりゃあ、 - - {' '} - を計算できるんだから、 - になるに決まっている - - だろう? -

- - ) - } - ]} - /> - , - , - - ]} - description={ - <> - 結果は になるはず…? - - } - /> - -

- じゃあ、 - - してみてよ! -

- - ) - } - ]} - /> - - ) - }, - { - title: <>実行してみると…, - content: ( - <> -

- それでは、 - -

- - -

- 実行を終えたので、 - {' '} - したいところですが… -

-

- 残念ながら、 - - この弁当箱はぼくが計算箱に変換することができません。 - -

- - ) - } - ]} - /> - 計算箱に変換できない - -

- 理由はもちろん、 - 以下の法則に沿っていないからです。 -

- - - -

- - 右上には 🅱️ の料理が「 - ひとつだけ - 」ある必要があります。しかし、 - - ここでは 🅱️ の料理が - ふたつもある - - ので、計算箱に変換できないのです。 - -

- - ) - } - ]} - /> - - 右上に 🅱️ がふたつあるので、 -
- 計算箱に変換できない -
- -

- お、おかしい…なんで {' '} - に変換できる弁当箱にならないんだ?前回はちゃんとできていたのに… -

- - ) - } - ]} - /> - - ) - }, - { - title: <>前回と比較してみよう, - content: ( - <> - -

- では、前回と比較してみましょう。前回実行したのは、こちらの弁当箱でした。 -

-

- - 先ほどと唯一違うのは、上の部分に{' '} - のかわりに{' '} - が入っている - - ところです。(黄色で示しています) -

- - ) - } - ]} - /> -

- -

- - 前回実行した弁当箱: -
- 上の部分は に変換できる。 -
- - 先ほどと違うのは、上の の部分。 - -
- それ以外はすべて先ほどと同じ。 -
- -

- こちらは、最終的に {' '} - に変換できる弁当箱になりますね。 -

- - ) - } - ]} - /> - - - - -

うーん、どうして結果に違いが出るんだろう?

- - ) - } - ]} - /> - - ) - }, - { - title: ( - <> - と{' '} - {' '} - に同じ料理があると、結果が狂う - - ), - content: ( - <> - -

では、ここでネタばらしをしましょう。

-

- こちらに、先ほど - 失敗した例をもう一度表示しています。 -

- - ) - } - ]} - /> - - 先ほど{' '} - - {' '} - を計算できなかった - - 例 - - -

- 次に、 - {' '} - {' '} - {' '} - {' '} - の印をつけてみます。 -

- - ) - } - ]} - /> - - -

- ここで、 - - {' '} - と{' '} - {' '} - の両方に、 - がある - - のに注目してみてください。 -

- - ) - } - ]} - /> - - と{' '} - {' '} - の両方に - がある - - -

- 実は、上のように{' '} - - {' '} - と{' '} - {' '} - に同じ料理があると、実行結果が狂ってしまう - - のです。 -

-

- 実行結果が狂ってしまうから、 - {' '} - {' '} - を計算できない、ということになります。 -

- - ) - } - ]} - /> - , - , - - ]} - description={ - <> - - {' '} - と{' '} - {' '} - に同じ料理があると、 -
- 実行結果が狂う -
-
- (この場合は が問題) - - } - /> - -

へー、そうなんだ!どうして結果が狂うの?

- - ) - }, - { - type: 'dog', - children: ( - <> -

- この例だと複雑すぎて説明が難しいので、 - 簡単な例を使って説明しますね! -

- - ) - } - ]} - /> - - ) - }, - { - title: ( - <> - と{' '} - {' '} - に同じ料理がない場合とある場合 - - ), - content: ( - <> - -

- では、簡単な例で説明します。次のふたつの例をご覧ください。 -

-
    - - 左側は、 - {' '} - と{' '} - {' '} - が違います。 - - - 右側は、 - {' '} - と{' '} - {' '} - が同じ - - です。 - -
-

それぞれを進めてみますね。

- - ) - } - ]} - /> - - - {' '} - と{' '} - {' '} - が違う {' '} - - - - - - - - - - - - } - right={ - <> - - {' '} - と{' '} - {' '} - が同じ {' '} - - - - - - - - - - - - } - /> - -

- - 左側は、下のふたつが違うけど、右側は下のふたつが同じになった! - -

- - ) - }, - { - type: 'dog', - children: ( - <> -

そうなんです。このまま最後まで実行すると、

-
    - - 左側は{' '} - {' '} - の が残るのに対し、 - - - 右側は{' '} - {' '} - の が残ります。 - -
- - ) - } - ]} - /> - - - - - - - - } - right={ - <> - - - - - - - - - } - /> - -

- というわけで、 - {' '} - と{' '} - {' '} - に同じ料理がない場合とある場合で、最終的な結果が狂ってくることがお分かりいただけたでしょうか。 -

- - ) - } - ]} - /> - , - , - - ]} - description={ - <> - - {' '} - と{' '} - {' '} - に同じ料理があると、 -
- 実行結果が狂う -
- - } - /> - - ) - }, - { - title: <>話を戻すと…, - content: ( - <> - -

- では、先ほど {' '} - {' '} - を計算できなかった弁当箱に話を戻しましょう。 -

-

- {' '} - と{' '} - {' '} - の両方に - {' '} - があるので、結果が狂うのですね。 -

- - ) - } - ]} - /> - - - {' '} - を計算できなかった - - 理由: -
- と{' '} - {' '} - の両方に -
- あるせいで、結果が狂ったから -
- -

じゃあ、どうすればいいんだろう?

- - ) - }, - { - type: 'saya', - children: ( - <> -

- - {' '} - と{' '} - {' '} - のどちらかの - {' '} - を別の料理に変えれば、上手くいく - - というわけだよね。 -

-

- じゃあ… - - ミニオンさんお願い!特別ルール - を設けてくれないかな? - -

- - ) - }, - { - type: 'dog', - children: ( - <> -

どういうことですか?

- - ) - }, - { - type: 'saya', - children: ( - <> -

- - に、「 - - {' '} - と{' '} - {' '} - に同じ料理が登場したら、どちらかを別な料理に変える - - 」という特別ルールを設けてほしいんだ。 -

- - ) - } - ]} - /> - , - 🙇🏻‍♀️, - - ]} - description={ - <> - - {' '} - と{' '} - {' '} - に同じ料理が登場したら、 -
- どちらかを別な料理に変える -
-
- という特別ルールを設けてほしい - - } - /> - -

- 分かりました、いいですよ! -

- - ) - }, - { - type: 'saya', - children: ( - <> -

やったー、ありがとう!

- - ) - }, - { - type: 'roll', - children: ( - <> -

え、そんなに簡単にルールを改変してくれるの…?

- - ) - } - ]} - /> - - ) - }, - { - title: <>特別ルール, - content: ( - <> - -

それでは、

-
    - - - {' '} - と{' '} - {' '} - に同じ料理が登場したら、 - - - - - 自動的に{' '} - {' '} - を別の料理に変える - - -
-

という特別ルールを設けましょう。

- - ) - } - ]} - /> - , - , - - ]} - description={ - <> - と{' '} - {' '} - に同じ料理が登場したら、 -
- - 自動的に{' '} - {' '} - が別の料理に変わる - - - } - /> - -

- つまり、先ほどのように{' '} - {' '} - と{' '} - {' '} - に同じ料理が登場した場合… -

- - ) - } - ]} - /> - - -

- - {' '} - の - が自動的に別の料理に変わります。 - -

-

- - 何に変わるかについてですが、 - - まだ使われていない料理にランダムで変わります - - 。ここでは、 - になりました。 - -

- - ) - } - ]} - /> - - - - , - , - - - - ]} - description={ - <> - の - が、まだ -
- 使われていない - に変わる - - } - /> - -

- これで、 - {' '} - と{' '} - {' '} - が被らなくなりました。 -

-

- では、最後まで進めてみましょう。 - -

- - ) - } - ]} - /> - - -

- やった!無事、 - に変換できる弁当箱になった! -

- - ) - } - ]} - /> - - - - -

- ということは、 - {' '} - を計算できたということだね! -

- - ) - }, - { - type: 'dog', - children: ( - <> -

- その通りです。では、そろそろ今回のまとめに入りましょう! -

- - ) - } - ]} - /> - - ) - }, - { - type: 'summary', - title: ( - <> - - - ), - content: ( - <> -

- 前回サヤちゃんが考えた - - がある弁当箱は、 -

- - - がある弁当箱 - -

- 次の - - に変換できる弁当箱 - - と組み合わせた場合、 -

- - - -

- と{' '} - {' '} - に同じ料理があり、そのままだと結果が狂ってしまいます。 -

- - と{' '} - {' '} - の両方に - がある - -

しかし、今回から新たに以下の特別ルールが適用されます:

-
    - - - と{' '} - {' '} - に同じ料理が登場したら、 - - - - - 自動的に{' '} - {' '} - を別の料理に変える - - -
- -

- これにより、正しく {' '} - を計算できるようになります。 -

- -

うーん、このことを覚えておくのが難しそうだなあ…

- - ) - }, - { - type: 'dog', - children: ( - <> -

- ご心配なく! - - この特別ルールは次のページ以降で登場する弁当箱でも使われますが、 - - 暗記する必要はありません。 -

-

- なんとなく「 - こういう法則があるんだな - 」と思ってくだされば大丈夫です! -

- - ) - } - ]} - /> - - ) - }, - { - title: <>これで完璧!, - content: ( - <> - -

- いろいろあったけど、これで、 - - がある弁当箱は完璧にマスターしたぞ! -

-

悪魔よ、約束通り計算箱は返してもらう!

- - ) - }, - { - type: 'devil', - children: ( - <> -

うぐぐ…

- - ) - } - ]} - /> -

- 果たして、村人たちは計算箱を取り戻せたのでしょうか?次のページで確かめてみましょう! -

- - - ) - } - ]} - /> -) diff --git a/src/lib/contentVersion.ts b/src/lib/contentVersion.ts deleted file mode 100644 index 9e6bd2e47..000000000 --- a/src/lib/contentVersion.ts +++ /dev/null @@ -1,8 +0,0 @@ -import getConfig from 'next/config' -const { publicRuntimeConfig } = getConfig() || { publicRuntimeConfig: {} } -export default (publicRuntimeConfig.devContentVersion || - process.env.productionContentVersion || - // Support for ts-node that doesn't go through next.config.js - process.env.DEV_CONTENT_VERSION || - process.env.PRODUCTION_CONTENT_VERSION || - 'v2') as ('v1' | 'v2') diff --git a/src/lib/contentsBundle.tsx b/src/lib/contentsBundle.tsx index 1e7a104bd..80a2ed4dd 100644 --- a/src/lib/contentsBundle.tsx +++ b/src/lib/contentsBundle.tsx @@ -1,123 +1,105 @@ import Jp0 from 'src/contents/0.jp' -import Jp0V2 from 'src/contents/0.v2.jp' import En0 from 'src/contents/0.en' import Jp1 from 'src/contents/1.jp' -import Jp1V2 from 'src/contents/1.v2.jp' import En1 from 'src/contents/1.en' import Jp10 from 'src/contents/10.jp' -import Jp10V2 from 'src/contents/10.v2.jp' import En10 from 'src/contents/10.en' import Jp11 from 'src/contents/11.jp' -import Jp11V2 from 'src/contents/11.v2.jp' import En11 from 'src/contents/11.en' import Jp12 from 'src/contents/12.jp' -import Jp12V2 from 'src/contents/12.v2.jp' import En12 from 'src/contents/12.en' import Jp13 from 'src/contents/13.jp' -import Jp13V2 from 'src/contents/13.v2.jp' import En13 from 'src/contents/13.en' import Jp14 from 'src/contents/14.jp' -import Jp14V2 from 'src/contents/14.v2.jp' import En14 from 'src/contents/14.en' import Jp15 from 'src/contents/15.jp' -import Jp15V2 from 'src/contents/15.v2.jp' import En15 from 'src/contents/15.en' import Jp16 from 'src/contents/16.jp' -import Jp16V2 from 'src/contents/16.v2.jp' import En16 from 'src/contents/16.en' import Jp2 from 'src/contents/2.jp' -import Jp2V2 from 'src/contents/2.v2.jp' import En2 from 'src/contents/2.en' import Jp3 from 'src/contents/3.jp' -import Jp3V2 from 'src/contents/3.v2.jp' import En3 from 'src/contents/3.en' import Jp4 from 'src/contents/4.jp' -import Jp4V2 from 'src/contents/4.v2.jp' import En4 from 'src/contents/4.en' import Jp5 from 'src/contents/5.jp' -import Jp5V2 from 'src/contents/5.v2.jp' import En5 from 'src/contents/5.en' import Jp6 from 'src/contents/6.jp' -import Jp6V2 from 'src/contents/6.v2.jp' import En6 from 'src/contents/6.en' import Jp7 from 'src/contents/7.jp' -import Jp7V2 from 'src/contents/7.v2.jp' import En7 from 'src/contents/7.en' import Jp8 from 'src/contents/8.jp' -import Jp8V2 from 'src/contents/8.v2.jp' import En8 from 'src/contents/8.en' import Jp9 from 'src/contents/9.jp' -import Jp9V2 from 'src/contents/9.v2.jp' import En9 from 'src/contents/9.en' -import contentVersion from 'src/lib/contentVersion' export default { '0': { en: En0, - jp: contentVersion === 'v2' ? Jp0V2 : Jp0 + jp: Jp0 }, '1': { en: En1, - jp: contentVersion === 'v2' ? Jp1V2 : Jp1 + jp: Jp1 }, '10': { en: En10, - jp: contentVersion === 'v2' ? Jp10V2 : Jp10 + jp: Jp10 }, '11': { en: En11, - jp: contentVersion === 'v2' ? Jp11V2 : Jp11 + jp: Jp11 }, '12': { en: En12, - jp: contentVersion === 'v2' ? Jp12V2 : Jp12 + jp: Jp12 }, '13': { en: En13, - jp: contentVersion === 'v2' ? Jp13V2 : Jp13 + jp: Jp13 }, '14': { en: En14, - jp: contentVersion === 'v2' ? Jp14V2 : Jp14 + jp: Jp14 }, '15': { en: En15, - jp: contentVersion === 'v2' ? Jp15V2 : Jp15 + jp: Jp15 }, '16': { en: En16, - jp: contentVersion === 'v2' ? Jp16V2 : Jp16 + jp: Jp16 }, '2': { en: En2, - jp: contentVersion === 'v2' ? Jp2V2 : Jp2 + jp: Jp2 }, '3': { en: En3, - jp: contentVersion === 'v2' ? Jp3V2 : Jp3 + jp: Jp3 }, '4': { en: En4, - jp: contentVersion === 'v2' ? Jp4V2 : Jp4 + jp: Jp4 }, '5': { en: En5, - jp: contentVersion === 'v2' ? Jp5V2 : Jp5 + jp: Jp5 }, '6': { en: En6, - jp: contentVersion === 'v2' ? Jp6V2 : Jp6 + jp: Jp6 }, '7': { en: En7, - jp: contentVersion === 'v2' ? Jp7V2 : Jp7 + jp: Jp7 }, '8': { en: En8, - jp: contentVersion === 'v2' ? Jp8V2 : Jp8 + jp: Jp8 }, '9': { en: En9, - jp: contentVersion === 'v2' ? Jp9V2 : Jp9 + jp: Jp9 } } diff --git a/src/lib/letterEmojiMappingJson.json b/src/lib/letterEmojiMappingJson.json index 42b6e32af..6315cd6f0 100644 --- a/src/lib/letterEmojiMappingJson.json +++ b/src/lib/letterEmojiMappingJson.json @@ -31,7 +31,6 @@ "shorthandNumber": "❓", "shorthandBinary": "❓", "magical": "🧙‍♀️", - "someNumber": "❓", "abbreviated": "❓", "Amult": "❓", "Bsingle": "❓", diff --git a/src/lib/titles.ts b/src/lib/titles.ts index b10d0e061..6d77ca527 100644 --- a/src/lib/titles.ts +++ b/src/lib/titles.ts @@ -3,7 +3,6 @@ import { episodeCategory, episodeNumberWithinCategory } from 'src/lib/episodeCategories' -import contentVersion from 'src/lib/contentVersion' export const lessonTitle = { en: 'Y Combinator for Non-programmers', @@ -34,44 +33,24 @@ export const episodeTitles = { 15: '?', 16: '?' }, - jp: - contentVersion === 'v2' - ? { - 1: '計算箱', - 2: '繰り返しの機能', - 3: '弁当箱のパズル', - 4: '弁当箱の法則', - 5: '3段の弁当箱', - 6: 'ミニオンの芸', - 7: '1を足す効果', - 8: '天才サヤちゃん', - 9: '1を足せない?', - 10: '1を引く効果', - 11: '条件分岐の機能', - 12: '条件分岐の再現', - 13: '一部分を置き換える', - 14: '魔法のYコンビネータ', - 15: '足し算と掛け算、そして…', - 16: 'コンピュータサイエンス' - } - : { - 1: 'これっくらいの、お弁当箱に…', - 2: '弁当箱の法則', - 3: '4品の弁当箱', - 4: '3段の弁当箱', - 5: '順番はどうなる?', - 6: '弁当箱の暗号', - 7: '足し算', - 8: '掛け算', - 9: '条件分岐', - 10: '結果が変わる弁当箱', - 11: '結果が変わるのを防ぐ', - 12: '引き算と省略表記', - 13: '掛け算と条件分岐の省略表記', - 14: '弁当箱の魔女', - 15: '魔法のYコンビネータ', - 16: 'コンピュータサイエンス' - } + jp: { + 1: '計算箱', + 2: '繰り返しの機能', + 3: '弁当箱のパズル', + 4: '弁当箱の法則', + 5: '3段の弁当箱', + 6: 'ミニオンの芸', + 7: '1を足す効果', + 8: '天才サヤちゃん', + 9: '1を足せない?', + 10: '1を引く効果', + 11: '条件分岐の機能', + 12: '条件分岐の再現', + 13: '一部分を置き換える', + 14: '魔法のYコンビネータ', + 15: '足し算と掛け算、そして…', + 16: 'コンピュータサイエンス' + } }[locale] export const episodePrefixes = { diff --git a/src/types/ExpressionParamTypes.ts b/src/types/ExpressionParamTypes.ts index c38148908..755a6b7f2 100644 --- a/src/types/ExpressionParamTypes.ts +++ b/src/types/ExpressionParamTypes.ts @@ -40,7 +40,6 @@ export interface VariableShorthandNumberParams { readonly shorthandNumber: VariableShorthandNumber['shorthandNumber'] readonly initialHighlight?: boolean readonly shorthandUnary?: VariableShorthandUnary['shorthandUnary'] - readonly someNumber?: boolean readonly shorthandNumberAfterConvert?: VariableShorthandNumber['shorthandNumberAfterConvert'] } diff --git a/src/types/ExpressionTypes.ts b/src/types/ExpressionTypes.ts index 0c675821c..51f08cf8b 100644 --- a/src/types/ExpressionTypes.ts +++ b/src/types/ExpressionTypes.ts @@ -10,7 +10,7 @@ export interface VariableExpression { readonly emphasizePriority: boolean readonly argPriorityAgg: number[] readonly funcPriorityAgg: number[] - readonly shorthandBinary?: 'mult' | 'add' | 'remainder' + readonly shorthandBinary?: 'mult' | 'add' readonly shorthandNumber?: number readonly shorthandUnary?: 'pred' readonly shorthandFunc?: 'add' | 'pred' diff --git a/src/types/HTypes.ts b/src/types/HTypes.ts index dcd661e94..669e4a001 100644 --- a/src/types/HTypes.ts +++ b/src/types/HTypes.ts @@ -8,7 +8,6 @@ export interface HProps { args: | { name: 'dateAndSource'; includeAboutMe?: boolean } | { name: 'pressNext' } - | { name: 'isFaster' } | { name: 'yesNoQuiz' } | { name: 'yesNoQuizCorrect' } | { name: 'yesNoQuizIncorrect' } @@ -16,11 +15,6 @@ export interface HProps { | { name: 'yesNoQuizNo'; hideText?: boolean } | { name: 'yesNoQuizCorrectPostfix' } | { name: 'yesNoQuizIncorrectPostfix'; isYes: boolean } - | { name: 'pauseIfLost' } - | { name: 'byTheWay' } - | { name: 'computerScience' } - | { name: 'yCombinator' } - | { name: 'isZeroReview' } | { name: 'bentoBoxPuzzle' plural?: boolean @@ -39,107 +33,50 @@ export interface HProps { | { name: 'nextButtonSecondaryText'; nextEpisodeNumber: number } | { name: 'pressPlay'; capitalize?: boolean } | { name: 'indexPageLink' } - | { name: 'sideNotePrefix' } - | { name: 'continueReading' } | { name: 'titlePrefix' } | { name: 'titlePrefixColored'; addColon?: boolean } | { name: 'titleWithPrefixColored' } - | { name: 'episodeWelcomeText' } | { name: 'newUser' } | { name: 'titleSplit' } | { name: 'toc' } | { name: 'tocClose' } - | { name: 'playButton' } - | { name: 'afterPlay' } - | { name: 'yesNoQuizDontWorry'; tooHard: boolean } - | { name: 'unknownRule' } + | { name: 'yesNoQuizDontWorry' } | { name: 'pageUnderConstruction' } | { name: 'question' } | { name: 'prevAndNextLinks' } | { name: 'whatHappensAtTheEndQuestion' } - | { name: 'whatHappensInTheMiddleQuestion' } - | { name: 'whatsTheNumberQuestion'; number: number } | { name: 'lookAtThisBentoBox' } | { name: 'pressFastForward' skipColon?: boolean - pleaseWait?: boolean - skippingSteps?: boolean - isFaster?: boolean mentionRightArrow?: boolean girl?: boolean skippable?: boolean } | { name: 'copy' } | { name: 'summary' } - | { name: 'mustChangeBothFuncUnboundAndBound' } - | { name: 'secretCode' } - | { name: 'secretCodeCaptionSimple'; number: number } - | { name: 'isCallArgAndFuncUnboundTheSameCaption'; same: boolean } - | { name: 'secretCodeAddOneCaption' } - | { name: 'secretCodeAddCaption' } - | { name: 'secretCodeMultiplyCaption'; arg1?: number; arg2?: number } - | { name: 'secretCodeCaption'; number: number; letter: VariableNames } - | { name: 'notSecretCodeCaption'; number: number; letter: VariableNames } | { name: 'theAnswerIs'; isYes: boolean; sentence?: boolean } - | { - name: 'ifCaption' - ifZero: VariableNames | VariableNames[] - ifNonZero: VariableNames | VariableNames[] - } - | { name: 'epiloguePrefix' } - | { name: 'yesOrNo' } | { name: 'shareContent' } | { name: 'shareTitle' } | { name: 'privacyPolicy' } - | { name: 'witch' } | { name: 'AmultTop' } | { name: 'AmultBottom' } | { name: 'BsingleTop' } | { name: 'BsingleBottom' } - | { name: 'witchAppearsAgainCaption' } - | { name: 'witchReplacedCaption' } | { name: 'aboutThisSite' } | { name: 'categoryNameColored' category: keyof typeof episodePrefixes } | { name: 'stoppedForExplanation' } - | { name: 'infinitelyAddingQuestionCaption' } - | { name: 'secretCodeAddOneCaptionWithoutQuestion' } - | { name: 'secretCodeMinusOneCaption' } - | { name: 'secretCodeTwoMinusOneCaption' } | { name: 'pageNotFound' } | { name: 'lookAtToc' } - | { name: 'magicalChangedCaption'; fromNumber: number } - | { name: 'ycChangedCaption'; fromNumber: number } - | { name: 'whatCanComputeFactorial'; start: 3 | 4 | 5 } - | { name: 'abbreviated' } - | { name: 'itWillTakeTime' } - | { name: 'skippingSteps' } - | { name: 'inlineFactorial'; start: 3 | 4 | 5 } - | { name: 'factorialDefinition' } - | { name: 'factorialComputation'; start: 3 | 4 | 5 } - | { name: 'changedToPowerCaption' } - | { name: 'powerComputation'; power: 3 | 4 } - | { name: 'thisIsYCombinatorCaption'; too?: boolean } - | { name: 'csDescriptionPreface' } - | { name: 'csDescription' } - | { name: 'numberOfAIsSecretCodeCaption' } | { name: 'mentionRightArrow' } - | { name: 'addMathBoxCaption' } - | { name: 'remainder' } - | { name: 'conditionalMathBoxCaption' } | { name: 'lookAtThisMathBox' } - | { name: 'whatHappensAtTheEndMathBoxQuestion' } - | { name: 'isLeapYearCaption' } - | { name: 'yellowHighlighted' } - | { name: 'leapYearConditionalCaption' } | { name: 'conditionSectionName' type: 'condition' | 'trueCase' | 'falseCase' } - | { name: 'repeatingMathBoxCaption' } | { name: 'lookAtThisBentoBoxPuzzle' } | { name: 'convertToMathbox' } | { name: 'runAndConvertToMathbox'; addNewline?: boolean } @@ -147,7 +84,6 @@ export interface HProps { | { name: 'undoConvertToMathbox' } | { name: 'doneConvertToMathbox' } | { name: 'canBeConverted' } - | { name: 'sameAddRole' } | { name: 'plusOneEffect' } | { name: 'minusOneEffect' } | { name: 'startWithTwoCaption' } diff --git a/src/types/VariableNames.ts b/src/types/VariableNames.ts index 0057ddf1d..770af561f 100644 --- a/src/types/VariableNames.ts +++ b/src/types/VariableNames.ts @@ -31,8 +31,6 @@ export type VariableNames = | 'shorthandNumber' | 'shorthandBinary' | 'magical' - | 'someNumber' - | 'abbreviated' | 'Amult' | 'Bsingle' | 'blankNumber'