このとき、上から2番目のブロックは「L」です。実際のコンピュータではこの機械では、最後に置かれたブロックが最初に取り除かれます。このようなデータ構造をスタックと呼びます。スタックはコンピュータのプログラムでよく使われます。「1+(2*(3+4)+5)」のような文字列の中で開き括弧「(」と閉じ括弧「)」の数が同じかどうかを確かめるときに利用されます。選択肢ごとに図を描いてみるとわかりやすいです。図で、白色はwhite、緑色はcolorです。図1図2図3図4白色のボトルを生産するには、次の3種類の入力が考えられます。white正解の2実際のコンピュータではコンピュータのCPUは論理回路と呼ばれる微小な電子回路から作られています。XORなどが使われます。説明図では実際の電子回路と同じ図で表しています。実際の論理回路では、電気信号の有無で1と0を表します。これは論理回路の真と偽を表しています。この問題では白色(white)を真(1)、緑色(color)を偽(0)の役割で考えました。ANDでは両方の入力が真のときに出力が真になります。ORでは少なくともどちらかの入力が真のときに出力が真になります。NOTでは入力と出力が逆になります。入力が真のときは出力が偽になり、入力が偽のときは出力が真になります。図の上の中央にある草は続けて現れることができますが、図の下の中央にある木の枝は繰り返すことができないことに注意しましょう。図の出口の青い花から、入口の紫の花に戻ることはできません。実際のコンピュータではこの問題のように、入口から矢印をたどりながら「今どこにいて、次はどこに移る」を繰り返して出口に行けるかを表す図をオートマトンまたは状態遷移図と呼びます。オートマトンは、プログラムが文法通りに書かれていることを確認したり、PCやスマートフォンで入力された文字を日本語に変換する処理、電卓で数式が正しいことを確認する処理などで利用されています。多くの電卓では「12+3=」を入力すると正しく計算が行われますが、「12++3=」はエラーになって計算されません。これは電卓の中に「数字の繰り返しと、演算記号と、数字の繰り返しと、最後に=」を表すオートマトンが定義されているため、正しい数式かどうかをチェックできているのです。出口でいちばん左が青(B)になるためには、入口の左がBBであることが必要です。ないと出口でいちばん左が緑(G)になってしまいます。出口でいちばん右が緑(G)になるためには、入口の右がGGであることが必要です。ないと出口でいちばん右が青(B)になってしまいます。すると、入力の真ん中の2つはBGかGBになります。どちらの場合も出力の真ん中の2つはBGになるため、両方とも正解であることがわかります。実際のコンピュータではインターネットの通信で、パケットと呼ばれるデータはIP通信のルールで相手に送られます。ネットワークは「学校内のネットワーク」のように他のネットワークと分かれていて、お互いに直接通信できません。そこでルーターと呼ばれる中継装置を置くことで、適切な経路でパケットを送るようにしています。35番のハリネズミは荷物を移動しなくてすみます。問題の例にあるように、1番のハリネズミは荷物を移動しなくてすみます。実は1番だけでなく、2番から5番のハリネズミも同じです。次に倉庫の数(5個と6個)を考えると、5で割っても6で割っても余りが0になる数は、0の次は最小公倍数の30です。35」であることがわかります。実際のコンピュータではこの問題では、データを分割して格納する考え方を扱いました。ハッシュ法と呼ばれるアルゴリズムでは、データを複数の入れ物(倉庫)に分割して格納し、取り出すときは値からどの入れ物に入っているかを計算で求めることで、高速にデータを取り出します。わかりやすい例だと、生徒の名簿をアルファベットごとの入れ物に分けておき、「MattiaさんはMの入れ物に入れる」ようなイメージです。今回の問題では、どの入れ物に入っているかを、剰余(割り算の余り)で求めました。倉庫が5個のとき、「1番の倉庫は、1や6のように5で割ったときの余りが1の荷物を入れる」「2番の倉庫は、2や7のように5で割ったときの余りが2の荷物を入れる」「5番の倉庫は、5や10のように5で割ったときの余りが0の荷物を入れる」というやり方です。このようにすると、「13番の荷物はどこにあるかな?」と考えたときに、「13を5で割った余りは3だから3番の倉庫!」とすぐにわかります。実際に、紙に描いてみるとわかりやすいと思います。1」の場合はこのようになります。実際のコンピュータではコンピュータは与えられたプログラムで動きます。プログラムの命令はひとつひとつが意味を持っていて、コンピュータはそれを順番どおりに実行します。この問題では、コンピュータになったつもりで、与えられた命令を実行しました。命令を読んで、ひとつひとつがどのような結果になるかを考えることは、プログラムを作るときと、プログラムを修正するときに重要なスキルです。ライセンスで提供されています。