Réponses possibles aux 2 questions finales
ZIPSORT
cat(EXECON("CHAR(SORT({&1,&2}))",ASC(A),ASC(B)))
Exemple de déroulement avec zipsort(“oui”,”non”) :
- On transforme les 2 chaines A et B en listes de codes ASCII : {111,117,105} et {110,111,110}
- On trie les couples de lettres SORT({&1,&2}) : SORT({111,110}) -> {110,111}
- Transformation en chaine : CHAR({110,111}) -> “no”
- On obtient la liste : {“no”,”ou”,”in”}
- Concaténation finale : “noouin”
Lettres manquantes
cat(EXECON("CAS((&2≠1+&1)*char(1+&1))",ASC(T)))
Exemple de déroulement avec manque(“abcdfg”) :
- On transforme la chaine en liste ASCII : {97,98,99,100,102,103}
- Est-ce que l’élément suivant est différent de l’élément courant + 1 ?
- EXECON(“&2≠1+&1”,{97,98,99,100,102,103}) -> {0,0,0,1,0}
- La lettre manquante a comme code ASCII la lettre courante + 1 : char(1+&1)
- En multipliant le caractère par 0 on a une chaine vide, sinon on récupère le caractère manquant
- Concaténation des chaines vides + lettres manquantes
- manque(“abdefgijklmnpqrstv”) -> “chou”
Quelques challenges (proposition de solutions plus bas)
Autant de “x” que de “o”
Afficher 1 s’il y a autant de “x” que de “o” dans une chaine de caractère, sinon afficher 0.
xox("xxabcoo") -> 1
xox("xxooxoox") -> 1
xox("xaxoboxocccoox") -> 0
Au milieu
Ecrire une fonction qui prend en paramètres un caractère X et le place au milieu de Y répété N fois. Lorsque ce n’est pas possible, renvoyer X.
Exemples :
middle(10,"A","*") --> "*****A*****" ("A" est au milieu de 10 "*")
middle(9,"A","*") --> "A" ("A" ne peut pas être au milieu)
middle(2,"X","+") --> "+X+"
mot pur
Un mot pur est un mot dont la somme des positions dans l’alphabet de chaque lettre est divisible par la longueur totale du mot.
Par exemple, “abcb” est un mot pur car 1 + 2 + 3 + 2 = 8 et 8/4 = 2.
pure("ccc") -> 1
pure("bed") -> 0
Palindrome
Renvoyer 1 si une chaine est un palindrome, 0 sinon. La chaine pourra être écrite en minuscules et/ou majuscules.
palind("Laval") -> 1
palind("Angers") -> 0
Somme des N plus grands
Ecrire une fonction qui à partir d’une liste L et d’un entier N renvoie la somme des N entiers les plus grands de L.
sumgrand({4,9,2,3,7,1},2) --> 16 (Les 2 nombres les + grands sont 9 et 7)
sumgrand({-7,9,12,-1,-3},3) --> 20 (9 + 12 - 1 = 20)
Somme sans doublons
Ecrire une fonction qui fait la somme des éléments d’une liste, mais ignore ceux qui sont dupliqués.
Exemples : pour la liste [3, 4, 3, 6]
la fonction devra renvoyer 10
et pour la liste [1, 10, 3, 10, 10]
la fonction devra renvoyer 4
.
Project Euler n°1
Exemples de solutions
Autant de “x” que de “o”
count_eq(120,ASC(T))=count_eq(111,ASC(T))
Au milieu
IFTE(N MOD 2,X,CAS(N/2*Y+X+N/2*Y))
mot pur
0=ΣLIST(ASC(T) MOD SIZE(T))
Palindrome
UPPER(T)==CHAR(revlist(ASC(UPPER(T))))
Remarquez que cette version fonctionne également (en décochant "L1") :
revlist(sto(ASC(UPPER(T)),L1))==L1
Somme des N plus grands
ΣLIST(CAS.mid(CAS.SORT(L,"(x,y)->x>y"),1,N))
Somme sans doublons
ΣLIST(apply("x->x*(count_eq(x,L)==1)",L))
Project euler n°1
Décochez "v" :
ΣLIST(remove("x->(x MOD 3)*(x MOD 5)>0",MAKELIST(v,v,1,N)))-N