foreach {sym cmd} {π£ puts π£π― {puts -nonewline} π {set ::πΎ(cp)} π {string length} π’π€ {format %c}} \
{ interp alias {} $sym {} {*}$cmd }
proc isCmd sym {
expr {[info procs $sym] ne {}
|| [interp alias {} $sym] ne {}}
}
proc π¬ {s i} {string index $s [expr {$i - 1}]}
proc π€π’ c { scan $c %c }
proc π€ {args} {
set expr {(.*?)π(.+?)(?:π€¬(.+?))?$}
regexp $expr $args -> cond then else
set body [list if $cond $then]
while {$else ne ""} {
if {[regexp $expr $else -> cond then else]} {
lappend body elseif $cond $then
} else {
lappend body else $else
break
}
}
uplevel $body
}
proc β¨ args {
lassign $args {*}[switch [llength $args] {
1 { list var }
2 { list prompt var }
default { error }
}]
if {[info exists prompt]} { π£π― $prompt; flush stdout }
upvar $var x; set x [gets stdin]
}
proc πͺ£ {var = args} {
upvar $var x
set x [if {[llength $args] > 1} \
{ uplevel "expr $args" } \
else { join $args }]
}
proc π§ {name code {start 0}} {
array unset ::πΎ
set i 0; foreach line [split $code "\n"] {
if {![llength $line]} continue
if {![isCmd [set fst [lindex $line 0]]]} {
set ::πΎ(tag,$fst) $i
set line [join [lrange $line 1 end] " "]
}
set ::πΎ(code,$i) $line; incr i
}
π $start
}
proc π€Έ tag {
if {![string is integer $tag]} \
{ set tag [set ::πΎ(tag,$tag)] }
π $tag
}
proc π tag {
π€Έ $tag
while {[info exists ::πΎ(code,[π])]} {
set code [set ::πΎ(code,[π])]; incr ::πΎ(cp)
uplevel $code
}
}
proc πͺ¬ {var args} {
upvar $var x
expr {[info exists x] && $x ne {} ? $x : [lindex $args end]}
}
proc π {var = from -> to {by {}} {step 1}} {
upvar $var i; upvar #0 πΎ s
if { [πͺ¬ s(π,$var,tag)] ne [π] } {
foreach {k v} [list tag [π] step $step to $to] \
{ set s(π,$var,$k) $v }
set i $from
}
}
proc ‴ var {
upvar $var i
if {$i != [set ::πΎ(π,$var,to)]} {
πͺ£ i <- $i + [set ::πΎ(π,$var,step)]
π€Έ [set ::πΎ(π,$var,tag)]
}
}
# π§ FizzBuzz {
# βΈ πͺ£ X β [πͺ¬ X 0] + 1
# πͺ£ S β ""
# π€ $X > 42 π π€Έ πͺ
# π€ $X % 3 == 0 π πͺ£ S <- fizz
# π€ $X % 5 == 0 π πͺ£ S <- ${S}buzz
# π£ [πͺ¬ S $X]
# π€Έ βΈ
# πͺ π£ β
#}
# π§ {Π§ΠΈΡΠ»Π° Π€ΠΈΠ±ΠΎΠ½Π°ΡΡΠΈ} {
# β¨ "FIB N: " N
# πͺ£ X β 1
# πͺ£ Y β 1
# π£ "\n\nΠΠ΅ΡΠ²ΡΠ΅ $N ΡΠΈΡΠ΅Π» ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ:"
# π I β 1 β $N
# π£ $X
# πͺ£ Z β $X + $Y
# πͺ£ Y β $X
# πͺ£ X β $Z
# ‴ I
# }
π§ ROT13 {
β¨ S
π I β 1 β [π $S]
πͺ£ C β [π€π’ [π¬ $S $I]]
π€ 97 <= $C && $C < 110 π π€Έ β
π€ 65 <= $C && $C < 78 π π€Έ β
π€ 110 <= $C && $C <= 122 π π€Έ β
π€ 78 <= $C && $C <= 90 π π€Έ β
π π£π― [π’π€ $C]
‴ I
π€Έ πͺ
β πͺ£ C β $C + 13
π€Έ π
β πͺ£ C β $C - 13
π€Έ π
πͺ π£ β
}