fork download
  1. foreach {sym cmd} {🗣 puts 🗣🚯 {puts -nonewline} 📍 {set ::💾(cp)}} \
  2. { interp alias {} $sym {} {*}$cmd }
  3.  
  4. proc isCmd sym {
  5. expr {[info procs $sym] ne {}
  6. || [interp alias {} $sym] ne {}}
  7. }
  8.  
  9. proc 🤔 {args} {
  10. set expr {(.*?)😉(.+?)(?:🤬(.+?))?$}
  11. regexp $expr $args -> cond then else
  12. set body [list if $cond $then]
  13. while {$else ne ""} {
  14. if {[regexp $expr $else -> cond then else]} {
  15. lappend body elseif $cond $then
  16. } else {
  17. lappend body else $else
  18. break
  19. }
  20. }
  21. uplevel $body
  22. }
  23.  
  24. proc ⌨ args {
  25. lassign $args {*}[switch [llength $args] {
  26. 1 { list var }
  27. 2 { list prompt var }
  28. default { error }
  29. }]
  30. if {[info exists prompt]} { 🗣🚯 $prompt; flush stdout }
  31. upvar $var x; set x [gets stdin]
  32. }
  33. proc 🪣 {var = args} {
  34. upvar $var x
  35. set x [if {[llength $args] > 1} \
  36. { uplevel "expr $args" } \
  37. else { join $args }]
  38. }
  39.  
  40. proc 🧊 {name code {start 0}} {
  41. array unset ::💾
  42. set i 0; foreach line [split $code "\n"] {
  43. if {![llength $line]} continue
  44. if {![isCmd [set fst [lindex $line 0]]]} {
  45. set ::💾(tag,$fst) $i
  46. set line [join [lrange $line 1 end] " "]
  47. }
  48. set ::💾(code,$i) $line; incr i
  49. }
  50. 🚀 $start
  51. }
  52.  
  53. proc 🤸 tag {
  54. if {![string is integer $tag]} \
  55. { set tag [set ::💾(tag,$tag)] }
  56. 📍 $tag
  57. }
  58.  
  59. proc 🚀 tag {
  60. 🤸 $tag
  61. while {[info exists ::💾(code,[📍])]} {
  62. set code [set ::💾(code,[📍])]; incr ::💾(cp)
  63. uplevel $code
  64. }
  65. }
  66.  
  67. proc 🪬 {var args} {
  68. upvar $var x
  69. expr {[info exists x] && $x ne {} ? $x : [lindex $args end]}
  70. }
  71.  
  72. proc 🌀 {var = from -> to {by {}} {step 1}} {
  73. upvar $var i; upvar #0 💾 s
  74. if { [🪬 s(🌀,$var,tag)] ne [📍] } {
  75. foreach {k v} [list tag [📍] step $step to $to] \
  76. { set s(🌀,$var,$k) $v }
  77. set i $from
  78. }
  79. }
  80.  
  81. proc ⤴ var {
  82. upvar $var i
  83. if {$i != [set ::💾(🌀,$var,to)]} {
  84. 🪣 i <- $i + [set ::💾(🌀,$var,step)]
  85. 🤸 [set ::💾(🌀,$var,tag)]
  86. }
  87. }
  88.  
  89. 🧊 FizzBuzz {
  90. ☸ 🪣 X ← [🪬 X 0] + 1
  91. 🪣 S ← ""
  92. 🤔 $X > 42 😉 🤸 🚪
  93. 🤔 $X % 3 == 0 😉 🪣 S ← fizz
  94. 🤔 $X % 5 == 0 😉 🪣 S ← ${S}buzz
  95. 🗣 [🪬 S $X]
  96. 🤸 ☸
  97. 🚪 🗣 ✋
  98. }
  99.  
  100. 🧊 {Числа Фибоначчи} {
  101. "FIB N: " N
  102. 🪣 X ← 1
  103. 🪣 Y ← 1
  104.  
  105. 🗣 "\n\nПервые $N чисел последовательности:"
  106. 🌀 I ← 1$N
  107. 🗣 $X
  108. 🪣 Z ← $X + $Y
  109. 🪣 Y ← $X
  110. 🪣 X ← $Z
  111. ⤴ I
  112. }
  113.  
Success #stdin #stdout 0.02s 5424KB
stdin
25
stdout
1
2
fizz
4
buzz
fizz
7
8
fizz
buzz
11
fizz
13
14
fizzbuzz
16
17
fizz
19
buzz
fizz
22
23
fizz
buzz
26
fizz
28
29
fizzbuzz
31
32
fizz
34
buzz
fizz
37
38
fizz
buzz
41
fizz
✋
FIB N: 

Первые 25 чисел последовательности:
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
6765
10946
17711
28657
46368
75025
121393