Fiftyville

謎を解決するためのSQLクエリを記述します。

Fiftyvilleの謎

CS50 Duckが盗まれました!Fiftyvilleの町はあなたに盗まれたアヒルの謎を解くように求めています。当局は、泥棒がアヒルを盗み、その後すぐに共犯者の助けを借りて町から飛行機で出たと考えています。目標は、次の項目を特定することです。

  • 泥棒は誰か。
  • 泥棒はどの都市に逃げたのか。
  • 誰が共犯者で、泥棒が逃げるのを助けたのか。

あなたが知っているのは、盗難が2021年7月28日に起きたことと、それがハンフリー通り (Humphrey Street) で起きたことだけです。

この謎をどうやって解きますか。Fiftyville当局は、盗難が起きた際の町の記録をいくつか入手し、町周辺のデータのテーブルを含むSQLiteデータベースfiftyville.dbを用意しました。SELECTクエリを使用してそのテーブルをクエリし、目的のデータにアクセスできます。データベースの情報だけを使って、謎を解くのがあなたの課題です。

始め方

VS Codeを開きます。

ターミナルウィンドウ内をクリックすることから始めて、それからcdを実行します。
その後プロンプトは次のようになっていることがわかります。

$

ターミナルウィンドウの内側をクリックし、次のように入力します。

wget https://cdn.cs50.net/2021/fall/psets/7/fiftyville.zip

その後にEnterを押すと、fiftyville.zipというZIPがあなたのCodespaceにダウンロードされます。wgetと次のURLの間にあるスペースや、その他の文字を見落とさないように注意してください。

次に

unzip fiftyville.zip

を実行して、fiftyvilleというフォルダを作成します。
ZIPファイルは不要になったため、

rm fiftyville.zip

を実行し、プロンプトで “y “に続いてEnterで応答すると、ダウンロードしたZIPファイルが削除されます。

次に

cd fiftyville

の後にEnterを押して、そのディレクトリに移動する(つまり、開く)。これでプロンプトは以下のようになります。

fiftyville/ $

lsを実行するいくつかのファイルとフォルダーが表示されます。

answers.txt  fiftyville.db  log.sql

問題が発生した場合は、同じ手順をもう一度実行して、どこが間違っていたかを判断できるかどうかを確認してください。

仕様

この問題で、謎を解くのと同じくらい重要なのは、謎を解くのに使うプロセスです。log.sqlで、データベースで実行するすべてのSQLクエリのログを保持します。各クエリの上に、なぜそのクエリを実行しているのか、その特定のクエリからどのような情報を取得したいのかを説明するコメント (SQLでは、コメントは--で始まる行です) を付けます。ログファイル内のコメントを使用して、謎を解決する際の思考プロセスとして追加のメモを追加できます。最終的には、このファイルは泥棒を特定するために使用したプロセスの証拠となります。

クエリを書いているうちに、いくつかのクエリが非常に複雑になることに気がつくかもしれません。クエリを読みやすくするために、sqlstyle.guide にある良いスタイルの原則を参照してください。特に、インデントのセクションが役に立ちます!

謎が解けたら、answers.txtのそれぞれの行に、泥棒の名前、泥棒が逃げ込んだ町、そして町を脱出するのを手伝った泥棒の共犯者の名前を記入します (ファイル内の既存のテキストを変更したり、ファイルに他の行を追加したりしないでください) 。

最終的に、log.sqlファイルとanswers.txtファイルの両方を送信する必要があります。

ウォークスルー

注:このチュートリアルは、Fiftyvilleで起きた別の悪名高い犯罪に関するもので、チェンバリン通りで発生しました。最近の盗難事件はハンフリー通りで起きたと当局が発表しています。データベースは更新され、bakery_security_logsテーブルが含まれています。

ヒント

  • sqlite3 fiftyville.dbを実行して、データベースに対するクエリの実行を開始します。
    • sqlite3の実行中に.tablesを実行すると、データベース内のすべてのテーブルがリストされます。
    • sqlite3の実行中に、schema TABLE_NAME (TABLE_NAMEはデータベース内のテーブルの名前) を実行すると、テーブルの作成に使用されたCREATE TABLEコマンドが表示されます。これは、照会する列を知るのに役立ちます。
  • crime_scene_reportsテーブルから始めると良いでしょう。まず、犯罪の日付と場所に一致する犯罪現場レポートを探します。
  • 役立つSQL構文については、このSQLキーワードのリファレンスを参照してください。

テスト

check50を使用して以下を実行し、コードの正確性を評価します。

check50 cs50/problems/2022/x/fiftyville

提出方法

ターミナルで、以下のコマンドを実行して提出してください。

submit50 cs50/problems/2022/x/fiftyville

SQL Cityの別のケースに触発されました。