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