Misez p'tit : Op'timisez ! n° 128 : Code WIFI (2024)

Attention, un code en RPL. Méfions nous.
Misez p'tit : Op'timisez ! n° 128 : Code WIFI (1)

Schraf a écrit: 22 juin 2024 08:57

Code: Tout sélectionner

« ""@ "" → final WHILE SWAP DUP@ Tant que 'n' n'est pas nul REPEAT 100 IDIV2 ROT@ n//100 → n et n%100 → v SWAP 10 IDIV2 →STR UNROT@ v//10 → q et v%10 → "r" DUP@ Si 'q' n'est pas nul « 1 SWAP@ Ajouter 'q' fois "r" à 'final' START OVER SWAP + NEXT » « DROP@ Sinon supprimer le 0 » IFTE SWAP DROP END SWAP OBJ→ +@ Transfo de 'final' en nombre + n = 0»

La présence de deux instructions IDIV2 nous paraît être très suspecte. Je dirais même plus, très très suspecte.
Bon, les zéros de tête ne sont pas affichés, c'est déjà bien. Je dirais même mieux, c'est un minimum pour une grande machine.

Mais justement, ne peut-on pas utiliser cette puissance afin d'alléger et simplifier tout cela ??

  • Diviser alternativement par 100 et 10 ce n'est finalement que diviser par 10 plusieurs fois de suite. Non ?
  • Et la seconde partie qui fait des ronds de chapeaux pour éviter d'afficher les zéros de tête alors que naturellement une HP-50g n'en met jamais. elle n'est d'ailleurs pas limitée par la longueur de ses entiers ou la taille de sa pile opérationnelle.

Par contre nous ne nous souvenons plus dans quel ordre l'instruction IDIV2 retourne dans la pile la division entière et le reste. Je dirais même plus, nous ne savons plus si l'instruction donne le reste ou le quotient en second ?!

Code: Tout sélectionner

« R→I -1. %% set -1 as end-flag in stack WHILE DUP REPEAT SWAP 10 IDIV2 END %% deconstruct input moustache ////\\\\ DO SWAP ALOG DUP ROT * UNROT 1 - 9 / * + UNTIL OVER 0 < END %% reconstruct output moustache (( )) SWAP DROP » %% remove end-flag

P.S: Ni Dupond, ni Dupont n'ayant pu obtenir de leur administration ministérielle une HP-50g en état de marche pour tester ce code, il y manque peut-être quelques instructions R→I. Ce code est donc à appliquer après avoir vérifié les points suivants qui n'ont pu être expérimentés par nos deux fonctionnaires. A savoir:

  • L'instruction IDIV2 renvoie le quotient au niveau 2: et le reste au niveau 1:.
  • Les deux résultats de IDIV2 sont supposés être des entiers longs en réponse aux deux arguments qui le sont. Il y a peut-être des mode ou des drapeaux à ajuster ?
  • La même hypothèse est faite concernant le fonctionnement de l'instruction ALOG qui est supposée suivre la même logique. Je dirais même mieux, comme elle prend en argument un entier long d, elle devrai retourner 10d dans ce même format.
  • Je fais remarquer que les constantes 10, 1 et 9 sont volontairement des entiers longs afin que le résultat en soit également un pour de ne pas être limité par le nombre de chiffres du Code WIFI final.
  • L'astuce pour expandre le code provient du fait que pour toute base entière b, la valeur bn-1 et toujours divisible par b-1 et cela quelque soit la valeur de l'entier n.

Si l'une des ces hypothèse n'est pas réalisée, il faudra modifier le code en conséquence, certainement en ajoutant des instructions R→I où il conviendra.

Code: Tout sélectionner

############################################### PILE:«««««««««««« OPERATIONS »»»»»»»»»»»»»7:6:5:4:3:2:1: 4567.R→I -1.-14567-1.SWAP 10 IDIV2-1.456 7 SWAP 10 IDIV2-1.7 45 6 SWAP 10 IDIV2-1.7 6 45 SWAP 10 IDIV2-17 6 5 4 0SWAP ALOG DUP -1.7 6 5 010000 10000ROT * UNROT-1.7 6 05 10000 1 - 9 / * +-1.7 6 5555SWAP ALOG DUP ROT * UNROT 1 - 9 / * +-1.5555777777 SWAP DROP5555777777#############################################################»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»

Remarque: cette version utilise la valeur réelle -1. comme marqueur de fin. Mais on peut utiliser un autre indicateur et un autre test. Comme par exemple laisser une copie au format nombre réel/décimal de l'argument et utiliser l'instruction TYPE dans le test. Mais avec l'HP-50g bien d'autre techniques peuvent être utilisées, comme un tag, une récurrence, etc.

« De prefectuur verklaart formeel dat deze code wordt verspreid zonder enige expliciete of impliciete garantie. Iedere persoon die besluit de code zonder voorafgaande test te gebruiken, doet dit op eigen risico en draagt de volledige verantwoordelijkheid in geval van materiële, lichamelijke, morele of fysieke schade. De Centrale Administratie kan in geen geval direct of indirect aansprakelijk worden gesteld en zal geen enkele schadevergoeding toekennen aan een derde partij of aan een lid van de academie, een dienstverlener of een geassocieerde. »

« La Préfecture déclare formellement que ce code est diffusé sans aucune garantie expresse ou implicite. Toute personne qui décide de l'utiliser sans test préalable le fait à ses propres risques et périls et en assume l'entière responsabilité en cas de dommages matériels, corporels, moraux ou physiques. L'Administration Centrale ne pourra en aucun cas être tenue pour responsable, de manière directe ou indirecte, et n'assumera aucun dédommagement envers un tiers ou envers un membre de l'académie, un prestataire ou un associé. »

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.

Misez p'tit : Op'timisez ! n° 128 : Code WIFI (2024)

References

Top Articles
Latest Posts
Article information

Author: Tyson Zemlak

Last Updated:

Views: 5231

Rating: 4.2 / 5 (43 voted)

Reviews: 82% of readers found this page helpful

Author information

Name: Tyson Zemlak

Birthday: 1992-03-17

Address: Apt. 662 96191 Quigley Dam, Kubview, MA 42013

Phone: +441678032891

Job: Community-Services Orchestrator

Hobby: Coffee roasting, Calligraphy, Metalworking, Fashion, Vehicle restoration, Shopping, Photography

Introduction: My name is Tyson Zemlak, I am a excited, light, sparkling, super, open, fair, magnificent person who loves writing and wants to share my knowledge and understanding with you.