2020-06-06

Tcl: Hidden Squares

一個 string first 的範例,用來取得 Hidden Squares 問題的解:
#!/usr/bin/tclsh
#
# Hidden Squares:
# A number n may have squares hidden among its digits. For instance, 
# in the number 1625649, the consecutive digits 1, 4, 9, 16, 25, 49, 
# 64, 256 and 625 are all squares.
#

namespace path {::tcl::mathop ::tcl::mathfunc}

puts -nonewline "Please input a number: "
flush stdout
gets stdin number
if {$number <= 0} {
    puts "Number requires > 0."
    exit
}

set max [int [sqrt $number]]
for {set i 1} {$i <= $max} {incr i} {
    set n [* $i $i]
    if {[string first $n $number] >= 0} {
        puts -nonewline "$n "
    }
}
puts ""

這裡也使用了 namespace path。

Tcl 支援 namespace 的概念,一個 namespace 是 function 和變數的集合,和  C++ 類似,透過封裝可以保證不會被其它的 namespace 的變數和命令所影響,而且你可以隨時新增、改名與刪除裡面的成員。

沒有留言: