Rust, определение типа вектора кортежей - PullRequest
0 голосов
/ 23 января 2019

Я слежу за следами ржавчины, вызванной эксизмом, и у меня возникла проблема (я очень, очень плохо знаком с ржавчиной)

Это функция для вычисления пифагорейских троек целого числа:

use std::collections::HashSet;
use rayon::prelude::*;

pub fn find(sum: u32) -> HashSet<[u32; 3]> {
    let a_b_plus_c: Vec<(u32; 2)> = (1_u32..(sum / 3_u32)).into_par_iter()
        .filter_map(|a| {
            let b_plus_c: u32 = sum - a;

            let whole_number_check: Option<u32> = (b_plus_c.pow(2) - a.pow(2)).checked_rem(b_plus_c * 2);

            match whole_number_check {
                Some(0) => Some((a, b_plus_c)),
                Some(_) => None,
                None => None,
            }
        }).collect::<Vec<(u32; 2)>>();

    a_b_plus_c.into_par_iter().filter_map(|a, b_plus_c| {
        let b: u32 = (b_plus_c.pow(2) - a.pow(2))/(b_plus_c * 2);
        let c: u32 = b_plus_c - b;

        match b {
            b if b > a => [a, b, c]
            _ => None,
        }}
        ).collect::<HashSet<[u32; 3]>>();

}

Вернее, было бы, если бы это работало ...

Текущий выпуск в строке:

let a_b_plus_c: Vec<(u32; 2)> = (1_u32..(sum / 3_u32)).into_par_iter()

Он говорит, что ожидал один из нескольких символов при разборе типа для a_b_plus_c, но нашел ;. Из всего, что я видел (не очень), это правильный способ определить вектор кортежей, каждый из которых имеет два элемента типа u32.

Как я уже сказал, это учебное упражнение для меня, поэтому, если кто-нибудь сможет мне помочь, я был бы благодарен за подробные и подробные ответы:)

Для чего это стоит, так как это может помочь вам прокомментировать мой код, это математика:

a + b + c = sum
a² + b² = c²
Rearrange for b:
b = ((b + c)² - a²) / (2(b + c))
So, iterate through a to get b+c, since (b+c) = sum - a
Then solve the above equation to get a, b+c, and b
Confirm that a < b
Then solve for c:
c = (b + c) - b

Затем он должен выплюнуть их все в HashSet массивов a,b,c

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...