Skip to content

Exercise 4: Code Translation

Translate the following code snippets to Python using AI assistance:

CODE 1: (Rust -> Python)

fn main() {
    let f = |x: f64| x.powi(2) - x;
    let a = 0.0;
    let b = 1.0;
    let n = 1000;
    let w = (b - a) / n as f64;
    let mut t = 0.0;
    for i in 0..n {
        let x = a + i as f64 * w;
        t += f(x) * w;
    }
    println!("The result is: {}", t);
}

CODE 2: (Rust -> Python)

use std::collections::HashMap;

fn main() {
    let mut a: HashMap<&str, Vec<Vec<f64>>> = HashMap::new();

    a.insert("t1", vec![
        vec![1.0, 2.0, 3.0],
        vec![4.0, 5.0, 6.0],
        vec![7.0, 8.0, 9.0],
    ]);

    a.insert("t2", vec![
        vec![10.0, 11.0, 12.0],
        vec![13.0, 14.0, 15.0],
        vec![16.0, 17.0, 18.0],
    ]);

    a.insert("t3", vec![
        vec![19.0, 20.0, 21.0],
        vec![22.0, 23.0, 24.0],
        vec![25.0, 26.0, 27.0],
    ]);

    let mut b: HashMap<&str, HashMap<&str, f64>> = HashMap::new();

    for (&i, _) in &a {
        let mut tmp = HashMap::new();
        for (&j, _) in &a {
            let mut u = 0.0;
            for k in 0..a[i][0].len() {
                u += a[i][0][k] * a[j][1][k];
            }
            tmp.insert(j, u);
        }
        b.insert(i, tmp);
    }

    let mut c: HashMap<&str, HashMap<&str, f64>> = HashMap::new();

    for (&i, inner) in &b {
        let mut tmp = HashMap::new();

        let mut m = f64::NEG_INFINITY;
        for (_, &val) in inner {
            if val > m {
                m = val;
            }
        }

        let mut v = 0.0;
        for (_, &val) in inner {
            v += (val - m).exp();
        }

        for (&j, &val) in inner {
            tmp.insert(j, (val - m).exp() / v);
        }

        c.insert(i, tmp);
    }

    let mut d: HashMap<&str, Vec<f64>> = HashMap::new();

    for (&i, inner) in &c {
        let mut out = vec![0.0, 0.0, 0.0];

        for (&j, &w) in inner {
            for k in 0..a[j][2].len() {
                out[k] += w * a[j][2][k];
            }
        }

        d.insert(i, out);
    }

    println!("d =");
    for (k, v) in &d {
        println!("{} -> {:?}", k, v);
    }
}

CODE 3 (Bash -> Python)

#!/bin/bash
# Ask for the folder name
echo "Enter the folder name: "
read folder_name
# Check if the folder exists
if [ ! -d "$folder_name" ]; then
echo "Folder does not exist."
exit 1
fi
# Get the list of files in the folder
files=( "$folder_name"/* )
# Rename each file by prepending "draft" to the file name
for file in "${files[@]}"; do
new_file_name="draft_$(basename "$file")"
mv "$file" "$new_file_name"
done
echo "Files renamed successfully."