Fiftyville

Fiftyville

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

Fiftyvilleの謎

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

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

あなたが知っているのは、盗難が2020728に起きたことと、それがチェンバリン通り (Chamberlin Street) で起きたことだけです。

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

始め方

ここでは、この問題をCS50 IDEにダウンロードする方法を説明します。CS 50 IDEにログインし、ターミナルウィンドウで次の各コマンドを実行します。

  • すでに存在しているpset7ディレクトリに移動します。
  • wget https://cdn.cs50.net/2020/fall/psets/7/fiftyville/fiftyville.zipを実行して、この問題のディストリビューションを含む (圧縮された) ZIPファイルをダウンロードします。
  • unzip fiftyville.zipを実行して、そのファイルを解凍します。
  • そのZIPファイルを削除するには、rm fiftyville.zipの後にyesまたはyを実行します。
  • lsを実行します。ZIPファイルの中にfiftyvilleというディレクトリがあるはずです。
  • cd fiftyvilleを実行して、そのディレクトリに移動します。
  • lsを実行します。fiftyville.dbファイル、log.sqlファイル、およびanswers.txtファイルが表示されます。

仕様

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

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

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

ウォークスルー

ヒント

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

テスト

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

check50 cs50/problems/2021/x/fiftyville

提出方法

次のコマンドを実行し、GitHubのユーザー名とパスワードを入力してログインします。セキュリティのため、パスワードには実際の文字ではなくアスタリスク (*) が表示されます。

submit50 cs50/problems/2021/x/fiftyville

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