MPO 109 - UNION et INTERSECTION

Ici, on fait dans le petit, le LCD qui déchire sa race, on y cause même calculatrices quand on est en manque !

Modérateur : Politburo

Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

MPO 109 - UNION et INTERSECTION

Message par Schraf »

Pour ce MPO, vous partirons de quelques conventions :

- Un ensemble est une collection de chiffres entre 1 et 9 sans tenir compte des répétitions ni de l'ordre des éléments. Exemple :

{ 1, 2 } = { 2, 1 } = { 1, 2, 2 } = { 2, 1, 1, 1 } désignent le MÊME ensemble

On dira que l'ensemble est simplifié lorsqu'il n'y a pas de répétition. { 1, 2 } et { 2, 1 } sont des ensembles simplifiés, { 1, 2, 2 } ne l'est pas puisqu'il y a la répétition du 2.

Sur nos calculatrices, le nombre 12 désignera l'ensemble { 1, 2 } et donc les nombres 12, 21, 122 et 2111 correspondent au même ensemble.

- La réunion (notée ∪) de 2 ensembles A et B est l'ensemble des chiffres qui sont dans A OU dans B (éventuellement dans les 2 à la fois). Exemple :

{ 1, 1, 2, 2 } ∪ { 3, 1, 2 } = { 1, 2, 3 }

- L'intersection (notée ∩) de 2 ensembles A et B est l'ensemble des chiffres qui sont dans A ET dans B. Exemple :

{ 1, 1, 4, 2 } ∩ { 3, 1, 2 } = { 1, 2 }

- L'ensemble vide (noté { } ou Ø) sera représenté par le chiffre 0 sur nos calculatrices.

Vous devez écrire 2 programmes, un premier pour l'UNION et un second pour l'INTERSECTION qui donneront en sortie un ensemble simplifié. Ou alors écrire un unique programme ENSEMBLE qui donnera les 2 résultats. Exemples :

Code : Tout sélectionner

Entrée : 1122.312	// { 1, 1, 2, 2 } ∪ { 3, 1, 2 } = { 1, 2, 3 }
// Les 2 nombres 1122 et 312 pourront également être entrés séparément
Vous lancez votre programme UNION (via une touche, un label ou autre) ou le programme ENSEMBLE
Sortie avec UNION: 123 (ou 132 ou 213 ou 231 ou 312 ou 321)
Sortie avec ENSEMBLE : 123 (union) puis 12 (intersection)

Entrée : 0.1111		// Ø ∪ { 1, 1, 1, 1 } = { 1 }
Vous lancez votre programme UNION
Sortie avec UNION : 1
Sortie avec ENSEMBLE : 1 (union) puis 0 (intersection)

Entrée : 1142.312	// { 1, 1, 4, 2 } ∩ { 3, 1, 2 } = { 1, 2 }
Vous lancez votre programme INTERSECTION
Sortie avec INTERSECTION : 12 (ou 21)
Sortie avec ENSEMBLE : 1234 (union) puis 12 (intersection)

Entrée : 1142.0		// { 1, 1, 4, 2 } ∩ Ø = Ø
Vous lancez votre programme INTERSECTION
Sortie avec INTERSECTION : 0
Sortie avec ENSEMBLE : 124 (union) puis 0 (intersection)
Pour les plus forts, vous pourrez ordonner les éléments

Misez P'tits Optimisez : sommaire
Modifié en dernier par Schraf le 17 mai 2022 19:51, modifié 1 fois.
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3404
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: MPO 109 - UNION et INTERSECTION

Message par C.Ret »

Ah! Un nouvel MPO ! Chouette.


Image


Bon, voila qui est composé pour SHARP PC-1211, HP-28S, HP-71B, PC-1360, HP Prime, HP-41C, Ti-58C et TI-57 LCD.

Un truc me gène un peu; c'est la donnée des deux ensembles en entrée sous la forme d'un seul nombre fractionnaire A.B. J'aurais préféré, et de loin, avoir à saisir les deux ensembles sous la forme de deux arguments indépendants (sous forme de nombres entiers en fait).

Il y a une raison à cette saisie initiale très stricte ??

Dans le même ordre d'idée, les codes UNION et INTERSECTION peuvent-ils être fusionnés en un seul programme qui donnerai simultanément les deux résultats (sur les machine avec un grand afficheur ou dans deux registres résultats x↔y ou x↔t ?
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

Re: MPO 109 - UNION et INTERSECTION

Message par Schraf »

