31 lines
No EOL
1.2 KiB
JavaScript
31 lines
No EOL
1.2 KiB
JavaScript
import { MersenneTwister } from "../mersennetwister.js";
|
|
|
|
export class SequencePuzzle {
|
|
constructor( puzzleData ) {
|
|
this.puzzleData = puzzleData;
|
|
|
|
this.mersennetwister = new MersenneTwister( this.puzzleData.seed );
|
|
this.operators = [
|
|
"ADD"
|
|
];
|
|
|
|
this.length = Math.max( Math.round( this.mersennetwister.randomRange( 30, 70 ) / 10 ), 5);
|
|
this.answerposition = ( Math.floor( this.mersennetwister.randomRange( 15, this.length * 500 ) / 10 ) - 1 ) % this.length;
|
|
this.operator = this.operators[ ( Math.floor( this.mersennetwister.randomRange( 15, this.length * 500 ) / 10 ) - 1 ) % this.operators.length ];
|
|
this.factor = Math.round( this.mersennetwister.randomRange( 10, 100 ) / 10 );
|
|
this.start = Math.round( this.mersennetwister.randomRange( 10, 97 ) / 10 );
|
|
|
|
this.parts = new Array( this.length );
|
|
this.parts[ 0 ] = this.start;
|
|
|
|
for ( var i = 1; i < this.length; i++ ) {
|
|
this.parts[ i ] = this.parts[ i - 1] + this.factor;
|
|
}
|
|
|
|
this.answer = this.parts[ this.answerposition ];
|
|
this.parts[ this.answerposition ] = "?";
|
|
|
|
document.write( "Puzzle id: " + this.puzzleData.id + " (seed: " + this.puzzleData.seed + ")" + "<br>");
|
|
document.write( this.parts.join( " " ) + "<br><br>" );
|
|
}
|
|
} |