summaryrefslogtreecommitdiff
path: root/info/expose-expl3-dunkerque-2019/codes
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2020-03-22 03:00:48 +0000
committerNorbert Preining <norbert@preining.info>2020-03-22 03:00:48 +0000
commit75d8dfa80524727ddb7d8ae217ed6463efba84cf (patch)
treea1a1db248828dd36aecb1697d64d28a2ff813d29 /info/expose-expl3-dunkerque-2019/codes
parent3e43bc594a14e8c4fc21d6a71f22a23dd78fe252 (diff)
CTAN sync 202003220300
Diffstat (limited to 'info/expose-expl3-dunkerque-2019/codes')
-rw-r--r--info/expose-expl3-dunkerque-2019/codes/erato-def.tex103
-rw-r--r--info/expose-expl3-dunkerque-2019/codes/henel-def.tex66
-rw-r--r--info/expose-expl3-dunkerque-2019/codes/kaprekar-def.tex81
-rw-r--r--info/expose-expl3-dunkerque-2019/codes/knuth-def.tex20
4 files changed, 270 insertions, 0 deletions
diff --git a/info/expose-expl3-dunkerque-2019/codes/erato-def.tex b/info/expose-expl3-dunkerque-2019/codes/erato-def.tex
new file mode 100644
index 0000000000..26e3d94f86
--- /dev/null
+++ b/info/expose-expl3-dunkerque-2019/codes/erato-def.tex
@@ -0,0 +1,103 @@
+% Time-stamp: <2019-08-26 11:48:16 administrateur>
+% ReCréation : 2019-08-23T10:40:31+0200
+\ExplSyntaxOn
+
+\NewDocumentCommand{ \eratosthene } { m } {
+ \group_begin:
+ \int_new:N \l_ERA_diviseur_max_int
+ \int_set:Nn \l_ERA_diviseur_max_int { \fp_to_int:n { floor( sqrt ( #1 ))} }
+ \intarray_new:Nn \__ERA_qt_ia { #1 }
+ \intarray_new:Nn \__ERA_dv_ia { #1 }
+ % commande auxiliaire --------------------------------------------------------
+ \cs_set:Nn \ERA_marquer_de_a_par:nnn {
+ \int_set:Nn \l_tmpa_int { ##1 / ##3}
+
+ \int_step_inline:nnnn { ##1 } { ##3 } { ##2 } {
+ \int_compare:nNnT { \intarray_item:Nn \__ERA_dv_ia { ####1 } } = { 0 }
+ { \intarray_gset:Nnn \__ERA_dv_ia { ####1 } { ##3 }
+ \intarray_gset:Nnn \__ERA_qt_ia { ####1 } { \l_tmpa_int } }
+ \int_incr:N \l_tmpa_int }
+ }
+ % ----------------------------------------------------------------------------
+ % marquer les pairs
+ \int_set:Nn \l_tmpa_int { 1 }
+
+ \int_step_inline:nnnn { 2 } { 2 } { #1 }
+ { \intarray_gset:Nnn \__ERA_dv_ia { ##1 } { 2 }
+ \intarray_gset:Nnn \__ERA_qt_ia { ##1 } { \l_tmpa_int }
+ \int_incr:N \l_tmpa_int }
+
+ % marquer les impairs jusqu'à racine de #1
+ \int_set:Nn \l_tmpb_int { 3 }
+
+ \int_while_do:nNnn { \l_tmpb_int } < { \l_ERA_diviseur_max_int }
+ { \ERA_marquer_de_a_par:nnn { \l_tmpb_int } { #1 } { \l_tmpb_int }
+ \int_do_until:nNnn {\intarray_item:Nn \__ERA_dv_ia { \l_tmpb_int }} = { 0 }
+ { \int_add:Nn \l_tmpb_int { 2 } } }
+
+ % marquer les derniers impairs
+ \int_step_inline:nnnn { 3 } { 2 } { #1 }
+ { \int_compare:nNnT { \intarray_item:Nn \__ERA_dv_ia { ##1 } } = { 0 }
+ { \intarray_gset:Nnn \__ERA_dv_ia { ##1 } { ##1 }
+ \intarray_gset:Nnn \__ERA_qt_ia { ##1 } { 1 } } }
+
+ % nettoyage
+ \cs_undefine:N \l_ERA_diviseur_max_int
+ \group_end: }
+
+%%% -----------------------------------------------------------------------
+
+\cs_new:Nn \ERA_presenter_nieme:n {
+ \group_begin:
+ \int_set:Nn \l_tmpa_int { \intarray_item:Nn \__ERA_qt_ia { #1 } }
+ \int_set:Nn \l_tmpb_int { \int_mod:nn { #1 } { 10 } }
+
+ \framebox[4em] {\strut \footnotesize
+ \int_compare:nNnTF { \l_tmpa_int } = { 1 }
+ {\textbf} % premier
+ {\textcolor{gray}} % composé
+ {\int_to_arabic:n { #1 }}
+ \int_compare:nNnT { \l_tmpa_int } > { 1 }
+ { \int_set:Nn \l_tmpa_int { \intarray_item:Nn \__ERA_dv_ia { #1 } }
+ ~\({}^{\langle \int_to_arabic:n { \l_tmpa_int } \rangle}\) } }
+ \kern-\fboxrule
+ % saut de paragraphe tous les 10
+ \int_compare:nNnT { \l_tmpb_int } = { 0 }
+ { \par \nointerlineskip \kern-\fboxrule \noindent }
+ \group_end: }
+
+\NewDocumentCommand { \EcrireCribleEratosthene } { m }{
+ \par \noindent \int_step_inline:nn { #1 } { \ERA_presenter_nieme:n {##1} } }
+
+
+\NewDocumentCommand { \EcrireDiviseurs } { s m } {
+ \group_begin:
+ \int_new:N \l_ERA_nv_qt_int % quotient
+ \int_set:Nn \l_ERA_nv_qt_int { #2 }
+ \int_new:N \l_ERA_vx_dv_int % ancient diviseur
+ \int_set:Nn \l_ERA_vx_dv_int { 0 }
+ \int_new:N \l_ERA_nv_dv_int % nouveau diviseur
+ \int_set:Nn \l_ERA_nv_dv_int { \intarray_item:Nn \__ERA_dv_ia { #2 } }
+
+ \IfBooleanF{#1}{\par}
+ \( \int_to_arabic:n { #2 } =
+ \int_while_do:nNnn { \l_ERA_nv_qt_int } > { 1 }
+ { \int_compare:nNnT { \l_ERA_vx_dv_int } > { 0 } { \times }
+ \int_to_arabic:n { \l_ERA_nv_dv_int }
+ \int_set:Nn \l_ERA_vx_dv_int { \l_ERA_nv_dv_int }
+ \int_set:Nn \l_ERA_nv_qt_int {
+ \intarray_item:Nn \__ERA_qt_ia { \l_ERA_nv_qt_int } }
+ \int_set:Nn \l_ERA_nv_dv_int {
+ \intarray_item:Nn \__ERA_dv_ia { \l_ERA_nv_qt_int } } }
+ \)
+ \cs_undefine:N \l_ERA_nv_qt_int
+ \cs_undefine:N \l_ERA_vx_dv_int
+ \cs_undefine:N \l_ERA_nv_dv_int
+ \group_end: }
+
+\ExplSyntaxOff
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: t
+%%% End:
diff --git a/info/expose-expl3-dunkerque-2019/codes/henel-def.tex b/info/expose-expl3-dunkerque-2019/codes/henel-def.tex
new file mode 100644
index 0000000000..0beae24a67
--- /dev/null
+++ b/info/expose-expl3-dunkerque-2019/codes/henel-def.tex
@@ -0,0 +1,66 @@
+% Time-stamp: <2019-08-07 10:59:31 administrateur>
+% Création : 2019-05-20T11:51:49+0200
+\ExplSyntaxOn
+
+\cs_new:Nn \__yh_ecrire_nombre:n { \(\np{\int_to_arabic:n{ #1 }}\) }
+
+\cs_new:Nn \yh_impair_est_premier:nT {
+ \bool_set_true:N \yh_continue_bool
+ \bool_set_true:N \yh_est_premier_bool
+ \int_set:Nn \l_tmpa_int {1}
+ % FIN INITIALISATION
+ \bool_do_while:Nn \yh_continue_bool { % BOUCLE `TANTQUE'
+ % INCRÉMENTATION
+ \int_add:Nn \l_tmpa_int { 2 }
+ \bool_if:nTF {
+ % TEST de divisibilité
+ \int_compare_p:nNn { \int_mod:nn {#1} { \l_tmpa_int } } = { 0 }
+ } { % SI VRAI
+ \bool_set_false:N \yh_continue_bool
+ \bool_gset_false:N \yh_est_premier_bool
+ } { % SI FAUX
+ \int_compare:nNnT { \l_tmpa_int * \l_tmpa_int } > { #1 }
+ { \bool_set_false:N \yh_continue_bool }
+ } } % FIN DU SI ET FIN DE LA BOUCLE
+ \bool_if:nT {\yh_est_premier_bool} {#2} }
+
+\cs_new:Nn \yh_ecrire_separateur:n { }
+
+\cs_new:Nn \yh_ecrire_si_premier:n {
+ \yh_impair_est_premier:nT { #1 }
+ { \yh_ecrire_separateur:n { #1 }
+ \__yh_ecrire_nombre:n { #1 } } }
+
+\NewDocumentCommand { \ListePremiers } { m } {
+ \group_begin:
+ % INITIALISATION
+ \int_new:N \l_compteur_int
+ \int_new:N \l_nombre_requis
+ \int_set:Nn \l_compteur_int { 2 }
+ \int_set:Nn \l_nombre_requis { #1 }
+ \cs_set:Nn \yh_ecrire_separateur:n {
+ \int_compare:nNnTF { ##1 } < { \l_nombre_requis - 1} {,~} {~et~} }
+ % LES DEUX PREMIERS NOMBRES PREMIERS NE SONT PAS CALCULÉS
+ \__yh_ecrire_nombre:n {2}
+ \yh_ecrire_separateur:n {1}
+ \__yh_ecrire_nombre:n {3}
+ % PRÉPARATION DE LA BOUCLE, \l_tmpb_int EST LE CANDIDAT À TESTER
+ \int_set:Nn \l_tmpb_int { 3 }
+ % BOUCLE `TANT QUE'
+ \int_while_do:nNnn { \l_compteur_int } < { \l_nombre_requis } {
+ \int_add:Nn \l_tmpb_int { 2 }
+ \yh_impair_est_premier:nT { \l_tmpb_int }
+ { \yh_ecrire_separateur:n { \l_compteur_int }
+ \__yh_ecrire_nombre:n{ \l_tmpb_int }
+ \int_incr:N \l_compteur_int } }
+ % ON FAIT LE MÉNAGE AVANT DE SORTIR
+ \cs_undefine:N \l_compteur_int
+ \cs_undefine:N \l_nombre_requis
+ \group_end: }
+
+\ExplSyntaxOff
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: t
+%%% End:
diff --git a/info/expose-expl3-dunkerque-2019/codes/kaprekar-def.tex b/info/expose-expl3-dunkerque-2019/codes/kaprekar-def.tex
new file mode 100644
index 0000000000..097279d8fe
--- /dev/null
+++ b/info/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:
diff --git a/info/expose-expl3-dunkerque-2019/codes/knuth-def.tex b/info/expose-expl3-dunkerque-2019/codes/knuth-def.tex
new file mode 100644
index 0000000000..34c771501e
--- /dev/null
+++ b/info/expose-expl3-dunkerque-2019/codes/knuth-def.tex
@@ -0,0 +1,20 @@
+\newif\ifprime \newif\ifunknown
+\newcount\n \newcount\p
+\newcount\d \newcount\a
+
+\def \primes#1{2,~3\n=#1 \advance \n by-2 \p=5
+ \loop \ifnum \n>0 \printifprime \advance \p by2 \repeat}
+
+\def \printp{, \ifnum \n=1 and~\fi
+ \number \p \advance \n by -1 }
+
+\def \printifprime{\testprimality \ifprime\printp\fi}
+
+\def \testprimality{{\d=3 \global \primetrue
+ \loop \trialdivision \ifunknown \advance \d by2 \repeat}}
+
+\def \trialdivision{\a=\p \divide \a by\d
+ \ifnum \a>\d \unknowntrue \else \unknownfalse \fi
+ \multiply \a by\d \ifnum \a=\p \global \primefalse \unknownfalse \fi}
+
+\endinput \ No newline at end of file