Un uniligne est un programme très compact s'écrivant en une seule ligne [1].
En voici un florilège :
Avec Tcl
- Ouverture, lecture et fermeture d'un fichier
set data [read [set f [open $fichier]]][close $f]
- Test si une variable contient une liste
proc islist l {expr ![catch {llength $l}]}
- Test si un mot est un palindrome
proc ispalindrome s {expr {$s eq [string reverse $s]}}
- Test si une chaîne est numérique
proc isnumeric s {return [regexp {^[+-]?\d*\.?\d+$} $s]}
- La suite de Fibonacci
proc fib n {expr {$n < 2 ? $n : [fib [expr {$n - 1}]] + [fib [expr {$n - 2}]]}} proc fib n {expr {int(([set phi [expr {(1+5**0.5)/2}]]**$n - (1-$phi)**$n)/5**0.5)}}
- Factorielle
proc ! n {expr {$n<2? 1: $n*[! [incr n -1]]}}
- Test si un nombre est premier
proc isprime n {expr {$n>1 && ![regexp {^(oo+?)\1+$} [string repeat o $n]]}}
- Test si un nombre entier est une puissance de deux
proc ispoweroftwo n {return [expr {$n > 0 && ($n & ($n - 1)) == 0}]}
- Test si un nombre est paire
proc even n {expr {$n & 1 ? 0:1}} proc even n {expr {($n % 2) == 0}}
- Pi
proc pi {} {expr {atan(1) * 4}} proc pi {} {expr {acos(-1)}}
- Moyenne d'une liste
proc moyenne l {expr ([join $l +])/[llength $l].}
- Maximum et minimum d'une liste
proc max l {tcl::mathfunc::max {*}$l} proc min l {tcl::mathfunc::min {*}$l}
- Test si une liste contient des doublons
proc haveduplicate l {if {[llength $l] != [llength [lsort -unique $l]]} then {return 1} else {return 0}}
- Retourne une liste d'entier compris entre n1 et n2
proc listint {n1 n2} {subst "$n1[string repeat {[incr n1]} [incr n2 -$n1]]"}
- Signe de x
proc sgn x {expr {($x>0) - ($x<0)}}
Avec Tk
- Un bouton
pack [button .b -text Bonjour -command exit]
- Couleurs psychédéliques
eval [set M {. co -bg [format \#%06x [expr {int(rand()*0xFFFFFF)}]];after 99 $M}]