"Mathe-Rätsel, die das Programmhirn mehr trainieren" _Q61 (Code: Ruby) -> Rust (& SQL)

Ich dachte, dass das Umschreiben von "Mathe-Rätseln, die das Gehirn des Programmierers mehr trainieren" mit Rust genau richtig sein könnte, um Unschärfe zu verhindern.

F61: Versetzt sortieren

Ruby

q61_2.rb


N = 20

z = Hash.new(0)
z[[0,0]] = 1
1.upto(N) do |n|
    1.upto(N) do |k|
        z[[n,k]] = z[[n, k - 1]] + z[[n - 1, n - k]]
    end
end
puts 2 * z[[N, N]]

Irgendwie unterscheidet sich im Code von Buch S.287 der Bereich der inneren Schleife zwischen Ruby und JavaScript ... Das richtige Ergebnis wird in Ruby erhalten, aber es kommt vor, dass es mit 0 initialisiert wird.

Rust

main.rs


fn main() {
    println!("{}", q61());
}

pub fn q61() -> i64 {
    let mut z = [[0i64; 21]; 21];
    z[0][0] = 1;
    for n in 1..=20 {
        for k in 1..=n {
            let un = n as usize;
            let uk = k as usize;
            z[un][uk] = z[un][uk - 1] + z[un - 1][un - uk];
        }
    }
    return z[20][20] * 2;
}

Da die Größe des Arrays nicht als Variable angegeben werden kann, ist es vorerst solide. Rust ist ziemlich dankbar, in Panik zu geraten, wenn etwas passiert. Wenn Sie das Rätsel lösen, können Sie sicher sein, dass es den Grenzwert erkennt.

SQL

Übrigens gibt es in mathematischen Rätseln viele Fragen, die die Frage "Wie viele Muster gibt es?" Mathematisch beantworten. In der tatsächlichen Arbeit gibt es viele Situationen, in denen "Nein, ich möchte das erweiterte Muster selbst", selbst wenn die Berechnung der Musternummer zur Schätzung verwendet werden kann. Der Hauptgrund ist "Ich möchte Testdaten erstellen". Ich habe die SQL-Version geschrieben, da die "alternative Reihenfolge" in dieser Frage zum Erstellen von Testdaten hilfreich sein kann.

q61.sql


SELECT
    *
FROM
    (SELECT 1 AS v UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4) AS c1,
    (SELECT 1 AS v UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4) AS c2,
    (SELECT 1 AS v UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4) AS c3,
    (SELECT 1 AS v UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4) AS c4
WHERE
    (c1.v <> c2.v AND c1.v <> c3.v AND c1.v <> c4.v) AND
    (c2.v <> c3.v AND c2.v <> c4.v) AND
    (c3.v <> c4.v)
    AND (
    (c1.v < c2.v AND c2.v > c3.v AND c3.v < c4.v) OR
    (c1.v > c2.v AND c2.v < c3.v AND c3.v > c4.v))

Wenn es ausgeführt wird, sieht es so aus.

+---+---+---+---+
| v | v | v | v |
+---+---+---+---+
| 4 | 2 | 3 | 1 |
| 3 | 2 | 4 | 1 |
| 3 | 4 | 1 | 2 |
| 4 | 1 | 3 | 2 |
| 3 | 1 | 4 | 2 |
| 2 | 4 | 1 | 3 |
| 1 | 4 | 2 | 3 |
| 2 | 1 | 4 | 3 |
| 2 | 3 | 1 | 4 |
| 1 | 3 | 2 | 4 |
+---+---+---+---+
10 rows in set (0.00 sec)

Da SQL in der Mengenlehre berücksichtigt werden kann, können Daten mit der äußerst einfachen Idee extrahiert werden, "Elemente aus einer möglichen Menge zu extrahieren, die den Bedingungen entsprechen".

Recommended Posts

"Mathe-Rätsel, die das Programmhirn mehr trainieren" _Q61 (Code: Ruby) -> Rust (& SQL)
"Mathe-Rätsel, die das Programmhirn mehr trainieren" _Q39 (Code: Ruby) -> Rust
"Mathe-Rätsel, die das Programmhirn mehr trainieren" _Q02 (Code: Ruby) -> Rust
"Mathe-Rätsel, die das Programmhirn mehr trainieren" _Q41 (Code: Ruby) -> Rust
"Mathe-Rätsel, die das Programmhirn mehr trainieren" _Q18 (Code: Ruby) -> Rust
"Mathe-Rätsel, die das Programmhirn mehr trainieren" _Q01 (Code: Ruby) -> Rust
"Mathe-Rätsel, die das Programmhirn mehr trainieren" _pp.018-020 (Code: Ruby) -> Rust
"Mathe-Puzzle, um das Programmhirn mehr zu trainieren" _Q40 (Code: Ruby) -> Rost unvollendet
"Mathe-Rätsel, die das Programmhirn mehr trainieren" _Q02 (Code: Ruby) -> Rust
"Mathe-Rätsel, die das Programmhirn mehr trainieren" _Q17 (Code: Ruby) -> Rust
"Mathe-Rätsel, die das Programmhirn mehr trainieren" _Q01 (Code: Ruby) -> Rust
"Mathe-Rätsel, die das Programmhirn mehr trainieren" _pp.018-020 (Code: Ruby) -> Rust
"Mathe-Rätsel, die das Programmhirn mehr trainieren" _Q61 (Code: Ruby) -> Rust (& SQL)
"Mathe-Rätsel, die das Programmhirn mehr trainieren" _Q41 (Code: Ruby) -> Rust
"Mathe-Rätsel, die das Programmhirn mehr trainieren" _Q18 (Code: Ruby) -> Rust
"Mathe-Puzzle, um das Programmhirn mehr zu trainieren" _Q40 (Code: Ruby) -> Rost unvollendet
Ein Versuch, "Mathe-Rätsel, die das Rust-Gehirn mehr trainieren".
Die Sprachen, die Rust beeinflusst haben