summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/codes/kaprekar-def.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/codes/kaprekar-def.tex')
-rw-r--r--Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/codes/kaprekar-def.tex81
1 files changed, 81 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/codes/kaprekar-def.tex b/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/codes/kaprekar-def.tex
new file mode 100644
index 00000000000..097279d8fe9
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/codes/kaprekar-def.tex
@@ -0,0 +1,81 @@
+% Time-stamp: <2019-08-28 11:48:38 administrateur>
+% ReCréation : 2019-08-26T12:32:29+0200
+\ExplSyntaxOn
+\seq_new:N \kaprun_seq
+\seq_new:N \kaprekar_seq
+\int_new:N \l_tmpc_int
+
+
+\cs_new:Nn \KAP_int_to_seq:NN {
+ \int_set:Nn \l_tmpa_int { #1 }
+ \int_do_until:nNnn { \l_tmpa_int } = { 0 }
+ { \int_set:Nn \l_tmpb_int { \int_mod:nn { \l_tmpa_int } { 10 } }
+ \seq_put_left:NV #2 \l_tmpb_int
+ \int_set:Nn \l_tmpa_int
+ { \int_div_truncate:nn { \l_tmpa_int - \l_tmpb_int } { 10 } } } }
+
+\cs_new:Nn \KAP_seq_to_int:NN {
+ \seq_pop_right:NNT #1 \l_tmpa_tl
+ { \int_set:Nn #2 { \l_tmpa_tl }
+ \bool_do_until:nn { \seq_if_empty_p:N #1 }
+ { \seq_pop_right:NNT #1 \l_tmpa_tl
+ \int_set:Nn #2 { 10 * #2 + \l_tmpa_tl } } } }
+
+\cs_new:Nn \KAP_remplir_seq:Nn {
+ \int_while_do:nNnn { \seq_count:N #1 } < { #2 }
+ { \seq_put_left:Nn #1 { 0 } } }
+
+\cs_new:Nn \KAP_ranger_seq:N {
+ \seq_sort:Nn #1
+ { \int_compare:nNnTF { ##1 } > { ##2 }
+ { \sort_return_swapped: }
+ { \sort_return_same: } } }
+
+\cs_new:Nn \KAP_suivant:nNN {
+ \KAP_int_to_seq:NN #2 \kaprun_seq
+ \KAP_remplir_seq:Nn \kaprun_seq { #1 }
+ \KAP_ranger_seq:N \kaprun_seq
+
+ \seq_set_eq:NN \kaprdx_seq \kaprun_seq
+ \seq_reverse:N \kaprdx_seq
+
+ \KAP_seq_to_int:NN \kaprdx_seq \l_tmpa_int
+ \KAP_seq_to_int:NN \kaprun_seq \l_tmpb_int
+ \int_set:Nn #3 { \l_tmpb_int - \l_tmpa_int } }
+
+\cs_new:Nn \KAP_ecrire_tous_les_suivants:nn {
+ \group_begin:
+ \bool_set_true:N \l_tmpa_bool
+ \seq_clear:N \kaprekar_seq
+ \int_set:Nn \l_tmpc_int { #2 }
+ \seq_put_right:NV \kaprekar_seq \l_tmpc_int
+ \KAP_suivant:nNN {#1} \l_tmpc_int \l_tmpc_int
+ \seq_if_in:NVT \kaprekar_seq \l_tmpc_int {\bool_set_false:N \l_tmpa_bool}
+ \bool_while_do:nn { \l_tmpa_bool }
+ { \seq_put_right:NV \kaprekar_seq \l_tmpc_int
+ \KAP_suivant:nNN {#1} \l_tmpc_int \l_tmpc_int
+ \seq_if_in:NVT \kaprekar_seq \l_tmpc_int { \bool_set_false:N \l_tmpa_bool } }
+ % \seq_show:N \kaprekar_seq
+ % \seq_use:Nnnn \kaprekar_seq {~et~} {,~} {~et~}\par{}
+ \int_set:Nn \l_tmpa_int { \seq_count:N \kaprekar_seq }
+ \seq_map_inline:Nn \kaprekar_seq
+ { \( \np{##1} \)
+ \int_decr:N \l_tmpa_int
+ \int_case:nnF { \l_tmpa_int }
+ {
+ { 1 } {~et~}
+ { 0 } { }
+ }
+ {~;~}
+ }
+ \group_end: }
+
+\NewDocumentCommand{\Kaprekar}{ O{4} m }{
+ \KAP_ecrire_tous_les_suivants:nn { #1 } { #2 } }
+
+\ExplSyntaxOff
+%%% Local Variables:
+%%% coding: utf-8
+%%% mode: latex
+%%% TeX-master: "../dun19expl3"
+%%% End: