Skip to content

Commit a414dfd

Browse files
committed
added day 15, removed wrong deps
1 parent ddf46a0 commit a414dfd

File tree

9 files changed

+207
-12
lines changed

9 files changed

+207
-12
lines changed

Cargo.lock

Lines changed: 4 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/day-15/closures/Cargo.toml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
[package]
2+
name = "day-15-closures"
3+
version = "0.0.0"
4+
edition = "2021"
5+
6+
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
7+
8+
[dependencies]

crates/day-15/closures/src/main.rs

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
fn main() {
2+
let closure = || {
3+
println!("Hi! I'm in a closure");
4+
};
5+
closure();
6+
7+
let double = |num: i64| num + num;
8+
let num = 4;
9+
println!("{} + {} = {}", num, num, double(num));
10+
11+
let name = "Rebecca";
12+
let closure = || {
13+
println!("Hi, {}.", name);
14+
};
15+
closure();
16+
17+
let mut counter = 0;
18+
19+
let mut closure = || {
20+
counter += 1;
21+
println!(
22+
"This closure has a counter. I've been run {} times.",
23+
counter
24+
);
25+
};
26+
closure();
27+
closure();
28+
closure();
29+
println!("The closure was called a total of {} times", counter);
30+
31+
let adder = |left: i32, right: i32| {
32+
println!("{} + {} is {}", left, right, left + right);
33+
left + right
34+
};
35+
adder(4, 5);
36+
37+
let name = "Dwayne".to_owned();
38+
let consuming_closure = || name.into_bytes();
39+
let bytes = consuming_closure();
40+
// let bytes = consuming_closure(); // ← compilation error
41+
42+
let plus_two = make_adder(2);
43+
plus_two(23);
44+
45+
let times_two = |i: i32| i * 2;
46+
let double_plus_two = compose(plus_two, times_two);
47+
println!("{} * 2 + 2 = {}", 10, double_plus_two(10));
48+
49+
let fn_ref = regular_function;
50+
fn_ref();
51+
52+
let square = DynamicBehavior::new(Box::new(|num: i64| num * num));
53+
println!("{} squared is {}", 5, square.run(5))
54+
}
55+
56+
fn regular_function() {
57+
println!("I'm a regular function");
58+
}
59+
60+
fn make_adder(left: i32) -> impl Fn(i32) -> i32 {
61+
move |right: i32| {
62+
println!("{} + {} is {}", left, right, left + right);
63+
left + right
64+
}
65+
}
66+
67+
fn compose<T>(f: impl Fn(T) -> T, g: impl Fn(T) -> T) -> impl Fn(T) -> T {
68+
move |i: T| f(g(i))
69+
}
70+
71+
struct DynamicBehavior<T> {
72+
closure: Box<dyn Fn(T) -> T>,
73+
}
74+
75+
impl<T> DynamicBehavior<T> {
76+
fn new(closure: Box<dyn Fn(T) -> T>) -> Self {
77+
Self { closure }
78+
}
79+
fn run(&self, arg: T) -> T {
80+
(self.closure)(arg)
81+
}
82+
}
Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
use std::{collections::HashMap, fs::read_to_string};
22

33
fn main() {
4-
let source = read_to_string("./README.md").unwrap();
5-
let mut files = HashMap::new();
6-
files.insert("README", source.clone());
7-
files.insert("README2", source);
4+
let source = read_to_string("./README.md").unwrap();
5+
let mut files = HashMap::new();
6+
files.insert("README", source.clone());
7+
files.insert("README2", source);
88

9-
let files_ref = &files;
10-
let files_ref2 = &files;
9+
let files_ref = &files;
10+
let files_ref2 = &files;
1111

12-
print_borrowed_map(files_ref);
13-
print_borrowed_map(files_ref2);
12+
print_borrowed_map(files_ref);
13+
print_borrowed_map(files_ref2);
1414
}
1515

1616
fn print_borrowed_map(map: &HashMap<&str, String>) {
17-
println!("{:?}", map)
17+
println!("{:?}", map)
1818
}

javascript/day-10/package.json

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
11
{
2-
"devDependencies": {
3-
"@types/node": "^16.11.12"
4-
}
2+
"devDependencies": {}
53
}

javascript/day-15/package-lock.json

Lines changed: 26 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

javascript/day-15/package.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"devDependencies": {
3+
"@types/node": "^16.11.12"
4+
}
5+
}

javascript/day-15/src/closures.ts

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
function main() {
2+
let closure = () => {
3+
console.log("Hi! I'm in a closure");
4+
};
5+
closure();
6+
7+
let double = (num: number) => num + num;
8+
let num = 4;
9+
console.log(`${num} + ${num} = ${double(num)}`);
10+
11+
let name = "Rebecca";
12+
closure = () => {
13+
console.log(`Hi, ${name}.`);
14+
};
15+
closure();
16+
17+
let counter = 0;
18+
closure = () => {
19+
counter += 1;
20+
console.log(`This closure has a counter. I've been run ${counter} times.`);
21+
};
22+
closure();
23+
closure();
24+
closure();
25+
console.log(`The closure was called a total of ${counter} times`);
26+
27+
let adder = (left: number, right: number) => {
28+
console.log(`${left} + ${right} is ${left + right}`);
29+
left + right;
30+
};
31+
adder(4, 5);
32+
33+
let plusTwo = makeAdder(2);
34+
plusTwo(23);
35+
36+
let timesTwo = (i: number) => i * 2;
37+
let doublePlusTwo = compose(plusTwo, timesTwo);
38+
console.log(`${10} * 2 + 2 = ${doublePlusTwo(10)}`);
39+
40+
let fnRef = regularFunction;
41+
fnRef();
42+
43+
let square = new DynamicBehavior((num: number) => num * num);
44+
console.log(`${5} squared is ${square.run(5)}`);
45+
}
46+
47+
function regularFunction() {
48+
console.log("I'm a regular function");
49+
}
50+
51+
function makeAdder(left: number): (left: number) => number {
52+
return (right: number) => {
53+
console.log(`${left} + ${right} is ${left + right}`);
54+
return left + right;
55+
};
56+
}
57+
58+
function compose<T>(f: (left: T) => T, g: (left: T) => T): (left: T) => T {
59+
return (right: T) => f(g(right));
60+
}
61+
62+
class DynamicBehavior<T> {
63+
closure: (num: T) => T;
64+
constructor(closure: (num: T) => T) {
65+
this.closure = closure;
66+
}
67+
run(arg: T): T {
68+
return this.closure(arg);
69+
}
70+
}
71+
72+
main();
File renamed without changes.

0 commit comments

Comments
 (0)