@C.Ret : Non, il n'y avait pas de raison particulière à mettre les 2 ensembles de chiffres séparés par un "." 💁‍♂️

Ce sera d'ailleurs peut-être plus pratique d'avoir 2 nombres séparés sur les petites machines (type Ti-57) si l'on veut créer une sous-routine d'analyse. 🤫

J'avais effectivement pensé à la version qui donne à la fois l'union et l'intersection mais toujours vis à vis du nombre de pas total et aussi pour laisser la possibilité de faire l'un et pas l'autre, je les ai finalement séparés dans l'énoncé.

Bref, on va dire que toutes les combinaisons de "Ensembles A et B entrés ensemble ou séparément" et "Affichage UNION et/ou INTERSECTION" sont possibles.

J'en profite pour préciser qu'un nombre comme 1203 n'a pas de sens, 0 désignant uniquement l'ensemble vide et pas un élément.
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3404
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: MPO 109 - Union et Intersection des Ensemble Nona-Digitaux Simplifiés

Message par C.Ret »

Ah! Bien, je n'ai donc pas à tout recommencer. ouff !

Et cela laissera plus de liberté aux participants. Evidemment, il faudra bien expliquer comment marche nos codes à chaque publication.
Du coup, il ya une double difficulté; trouver un code qui fonctionne avec un minimum de ressources, mais aussi, pour chaque machine, trouver la méthode de saisie initiale qui donnera le code le plus efficace... héhé...


Image

Concernant le zéro, pour ma part, je le considère comme étant un élément vide sans épaisseur. Ainsi l'ensemble nano-digital simplifié { 1 , 3 , 5 } peut s'écrire numériquement 135, 351, 153, ou encore 1335, 3551, 155333 avec ou sens l'élément insignifiant et nul ; 103050 ou 30000051 ou 1005000030 etc.

Peut importe, 0 n'est pas un élément; c'est l'ensemble vide lui-même .

Le résultat donné par mon algorithme peut donc, afin d'être le plus court possible, insérer des zéro entre les chiffres des résultats.
C'est bien cela, l'UNION de 13 et 57 peut être affichée sur ma calculette par 7050301 ou 0.007050301
et l'INTERSECTION de 142 avec 234 par 4000 ou 0.000004000

C'est autorisé, ou il faut que j'ajoute quelques sophistications pour afficher un entier bien sage comme 7531 ou 1357 ?

Image

Non, parce que sur certaine bécane, cela change complètement l'ampleur de la tache à réaliser ...
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

Re: MPO 109 - UNION et INTERSECTION

Message par Schraf »

@C.Ret Passer de 7050301 à 7531, c'est juste l'affaire d'une petite boucle 😁

Pour le moment j'ai un programme pour Ti-83 qui n'a rien d'original et qui utilise 8 variables... 😒

inter1.png
inter1.png (8.47 Kio) Vu 3535 fois
inter2.png
inter2.png (8.44 Kio) Vu 3535 fois
inter3.png
inter3.png (7.93 Kio) Vu 3535 fois
FLISZT
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 655
Enregistré le : 09 mars 2022 19:14

Re: MPO 109 - UNION et INTERSECTION

Message par FLISZT »

Pour la partie ⋃nion, j'ai fait tôt ce matin un premier programme capable de traiter une entrée comme indiqué dans l'énoncé…

Ex. : 112233.446655 ⇒ résultat : { 1 2 3 4 5 6 }

… mais ce prgm est assez lourd : 249,5 octets !!!

Faut dire que je passe d'un nombre xxx.yyy à deux chaînes de caractères, puis à une (seule) liste de caractères, pour arriver à une liste de chiffres… qui aura droit au traitement final. :roll:

En revanche, si les données entrées le sont sous la forme de deux listes de chiffres, alors je n'ai qu'à reprendre la fin de mon programme (+ 1 instruction)…

Ex. : { 4 5 6 6 } ⋃ {1 2 3 3 3 } ⇒ résultat : { 4 5 6 1 2 3}

… et là c'est déjà bcp plus léger : 65 octets.

Quant à la partie ⋂ du MPO, j'en suis déjà à plus de 90 octets et ce n'est pas terminé…

Rien de bien satisfaisant en somme ! :evil:
Bruno
Sanyo CZ-0124 ? TI-57 ? HP-15C ? Canon X-07 + XP-140 Monitor Card ? HP-41CX ? HP-28S ? HP-50G ? HP-50G
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3404
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: MPO 109 - UNION et INTERSECTION

Message par C.Ret »

