Power set: Difference between revisions
→{{header|Go}}: Bug fix. Oschmid identified the bug, but the fix had problems. Here's a better fix.
m (added whitespace around a link.) |
(→{{header|Go}}: Bug fix. Oschmid identified the bug, but the fix had problems. Here's a better fix.) |
||
Line 1,028:
set add method. Adding elements with the add method ensures the uniqueness property.
<lang go>package main
import (
)
Line 1,043 ⟶ 1,042:
// implemented and stored in sets.
type elem interface {
}
Line 1,056 ⟶ 1,055:
func (i Int) Eq(e elem) bool {
}
func (i Int) String() string {
}
Line 1,070 ⟶ 1,069:
// uniqueness of elements can be ensured by using add method
func (s *set) add(e elem) {
}
}▼
}
func (s *set) has(e elem) bool {
}
}
func (s set) ok() bool {
for i, e0 := range s {
for _, e1 := range s[i+1:] {
if e0.Eq(e1) {
return false
}
}
}
}
// elem.Eq
func (s set) Eq(e elem) bool {
}
}
}
}
}
// elem.String
func (s set) String() string {
}
}
}
}
// method required for task
func (s set) powerSet() set {
u = append(u, append(er[:len(er):len(er)], es))
}
}
▲ return r
return r
}
func main() {
}
fmt.Println("\n(extra credit)")
fmt.Println("\n(regression test for earlier bug)")
s = set{Int(1), Int(2), Int(3), Int(4), Int(5)}
fmt.Println(" s:", s, "length:", len(s), "ok:", s.ok())
ps = s.powerSet()
fmt.Println(" 𝑷(s):", "length:", len(ps), "ok:", ps.ok())
for _, e := range ps {
if !e.(set).ok() {
panic("invalid set in ps")
}
}
}</lang>
{{out}}
Line 1,156 ⟶ 1,174:
s: {1,2,3,4} length: 4
𝑷(s): {∅,{1},{2},{1,2},{3},{1,3},{2,3},{1,2,3},{4},{1,4},{2,4},{1,2,4},{3,4},{1,3,4},{2,3,4},{1,2,3,4}} length: 16
(extra credit)
empty: ∅ len: 0
𝑷(∅): {∅} len: 1
𝑷(𝑷(∅)): {∅,{∅}} len: 2
(regression test for earlier bug)
s: {1,2,3,4,5} length: 5 ok: true
𝑷(s): length: 32 ok: true
</pre>
|