From 5b229b11cb63e77925c3d6af3ad8028e1ae7efc2 Mon Sep 17 00:00:00 2001 From: Jesper Louis Andersen Date: Tue, 25 Oct 2022 18:13:39 +0200 Subject: Provide a fib implementation for jlouis Most of the entry is pure build-scaffolding. The meat is in a single file, which is then referenced in people.json. --- entries/jlouis/README.md | 11 +++++++ entries/jlouis/bin/dune | 4 +++ entries/jlouis/bin/main.ml | 1 + entries/jlouis/dune-project | 3 ++ entries/jlouis/fib.opam | 0 entries/jlouis/lib/dune | 5 +++ entries/jlouis/lib/fib.ml | 72 +++++++++++++++++++++++++++++++++++++++++++ entries/jlouis/shell.nix | 11 +++++++ people.json | 74 +++++++++++++++++++++++++-------------------- 9 files changed, 149 insertions(+), 32 deletions(-) create mode 100644 entries/jlouis/README.md create mode 100644 entries/jlouis/bin/dune create mode 100644 entries/jlouis/bin/main.ml create mode 100644 entries/jlouis/dune-project create mode 100644 entries/jlouis/fib.opam create mode 100644 entries/jlouis/lib/dune create mode 100644 entries/jlouis/lib/fib.ml create mode 100644 entries/jlouis/shell.nix diff --git a/entries/jlouis/README.md b/entries/jlouis/README.md new file mode 100644 index 0000000..540f3cb --- /dev/null +++ b/entries/jlouis/README.md @@ -0,0 +1,11 @@ +# Fib like only I would write it + +## Instructions + +Everything is in `bin/fib.ml` and the rest is just scaffolding. + +Use nix to get an OCaml development environment. + +Use dune to build: `dune build` +Use dune to run: `dune exec fib` +Use dune to test: `dune test` diff --git a/entries/jlouis/bin/dune b/entries/jlouis/bin/dune new file mode 100644 index 0000000..6d6e5f9 --- /dev/null +++ b/entries/jlouis/bin/dune @@ -0,0 +1,4 @@ +(executable + (public_name fib) + (name main) + (libraries fib)) diff --git a/entries/jlouis/bin/main.ml b/entries/jlouis/bin/main.ml new file mode 100644 index 0000000..ca2c25e --- /dev/null +++ b/entries/jlouis/bin/main.ml @@ -0,0 +1 @@ +let _ = print_endline ("Mok'ra: " ^ string_of_int (Fib.Orc.iter 10)) \ No newline at end of file diff --git a/entries/jlouis/dune-project b/entries/jlouis/dune-project new file mode 100644 index 0000000..ff9f42f --- /dev/null +++ b/entries/jlouis/dune-project @@ -0,0 +1,3 @@ +(lang dune 3.4) + +(name fib) diff --git a/entries/jlouis/fib.opam b/entries/jlouis/fib.opam new file mode 100644 index 0000000..e69de29 diff --git a/entries/jlouis/lib/dune b/entries/jlouis/lib/dune new file mode 100644 index 0000000..865a6c5 --- /dev/null +++ b/entries/jlouis/lib/dune @@ -0,0 +1,5 @@ +(library + (name fib) + (inline_tests) + (preprocess + (pps ppx_inline_test))) diff --git a/entries/jlouis/lib/fib.ml b/entries/jlouis/lib/fib.ml new file mode 100644 index 0000000..9353c6a --- /dev/null +++ b/entries/jlouis/lib/fib.ml @@ -0,0 +1,72 @@ +module type BASIS = + sig + type t + val one : t + val out : t -> int + val to_string : t -> string + end + +module type MONOIDIC = + sig + include BASIS + val concat : t -> t -> t + end + +(* Single Tuple, Multiple Data *) +module STMD : MONOIDIC = + struct + type t = int * int * int * int + + let one = (1, 1, + 1, 0) + + let out (_, _, _, x) = x + + let to_string (a,b,c,d) = "(" ^ (string_of_int a) ^ ", " + ^ (string_of_int b) ^ ", " + ^ (string_of_int c) ^ ", " + ^ (string_of_int d) ^ ")" + + let concat (a11, a12, a21, a22) (b11, b12, b21, b22) = + let muladd a x b y = (a*x) + (b*y) in + (muladd a11 b11 a12 b21, + muladd a11 b12 a12 b22, + muladd a21 b11 a22 b21, + muladd a21 b12 a22 b22) + end + +module MkLinear(M : MONOIDIC) = + struct + let iter n = + let rec loop n acc = + match n with + | 0 -> acc + | k -> loop (k-1) (M.concat M.one acc) + in + M.out (loop n M.one) + + end + +module MkLog(M : MONOIDIC) = + struct + let iter n = + let rec loop y x k = + if k = 0 then y + else if k mod 2 = 0 then loop y (M.concat x x) (k/2) + else loop (M.concat y x) (M.concat x x) ((k-1)/2) + in + M.out (loop M.one M.one n) + end + +module Kobold = MkLinear(STMD) (* You no take candle! *) +module Orc = MkLog(STMD) (* Mok'ra *) + +let%test _ = Kobold.iter 10 = 55 +let%test _ = Kobold.iter 0 = 0 +let%test _ = Orc.iter 0 = 0 +let%test _ = Orc.iter 1 = 1 +let%test _ = Orc.iter 2 = 1 +let%test _ = Orc.iter 3 = 2 +let%test _ = Orc.iter 4 = 3 +let%test _ = Orc.iter 5 = 5 +let%test _ = Orc.iter 10 = 55 diff --git a/entries/jlouis/shell.nix b/entries/jlouis/shell.nix new file mode 100644 index 0000000..d5e27a3 --- /dev/null +++ b/entries/jlouis/shell.nix @@ -0,0 +1,11 @@ +let + pkgs = import {}; + # choose the ocaml version you want to use + ocamlPackages = pkgs.ocaml-ng.ocamlPackages_4_14; +in +pkgs.mkShell { + # build tools + nativeBuildInputs = with ocamlPackages; [ ocaml utop findlib dune_3 ocaml-lsp ppx_inline_test ]; + # dependencies + buildInputs = with ocamlPackages; [ ocamlgraph ]; +} diff --git a/people.json b/people.json index 6499425..5cd8ac2 100644 --- a/people.json +++ b/people.json @@ -56,6 +56,17 @@ } ] }, + { + "github": "jlouis", + "name": "Jesper Louis Andersen", + "title": "BSc, Copenhagen University", + "entries": [ + { + "name": "ocaml", + "link": "./entries/jlouis/lib/fib.ml" + } + ] + }, { "github": "funemy", "name": "Yanze Li", @@ -88,28 +99,27 @@ "name": "vintage-htdp", "link": "./entries/jyoo980/vintage-htdp/fib.rkt" } - ] }, - { - "github": "rctcwyvrn", - "name": "Lily Lin", - "title": "BSc, UBC", - "entries": [ - { - "name": "fractran", - "link": "./entries/lilylin/fractran/fractran.py" - }, - { - "name": "cursed-x86", - "link": "./entries/lilylin/cursed-x86/" - }, - { - "name": "mov", - "link": "./entries/lilylin/mov/mov.s" - } - ] - }, + { + "github": "rctcwyvrn", + "name": "Lily Lin", + "title": "BSc, UBC", + "entries": [ + { + "name": "fractran", + "link": "./entries/lilylin/fractran/fractran.py" + }, + { + "name": "cursed-x86", + "link": "./entries/lilylin/cursed-x86/" + }, + { + "name": "mov", + "link": "./entries/lilylin/mov/mov.s" + } + ] + }, { "github": "lizard-business", "name": "rhiannon morris", @@ -243,17 +253,17 @@ } ] }, - { - "github": "StuartLiv", - "name": "Stuart Livingstone", - "title": "BSc Student, UBC", - "entries": [ - { - "name": "ThetaFibN", - "link": "./entries/StuartLiv/ThetaFibN.java" - } - ] - }, + { + "github": "StuartLiv", + "name": "Stuart Livingstone", + "title": "BSc Student, UBC", + "entries": [ + { + "name": "ThetaFibN", + "link": "./entries/StuartLiv/ThetaFibN.java" + } + ] + }, { "github": "Tarcisio-Teixeira", "name": "TarcĂ­sio Teixeira", @@ -379,4 +389,4 @@ } ] } -] +] \ No newline at end of file -- cgit v1.2.3-70-g09d2 From 717ac7853efc82e2bb8402ed8408749279bccee9 Mon Sep 17 00:00:00 2001 From: James Yoo Date: Tue, 25 Oct 2022 11:06:36 -0700 Subject: Adding AspectJ version of Fibonacci --- entries/jyoo980/aspectj/Fibonacci.aj | 21 +++++++++++++++++++++ people.json | 4 ++++ 2 files changed, 25 insertions(+) create mode 100644 entries/jyoo980/aspectj/Fibonacci.aj diff --git a/entries/jyoo980/aspectj/Fibonacci.aj b/entries/jyoo980/aspectj/Fibonacci.aj new file mode 100644 index 0000000..39dfd8a --- /dev/null +++ b/entries/jyoo980/aspectj/Fibonacci.aj @@ -0,0 +1,21 @@ +public aspect Fibonnacci { + + pointcut mainInvocation(): call(* Main.*(*)); + + void before(): mainInvocation() { + // Nice + int n = 69; + System.out.println("The 69th fibonacci number is: " + fibonacci(n)); + } + + public int fibonacci(int n) { + int prev = 0; + int curr = 1; + for (int i = 0; i < n; i++) { + int tmp = prev; + prev = curr; + curr = prev + tmp; + } + return prev; + } +} diff --git a/people.json b/people.json index ce294cf..fe0e1a3 100644 --- a/people.json +++ b/people.json @@ -75,6 +75,10 @@ { "name": "vintage-htdp", "link": "./entries/jyoo980/vintage-htdp/fib.rkt" + }, + { + "name": "aspectj", + "link": "./entries/jyoo980/aspectj/Fibonacci.aj" } ] -- cgit v1.2.3-70-g09d2 From 562c485e2e7bd5330e1ccbeb9fd2dc87e3255f9f Mon Sep 17 00:00:00 2001 From: Jesper Louis Andersen Date: Tue, 25 Oct 2022 20:17:42 +0200 Subject: Fix the location of the main code in README --- entries/jlouis/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/entries/jlouis/README.md b/entries/jlouis/README.md index 540f3cb..2f14678 100644 --- a/entries/jlouis/README.md +++ b/entries/jlouis/README.md @@ -2,7 +2,7 @@ ## Instructions -Everything is in `bin/fib.ml` and the rest is just scaffolding. +Everything is in `lib/fib.ml` and the rest is just scaffolding. Use nix to get an OCaml development environment. -- cgit v1.2.3-70-g09d2 From 4d979b9ca2b5e5733f95edc65fd0adf7c51e2bb3 Mon Sep 17 00:00:00 2001 From: Tarcisio-Teixeira Date: Tue, 25 Oct 2022 15:00:37 -0700 Subject: Create differential.py --- entries/Tarcisio-Teixeira/differential.py | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 entries/Tarcisio-Teixeira/differential.py diff --git a/entries/Tarcisio-Teixeira/differential.py b/entries/Tarcisio-Teixeira/differential.py new file mode 100644 index 0000000..8abbdae --- /dev/null +++ b/entries/Tarcisio-Teixeira/differential.py @@ -0,0 +1,10 @@ +from sympy import * + +def fib(n): + x = symbols('x') + f = diff(1/(1-x-x**2),x,0) + fact = 1 + for i in range(1,n): + f = diff(f,x) + fact *= i + return f.subs(x,0)/fact -- cgit v1.2.3-70-g09d2 From 79f35588f9026e09a7adcef7388f0c613b6ac240 Mon Sep 17 00:00:00 2001 From: Tarcisio-Teixeira Date: Tue, 25 Oct 2022 15:08:03 -0700 Subject: Update people.json --- people.json | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/people.json b/people.json index f7edd70..e9faed7 100644 --- a/people.json +++ b/people.json @@ -280,7 +280,11 @@ { "name": "logn?", "link": "./entries/Tarcisio-Teixeira/fib.py" - } + }, + { + "name": "differential", + "link": "./entries/Tarcisio-Teixeira/differential.py" + }, ] }, { @@ -397,4 +401,4 @@ } ] } -] \ No newline at end of file +] -- cgit v1.2.3-70-g09d2 From 4687273b2f22bba837dac661a38bf50185e7d8d0 Mon Sep 17 00:00:00 2001 From: Tarcisio-Teixeira Date: Tue, 25 Oct 2022 15:10:50 -0700 Subject: Update people.json --- people.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/people.json b/people.json index e9faed7..a9be376 100644 --- a/people.json +++ b/people.json @@ -284,7 +284,7 @@ { "name": "differential", "link": "./entries/Tarcisio-Teixeira/differential.py" - }, + } ] }, { -- cgit v1.2.3-70-g09d2