June 2018 Update

This commit is contained in:
Ingy döt Net 2018-06-22 20:57:24 +00:00
parent ba8067c3b7
commit 22f33d4004
5278 changed files with 84726 additions and 14379 deletions

View file

@ -1,9 +1,6 @@
(defn powerset [coll]
(reduce (fn [a x]
(->> a
(map #(set (concat #{x} %)))
(concat a)
set))
(into a (map #(conj % x)) a))
#{#{}} coll))
(powerset #{1 2 3})

View file

@ -1,9 +1,9 @@
package main
import (
"bytes"
"fmt"
"strconv"
"strings"
)
// types needed to implement general purpose sets are element and set
@ -85,7 +85,7 @@ func (s set) String() string {
if len(s) == 0 {
return "∅"
}
var buf bytes.Buffer
var buf strings.Builder
buf.WriteRune('{')
for i, e := range s {
if i > 0 {
@ -104,7 +104,7 @@ func (s set) powerSet() set {
var u set
for _, er := range r {
er := er.(set)
u = append(u, append(er[:len(er):len(er)], es))
u = append(u, append(er[:len(er):len(er)], es))
}
r = append(r, u...)
}

View file

@ -0,0 +1,2 @@
S=["a","b","c"]
forsubset(#S,s,print1(vecextract(S,s)" "))

View file

@ -1,21 +1,8 @@
use strict;
use warnings;
sub powerset(&@) {
my $callback = shift;
my $bitmask = '';
my $bytes = @_/8;
{
my @indices = grep vec($bitmask, $_, 1), 0..$#_;
$callback->( @_[@indices] );
++vec($bitmask, $_, 8) and last for 0 .. $bytes;
redo if @indices != @_;
}
my @set = (1, 2, 3);
my @powerset = powerset(@set);
sub set_to_string {
"{" . join(", ", map { ref $_ ? set_to_string(@$_) : $_ } @_) . "}"
}
print "powerset of empty set:\n";
powerset { print "[@_]\n" };
print "powerset of set {1,2,3,4}:\n";
powerset { print "[@_]\n" } 1..4;
my $i = 0;
powerset { ++$i } 1..9;
print "The powerset of a nine element set contains $i elements.\n";
print set_to_string(@powerset), "\n";

View file

@ -0,0 +1,21 @@
use strict;
use warnings;
sub powerset(&@) {
my $callback = shift;
my $bitmask = '';
my $bytes = @_/8;
{
my @indices = grep vec($bitmask, $_, 1), 0..$#_;
$callback->( @_[@indices] );
++vec($bitmask, $_, 8) and last for 0 .. $bytes;
redo if @indices != @_;
}
}
print "powerset of empty set:\n";
powerset { print "[@_]\n" };
print "powerset of set {1,2,3,4}:\n";
powerset { print "[@_]\n" } 1..4;
my $i = 0;
powerset { ++$i } 1..9;
print "The powerset of a nine element set contains $i elements.\n";

View file

@ -1,4 +1,4 @@
use ntheory "vecextract";
my @S=("a","b","c");
my @PS = map { "[".join(" ",vecextract(\@S,$_))."]" } 0..2**scalar(@S)-1;
say join(" ",@PS);
use ntheory "forcomb";
my @S = qw/a b c/;
forcomb { print "[@S[@_]] " } scalar(@S);
print "\n";

View file

@ -1,5 +1,5 @@
use ntheory "forcomb";
my @S=("a","b","c");
my @S = qw/a b c/;
for $k (0..@S) {
# Iterate over each $#S+1,$k combination.
forcomb { print "[@S[@_]] " } @S,$k;

View file

@ -1,14 +1,4 @@
use Set::Object qw(set);
sub powerset {
my $p = Set::Object->new( set() );
foreach my $i (shift->elements) {
$p->insert( map { set($_->elements, $i) } $p->elements );
}
return $p;
}
my $set = set(1, 2, 3);
my $powerset = powerset($set);
print $powerset->as_string, "\n";
use ntheory "vecextract";
my @S = qw/a b c/;
my @PS = map { "[".join(" ",vecextract(\@S,$_))."]" } 0..2**scalar(@S)-1;
say join(" ",@PS);

View file

@ -1,6 +1,14 @@
package Set {
sub new { bless { map {$_ => undef} @_[1..$#_] }, shift; }
sub elements { sort keys %{shift()} }
sub as_string { 'Set(' . join(' ', sort keys %{shift()}) . ')' }
# ...more set methods could be defined here...
use Set::Object qw(set);
sub powerset {
my $p = Set::Object->new( set() );
foreach my $i (shift->elements) {
$p->insert( map { set($_->elements, $i) } $p->elements );
}
return $p;
}
my $set = set(1, 2, 3);
my $powerset = powerset($set);
print $powerset->as_string, "\n";

View file

@ -1,11 +1,6 @@
use List::Util qw(reduce);
sub powerset {
@{( reduce { [@$a, map { Set->new($_->elements, $b) } @$a ] }
[Set->new()], shift->elements )};
package Set {
sub new { bless { map {$_ => undef} @_[1..$#_] }, shift; }
sub elements { sort keys %{shift()} }
sub as_string { 'Set(' . join(' ', sort keys %{shift()}) . ')' }
# ...more set methods could be defined here...
}
my $set = Set->new(1, 2, 3);
my @subsets = powerset($set);
print $_->as_string, "\n" for @subsets;

View file

@ -1,3 +1,11 @@
use List::Util qw(reduce);
sub powerset {
@_ ? map { $_, [$_[0], @$_] } powerset(@_[1..$#_]) : [];
@{( reduce { [@$a, map { Set->new($_->elements, $b) } @$a ] }
[Set->new()], shift->elements )};
}
my $set = Set->new(1, 2, 3);
my @subsets = powerset($set);
print $_->as_string, "\n" for @subsets;

View file

@ -1,5 +1,3 @@
use List::Util qw(reduce);
sub powerset {
@{( reduce { [@$a, map([@$_, $b], @$a)] } [[]], @_ )}
@_ ? map { $_, [$_[0], @$_] } powerset(@_[1..$#_]) : [];
}

View file

@ -1,8 +1,5 @@
my @set = (1, 2, 3);
my @powerset = powerset(@set);
use List::Util qw(reduce);
sub set_to_string {
"{" . join(", ", map { ref $_ ? set_to_string(@$_) : $_ } @_) . "}"
sub powerset {
@{( reduce { [@$a, map([@$_, $b], @$a)] } [[]], @_ )}
}
print set_to_string(@powerset), "\n";

View file

@ -0,0 +1,23 @@
# Project : Power set
# Date : 2018/01/13
# Author : Gal Zsolt (~ CalmoSoft ~)
# Email : <calmosoft@gmail.com>
list = ["1", "2", "3", "4"]
see powerset(list)
func powerset(list)
s = "{"
for i = 1 to (2 << len(list)) - 1 step 2
s = s + "{"
for j = 1 to len(list)
if i & (1 << j)
s = s + list[j] + ","
ok
next
if right(s,1) = ","
s = left(s,len(s)-1)
ok
s = s + "},"
next
return left(s,len(s)-1) + "}"

View file

@ -0,0 +1,15 @@
func powersetFrom<T>(_ elements: Set<T>) -> Set<Set<T>> {
guard elements.count > 0 else {
return [[]]
}
var powerset: Set<Set<T>> = [[]]
for element in elements {
for subset in powerset {
powerset.insert(subset.union([element]))
}
}
return powerset
}
// Example:
powersetFrom([1, 2, 4])

View file

@ -0,0 +1,2 @@
//Example:
powersetFrom(["a", "b", "d"])