Une horloge à affichage ternaire équilibrée

 

GS (20170322) La notation ternaire équilibrée est un système de numération en base 3. Au lieu d'utiliser (0,1,2) elle utilise (-1,0,1) ou plus simplement (-,0,+). Ces valeurs sont appelées trits (TRInary digiT).

Ainsi les nombres sont des puissances de 3. Par exemple :

 89 = +81 +9 -1 = +3**4 +3**2 -3**0 = +0+0-

 -78 = -81 +3 = -3**4 +3**1 = -00+0

Voici un exemple d'horloge à affichage ternaire équilibrée. La première ligne représente les heures, la seconde les minutes et la troisième les secondes.

 # clock-trit.tcl
 # Author:      Gerard Sookahet
 # Date:        15 Mars 2017
 # Description: Une horloge à affichage ternaire équilibrée
 # References: https://fr.wikipedia.org/wiki/Syst%C3%A8me_trinaire

 package require Tk
 bind all <Escape> exit
 font create myDefaultFont -family Consolas -size 32 -weight bold
 option add *font myDefaultFont

 proc every {ms body} {
  eval $body
  after $ms [list every $ms $body]
 }

 proc dec2trit n {
  if {$n == 0} {return "0"}
  while {$n != 0} {
       lappend trit [lindex {0 + -} [expr {$n % 3}]]
       set n [expr {$n / 3 + ($n % 3 == 2)}]
  }
  return [join [lreverse $trit] ""]
 }

 pack [label .clock -textvar time -bg darkblue -fg orange]

 every 1000 {
  set ::time [join [lmap x {%H %M %S} {dec2trit [scan [clock format [clock sec] -format $x] %d]}] "\n"]
 }

La notation ternaire équilibrée a des propriétés intéressantes :

- Le signe d'un nombre est déterminé par le signe du trit non nul le plus à gauche

- Pour rendre un nombre négatif il suffit de changer les + en - et de laisser les 0 tels quels

- Comparer deux nombres consiste à les lire de gauche à droite dans l'ordre lexicographique