Schraf a écrit : 18 mai 2022 09:09@C.Ret Passer de 7050301 à 7531, c'est juste l'affaire d'une petite boucle
Petite, petite, c'est vite dit... c'est toujours une boucle de plus... Mais, peut-être que ne pas faire de boucle donne aussi de bons résultats !
Bon, voyez pourquoi je ne suis pas impressionné par une Ti-83 même +
Bon, voyez pourquoi je ne suis pas impressionné par une Ti-83 même +
MPO109 HP-28S preview U and I.gif (161.8 Kio) Vu 3517 fois
FLISZT a écrit : 18 mai 2022 12:52 Rien de bien satisfaisant en somme !
Mais, il faut se lancer et commencer par quelque chose et tester avant de trouver une solution convenable.

A mon avis, si je suis autorisé à formuler un avis; une chaine de caractère c'est quelque part une liste. Non?
Evidemment, U et I sont des fonctions utilisateurs qui peuvent être utilisée directement, par les menus ou dans des expressions algébriques.
Evidemment, U et I sont des fonctions utilisateurs qui peuvent être utilisée directement, par les menus ou dans des expressions algébriques.
MPO109 HP-28S preview U and I (2).gif (108.65 Kio) Vu 3512 fois
Voilà, pas de liste ni de somme insatisfaisante, mais bien évidemment sur cet engin, quelques chaines alphanumériques et fonctions utilisateur.
Juste un peu de RPL antique qui pour le moment fait encore plus de 197 caractères.
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

Re: MPO 109 - UNION et INTERSECTION

Message par Schraf »

@FLISZT : En gardant ta version où les 2 ensembles sont entrés sous forme de listes de chiffres, j'arrive à 56 octets sur HP-48G pour l'UNION. Le programme fonctionne également avec une liste non vide + liste vide mais pas avec 2 listes vides...

Exemple 1
Exemple 1
union1.png (5.66 Kio) Vu 3507 fois
Résultat exemple 1
Résultat exemple 1
union2.png (5.25 Kio) Vu 3507 fois
Exemple 2
Exemple 2
union3.png (5.09 Kio) Vu 3507 fois
Résultat exemple 2
Résultat exemple 2
union4.png (4.98 Kio) Vu 3507 fois
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

Re: MPO 109 - UNION et INTERSECTION

Message par Schraf »

@C.Ret J'imagine que les autres sont aussi impatients que moi de voir ton programme. Mais comme tu le dis, commençons par des versions ni très originales ni très MPO mais fonctionnelles. Je mets celle pour la Ti-83+ qui utilise aussi les chaines de caractères. Ce n'est pas un problème avec vos lunettes 🤓, on a effectivement l'impression que toutes les lignes sont écrites en double 🤢

Code : Tout sélectionner

