mirror of https://github.com/me50/kukemuna.git
This commit is contained in:
commit
fc407a8481
|
|
@ -0,0 +1,3 @@
|
||||||
|
The THIEF is: Bruce
|
||||||
|
The city the thief ESCAPED TO: New York City
|
||||||
|
The ACCOMPLICE is: Robin
|
||||||
|
|
@ -0,0 +1,295 @@
|
||||||
|
-- Keep a log of any SQL queries you execute as you solve the mystery.
|
||||||
|
|
||||||
|
-- Get overview of available data (tables)
|
||||||
|
.tables
|
||||||
|
|
||||||
|
-- airports crime_scene_reports people
|
||||||
|
-- atm_transactions flights phone_calls
|
||||||
|
-- bakery_security_logs interviews
|
||||||
|
-- bank_accounts passengers
|
||||||
|
|
||||||
|
|
||||||
|
-- Get structure of crime_scene_reports
|
||||||
|
.schema crime_scene_reports
|
||||||
|
|
||||||
|
-- id INTEGER,
|
||||||
|
-- year INTEGER,
|
||||||
|
-- month INTEGER,
|
||||||
|
-- day INTEGER,
|
||||||
|
-- street TEXT,
|
||||||
|
-- description TEXT,
|
||||||
|
-- PRIMARY KEY(id)
|
||||||
|
|
||||||
|
-- All you know is that the theft took place on July 28, 2023 and that it took place on Humphrey Street.
|
||||||
|
SELECT description FROM crime_scene_reports
|
||||||
|
WHERE year = 2023 AND month = 7 AND day = 28
|
||||||
|
AND street = 'Humphrey Street';
|
||||||
|
|
||||||
|
-- Theft of the CS50 duck took place at 10:15am at the Humphrey Street bakery. Interviews were conducted today with three witnesses who were present at the time –
|
||||||
|
-- each of their interview transcripts mentions the bakery.
|
||||||
|
|
||||||
|
-- Littering took place at 16:36. No known witnesses.
|
||||||
|
|
||||||
|
|
||||||
|
-- Get structure of interviews
|
||||||
|
.schema interviews
|
||||||
|
|
||||||
|
-- id INTEGER,
|
||||||
|
-- name TEXT,
|
||||||
|
-- year INTEGER,
|
||||||
|
-- month INTEGER,
|
||||||
|
-- day INTEGER,
|
||||||
|
-- transcript TEXT,
|
||||||
|
-- PRIMARY KEY(id)
|
||||||
|
|
||||||
|
|
||||||
|
-- Get transcripts from the same day with mentions to bakery
|
||||||
|
SELECT transcript FROM interviews
|
||||||
|
WHERE year = 2023 AND month = 7 AND day = 28
|
||||||
|
AND transcript LIKE '%bakery%';
|
||||||
|
|
||||||
|
-- Sometime within ten minutes of the theft, I saw the thief get into a car in the bakery parking lot and drive away. If you have security footage from the bakery parking lot,
|
||||||
|
-- you might want to look for cars that left the parking lot in that time frame.
|
||||||
|
|
||||||
|
-- I don't know the thief's name, but it was someone I recognized. Earlier this morning, before I arrived at Emma's bakery, I was walking by the ATM on Leggett Street
|
||||||
|
-- and saw the thief there withdrawing some money.
|
||||||
|
|
||||||
|
-- As the thief was leaving the bakery, they called someone who talked to them for less than a minute. In the call, I heard the thief say that they were planning to take
|
||||||
|
-- the earliest flight out of Fiftyville tomorrow. The thief then asked the person on the other end of the phone to purchase the flight ticket.
|
||||||
|
|
||||||
|
|
||||||
|
-- Get structure of bakery_security_logs
|
||||||
|
.schema bakery_security_logs
|
||||||
|
|
||||||
|
-- id INTEGER,
|
||||||
|
-- year INTEGER,
|
||||||
|
-- month INTEGER,
|
||||||
|
-- day INTEGER,
|
||||||
|
-- hour INTEGER,
|
||||||
|
-- minute INTEGER,
|
||||||
|
-- activity TEXT,
|
||||||
|
-- license_plate TEXT,
|
||||||
|
-- PRIMARY KEY(id)
|
||||||
|
|
||||||
|
-- Get licence plates of leaving customers from within 10 minutes of theft (10:15am)
|
||||||
|
SELECT license_plate FROM bakery_security_logs
|
||||||
|
WHERE year = 2023 AND month = 7 AND day = 28 AND hour = 10 AND minute BETWEEN 5 AND 25
|
||||||
|
AND activity = 'exit';
|
||||||
|
|
||||||
|
-- 5P2BI95
|
||||||
|
-- 94KL13X
|
||||||
|
-- 6P58WS2
|
||||||
|
-- 4328GD8
|
||||||
|
-- G412CB7
|
||||||
|
-- L93JTIZ
|
||||||
|
-- 322W7JE
|
||||||
|
-- 0NTHK55
|
||||||
|
|
||||||
|
|
||||||
|
-- Get structure of atm_transactions
|
||||||
|
.schema atm_transactions
|
||||||
|
|
||||||
|
-- id INTEGER,
|
||||||
|
-- account_number INTEGER,
|
||||||
|
-- year INTEGER,
|
||||||
|
-- month INTEGER,
|
||||||
|
-- day INTEGER,
|
||||||
|
-- atm_location TEXT,
|
||||||
|
-- transaction_type TEXT,
|
||||||
|
-- amount INTEGER,
|
||||||
|
-- PRIMARY KEY(id)
|
||||||
|
|
||||||
|
-- Get account numbers of withdrawals from Leggett Street ATM on the day of theft
|
||||||
|
SELECT account_number FROM atm_transactions
|
||||||
|
WHERE year = 2023 AND month = 7 AND day = 28
|
||||||
|
AND atm_location = 'Leggett Street' AND transaction_type = 'withdraw';
|
||||||
|
|
||||||
|
-- 28500762
|
||||||
|
-- 28296815
|
||||||
|
-- 76054385
|
||||||
|
-- 49610011
|
||||||
|
-- 16153065
|
||||||
|
-- 25506511
|
||||||
|
-- 81061156
|
||||||
|
-- 26013199
|
||||||
|
|
||||||
|
|
||||||
|
-- Get structure of phone_calls
|
||||||
|
.schema phone_calls
|
||||||
|
|
||||||
|
-- id INTEGER,
|
||||||
|
-- caller TEXT,
|
||||||
|
-- receiver TEXT,
|
||||||
|
-- year INTEGER,
|
||||||
|
-- month INTEGER,
|
||||||
|
-- day INTEGER,
|
||||||
|
-- duration INTEGER,
|
||||||
|
-- PRIMARY KEY(id)
|
||||||
|
|
||||||
|
-- Get caller and receiver of calls with duration under a minute
|
||||||
|
SELECT caller FROM phone_calls
|
||||||
|
WHERE year = 2023 AND month = 7 AND day = 28
|
||||||
|
AND duration < 60;
|
||||||
|
|
||||||
|
-- Caller | Receiver
|
||||||
|
-- (130) 555-0289 | (996) 555-8899
|
||||||
|
-- (499) 555-9472 | (892) 555-8872
|
||||||
|
-- (367) 555-5533 | (375) 555-8161
|
||||||
|
-- (499) 555-9472 | (717) 555-1342
|
||||||
|
-- (286) 555-6063 | (676) 555-6554
|
||||||
|
-- (770) 555-1861 | (725) 555-3243
|
||||||
|
-- (031) 555-6622 | (910) 555-3251
|
||||||
|
-- (826) 555-1652 | (066) 555-9701
|
||||||
|
-- (338) 555-6650 | (704) 555-2131
|
||||||
|
|
||||||
|
|
||||||
|
-- Get structure of flights
|
||||||
|
.schema flights
|
||||||
|
|
||||||
|
-- id INTEGER,
|
||||||
|
-- origin_airport_id INTEGER,
|
||||||
|
-- destination_airport_id INTEGER,
|
||||||
|
-- year INTEGER,
|
||||||
|
-- month INTEGER,
|
||||||
|
-- day INTEGER,
|
||||||
|
-- hour INTEGER,
|
||||||
|
-- minute INTEGER,
|
||||||
|
-- PRIMARY KEY(id),
|
||||||
|
-- FOREIGN KEY(origin_airport_id) REFERENCES airports(id),
|
||||||
|
-- FOREIGN KEY(destination_airport_id) REFERENCES airports(id)
|
||||||
|
|
||||||
|
-- Get structure of airports
|
||||||
|
.schema airports
|
||||||
|
|
||||||
|
-- id INTEGER,
|
||||||
|
-- abbreviation TEXT,
|
||||||
|
-- full_name TEXT,
|
||||||
|
-- city TEXT,
|
||||||
|
-- PRIMARY KEY(id)
|
||||||
|
|
||||||
|
-- Get structure of passengers
|
||||||
|
.schema passengers
|
||||||
|
|
||||||
|
-- flight_id INTEGER,
|
||||||
|
-- passport_number INTEGER,
|
||||||
|
-- seat TEXT,
|
||||||
|
-- FOREIGN KEY(flight_id) REFERENCES flights(id)
|
||||||
|
|
||||||
|
-- Get passengers (passport_number) of earliest flight out of Fiftyville the next day
|
||||||
|
SELECT passport_number FROM passengers
|
||||||
|
WHERE flight_id IN (
|
||||||
|
SELECT flights.id FROM flights
|
||||||
|
JOIN airports ON flights.origin_airport_id = airports.id
|
||||||
|
WHERE year = 2023 AND month = 7 AND day = 29
|
||||||
|
AND city = 'Fiftyville'
|
||||||
|
ORDER BY hour LIMIT 1
|
||||||
|
);
|
||||||
|
|
||||||
|
-- 7214083635
|
||||||
|
-- 1695452385
|
||||||
|
-- 5773159633
|
||||||
|
-- 1540955065
|
||||||
|
-- 8294398571
|
||||||
|
-- 1988161715
|
||||||
|
-- 9878712108
|
||||||
|
-- 8496433585
|
||||||
|
|
||||||
|
-- Get destination airport for that flight
|
||||||
|
SELECT city FROM airports
|
||||||
|
WHERE id IN (
|
||||||
|
SELECT destination_airport_id FROM flights
|
||||||
|
JOIN airports ON flights.origin_airport_id = airports.id
|
||||||
|
WHERE year = 2023 AND month = 7 AND day = 29
|
||||||
|
AND city = 'Fiftyville'
|
||||||
|
ORDER BY hour LIMIT 1
|
||||||
|
);
|
||||||
|
|
||||||
|
-- New York City
|
||||||
|
|
||||||
|
|
||||||
|
-- Get structure of people
|
||||||
|
.schema people
|
||||||
|
|
||||||
|
-- id INTEGER,
|
||||||
|
-- name TEXT,
|
||||||
|
-- phone_number TEXT,
|
||||||
|
-- passport_number INTEGER,
|
||||||
|
-- license_plate TEXT,
|
||||||
|
-- PRIMARY KEY(id)
|
||||||
|
|
||||||
|
-- Get structure of bank_accounts
|
||||||
|
.schema bank_accounts
|
||||||
|
|
||||||
|
-- account_number INTEGER,
|
||||||
|
-- person_id INTEGER,
|
||||||
|
-- creation_year INTEGER,
|
||||||
|
-- FOREIGN KEY(person_id) REFERENCES people(id)
|
||||||
|
|
||||||
|
-- Get the name of the thief and a phone number of accomplice
|
||||||
|
SELECT name, receiver FROM people
|
||||||
|
JOIN bank_accounts ON people.id = bank_accounts.person_id
|
||||||
|
JOIN phone_calls ON people.phone_number = phone_calls.caller
|
||||||
|
WHERE license_plate IN ( -- Licence plates of leaving customers from within 10 minutes of theft (10:15am)
|
||||||
|
SELECT license_plate FROM bakery_security_logs
|
||||||
|
WHERE year = 2023 AND month = 7 AND day = 28 AND hour = 10 AND minute BETWEEN 5 AND 25
|
||||||
|
AND activity = 'exit'
|
||||||
|
)
|
||||||
|
AND passport_number IN ( -- Ppassport numbers of people on earliest flight out of Fiftyville the next day
|
||||||
|
SELECT passport_number FROM passengers
|
||||||
|
WHERE flight_id IN (
|
||||||
|
SELECT flights.id FROM flights
|
||||||
|
JOIN airports ON flights.origin_airport_id = airports.id
|
||||||
|
WHERE year = 2023 AND month = 7 AND day = 29
|
||||||
|
AND city = 'Fiftyville'
|
||||||
|
ORDER BY hour LIMIT 1
|
||||||
|
)
|
||||||
|
AND phone_number IN ( -- Caller numbers with duration under a minute
|
||||||
|
SELECT caller FROM phone_calls
|
||||||
|
WHERE year = 2023 AND month = 7 AND day = 28
|
||||||
|
AND duration < 60
|
||||||
|
)
|
||||||
|
AND account_number IN ( -- Account numbers of withdrawals from Leggett Street ATM on the day of theft
|
||||||
|
SELECT account_number FROM atm_transactions
|
||||||
|
WHERE year = 2023 AND month = 7 AND day = 28
|
||||||
|
AND atm_location = 'Leggett Street' AND transaction_type = 'withdraw'
|
||||||
|
)
|
||||||
|
AND day = 28 AND duration < 60
|
||||||
|
);
|
||||||
|
|
||||||
|
-- Bruce
|
||||||
|
|
||||||
|
-- Get the name of the accomplice
|
||||||
|
SELECT name FROM people
|
||||||
|
WHERE phone_number IN (
|
||||||
|
SELECT receiver FROM people
|
||||||
|
JOIN bank_accounts ON people.id = bank_accounts.person_id
|
||||||
|
JOIN phone_calls ON people.phone_number = phone_calls.caller
|
||||||
|
WHERE license_plate IN ( -- Licence plates of leaving customers from within 10 minutes of theft (10:15am)
|
||||||
|
SELECT license_plate FROM bakery_security_logs
|
||||||
|
WHERE year = 2023 AND month = 7 AND day = 28 AND hour = 10 AND minute BETWEEN 5 AND 25
|
||||||
|
AND activity = 'exit'
|
||||||
|
)
|
||||||
|
AND passport_number IN ( -- Ppassport numbers of people on earliest flight out of Fiftyville the next day
|
||||||
|
SELECT passport_number FROM passengers
|
||||||
|
WHERE flight_id IN (
|
||||||
|
SELECT flights.id FROM flights
|
||||||
|
JOIN airports ON flights.origin_airport_id = airports.id
|
||||||
|
WHERE year = 2023 AND month = 7 AND day = 29
|
||||||
|
AND city = 'Fiftyville'
|
||||||
|
ORDER BY hour LIMIT 1
|
||||||
|
)
|
||||||
|
AND phone_number IN ( -- Caller numbers with duration under a minute
|
||||||
|
SELECT caller FROM phone_calls
|
||||||
|
WHERE year = 2023 AND month = 7 AND day = 28
|
||||||
|
AND duration < 60
|
||||||
|
)
|
||||||
|
AND account_number IN ( -- Account numbers of withdrawals from Leggett Street ATM on the day of theft
|
||||||
|
SELECT account_number FROM atm_transactions
|
||||||
|
WHERE year = 2023 AND month = 7 AND day = 28
|
||||||
|
AND atm_location = 'Leggett Street' AND transaction_type = 'withdraw'
|
||||||
|
)
|
||||||
|
AND day = 28 AND duration < 60
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
-- Robin
|
||||||
Loading…
Reference in New Issue