Your version written in Java
private static final int[] VALUES = range(0, 16).map(FizzBuzz::fizzbuzz).toArray();
private static final int[] DELTAS = stream(VALUES).map(v -> v < 0? 0: 15).toArray();
private static final VectorSpecies<Integer> SPECIES = IntVector.SPECIES_256;
private static int fizzbuzz(int i) {
return i % 15 == 0? FIZZ_BUZZ: i % 5 == 0? BUZZ: i % 3 == 0? FIZZ: i;
}
public static int[] simdFizzBuzz(int length) {
var result = new int[length];
var v1 = IntVector.fromArray(SPECIES, VALUES, 0);
var v2 = IntVector.fromArray(SPECIES, VALUES, 8);
var d1 = IntVector.fromArray(SPECIES, DELTAS, 0);
var d2 = IntVector.fromArray(SPECIES, DELTAS, 8);
var i = 0;
var upperBound = length - length % 15;
for(; i < upperBound; i += 15) {
v1.intoArray(result, i);
v2.intoArray(result, i + 8);
v1 = v1.add(d1);
v2 = v2.add(d2);
}
for(; i < length; i++) {
result[i] = fizzbuzz(i);
}
return result;
}
quite cool indeed