RustのRustlingsを一緒にやってもらう

ててて8ヶ月前
ChatGPT

RustにはRustlingsというクイズ形式でコードを直していく学習プログラムが用意されています。 https://github.com/rust-lang/rustlings/ 実行環境を起動するのが面倒なので、ChatGPT4さんと一緒に解くことにしました。Rustlingsと同じく、次の問題やヒント…ほぼ解答もくれそう。

INPUT

Rustlingsの問題のリストをだしてください。また全部で何問あるか教えてください。

OUTPUT

私は現在のrustlingsリポジトリにリアルタイムでアクセスすることはできませんが、2021年9月時点の情報に基づいて、いくつかの主要なセクションとその中の問題について説明します。ただし、リストは最新のものではないかもしれませんので、GitHubリポジトリをチェックして最新のリストを確認してください。 rustlingsは以下のセクションに分かれています: Variables (変数) Functions (関数) Primitive Types (プリミティブ型) Control Flow (制御フロー) Structs (構造体) Enums (列挙型) Modules (モジュール) Collections (コレクション) Error Handling (エラーハンドリング) Concurrency (並行性) Tests (テスト) Standard Library Traits (標準ライブラリトレイト) Option (オプション) Result (結果) Asynchronous Programming (非同期プログラミング) これらのセクションにはそれぞれ複数の問題が含まれています。2021年9月時点での問題数は約70問ですが、最新の問題数はリポジトリを確認してください。また、rustlingsは頻繁にアップデートされるため、新しい問題やセクションが追加されることがあります。 最新の問題リストと正確な問題数を確認するには、公式rustlings GitHubリポジトリ(https://github.com/rust-lang/rustlings)を参照してください。

INPUT

プリミティブ型の問題をだしてください。

OUTPUT

2021年9月時点の情報に基づくと、RustlingsのPrimitive Typesセクションには以下の問題が含まれています。ただし、最新の問題リストについては公式のGitHubリポジトリをチェックしてください。 Scalars (スカラー) 整数型、浮動小数点型、ブール型、文字型などの基本的なプリミティブ型について学習します。 例:整数リテラル(i32、u32、i64、u64など)、浮動小数点リテラル(f32、f64)、文字リテラル(char) Compound Types (複合型) タプルと配列を扱います。これらは複数の値を1つの型で表すことができるプリミティブ型です。 例:タプルの定義とアクセス、配列の定義とアクセス、タプルと配列のサイズ これらの問題は、Rust言語の基本的なプリミティブ型に慣れることを目的としています。しかし、最新の問題リストについては、公式rustlings GitHubリポジトリ(https://github.com/rust-lang/rustlings)を参照してください。

INPUT

トレーニングしたいので、複合型の問題を一つ選んでだしてください。

OUTPUT

もちろん、複合型に関する問題を1つ提供します。この問題では、タプルと配列を使用してみましょう。 問題: 次の要件を満たすRustプログラムを作成してください。 タプルを作成し、名前、年齢、身長(メートル単位)の3つの要素を含めます。例えば、("Alice", 30, 1.65)。 タプルから名前、年齢、身長をそれぞれ別々の変数に格納します。 3人

INPUT

ヒントをくれませんか

OUTPUT

もちろんです。以下に、問題を解決するためのヒントを提供します。 タプルの作成: タプルは括弧を使って作成し、要素はカンマで区切ります。 let person = ("Alice", 30, 1.65); タプルから値を取り出す: タプルの要素にアクセスするには、ピリオドとインデックスを使います。 let name = person.0; let age = person.1; let height = person.2; 配列の作成: 配列は角括弧を使って作成し、要素はカンマで区切ります。型とサイズを明示的に指定することもできます。 let people: [(&str, i32, f64); 3] = [ ("Alice", 30, 1.65), ("Bob", 28, 1.75), ("Charlie", 22, 1.80), ]; 配列の反復処理: forループを使って配列を反復処理し、各要素にアクセスできます。 for person in people.iter() { println!("Name: {}, Age: {}", person.0, person.1); } これらのヒントを参考に、問題を解決するプログラムを作成してみてください。タプルと配列の基本操作を学び、Rustの基本概念を練習することができます。

INPUT

fn main(){ let person = ("Alice", 30, 1.65); let name = person.0; let age = person.1; let height = person.2; let people: [(&str, i32, f64); 3] = [ ("Alice", 30, 1.65), ("Bob", 28, 1.75), ("Charlie", 22, 1.80), ]; }

OUTPUT

ご提出いただいたコードは、問題の要件のほとんどを満たしています。ただし、配列を反復処理して各人物の名前と年齢を表示する部分がまだ実装されていません。以下に、その部分を追加した完全なコードを示します。 fn main() { let person = ("Alice", 30, 1.65); let name = person.0; let age = person.1; let height = person.2; let people: [(&str, i32, f64); 3] = [ ("Alice", 30, 1.65), ("Bob", 28, 1.75), ("Charlie", 22, 1.80), ]; // 配列を反復処理して各人物の名前と年齢を表示する for person in &people { println!("Name: {}, Age: {}", person.0, person.1); } } このコードでは、forループを使ってpeople配列を反復処理し、各要素(タプル)の名前(person.0)と年齢(person.1)を表示しています。&peopleを使って参照を渡すことで、配列の所有権を移動させずに反復処理を行っています。

INPUT

Rustlingsの中から出題してもらえませんか?

OUTPUT

もちろんです。ここにRustlingsの一部の問題を提供します。この問題は、RustlingsのPrimitive Typesセクションから、配列を扱う練習問題です。 問題: 以下のコードは、部分的に完成していますが、配列my_arrayの要素を取得する際にエラーが発生します。このコードを修正して、エラーが発生しないようにしてください。 fn main() { let my_array = [10, 20, 30, 40, 50]; // エラーが発生する部分 let index = 10; println!("The value at index {} is: {}", index, my_array[index]); } この問題は、配列のインデックスを扱う際のエラーに対処する方法を学ぶことが目的です。配列の範囲外のインデックスにアクセスすると、実行時にエラーが発生することに注意してください。

INPUT

fn main() { let my_array = [10, 20, 30, 40, 50]; // エラーが発生する部分 let index = 2; println!("The value at index {} is: {}", index, my_array[index]); }

OUTPUT

素晴らしいです!この修正後のコードでは、配列my_arrayの範囲内のインデックスにアクセスしています。indexの値を2に変更したことで、エラーが発生しなくなりました。このコードを実行すると、次の出力が得られます。 The value at index 2 is: 30 これで、範囲内のインデックスを使用して配列の要素にアクセスする方法を学びました。この知識は、Rustプログラミングで配列を扱う際に非常に重要です。
いいね数...
Tweetする

関連記事