One-liners sur HP Prime

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

L’énoncé est ici

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