Data update
This commit is contained in:
parent
5150844a7d
commit
4bb20c9b71
7735 changed files with 38060 additions and 199180 deletions
|
|
@ -5,15 +5,17 @@ trait Arg {
|
|||
}
|
||||
|
||||
impl Arg for i32 {
|
||||
fn run(&self) -> i32 { *self }
|
||||
fn run(&self) -> i32 {
|
||||
*self
|
||||
}
|
||||
}
|
||||
|
||||
struct B<'a> {
|
||||
k: &'a Cell<i32>,
|
||||
x1: &'a Arg,
|
||||
x2: &'a Arg,
|
||||
x3: &'a Arg,
|
||||
x4: &'a Arg,
|
||||
x1: &'a dyn Arg,
|
||||
x2: &'a dyn Arg,
|
||||
x3: &'a dyn Arg,
|
||||
x4: &'a dyn Arg,
|
||||
}
|
||||
|
||||
impl<'a> Arg for B<'a> {
|
||||
|
|
@ -23,14 +25,18 @@ impl<'a> Arg for B<'a> {
|
|||
}
|
||||
}
|
||||
|
||||
fn a(k: i32, x1: &Arg, x2: &Arg, x3: &Arg, x4: &Arg, x5: &Arg) -> i32 {
|
||||
fn a(k: i32, x1: &dyn Arg, x2: &dyn Arg, x3: &dyn Arg, x4: &dyn Arg, x5: &dyn Arg) -> i32 {
|
||||
if k <= 0 {
|
||||
x4.run() + x5.run()
|
||||
} else {
|
||||
B{
|
||||
B {
|
||||
k: &Cell::new(k),
|
||||
x1, x2, x3, x4
|
||||
}.run()
|
||||
x1,
|
||||
x2,
|
||||
x3,
|
||||
x4,
|
||||
}
|
||||
.run()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,18 +1,27 @@
|
|||
use std::cell::Cell;
|
||||
|
||||
fn a(k: i32, x1: &Fn() -> i32, x2: &Fn() -> i32, x3: &Fn() -> i32, x4: &Fn() -> i32, x5: &Fn() -> i32) -> i32 {
|
||||
fn a(
|
||||
k: i32,
|
||||
x1: &dyn Fn() -> i32,
|
||||
x2: &dyn Fn() -> i32,
|
||||
x3: &dyn Fn() -> i32,
|
||||
x4: &dyn Fn() -> i32,
|
||||
x5: &dyn Fn() -> i32,
|
||||
) -> i32 {
|
||||
let k1 = Cell::new(k);
|
||||
struct B<'a> { f: &'a Fn(&B) -> i32 }
|
||||
struct B<'a> {
|
||||
f: &'a dyn Fn(&B) -> i32,
|
||||
}
|
||||
let b = B {
|
||||
f: &|b| {
|
||||
k1.set(k1.get() - 1);
|
||||
return a(k1.get(), &||(b.f)(b), x1, x2, x3, x4)
|
||||
}
|
||||
return a(k1.get(), &|| (b.f)(b), x1, x2, x3, x4);
|
||||
},
|
||||
};
|
||||
let b = ||(b.f)(&b);
|
||||
return if k <= 0 {x4() + x5()} else {b()}
|
||||
let b = || (b.f)(&b);
|
||||
return if k <= 0 { x4() + x5() } else { b() };
|
||||
}
|
||||
|
||||
pub fn main() {
|
||||
println!("{}", a(10, &||1, &||-1, &||-1, &||1, &||0));
|
||||
println!("{}", a(10, &|| 1, &|| -1, &|| -1, &|| 1, &|| 0));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,20 +3,28 @@ use std::cell::RefCell;
|
|||
use std::rc::Rc;
|
||||
use std::rc::Weak;
|
||||
|
||||
fn a(k: i32, x1: &Fn() -> i32, x2: &Fn() -> i32, x3: &Fn() -> i32, x4: &Fn() -> i32, x5: &Fn() -> i32) -> i32 {
|
||||
let weak_holder: Rc<RefCell<Weak<Fn() -> i32>>> = Rc::new(RefCell::new(Weak::<fn() -> i32>::new()));
|
||||
fn a(
|
||||
k: i32,
|
||||
x1: &dyn Fn() -> i32,
|
||||
x2: &dyn Fn() -> i32,
|
||||
x3: &dyn Fn() -> i32,
|
||||
x4: &dyn Fn() -> i32,
|
||||
x5: &dyn Fn() -> i32,
|
||||
) -> i32 {
|
||||
let weak_holder: Rc<RefCell<Weak<dyn Fn() -> i32>>> =
|
||||
Rc::new(RefCell::new(Weak::<fn() -> i32>::new()));
|
||||
let weak_holder2 = weak_holder.clone();
|
||||
let k_holder = Cell::new(k);
|
||||
let b: Rc<Fn() -> i32> = Rc::new(move || {
|
||||
let b: Rc<dyn Fn() -> i32> = Rc::new(move || {
|
||||
let b = weak_holder2.borrow().upgrade().unwrap();
|
||||
k_holder.set(k_holder.get() - 1);
|
||||
return a(k_holder.get(), &*b, x1, x2, x3, x4);
|
||||
});
|
||||
weak_holder.replace(Rc::downgrade(&b));
|
||||
|
||||
return if k <= 0 {x4() + x5()} else {b()}
|
||||
return if k <= 0 { x4() + x5() } else { b() };
|
||||
}
|
||||
|
||||
pub fn main() {
|
||||
println!("{}", a(10, &||1, &||-1, &||-1, &||1, &||0));
|
||||
println!("{}", a(10, &|| 1, &|| -1, &|| -1, &|| 1, &|| 0));
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue