Bird
Raised Fist0
Rustprogramming~20 mins

Compound data types in Rust - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
๐ŸŽ–๏ธ
Rust Compound Data Types Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
โ“ Predict Output
intermediate
2:00remaining
What is the output of this Rust tuple code?

Consider the following Rust code using tuples. What will it print?

Rust
fn main() {
    let tup: (i32, f64, u8) = (500, 6.4, 1);
    let (x, y, z) = tup;
    println!("{} {} {}", x, y, z);
}
A6.4 500 1
B500 6.4 1
C500 1 6.4
DError: cannot print tuple elements directly
Attempts:
2 left
๐Ÿ’ก Hint

Remember tuple elements keep their order and types.

โ“ Predict Output
intermediate
2:00remaining
What is the output of this Rust array code?

What will this Rust program print?

Rust
fn main() {
    let arr = [10, 20, 30, 40, 50];
    let slice = &arr[1..4];
    println!("{:?}", slice);
}
A[20, 30, 40]
B[10, 20, 30, 40]
C[30, 40, 50]
DError: cannot slice arrays this way
Attempts:
2 left
๐Ÿ’ก Hint

Remember Rust slices include the start index but exclude the end index.

๐Ÿ”ง Debug
advanced
2:00remaining
Why does this Rust struct code fail to compile?

Look at this Rust code defining and using a struct. Why does it fail to compile?

Rust
struct Point {
    x: i32,
    y: i32,
}

fn main() {
    let p = Point { x: 5 };
    println!("({}, {})", p.x, p.y);
}
AError because Point struct must derive Debug trait
BError because struct fields must be mutable
CError because println! macro syntax is wrong
DError because field 'y' is missing when creating Point
Attempts:
2 left
๐Ÿ’ก Hint

Check if all struct fields are initialized when creating an instance.

โ“ Predict Output
advanced
2:00remaining
What is the output of this Rust enum and match code?

What will this Rust program print?

Rust
enum Message {
    Quit,
    Move { x: i32, y: i32 },
    Write(String),
}

fn main() {
    let msg = Message::Move { x: 10, y: 20 };
    match msg {
        Message::Quit => println!("Quit message"),
        Message::Move { x, y } => println!("Move to ({}, {})", x, y),
        Message::Write(text) => println!("Write message: {}", text),
    }
}
AMove to (10, 20)
BQuit message
CWrite message: Move to (10, 20)
DError: match arms missing wildcard pattern
Attempts:
2 left
๐Ÿ’ก Hint

Look at which enum variant is created and matched.

๐Ÿง  Conceptual
expert
2:00remaining
How many elements does this nested tuple contain?

Consider this nested tuple in Rust:

let nested = ((1, 2), (3, (4, 5)));

How many individual integer elements does nested contain?

A4
B3
C5
D6
Attempts:
2 left
๐Ÿ’ก Hint

Count all integers inside all inner tuples.

Practice

(1/5)
1. Which of the following best describes a tuple in Rust?
easy
A. A named collection of fields with the same type.
B. A dynamically sized list of elements all of the same type.
C. A fixed-size collection of values of possibly different types grouped together.
D. A function that returns multiple values.

Solution

  1. Step 1: Understand tuple characteristics

    Tuples group multiple values of different types into one fixed-size compound value.
  2. Step 2: Compare with other options

    A dynamically sized list of elements all of the same type describes arrays/vecs. A named collection of fields describes structs. A function that returns multiple values is unrelated to tuples.
  3. Final Answer:

    A fixed-size collection of values of possibly different types grouped together. -> Option C
  4. Quick Check:

    Tuple = fixed-size, mixed types [OK]
Hint: Tuples hold fixed mixed types by position [OK]
Common Mistakes:
  • Confusing tuples with arrays (dynamic size, same type)
  • Thinking tuples have named fields like structs
  • Assuming tuples can change size after creation
2. Which of the following is the correct syntax to define a tuple with an integer and a string in Rust?
easy
A. let my_tuple = [42, "hello"];
B. let my_tuple = (42, "hello");
C. let my_tuple = {42, "hello"};
D. let my_tuple = <42, "hello">;

