RosettaCodeData/Task/Lah-numbers/Refal/lah-numbers.refal
2025-02-27 18:35:13 -05:00

60 lines
1.1 KiB
Text

$ENTRY Go {
= <Each (Row) <Iota 0 12>>
<Prout>
<Prout 'Maximum value for lah(100,k):'>
<Prout <Symb <FindMax>>>;
};
Fac {
0 = 1;
e.N = <Mul (e.N) <Fac <Sub (e.N) 1>>>;
};
Lah {
(e.N) e.N = 1;
(0) e.K = 0;
(e.N) 0 = 0;
(e.N) 1 = <Fac e.N>;
(e.N) e.K,
<Mul (<Fac e.N>) <Fac <Sub (e.N) 1>>>: e.1,
<Mul (<Fac e.K>) <Fac <Sub (e.K) 1>>>: e.2,
<Fac <Sub (e.N) e.K>>: e.3 =
<Div (<Div (e.1) e.2>) e.3>;
};
FindMax {
= <FindMax (0) 1>;
(e.M) 101 = e.M;
(e.M) s.I, <Lah (100) s.I>: e.C =
<FindMax (<Max (e.M) e.C>) <Add 1 s.I>>;
};
Max {
(e.1) e.2, <Compare (e.1) e.2>: {
'+' = e.1;
s.C = e.2;
};
};
Rpt {
0 s.C = ;
s.N s.C = s.C <Rpt <Sub s.N 1> s.C>;
};
Fmt {
s.W e.N, <Last s.W <Rpt s.W ' '> <Symb e.N>>: (e.1) e.2 = e.2;
};
Row {
s.N = <Prout <Each (Fmt 11) <Each (Lah (s.N)) <Iota 0 s.N>>>>;
};
Iota {
s.E s.E = s.E;
s.S s.E = s.S <Iota <Add 1 s.S> s.E>;
};
Each {
(e.F) = ;
(e.F) t.X e.Xs = <Mu e.F t.X> <Each (e.F) e.Xs>;
};