Input Str1
Input Str2
Str1+Str2→Str3
"0"→Str4
"0"→Str5
For(I,1,length(Str3
sub(Str3,I,1→Str6
inString(Str1,Str6→A
inString(Str2,Str6→B
If A and B and not(inString(Str4,Str6
Str4+Str6→Str4
If (A or B) and not(inString(Str5,Str6
Str5+Str6→Str5
End
Disp "INTER
Disp expr(Str4
Disp "UNION
Disp expr(Str5
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3404
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: MPO 109 - UNION et INTERSECTION

Message par C.Ret »

Ah! Oui, c'est pratique on entre tout de suite tout sous forme de chaine de caractères. Pourquoi pas ! Cela évite la boucle qui retire les '0' ou les pas supplémentaires pour reformater les résultats.

Voici, donc une version pour Ti-83+ est consœurs plus courte, directement inspirée du code ci-dessus qui met les résultats dans l'ordre :

Code : Tout sélectionner

:Input Str1
:Input Str2
:"0"→Str4 :"0"→Str5
:For(I,1,9
:  sub("123456789",I,1→Str3
:  inString(Str1,Str3→A :  inString(Str2,Str3→B
:  If A and B 
:     Str4+Str3→Str4
:  If A or B  
:     Str5+Str3→Str5
:End
:Disp "INTER",expr(Str4
:Disp "UNION",expr(Str5

Suivre le même algorithme est bien compliqué sur SHARP PC-1211, mais on y arrive avec cependant quelques adaptations et un changement radical du principe de base:
MPO109 SHARP PC-1211 preview U and I using alphanumeric based algorithm.gif
MPO109 SHARP PC-1211 preview U and I using alphanumeric based algorithm.gif (9.53 Kio) Vu 3484 fois
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

Re: MPO 109 - UNION et INTERSECTION

Message par Schraf »

@C.Ret Merci d'avoir simplifié mon programme 😅

La ligne sub(... peut être remplacée par toString(I→Str3
Avatar du membre
zpalm
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2919
Enregistré le : 03 mai 2008 15:33
Localisation : Grenoble

Re: MPO 109 - UNION et INTERSECTION

Message par zpalm »

Sur la HP Prime pas besoin de programme, on peut écrire des "one liners" pour définir des fonctions utilisateur.

Pour l’union en 54 caractères :

Code : Tout sélectionner

Nom: MPO109_U
Fonction: EXPR(CHAR(SORT(UNION(ASC(STRING(A)),ASC(STRING(B))))))
Pour l’intersection en 69 caractères :

Code : Tout sélectionner

Nom: MPO109_I
Fonction: EXPR("0"+CHAR(SORT(UNION(INTERSECT(ASC(STRING(A)),ASC(STRING(B)))))))
Et pour l’ensemble en 29 caractères (les quotes sont nécessaires pour entrer la formule sans évaluer les fonctions):

Code : Tout sélectionner

Nom: MPO109
Fonction: {'MPO109_U(A,B)','MPO109_I(A,B)'}
MPO109_U(1142,312) retourne 1234
MPO109_I(1142,312) retourne 12
MPO109(1142,312) retourne {1234,12}

Je regarde aussi pour une solution en RPN, c’est un poil plus compliqué…
FLISZT
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 655
Enregistré le : 09 mars 2022 19:14

Re: MPO 109 - UNION et INTERSECTION

Message par FLISZT »

@Schraf

Mon programme ⋃ allégé (0%) fonctionne avec une liste vide… mais plante avec deux !

{ 1 1 1 1 1 } ⋃ { } ⇒ { 1 }

{ 1 1 1 1 { } } ⋃ { } ⇒ { 1 }

{ { 5 } 7 8 } ⋃ { 7 8 9 5 } ⇒ { 5 7 8 9 }

mais …

{ { 5 } 7 8 } ⋃ { { 8 } 7 8 9 } ⇒ { 5 7 8 8 9 } … oops !

{ { 5 } 7 8 } ⋃ { { 8 9 } 7 8 } ⇒ { 5 7 8 8 9 } … oops encore !

{ } ⋃ { } ⇒ aïe !

L'autre pgrm ⋃ renvoie { 0 } si je le teste avec 0.0 (0 autrement dit).
Avec 12.0 ou 0.12, il renvoie { 0 1 2 }… ce qui est inexact !

Mon big programme de l'union :

Code : Tout sélectionner

exemple avec 1233.5778 en entrée :
«
	→STR					@ "1233.5778"
	
	« → s					@ 2 strings ⇒ éclatement de la chaïne de caract. ⇒ 1 liste de strings
	  «
	    « s k k SUB
	    » 
	    k 1 s SIZE 1 SEQ
	  »
	» EVAL					@ { "1" "2" "3" "3" "." "5" "7" "7" "8" }

	SORT TAIL				@ tri : { "." "1" "2" "3" "3" "5" "7" "7" "8" }
						@ suppression du points décimal :  { "1" "2" "3" "3" "5" "7" "7" "8" }

	« → s					@ 1 liste de sting ⇒ 1 liste de nombres
	  «
	    « s k GET OBJ→
	    »
	    k 1 s SIZE 1 SEQ
	  »
	»	EVAL				@ { 1 2 3 3 5 7 7 8 }
	
	{{}} SWAP + 
	« DUP2 POS :: ; :: + IFTE » STREAM	@ { 1 2 3 5 7 8 }
… en le saisissant je me suis rendu compte qu'il y avait vraiment des choses (100%) inutiles ! :roll:
Il passe donc de 249,5 à 229 octets.

Pour la version light faut juste reprendre la fin précédée d'un « + » :

Code : Tout sélectionner

«	
	+
	{{}} SWAP + 
	« DUP2 POS :: ; :: + IFTE		@ avec qq astuces de "poids"
	» STREAM	
»
@C.Ret

Oui, les chaînes de caract. sont bien des listes mais dotées de moins de fonctions que les "vraies" (type 5) pour les manipuler.
En tout cas, pas suffisamment pour moi. :oops:
C.Ret a écrit : 16 mai 2022 18:15 Connais pas ce Lao Callahan ??! C'est un Docteur en Philosophie, comme moi ?
Quand à mes limites réelles, je les connais fort bien, elles tiennent toutes dans l'interval [ -1.E-499 , 9.99999999999E499 ] ; c'est de la philosophie de poche très pratique modèle américain fabriquée à Singapour. Peut-être par ce Lao Callahan ?
Pour répondre à ton interrogaton sur ce foutu Lao Callahan Zi, s'il est un grand philosophe, c'est certainement essentiellement par la taille voire exclusivement.
Docteur ? Euh non, plutôt « cow-boy » ! S'il est titulaire d'un PhD, ce ne peut être qu'à titre Honoris Causa. Sacré Harry va ! :)

Moi c'est une belle américaine, c'est marquée sur son dos avec un A ( "née" en 8916… donc encore très jeune :wink: ).
Son intervalle est un peu plus grand que celui de ta charmante Singapourienne, puisqu'il descend jusqu'à -9.99999999999E499… bon après, ça ne sert pas tous les jours ! :D
Bruno
Sanyo CZ-0124 ? TI-57 ? HP-15C ? Canon X-07 + XP-140 Monitor Card ? HP-41CX ? HP-28S ? HP-50G ? HP-50G
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

Re: MPO 109 - UNION et INTERSECTION

Message par Schraf »

@zpalm : Difficile de battre la Prime... La HP 34S peut-être ?
@FLISZT : Rien compris aux :: et ; 😅

Code : Tout sélectionner

«	
	+
	{{}} SWAP + 
	« DUP2 POS :: ; :: + IFTE		@ ????
	» STREAM	
»
Ma version light (càd en utilisant des listes de chiffres et non pas un nombre) pour UNION est :

Code : Tout sélectionner

«	
	+			@ Concaténation des 2 listes
	SORT DUP		@ On trie tous les chiffres par ordre croissant
	2 « ≠ » DOSUBS		@ On prend les termes 2 par 2 et on regarde s'ils sont différents -> liste de booléens
	1 SWAP + SWAP IFT	@ On ajoute 1 au début de cette liste et on filtre
»
Ca fonctionne pour tous les cas sauf avec 2 listes vides

Exemple :

Code : Tout sélectionner

2: { 3 3 1 1 2 }
1: { 2 5 1 1 }

+			{ 3 3 1 1 2 2 5 1 1 }
SORT DUP		{ 1 1 1 1 2 2 3 3 5 } sur niveaux 1 et 2
2 « ≠ » DOSUBS		{ 0 0 0 1 0 1 0 1 } car seuls 1 ≠ 2, 2 ≠ 3 et 3 ≠5
1 SWAP +		{ 1 0 0 0 1 0 1 0 1 }
SWAP			{ 1 0 0 0 1 0 1 0 1 } sur niveau 2 et { 1 1 1 1 2 2 3 3 5 } sur niveau 1
IFT			{ 1 2 3 5 }
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

Re: MPO 109 - UNION et INTERSECTION

Message par Schraf »

Utilisation des chaines de caractères sur HP-50G (146 octets) pour le programme ENSEMBLE (on aura la réunion du côté gauche et l'intersection du côté droit)

Le programme est le même sur les HP-48G, il faut juste remplacer les UNROT par des ROT ROT.

Code : Tout sélectionner

« DUP2				@ On garde les 2 nombres à l'affichage
  →STR SWAP →STR → a b		@ Transformation des 2 nombres en chaines et mémorisation
 «
  ".I=" 1 9 FOR I I →STR DUP 	@ Boucle pour I de 1 à 9 avec initialisation du résultat à ".I="
  a SWAP POS			@ On cherche I dans la chaine a -> P1 vaut 0 si non trouvé ou position dans la chaine
  b ROT POS			@ On cherche I dans la chaine b -> P2
  DUP2 AND UNROT OR UNROT	@ Calcul de P1 AND P2 et de P1 OR P2 
  { I + } IFT			@ Si dans l'intersection, on met I à droite de la chaine résultat
  SWAP { I SWAP + } IFT		@ Si dans l'union on met à gauche de la chaine
  NEXT
 » "U=" SWAP +
»
Exemples :

12221 et 3324441 sur la pile donnent "U=4321.I=12 (L'union = {4,3,2,1} et l'intersection = {1,2})
12 et 56 donnent "U=6521.I="
12 et 0 donnent "U=21.I="
0 et 0 donnent "U=.I="
123456789 et 123456789 donnent "U=987654321.I=123456789"
Répondre

Retourner vers « Tous les Pockets »