mirror of
https://codeberg.org/ProgramSnail/tree-sitter-lang.git
synced 2025-12-06 06:38:51 +00:00
473 lines
14 KiB
Text
473 lines
14 KiB
Text
================================================================================
|
|
EdigitsDraft
|
|
================================================================================
|
|
|
|
:: os;
|
|
:: std : BigInt;
|
|
:: math;
|
|
|
|
exec.main = {
|
|
%n := (?? os.args.size > 1 => (<> os.args[1]).scan !!=> 27);
|
|
%k := binary_search 0;
|
|
%p & %q := sum_terms 0 (k - 1);
|
|
p += q;
|
|
$a := (std.BigInt.of 10).pow (n - 1);
|
|
%answer := p * a /. q;
|
|
%s := answer.to_string;
|
|
@ %i : (@ %j : 0..(n / 10 +. 1) => j * 10) => {
|
|
?? i + 10 <=. n =>
|
|
print (s.subseg i (i + 10) ++ "\t:" ++. (i + 10).to_string)
|
|
!!=>
|
|
print (s.subseg i n
|
|
++ (@ _ : 0..(10 - math.mod n 10) => ''\s'')
|
|
++ "\t:"
|
|
++ n.to_string);
|
|
};
|
|
}
|
|
|
|
sum_terms 'a 'b : Int Int -> std.BigInt -> std.BigInt = {
|
|
?? 'b ==. 'a + 1 => return std.BigInt.of 1 & std.BigInt.of 'b;
|
|
|
|
%mid := 'a + 'b /. 2;
|
|
%p_left & %q_left := sum_terms 'a mid;
|
|
%p_right & %q_right := sum_terms mid 'b;
|
|
|
|
return p_left * q_right +. p_right &.. q_left * q_right;
|
|
}
|
|
|
|
binary_search 'n : Int -> Int = {
|
|
%a := 0;
|
|
%b := 1;
|
|
@ not (test_k 'n b) => {
|
|
a = b;
|
|
b *= 2;
|
|
};
|
|
@ b - a >. 1 => {
|
|
%m := a + b /. 2;
|
|
?? test_k 'n m => b = m !!=> a = m;
|
|
};
|
|
return b;
|
|
}
|
|
|
|
|
|
test_k 'n 'k : Int Int -> Bool = {
|
|
?? k < 0 => return false;
|
|
|
|
%ln_k_factorial := k * (math.log k - 1) +. 0.5 * math.log math.tau;
|
|
%log_10_k_factorial := ln_k_factorial / math.ln10;
|
|
|
|
return log_10_k_factorial >=. n + 10;
|
|
}
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(source_file
|
|
(import
|
|
(simple_name_identifier))
|
|
(import
|
|
(simple_name_identifier)
|
|
(simple_type_identifier))
|
|
(import
|
|
(simple_name_identifier))
|
|
(function_definition
|
|
(simple_name_identifier)
|
|
(block
|
|
(match
|
|
(name_definition
|
|
(simple_name_identifier))
|
|
(case
|
|
(condition
|
|
(operator_expression
|
|
(name_expression
|
|
(simple_name_identifier))
|
|
(operator)
|
|
(number_literal))
|
|
(name_expression
|
|
(reference_expression
|
|
(array_access
|
|
(simple_name_identifier)
|
|
(number_literal)))
|
|
(simple_name_identifier))
|
|
(number_literal))))
|
|
(match
|
|
(name_definition
|
|
(simple_name_identifier))
|
|
(case
|
|
(name_expression
|
|
(simple_name_identifier)
|
|
(number_literal))))
|
|
(match
|
|
(operator_expression
|
|
(name_definition
|
|
(simple_name_identifier))
|
|
(operator)
|
|
(name_definition
|
|
(simple_name_identifier)))
|
|
(case
|
|
(name_expression
|
|
(simple_name_identifier)
|
|
(number_literal)
|
|
(operator_expression
|
|
(name_expression
|
|
(simple_name_identifier))
|
|
(operator)
|
|
(number_literal)))))
|
|
(operator_expression
|
|
(name_expression
|
|
(simple_name_identifier))
|
|
(operator)
|
|
(name_expression
|
|
(simple_name_identifier)))
|
|
(match
|
|
(name_definition
|
|
(simple_name_identifier))
|
|
(case
|
|
(name_expression
|
|
(name_expression
|
|
(type
|
|
(simple_type_identifier))
|
|
(simple_name_identifier)
|
|
(number_literal))
|
|
(simple_name_identifier)
|
|
(operator_expression
|
|
(name_expression
|
|
(simple_name_identifier))
|
|
(operator)
|
|
(number_literal)))))
|
|
(match
|
|
(name_definition
|
|
(simple_name_identifier))
|
|
(case
|
|
(operator_expression
|
|
(operator_expression
|
|
(name_expression
|
|
(simple_name_identifier))
|
|
(operator)
|
|
(name_expression
|
|
(simple_name_identifier)))
|
|
(operator_tail1)
|
|
(name_expression
|
|
(simple_name_identifier)))))
|
|
(match
|
|
(name_definition
|
|
(simple_name_identifier))
|
|
(case
|
|
(name_expression
|
|
(simple_name_identifier))))
|
|
(loop
|
|
(name_definition
|
|
(simple_name_identifier))
|
|
(loop
|
|
(name_definition
|
|
(simple_name_identifier))
|
|
(operator_expression
|
|
(number_literal)
|
|
(operator)
|
|
(operator_expression
|
|
(operator_expression
|
|
(name_expression
|
|
(simple_name_identifier))
|
|
(operator)
|
|
(number_literal))
|
|
(operator_tail1)
|
|
(number_literal)))
|
|
(operator_expression
|
|
(name_expression
|
|
(simple_name_identifier))
|
|
(operator)
|
|
(number_literal)))
|
|
(block
|
|
(condition
|
|
(operator_expression
|
|
(operator_expression
|
|
(name_expression
|
|
(simple_name_identifier))
|
|
(operator)
|
|
(number_literal))
|
|
(operator_tail1)
|
|
(name_expression
|
|
(simple_name_identifier)))
|
|
(name_expression
|
|
(simple_name_identifier)
|
|
(operator_expression
|
|
(operator_expression
|
|
(name_expression
|
|
(simple_name_identifier)
|
|
(simple_name_identifier)
|
|
(operator_expression
|
|
(name_expression
|
|
(simple_name_identifier))
|
|
(operator)
|
|
(number_literal)))
|
|
(operator)
|
|
(string_literal))
|
|
(operator_tail1)
|
|
(name_expression
|
|
(operator_expression
|
|
(name_expression
|
|
(simple_name_identifier))
|
|
(operator)
|
|
(number_literal))
|
|
(simple_name_identifier))))
|
|
(name_expression
|
|
(simple_name_identifier)
|
|
(operator_expression
|
|
(operator_expression
|
|
(operator_expression
|
|
(name_expression
|
|
(simple_name_identifier)
|
|
(simple_name_identifier)
|
|
(simple_name_identifier))
|
|
(operator)
|
|
(loop
|
|
(placeholder)
|
|
(operator_expression
|
|
(number_literal)
|
|
(operator)
|
|
(operator_expression
|
|
(number_literal)
|
|
(operator)
|
|
(name_expression
|
|
(simple_name_identifier)
|
|
(simple_name_identifier)
|
|
(number_literal))))
|
|
(char_literal)))
|
|
(operator)
|
|
(string_literal))
|
|
(operator)
|
|
(name_expression
|
|
(simple_name_identifier)))))))))
|
|
(function_definition
|
|
(simple_name_identifier)
|
|
(argument_name_identifier)
|
|
(argument_name_identifier)
|
|
(type
|
|
(simple_type_identifier))
|
|
(type
|
|
(simple_type_identifier))
|
|
(type
|
|
(simple_type_identifier))
|
|
(type
|
|
(simple_type_identifier))
|
|
(block
|
|
(condition
|
|
(operator_expression
|
|
(name_expression
|
|
(argument_name_identifier))
|
|
(operator_tail1)
|
|
(operator_expression
|
|
(name_expression
|
|
(argument_name_identifier))
|
|
(operator)
|
|
(number_literal)))
|
|
(return
|
|
(operator_expression
|
|
(name_expression
|
|
(type
|
|
(simple_type_identifier))
|
|
(simple_name_identifier)
|
|
(number_literal))
|
|
(operator)
|
|
(name_expression
|
|
(type
|
|
(simple_type_identifier))
|
|
(simple_name_identifier)
|
|
(argument_name_identifier)))))
|
|
(match
|
|
(name_definition
|
|
(simple_name_identifier))
|
|
(case
|
|
(operator_expression
|
|
(operator_expression
|
|
(name_expression
|
|
(argument_name_identifier))
|
|
(operator)
|
|
(name_expression
|
|
(argument_name_identifier)))
|
|
(operator_tail1)
|
|
(number_literal))))
|
|
(match
|
|
(operator_expression
|
|
(name_definition
|
|
(simple_name_identifier))
|
|
(operator)
|
|
(name_definition
|
|
(simple_name_identifier)))
|
|
(case
|
|
(name_expression
|
|
(simple_name_identifier)
|
|
(argument_name_identifier)
|
|
(simple_name_identifier))))
|
|
(match
|
|
(operator_expression
|
|
(name_definition
|
|
(simple_name_identifier))
|
|
(operator)
|
|
(name_definition
|
|
(simple_name_identifier)))
|
|
(case
|
|
(name_expression
|
|
(simple_name_identifier)
|
|
(simple_name_identifier)
|
|
(argument_name_identifier))))
|
|
(return
|
|
(operator_expression
|
|
(operator_expression
|
|
(operator_expression
|
|
(name_expression
|
|
(simple_name_identifier))
|
|
(operator)
|
|
(name_expression
|
|
(simple_name_identifier)))
|
|
(operator_tail1)
|
|
(name_expression
|
|
(simple_name_identifier)))
|
|
(operator_tail2)
|
|
(operator_expression
|
|
(name_expression
|
|
(simple_name_identifier))
|
|
(operator)
|
|
(name_expression
|
|
(simple_name_identifier)))))))
|
|
(function_definition
|
|
(simple_name_identifier)
|
|
(argument_name_identifier)
|
|
(type
|
|
(simple_type_identifier))
|
|
(type
|
|
(simple_type_identifier))
|
|
(block
|
|
(match
|
|
(name_definition
|
|
(simple_name_identifier))
|
|
(case
|
|
(number_literal)))
|
|
(match
|
|
(name_definition
|
|
(simple_name_identifier))
|
|
(case
|
|
(number_literal)))
|
|
(loop
|
|
(name_expression
|
|
(simple_name_identifier)
|
|
(name_expression
|
|
(simple_name_identifier)
|
|
(argument_name_identifier)
|
|
(simple_name_identifier)))
|
|
(block
|
|
(operator_expression
|
|
(name_expression
|
|
(simple_name_identifier))
|
|
(operator)
|
|
(name_expression
|
|
(simple_name_identifier)))
|
|
(operator_expression
|
|
(name_expression
|
|
(simple_name_identifier))
|
|
(operator)
|
|
(number_literal))))
|
|
(loop
|
|
(operator_expression
|
|
(operator_expression
|
|
(name_expression
|
|
(simple_name_identifier))
|
|
(operator)
|
|
(name_expression
|
|
(simple_name_identifier)))
|
|
(operator_tail1)
|
|
(number_literal))
|
|
(block
|
|
(match
|
|
(name_definition
|
|
(simple_name_identifier))
|
|
(case
|
|
(operator_expression
|
|
(operator_expression
|
|
(name_expression
|
|
(simple_name_identifier))
|
|
(operator)
|
|
(name_expression
|
|
(simple_name_identifier)))
|
|
(operator_tail1)
|
|
(number_literal))))
|
|
(condition
|
|
(name_expression
|
|
(simple_name_identifier)
|
|
(argument_name_identifier)
|
|
(simple_name_identifier))
|
|
(operator_expression
|
|
(name_expression
|
|
(simple_name_identifier))
|
|
(operator)
|
|
(name_expression
|
|
(simple_name_identifier)))
|
|
(operator_expression
|
|
(name_expression
|
|
(simple_name_identifier))
|
|
(operator)
|
|
(name_expression
|
|
(simple_name_identifier))))))
|
|
(return
|
|
(name_expression
|
|
(simple_name_identifier)))))
|
|
(function_definition
|
|
(simple_name_identifier)
|
|
(argument_name_identifier)
|
|
(argument_name_identifier)
|
|
(type
|
|
(simple_type_identifier))
|
|
(type
|
|
(simple_type_identifier))
|
|
(type
|
|
(simple_type_identifier))
|
|
(block
|
|
(condition
|
|
(operator_expression
|
|
(name_expression
|
|
(simple_name_identifier))
|
|
(operator)
|
|
(number_literal))
|
|
(return
|
|
(bool_literal)))
|
|
(match
|
|
(name_definition
|
|
(simple_name_identifier))
|
|
(case
|
|
(operator_expression
|
|
(operator_expression
|
|
(name_expression
|
|
(simple_name_identifier))
|
|
(operator)
|
|
(operator_expression
|
|
(name_expression
|
|
(simple_name_identifier)
|
|
(simple_name_identifier))
|
|
(operator)
|
|
(number_literal)))
|
|
(operator_tail1)
|
|
(operator_expression
|
|
(float_number_literal)
|
|
(operator)
|
|
(name_expression
|
|
(simple_name_identifier)
|
|
(simple_name_identifier))))))
|
|
(match
|
|
(name_definition
|
|
(simple_name_identifier))
|
|
(case
|
|
(operator_expression
|
|
(name_expression
|
|
(simple_name_identifier))
|
|
(operator)
|
|
(name_expression
|
|
(simple_name_identifier)))))
|
|
(return
|
|
(operator_expression
|
|
(name_expression
|
|
(simple_name_identifier))
|
|
(operator_tail1)
|
|
(operator_expression
|
|
(name_expression
|
|
(simple_name_identifier))
|
|
(operator)
|
|
(number_literal)))))))
|