[QUIZ#2] ZodiacXP (PHP)


ZodiacXP

Erfahrenes Mitglied
#1
Leider habe ich für die Erweiterung keine Zeit übers Wochenende, von daher hab ich schnell eine Funktion gemacht, die die PN in Infix umwandelt:
PHP:
function PNtoInfix($s) {
	$s = strrev($s);
	while (preg_match("!([^\s]+)\s([^\s]+)\s([\+\-\*\/]+)!", $s))
		$s = preg_replace("!([^\s]+)\s([^\s]+)\s([\+\-\*\/]+)!", "($2$3$1)", $s);
	return $s;
}
So kann man wunderbar mithilfe von eval rechnen lassen:
PHP:
$s = "* * + 1 2 + 3 4 2";
eval("echo ".PNtoInfix($s).";");
Selbst die Variablen sind noch an der richtigen Stelle, was die Erweiterung sogar noch einfacher macht. Einfach noch rekursiv durch deren Werte ersetzen, dann wär's getan. Schade, das ich gleich weg bin.
 
#2
Hi ZodiacXP!

Klein, aber fein! :)

Eine Frage habe ich: warum invertierst Du den Term und in folge die RegEx?
So bekommst Du doch Probleme bei Fließkommazahlen: + 1.2 2 = 4.1 ?!

Liebe Grüße,
Mark.
 

ZodiacXP

Erfahrenes Mitglied
#3
Ui. Das strrev ist noch von einem vorherigen Lösungsversuch übrig geblieben und im eifer des Gefechts glatt vergessen. War alles so: schnell, schnell.
Ohne strrev kann man ja das Pattern bisschen drehen dann passt's wieder.