最終コード
CoddyのRustジャーニー「Logic & Flow」セクションの一部 — レッスン 19/66。
チャレンジ
簡単4つの入力(1つ目はカンマ区切りの初期タスクリスト、2つ目は追加する新しいタスク、3つ目は表示するタスク番号(1から始まるインデックス)、4つ目は削除するタスク番号(1から始まるインデックス))を受け取り、ToDoリストのワークフローを完成させます。これらすべての操作を処理し、最終的な状態を表示するToDoリストマネージャーを作成してください。
要件:
- カンマ区切りのタスク説明(例:
Buy groceries,Call dentist,Finish homework)を含む最初の入力を読み込みます。 - 文字列をカンマで分割し、これらの初期タスクを含む可変(mutable)なベクタを作成します。
- 2番目の入力を読み込み、
.push()を使用してこの新しいタスクをベクタに追加します。 - 3番目の入力を読み込み、整数(表示する1から始まるタスク番号)に変換します。
- 4番目の入力を読み込み、整数(削除する1から始まるタスク番号)に変換します。
- 1から始まるインデックスを0から始まるインデックスに変換し、
.remove()を使用して指定されたタスクを削除します。 Total tasks: Xと出力します(Xは最終的なタスク数)。Viewing task: Yと出力します(Yは表示を要求されたタスク番号)。- 最終的なタスクリストを反復処理し、各タスクをその番号(1から始まる)とともに出力します。
- 表示番号と一致するタスク(削除調整後)については、
[X] [task description] (selected)と出力します。 - それ以外のすべてのタスクについては、
[X] [task description]と出力します。
入力:
- 1行目: カンマ区切りのタスク説明(例:
Buy groceries,Call dentist,Finish homework) - 2行目: 追加する新しいタスク(例:
Study for exam) - 3行目: 表示するタスク番号を表す整数(1から始まるインデックス)
- 4行目: 削除するタスク番号を表す整数(1から始まるインデックス)
出力:
- 1行目:
Total tasks: X(Xは最終的なタスク数) - 2行目:
Viewing task: Y(Yは要求された表示番号) - 続く行:
[X] [task description]の形式で各タスクとその番号を表示 - 選択されたタスク(表示番号と一致するもの)には、末尾に
(selected)を追加します。
自分で試してみよう
use std::io::{self, BufRead};
fn main() {
let stdin = io::stdin();
let mut lines = stdin.lock().lines();
// カンマ区切りの初期タスクを読み込む
let initial_tasks = lines.next().unwrap().unwrap();
// 追加する新しいタスクを読み込む
let new_task = lines.next().unwrap().unwrap();
// 表示するタスク番号を読み込む(1から始まる番号)
let view_number: usize = lines.next().unwrap().unwrap().trim().parse().unwrap();
// 削除するタスク番号を読み込む(1から始まる番号)
let remove_number: usize = lines.next().unwrap().unwrap().trim().parse().unwrap();
// TODO: 以下にコードを記述してください
// 1. initial_tasksをカンマで分割し、可変ベクトルを作成する
// 2. new_taskをベクトルに追加する
// 3. remove_numberのタスクを削除する(0から始まるインデックスに変換すること)
// 4. 合計タスク数と表示対象のタスク情報を出力する
// 5. 最終的なリストを反復処理し、各タスクを出力する
}