2022-03-24

Missing Permutation

只是做一點程式練習。


You are given possible permutations of the string 'PERL'.

PELR, PREL, PERL, PRLE, PLER, PLRE, EPRL, EPLR, ERPL,
ERLP, ELPR, ELRP, RPEL, RPLE, REPL, RELP, RLPE, RLEP,
LPER, LPRE, LEPR, LRPE, LREP

Write a script to find any permutations missing from the list.

#!/usr/bin/env tclsh

proc permutations { list size } {
    if { $size == 0 } {
        return [list [list]]
    }

    set retval {}
    for { set i 0 } { $i < [llength $list] } { incr i } {
        set firstElement [lindex $list $i]
        set remainingElements [lreplace $list $i $i]
        foreach subset [permutations $remainingElements [expr { $size - 1 }]] {
            lappend retval [linsert $subset 0 $firstElement]
        }
    }

    return $retval
}

set compare [list PELR PREL PERL PRLE PLER PLRE EPRL EPLR ERPL \
ERLP ELPR ELRP RPEL RPLE REPL RELP RLPE RLEP \
LPER LPRE LEPR LRPE LREP]

set result [list]
foreach r [permutations [list P E R L] 4] {
    set nr [join $r ""]
    lappend result $nr
}

set result [lsort $result]
set compare [lsort $compare]
set len [llength $result]
for {set i 0} {$i < $len} {incr i} {
    set ri [lindex $result $i]
    set ci [lindex $compare $i]

    if {[string compare $ri $ci] != 0} {
        puts $ri
        break
    }
}

2022-03-05

PgTcl 2.8.0

PgTcl


這是一個 bug fix 的版本,不過釋出的原始碼包裡 configure.in 裡的版本還是 2.7.7,如果使用者會在意這件事的話,可以自己修正這件事(在 configure.in 檔案將 2.7.7 改為 2.8.0,然後執行 autoconf, ./configure 與 make)。