Solution

  1. Step 1: Recall tuple syntax

    Tuples use parentheses () with comma-separated values, e.g., (value1, value2).
  2. Step 2: Check each option

    let my_tuple = (42, "hello"); uses parentheses correctly. let my_tuple = [42, "hello"]; uses square brackets (arrays). let my_tuple = {42, "hello"}; uses braces (blocks or structs). let my_tuple = <42, "hello">; uses angle brackets which are invalid here.
  3. Final Answer:

    let my_tuple = (42, "hello"); -> Option B
  4. Quick Check:

    Tuple syntax uses () [OK]
Hint: Tuples use parentheses () not brackets [] or braces {} [OK]
Common Mistakes:
  • Using square brackets [] instead of parentheses ()
  • Using braces {} which define blocks or structs
  • Using angle brackets <> which are invalid here
3. What is the output of the following Rust code?
let person = ("Alice", 30);
println!("{} is {} years old", person.0, person.1);
medium
A. Alice is 30 years old
B. ("Alice", 30) is {} years old
C. person.0 is person.1 years old
D. Compilation error due to tuple access

Solution

  1. Step 1: Understand tuple indexing

    Tuple elements are accessed by position using dot and index, e.g., person.0 is "Alice", person.1 is 30.
  2. Step 2: Analyze the println! macro

    The placeholders {} are replaced by person.0 and person.1 values, printing "Alice is 30 years old".
  3. Final Answer:

    Alice is 30 years old -> Option A
  4. Quick Check:

    Tuple access person.0 and person.1 works [OK]
Hint: Access tuple elements by .0, .1, etc. [OK]
Common Mistakes:
  • Trying to access tuple elements by name instead of position
  • Confusing tuple with array indexing syntax
  • Expecting tuple to print as a whole automatically
4. Identify the error in this Rust struct definition and fix it:
struct Point {
    x: i32,
    y i32,
}
medium
A. Trailing comma after last field is not allowed.
B. Struct fields cannot be integers.
C. Struct names must be lowercase.
D. Missing colon after y in struct field declaration.

Solution

  1. Step 1: Check struct field syntax

    Each field must have a name, colon, and type. The field 'y i32' is missing a colon.
  2. Step 2: Validate other options

    Fields can be integers (i32). Struct names are PascalCase by convention. Trailing commas are allowed in Rust structs.
  3. Final Answer:

    Missing colon after y in struct field declaration. -> Option D
  4. Quick Check:

    Field syntax requires colon between name and type [OK]
Hint: Struct fields need name: type syntax [OK]
Common Mistakes:
  • Omitting colon between field name and type
  • Thinking trailing commas are errors
  • Using lowercase struct names (allowed but not idiomatic)
5. Given the struct and tuple below, which code correctly creates a struct instance from the tuple values?
struct Color {
    red: u8,
    green: u8,
    blue: u8,
}

let rgb = (255, 100, 50);
hard
A. let color = Color { red: rgb.0, green: rgb.1, blue: rgb.2 };
B. let color = Color(rgb.0, rgb.1, rgb.2);
C. let color = Color { 255, 100, 50 };
D. let color = (red: 255, green: 100, blue: 50);

Solution

  1. Step 1: Understand struct initialization

    Structs with named fields require field names and values in braces, e.g., Color { red: val, green: val, blue: val }.
  2. Step 2: Use tuple values correctly

    Tuple elements are accessed by position: rgb.0, rgb.1, rgb.2. let color = Color { red: rgb.0, green: rgb.1, blue: rgb.2 }; uses this correctly.
  3. Step 3: Check incorrect options

    let color = Color(rgb.0, rgb.1, rgb.2); uses tuple struct syntax, but Color is not a tuple struct. let color = Color { 255, 100, 50 }; omits field names. let color = (red: 255, green: 100, blue: 50); is invalid syntax.
  4. Final Answer:

    let color = Color { red: rgb.0, green: rgb.1, blue: rgb.2 }; -> Option A
  5. Quick Check:

    Struct init needs field names with values [OK]
Hint: Use field names when creating structs from tuples [OK]
Common Mistakes:
  • Trying to initialize struct without field names
  • Using tuple struct syntax for normal structs
  • Incorrect syntax for struct initialization
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard