Initial commit for 4.2

generic-observer
Selebrator 7 years ago
parent 801008236f
commit 7cdfc0e9fb

@ -0,0 +1,9 @@
package _4._2;
public abstract class Filter implements Sequence {
protected Sequence sequence;
public Filter(Sequence sequence) {
this.sequence = sequence;
}
}

@ -0,0 +1,10 @@
package _4._2;
public class Naturals implements Sequence {
private int last;
@Override
public int getNext() {
return ++this.last;
}
}

@ -0,0 +1,15 @@
package _4._2;
public class Primes extends Filter {
public Primes() {
super(new Naturals());
this.sequence.getNext(); // remove 1 form the sequence
}
@Override
public int getNext() {
int ret = this.sequence.getNext(); // also removes ret form the sequence
this.sequence = new ZapMultiples(ret, this.sequence);
return ret;
}
}

@ -0,0 +1,5 @@
package _4._2;
public interface Sequence {
int getNext();
}

@ -0,0 +1,19 @@
package _4._2;
public class ZapMultiples extends Filter {
private final int divisor;
public ZapMultiples(int divisor, Sequence sequence) {
super(sequence);
if(divisor < 2) {
throw new IllegalArgumentException("divisor must be >= 2");
}
this.divisor = divisor;
}
@Override
public int getNext() {
int next = this.sequence.getNext();
return next % divisor == 0 ? this.getNext() : next;
}
}
Loading…
Cancel
Save