Maintenant, renommez d'autres commandes qui méritent d'être renommées, par exemple
& regsub R
& string S
& while W
Une commande mérite d'être renommée si, compte tenu de sa longueur n , et des occurrences k , k (n-1) - (n + 4)> 0 . Résolvant pour k , la formule devient k > (n+4)/(n-1)
. Voici un tableau de référence qui vous facilite la tâche:
length of minimum example(s)
command occurrences
------------------------------------------------
2 6 if (consider renaming to "?")
3 4 for, set (consider renaming to "=")
4 3 eval, expr, incr (consider renaming to "+"), info, join, proc, puts, scan
5 3 break, catch, lsort, split, subst, trace, unset, while
6 3 format, lindex, lrange, regexp, regsub, rename, return, string, switch
7 2 foreach, lappend, linsert, llength, lsearch, unknown
. 2 lreplace
. 2 continue
. 2
Pour les programmes plus importants, voici une astuce à laquelle j'ai pensé mais que je n'ai pas encore appliquée:
proc unknown {c args} {eval [info commands $c*] $args}
Cela émule des abréviations de commandes interactives! Il coûte 54 caractères, mais vous pouvez maintenant l'utiliser j
pour join
, sp
pour split
, st
pour string
, w
pour while
, etc.
info script {};set tcl_interactive 1
unknown
itinéraire: voir ici et ici .sinon est facultatif
Comme il est dit sur la page if ,
else
est implicite surif
les constructions de blocs. Donc qu'est-ceif ... {} else {}
peut devenir
if ... {} {}
comme vous pouvez le voir sur certaines de mes réponses.
la source
Peut-être devrait-il être intégré sur une autre réponse, mais voilà:
Quand a
proc
n'a qu'un seul paramètre, il peut s'écrireau lieu de
La même chose s'applique à deux paramètres
proc
utilisant une barre oblique inverse; il peut s'écrireau lieu de
Pour un nombre plus élevé de paramètres, le
{}
code est plus court.la source
Parfois, il vaut la peine de remplacer les deux
set
instructions pour concaténer des chaînes par une seulelappend
instruction. Sur une construction comme, on peut substituerpar
La
append
commande a unincr
comportement similaire, qui initialise une variable non encore définie.Faites attention à ne pas vous tromper
append
enlappend
la source
Si vous gérez une liste avec une opération qui entrelace syntaxiquement entre chaque élément, vous pouvez parfois
join
utiliser des éléments pour effectuer une opération spécifique, au lieu de la traverser.Sur /codegolf//a/127042/29325 il y a un exemple:
Il
read stdin
donne23 214 52
alors split donnera la liste{23 214 52}
. Après,[join {23 214 52} +]
retournera la chaîne23+214+52
. Enfin,expr 23+214+52
le travail de sommationla source
split
.Si vous avez de gros codes, il est possible d'éviter plusieurs
expr
utilisationsnamespace pat tcl::mathop
au début. Il fournit une opération de préfixe-syntaxe comme une fonction Tcl régulière. Par exemple:Voir la page officielle du doc mathop
la source
Lorsque plusieurs variables se trouvent
set
sur des lignes suivantes, vous pouvez utiliser unelassign
au lieu de plusieursset
instructions pour obtenir le même effet.Un exemple est ma propre réponse /codegolf//a/105789/29325
Pour décider, il suffit de pondérer le nombre de variables (en supposant des variables à 1 lettre, comme cela est prévu lors du golf):
<5,
set
est golfeur= 5,
set
etlassign
générer le même nombre d'octets> 5,
lassign
est golfeurla source