diff options
| author | Martial Simon <msimon_fr@hotmail.com> | 2025-09-15 01:08:27 +0200 |
|---|---|---|
| committer | Martial Simon <msimon_fr@hotmail.com> | 2025-09-15 01:08:27 +0200 |
| commit | c9b6b9a5ca082fe7c1b6f58d7713f785a9eb6a5c (patch) | |
| tree | 3e4f42f93c7ae89a364e4d51fff6e5cec4e55fa9 /graphs/cpp/lookup_table | |
add: graphs et rushs
Diffstat (limited to 'graphs/cpp/lookup_table')
| -rw-r--r-- | graphs/cpp/lookup_table/fibo.cc | 15 | ||||
| -rw-r--r-- | graphs/cpp/lookup_table/fibo.hh | 12 | ||||
| -rw-r--r-- | graphs/cpp/lookup_table/lookup_table.cc | 14 | ||||
| -rw-r--r-- | graphs/cpp/lookup_table/lookup_table.hh | 14 | ||||
| -rw-r--r-- | graphs/cpp/lookup_table/lookup_table_test.cc | 9 |
5 files changed, 64 insertions, 0 deletions
diff --git a/graphs/cpp/lookup_table/fibo.cc b/graphs/cpp/lookup_table/fibo.cc new file mode 100644 index 0000000..80b72b1 --- /dev/null +++ b/graphs/cpp/lookup_table/fibo.cc @@ -0,0 +1,15 @@ +#include "fibo.hh" + +long Fibo::operator()(int x) +{ + if (x <= 1) + return x; + + std::optional<long> opt_lookup_table = lookup_table_.get(x); + if (opt_lookup_table) + return *opt_lookup_table; + + auto res = (*this)(x - 1) + (*this)(x - 2); + lookup_table_.set(x, res); + return res; +} diff --git a/graphs/cpp/lookup_table/fibo.hh b/graphs/cpp/lookup_table/fibo.hh new file mode 100644 index 0000000..8f30851 --- /dev/null +++ b/graphs/cpp/lookup_table/fibo.hh @@ -0,0 +1,12 @@ +#pragma once + +#include "lookup_table.hh" + +class Fibo +{ +private: + LookupTable lookup_table_; + +public: + long operator()(int x); +}; diff --git a/graphs/cpp/lookup_table/lookup_table.cc b/graphs/cpp/lookup_table/lookup_table.cc new file mode 100644 index 0000000..0440e61 --- /dev/null +++ b/graphs/cpp/lookup_table/lookup_table.cc @@ -0,0 +1,14 @@ +// +// Created by martial.simon on 2/26/25. +// +#include "lookup_table.hh" +std::optional<long> LookupTable::get(int x) +{ + if (table_.count(x) == 0) + return std::nullopt; + return table_.at(x); +} +void LookupTable::set(int x, long value) +{ + table_.insert_or_assign(x, value); +}
\ No newline at end of file diff --git a/graphs/cpp/lookup_table/lookup_table.hh b/graphs/cpp/lookup_table/lookup_table.hh new file mode 100644 index 0000000..eb25d43 --- /dev/null +++ b/graphs/cpp/lookup_table/lookup_table.hh @@ -0,0 +1,14 @@ +#pragma once + +#include <optional> +#include <unordered_map> + +class LookupTable +{ +public: + std::optional<long> get(int x); + void set(int x, long value); + +private: + std::unordered_map<int, long> table_; +}; diff --git a/graphs/cpp/lookup_table/lookup_table_test.cc b/graphs/cpp/lookup_table/lookup_table_test.cc new file mode 100644 index 0000000..a17101e --- /dev/null +++ b/graphs/cpp/lookup_table/lookup_table_test.cc @@ -0,0 +1,9 @@ +#include <iostream> + +#include "fibo.hh" + +int main() +{ + Fibo fibo; + std::cout << fibo(42) << '\n'; +} |
