From d0c70ad88b11f412c9d8c6735b74cce1b1ff015b Mon Sep 17 00:00:00 2001 From: Malte Voos Date: Sat, 20 Aug 2022 14:12:11 +0200 Subject: cleanup --- bonusaufgabe/src/main.rs | 103 ++++++++++++++++++++++------------------------- 1 file changed, 48 insertions(+), 55 deletions(-) (limited to 'bonusaufgabe/src/main.rs') diff --git a/bonusaufgabe/src/main.rs b/bonusaufgabe/src/main.rs index f5983bc..f3245d2 100644 --- a/bonusaufgabe/src/main.rs +++ b/bonusaufgabe/src/main.rs @@ -1,14 +1,21 @@ +#![feature(test)] + +extern crate test; + +#[cfg(test)] +mod benchmark; + use bitvec::prelude::*; use rand::seq::SliceRandom; use std::env; use std::fmt; use std::fs; use std::process; +use std::time; type Card = BitVec; // Typ, der eine zu lösende Aufgabe beschreibt. -#[derive(Clone)] // TODO remove struct Task { cards: Vec, num_pass_cards: usize, @@ -17,11 +24,18 @@ struct Task { // Die Lösung enthält die von Zara stammenden echten Karten. struct Solution { real_cards: Vec, + // Der Anschaulichkeit halber werden ein paar weitere Randinformationen + // mit ausgegeben. + num_cards: usize, + num_real_cards: usize, + bits_per_card: usize, + num_free_vars: usize, + p: usize, } // `solve_task` löst eine gegebene Aufgabe und beinhaltet den // eigentlichen Algorithmus. -fn solve_task(task: Task) -> Solution { +fn solve_task(task: &Task) -> Solution { // `num_real_cards` Karten im Stapel stammen von Zara Zackig, nämlich // die `num_pass_cards` Öffnungskarten plus eine Sicherungkarte. let num_real_cards = task.num_pass_cards + 1; @@ -76,28 +90,20 @@ fn lee_brickell_iteration(cards: &[Card], num_real_cards: usize) -> Option row, None => { // Wurde kein Pivotelement gefunden, gehört diese Spalte zu @@ -118,10 +124,9 @@ fn lee_brickell_iteration(cards: &[Card], num_real_cards: usize) -> Option Option Option Option( - rand::distributions::Standard, - ) - .take(bits_per_card) - .collect::() - }) - .collect::>(); - let mut new_cards = solution.real_cards; - new_cards.append(&mut new_rand_cards); - new_cards.shuffle(&mut rand::thread_rng()); - task.cards = new_cards - } + println!("{}", solution); + println!("Laufzeit ohne I/O: {:?}", elapsed); } // Liest eine Aufgabe im Format der Beispielaufgaben ein. @@ -386,7 +372,7 @@ impl TryFrom<&str> for Task { '1' => Some(true), _ => None, }) - .collect::() + .collect::() }) .collect::>(); @@ -404,6 +390,13 @@ impl TryFrom<&str> for Task { // Formatiert die Lösung zur Ausgabe. impl fmt::Display for Solution { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + writeln!( + f, + "Randinformationen (siehe Dokumentation):\nn = {}; w = {}; b = {}; k = {}; p = {}", + self.num_cards, self.num_real_cards, self.bits_per_card, self.num_free_vars, self.p + )?; + writeln!(f)?; + writeln!(f, "Echte Karten:")?; for card in self.real_cards.iter() { for bit in card.iter() { match *bit { -- cgit 1.4.1