diff --git a/Cargo.toml b/Cargo.toml
index 3083a25..5a4c5c4 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,7 +1,7 @@
[package]
name = "hypergeometric-calc"
version = "0.1.0"
-edition = "2021"
+edition = "2024"
authors = ["Felipe Contreras Salinas "]
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
diff --git a/public/styles.scss b/public/styles.scss
index 0b30a70..7fd0794 100644
--- a/public/styles.scss
+++ b/public/styles.scss
@@ -21,11 +21,6 @@ body {
align-items: center;
}
-.buttons {
- display: flex;
- justify-content: space-evenly;
-}
-
h1,
h2,
h3,
@@ -37,16 +32,46 @@ h6 {
padding: 2rem;
}
-p,
-button {
+p {
margin: var(--size-6);
}
-body > picture,
-button {
- display: block;
- margin-left: auto;
- margin-right: auto;
- text-align: center;
- margin: 2rem;
+
+form {
+ display: table;
+ text-align: left;
+}
+
+form > p {
+ display: table-row;
+ margin-bottom: 0.5em;
+}
+
+form > p > label, form > p > input{
+ display: table-cell;
+}
+
+form input {
+ margin-left: 1em;
+ margin-bottom: 0.5em;
+ width: 4em;
+}
+
+form > div.results {
+ display: grid;
+ grid-template-columns: 1fr 6em 6em 1fr;
+ min-width: 20em;
+ max-width: 30em;
+ width: 30vw;
+ font-size: 1.2em;
+}
+
+form > div.results > span.left {
+ grid-column: 2 / 3;
+ text-align: right;
+ padding-right: 1em;
+}
+
+form > div.results > span.right {
+ grid-column: 3 / 4;
}
diff --git a/src/calc.rs b/src/calc.rs
index a63f667..9dc6038 100644
--- a/src/calc.rs
+++ b/src/calc.rs
@@ -27,20 +27,22 @@ pub fn hyper_geometric(
hyper_geometric_exactly(population_size, successes, sample_size, sample_successes);
let (less_than, less_or_equal, greater_or_equal, greater_than) =
if sample_successes < sample_size / 2 {
- let less_than: f64 = (0..sample_successes)
+ let less_than = (0..sample_successes)
.map(|i| hyper_geometric_exactly(population_size, successes, sample_size, i))
- .sum();
+ .sum::()
+ .abs();
let less_or_equal = less_than + exactly;
- let greater_or_equal = 1.0 - less_than;
- let greater_than = 1.0 - less_or_equal;
+ let greater_or_equal = (1.0 - less_than).abs();
+ let greater_than = (1.0 - less_or_equal).abs();
(less_than, less_or_equal, greater_or_equal, greater_than)
} else {
- let greater_than: f64 = (sample_successes + 1..=sample_size)
+ let greater_than = (sample_successes + 1..=sample_size)
.map(|i| hyper_geometric_exactly(population_size, successes, sample_size, i))
- .sum();
+ .sum::()
+ .abs();
let greater_or_equal = greater_than + exactly;
- let less_or_equal = 1.0 - greater_than;
- let less_than = 1.0 - greater_or_equal;
+ let less_or_equal = (1.0 - greater_than).abs();
+ let less_than = (1.0 - greater_or_equal).abs();
(less_than, less_or_equal, greater_or_equal, greater_than)
};
Some(HyperGeometricProb {
diff --git a/src/components/calculator.rs b/src/components/calculator.rs
index c47003a..cf62eab 100644
--- a/src/components/calculator.rs
+++ b/src/components/calculator.rs
@@ -1,6 +1,8 @@
//! Hypergeometric Distribution Calculator
use leptos::html::ElementChild;
-use leptos::prelude::{signal, Get, GlobalAttributes, OnTargetAttribute, PropAttribute, Set};
+use leptos::prelude::{
+ signal, ClassAttribute, Get, GlobalAttributes, OnTargetAttribute, PropAttribute, Set,
+};
use leptos::{component, view, IntoView};
use crate::calc::hyper_geometric;
@@ -74,36 +76,38 @@ pub fn Calculator() -> impl IntoView {
}
/>
-
- "P(X = "
- {sample_successes}
- "): "
- {move|| result().exactly}
-
-
- "P(X < "
- {sample_successes}
- "): "
- {move|| result().less_than}
-
-
- "P(X ≤ "
- {sample_successes}
- "): "
- {move|| result().less_or_equal}
-
-
- "P(X > "
- {sample_successes}
- "): "
- {move|| result().greater_than}
-
-
- "P(X ≥ "
- {sample_successes}
- "): "
- {move|| result().greater_or_equal}
-
+
+
+ "P(X = "
+ {sample_successes}
+ "): "
+
+ {move || result().exactly}
+
+ "P(X < "
+ {sample_successes}
+ "): "
+
+ {move || result().less_than}
+
+ "P(X ≤ "
+ {sample_successes}
+ "): "
+
+ {move || result().less_or_equal}
+
+ "P(X > "
+ {sample_successes}
+ "): "
+
+ {move || result().greater_than}
+
+ "P(X ≥ "
+ {sample_successes}
+ "): "
+
+ {move || result().greater_or_equal}
+
}
}