Problem mit Array Abfragen und Vergleichen (if)

Hi,

wie gesagt: mit dem Code kann ich nichts anfangen, da ich keine Zeit habe, mich komplett durch die Funktion "test" zu wühlen und dabei nicht einmal die Regeln kenne, nach denen Du vergleichen willst.

Bitte poste ein exemplarisches Beispiel, anhand dessen ich erkennen kann, welche Daten Du nach welchen Regeln vergleichen willst.

Gruß
.
 
1,2,3,4 = true;
1,3,2,4 = false;
1,j,3,4 = true;
j,2,3,4= true;
j,2,4,3 = false,
12,13,1 = true;
12,j,1= true;
4,3,2,1= true;

einfach beweisen das es eine richtige Zahlenfolge ist, egal ob vor- oder rückwärts. Und ein Joker ("j") kann jede beliebige Zahl ersetzen.
Vorwärts habe ich es schon gelöst.
also
1234 klappt
1j34 auch....
aber
4,3,2,1 klappt nicht weil ich nicht weiß wie ich der Schleife sagen soll das die Reihenfolge andersrum ist...
 
Hi,

jetzt habe ich es verstanden. ;)

Probiers mal so:
Code:
var arr = new Array("4", "j", "2", "1"); // Test-Array

trace("Gültige Folge: " + test(arr));

function test(a) {
	function inSeq(v1, v2) {
		if (v1 == "j" || v2 == "j") return true;
		if (parseInt(v2, 10) > parseInt(v1, 10)) return true;
		return false;
	}
	var ok_up = true;
	var ok_down = true;
	for (var i=1; i<a.length; i++) {
		if (!inSeq(a[i - 1], a[i])) ok_up = false;
		if (!inSeq(a[i], a[i - 1])) ok_down = false;
	}
	var ok = (ok_up != ok_down) && (ok_up || ok_down);
	return ok;
}

Gruß
.
 
ja danke das scheint aber nur für die letzten Zwei Ziffern zu funktionieren...

es kann ja passieren das das Array so aussieht:
var arr = new Array("9", "j", "8", "j");
dann gibt er für beide komischerweise true :D
es gibt also maximal zwei Joker im Spiel. Mehr nicht.
 
Hi,

das liegt daran, dass bei meiner Variante ein Joker auch gilt, wenn zwischen der Zahl vorher und der nachher nur ein Abstand von 1 liegt, also z.B.:
Code:
1, 2, j, 3
Wenn so etwas nicht erlaubt sein soll, probiers mal so:
Code:
var arr = new Array("9", "j", "8", "j");

trace("Gültige Folge: " + test(arr));

function test(a) {
	function inSeq(v1, v2) {
		if (v1 == "j" || v2 == "j") return true;
		if (parseInt(v2, 10) > parseInt(v1, 10)) return true;
		return false;
	}
	var ok_up = true;
	var ok_down = true;
	for (var i=1; i<a.length; i++) {
		if (!inSeq(a[i - 1], a[i])) {
			ok_up = false;
		} else {
			if (a[i] - a[i - 2] < 2) ok_up = false;
		}
		if (!inSeq(a[i], a[i - 1])) {
			ok_down = false;
		} else {
			if (a[i - 2] - a[i] < 2) ok_down = false;
		}
	}
	var ok = (ok_up != ok_down) && (ok_up || ok_down);
	return ok;
}

Gruß
.
 

Neue Beiträge

Zurück