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.
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