Das machst Du - fast - genauso.
Nimm eine Frage vom Typ "kurzer Text". Nennen wir sie "QPool"
Darin dieses script; fast identisch mit dem vorigen.
Code:
<script type="text/javascript" charset="utf-8">
function shuffle(array) {
var currentIndex = array.length, temporaryValue, randomIndex;
// While there remain elements to shuffle...
while (0 !== currentIndex) {
// Pick a remaining element...
randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex -= 1;
// And swap it with the current element.
temporaryValue = array[currentIndex];
array[currentIndex] = array[randomIndex];
array[randomIndex] = temporaryValue;
}
return array;
}
$(document).on('ready pjax:scriptcomplete',function(){
// Fill the array
var arr = [];
for (var i = 1; i < 51; i++) {
arr.push(("0"+i).slice(-2));
}
arr = shuffle(arr);
anumbers = arr.slice(0,15).join('#');
$('#question{QID} input[type="text"]').val("#"+anumbers+'#');
$('#question{QID}').hide();
});
</script>
Du erhältst dann so etwas in der Frage:
#12#34#03#45#21#26#46#01#16#32#38#44#09#36#39
Die Rauten haben zwei Aufgaben.
1. Ohne die führende Raute würde der Text mit "12" beginnen; wenn man nun nach der "12" sucht, hat sie den Index "0". "0" bedeutet aber wiederum, "nicht gefunden". Dies wird so vermieden.
2. Wenn man die einzelnen Zahlen nicht trennen würde ("1234034521..."), würde auch die Zahl "23" gefunden, die nicht in Pool enthalten ist.
Und jetzt ist klar wie man weiter vorgeht.
Die 1. Teilfrage wird gezeigt, wenn "01" im Text enthalten ist, die 2., wenn "02" enthalten ist, usw.
Dazu dient die Funktion "strpos", die - wie oben schon gesagt, entweder "0" zurückgibt, wenn der Teilstring nicht enthalten ist, oder die Stelle, an welcher er beginnt.
Also:
Teilfrage 1: strpos(QPool,"01")>0
Teilfrage 2: strpos(QPool,"02")>0
Teilfrage 3: strpos(QPool,"03")>0
...
Teilfrage 50: strpos(QPool,"50")>0
zufällig nur 13-16 Optionen
Da musst Du Dich schon einigen. Dieser Wert wird im script fest eingetragen (arr.slice(0,15)), also hier 15.
Sicherlich könnte man jetzt anfangen, durch das script einen String mit 16 Ziffern zu erzeugen.
Danach eine Gleichung, die eine Zufallszahl zwischen 13 und 16 erzeugt.
Dann noch eine Gleichung, die den String mit Hilfe der Funktion "substr" auf die dann zufällige Länge kürzt.
Und dien nimmt man dann für die Relevanzgleichung.
Joffm