Return to Video

プログラマーのように考える 第7話「悟りの塔」

  • 0:32 - 0:36
    エシックとヘッジは
    巨大な塔の1階にいます
  • 0:37 - 0:39
    エネルギーのバリアによって
  • 0:39 - 0:44
    2つめのアイテム「創造の石」から
    隔てられています
  • 0:53 - 0:58
    手に入れるには 3つのエネルギーの流れに乗って
    塔を登る必要があります
  • 0:58 - 1:04
    一歩前に出るやいなや
    60秒のカウントダウンが始まります
  • 1:07 - 1:12
    部屋の奥には その中に
    エネルギーを保持できる―
  • 1:12 - 1:15
    目に見えない塔がそびえています
  • 1:15 - 1:19
    60秒が過ぎると エネルギーが勢いよく
    上から降ってきて
  • 1:19 - 1:21
    1ユニットずつ満たしていきます
  • 1:21 - 1:25
    力場によって エネルギーが前後から
    漏れないようになっているのです
  • 1:25 - 1:28
    始まるまでの60秒の間に
  • 1:28 - 1:33
    エシックとヘッジはどれくらいのエネルギーを
    降らせるかを決めなければなりません
  • 1:33 - 1:35
    3回の挑戦のたびに
  • 1:35 - 1:38
    塔のくぼみをちょうど満たす
    エネルギー量を求めるのです
  • 1:38 - 1:42
    成功すれば エネルギーに乗って
    上へと進むことができます
  • 1:42 - 1:47
    でも量を間違えると
    エネルギーの昇降機は働かず
  • 1:47 - 1:48
    下に落ちてしまいます
  • 1:48 - 1:51
    壁にある図に
    例が示されています
  • 1:51 - 1:56
    この形の場合は 2ユニット分の
    エネルギーが入ります
  • 1:56 - 2:01
    この形の場合は 4ユニット分―
    左に3つ 右に1つです
  • 2:01 - 2:03
    この場合も 4ユニット分です
  • 2:03 - 2:07
    なぜなら 右端に入ったエネルギーは
    こぼれ出てしまうからです
  • 2:07 - 2:09
    降り注ぐエネルギーは
  • 2:09 - 2:14
    周囲に支えるものがなければ
    あふれてしまうのです
  • 2:14 - 2:19
    ヘッジはブロックの列を1列ずつ可視化して
    高さを測ることができますが
  • 2:19 - 2:23
    全体の構造を一度に
    見ることはできません
  • 2:23 - 2:26
    エシックがヘッジを
    どのようにプログラミングすれば
  • 2:26 - 2:30
    それぞれの塔がくぼみに保持できる
    エネルギー量を把握できるでしょう?
  • 2:30 - 2:33
    ビデオをいったん止めて
    自分で考えてみましょう
  • 2:39 - 2:42
    ひとつの考え方は こうです
  • 2:42 - 2:45
    それぞれの空の箱が
    エネルギーを保持できるのは
  • 2:45 - 2:52
    その左方にも 右方にも
    壁がある場合です
  • 2:52 - 2:56
    でも これを各箱について確認すると
    長い時間がかかってしまいます
  • 2:56 - 3:01
    1列まとめて考えることは
    できないでしょうか?
  • 3:01 - 3:05
    例えば この場合は何ユニット分
    保持できるでしょう?
  • 3:05 - 3:10
    [ビデオをいったん止めて
    自分で考えてみましょう]
  • 3:10 - 3:14
    先程の例で 問題を
    分析してみましょう
  • 3:14 - 3:16
    ブロックは5列あります
  • 3:16 - 3:20
    左端の列は 一番高いので
    エネルギーを保持できません
  • 3:20 - 3:23
    2列目は3ユニット分
    保持できます
  • 3:23 - 3:27
    両側にある4段のブロックに
    囲まれているからです
  • 3:27 - 3:32
    エネルギーがいっぱいになる高さ4から
  • 3:32 - 3:36
    ブロックの高さ1を引いて
    3という答えになります
  • 3:36 - 3:42
    3列目も同様で 左に4段 右に4段あり
    高さが3なので
  • 3:42 - 3:47
    4引く3で1ユニット保持できます
  • 3:47 - 3:51
    4列目と5列目は
    右手に自分より高いものがないので
  • 3:51 - 3:53
    エネルギーは保持できません
  • 3:53 - 3:57
    この考え方を
    アルゴリズムにすることができます
  • 3:57 - 4:01
    エネルギー量を求めたい列を基準にして
  • 4:01 - 4:05
    ヘッジは1列ずつ見ていき
    左方向で一番高い列を探し
  • 4:05 - 4:08
    それから右方向でも
    一番高い列を探します
  • 4:08 - 4:13
    その2つの低い方が
    エネルギーを貯められる高さです
  • 4:13 - 4:16
    この高さが
    列自体の高さよりも高いならば
  • 4:16 - 4:19
    そこから列の高さを差し引きます
  • 4:19 - 4:24
    すると その答えが その列に
    保持できるエネルギー量になります
  • 4:24 - 4:27
    エネルギーを貯められる高さが
    列自体の高さ以下なら
  • 4:27 - 4:30
    エネルギーはこぼれてしまいます
  • 4:30 - 4:33
    ヘッジはループを使って
    これをすべての列に適用できます
  • 4:33 - 4:39
    左端の列から右に向かって
    1列ずつ調べていくのです
  • 4:39 - 4:41
    列ごとに同じ手順を踏みます
  • 4:41 - 4:46
    左方向に一番高い列を探し
    右方向に一番高い列を探し
  • 4:46 - 4:50
    どちらか低い方から
    列自体の高さを引いて
  • 4:50 - 4:53
    その答えが正の数なら
    総和にその分を加算します
  • 4:53 - 4:57
    ヘッジはループを列の数だけ
    繰り返します
  • 4:57 - 5:01
    これで上手くいくのですが
    サイズが大きいと時間がかかります
  • 5:01 - 5:05
    ヘッジは各列について左方向と右方向に
    たどる手順を繰り返すためです
  • 5:05 - 5:10
    列がN個あると
    N列すべてをN回参照することになります
  • 5:10 - 5:12
    もっと速い方法はあるでしょうか?
  • 5:12 - 5:16
    ひとつの時間短縮法はこうです
    手順を進める前に
  • 5:16 - 5:17
    ヘッジは左端から始めて
  • 5:17 - 5:21
    各列に対する「左側で一番高い列」を
    前もって調べておけます
  • 5:21 - 5:25
    この場合は まず2
    最初の列のほうが高いので 再び2
  • 5:25 - 5:28
    それから4、4、4と続きます
  • 5:28 - 5:31
    それから「右側で一番高い列」も調べ
  • 5:31 - 5:37
    今度は右から左へ
    1、3、4、4、4となります
  • 5:37 - 5:41
    結果として メモリ上に
    こんな表が完成します
  • 5:41 - 5:46
    それから ヘッジはループをもう一回りさせ
    さっきと同じ計算式を使い
  • 5:46 - 5:50
    各列に保持できるエネルギーを
    計算できます
  • 5:50 - 5:54
    計算済みの左右の高さの
    小さい方から
  • 5:54 - 5:57
    列自体の高さを引けばいいのです
  • 5:57 - 6:02
    N列をN回参照する代わりに
    N列を3回参照するだけでよく
  • 6:02 - 6:05
    これは線形時間です
  • 6:05 - 6:08
    この解法をさらに最適化する方法も
    ありますが
  • 6:08 - 6:11
    ここでは これで十分でしょう
  • 6:11 - 6:13
    エシックとヘッジは
    力を合わせます
  • 6:15 - 6:19
    最初の問題は楽勝で
    塔を上へと進みます
  • 6:22 - 6:24
    2つめは ちょっと手強いです
  • 6:33 - 6:37
    3つめは 大難問で
    ブロックが何十列もあります
  • 6:37 - 6:41
    時間が刻々と過ぎますが
    エシックのプログラムは高速で
  • 6:41 - 6:45
    ぎりぎりのところで
    ハンドルの位置を合わせます
  • 6:49 - 6:53
    エネルギーに乗って 2人は
    創造の石のありかへと導かれます
  • 6:56 - 7:01
    最初のアイテムの時と同じように映像が現れ
    何年も前の記憶が蘇ります
  • 7:01 - 7:04
    世界を動かす機械が
    すべてを変えてしまい
  • 7:04 - 7:07
    エシックはロボット主任技術者として
  • 7:07 - 7:09
    目にする現実に
    不安を感じるようになりました
  • 7:09 - 7:12
    そしてブラッドバリアが人々を
    囲い込み始めたとき
  • 7:12 - 7:15
    何かが決定的におかしいと
    気づいたのでした
  • 7:15 - 7:17
    そこでエシックは
    3つのアイテムを作り
  • 7:17 - 7:21
    「力」「創造性」「記憶」を
    人々に取り戻させる力を付与しました
  • 7:21 - 7:24
    そしてアイテムを3つの共同体に
    隠したのです
  • 7:24 - 7:27
    人々にその使い方を教える前に
  • 7:27 - 7:29
    政府はエシックのもくろみに気づき
  • 7:29 - 7:32
    彼女や他のプログラマーを
    ロボットに逮捕させてしまいました
  • 7:32 - 7:35
    世界を動かす機械を使って
    エシックが最後に作ったのは
  • 7:35 - 7:38
    無知の及ぼす力から
    この古代の装置を守るため
  • 7:38 - 7:42
    それを巨大な迷路に
    封じ込めるロボットで
  • 7:42 - 7:45
    そのロボットをヘッジと名付けたのです
  • 7:52 - 7:56
    警告もなしに エネルギーの昇降機は
    突然消えてしまいました
Title:
プログラマーのように考える 第7話「悟りの塔」
Speaker:
アレックス・ローゼンタール
Description:

アニメシリーズ『プログラマーのように考える』の第7話。全10話から成るこのシリーズは、エシックという女の子とロボットの相棒ヘッジが世界を救うために頑張るお話です。2人は3つのアイテムを集める冒険に出発しますが、その途中プログラミングのパズルを解きながら進まなければなりません。

講師:アレックス・ローゼンタール 監督:Kozmonot Animation Studio
*このビデオの教材:https://ed.ted.com/lessons/the-tower-of-epiphany-think-like-a-coder-ep-7

more » « less
Video Language:
English
Team:
closed TED
Project:
TED-Ed
Duration:
07:58

Japanese subtitles

Revisions Compare revisions