Themabewertung:
  • 1 Bewertung(en) - 5 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Algorithmen-Plugin
#11
Hey, guter Ansatz! Allerdings nimmt er die 2er irgendwie nicht. Sieht lokal z.B. so aus:

R U' R' U' R U R D R' U' R D' R' U2 R' U'
(die letzten 3 sollen nicht verlinkt sein, macht das plugin hier aber schon)
[Bild: signatur_image.php?name=Felix+K%F6nig&pb...=1&motiv=1][Bild: img.php?id=2009KONI03&ranking=NR&event_1...nsparent=1]
Zitieren
#12
Uups, stimmt ja, Ziffern gelten als Wortbestandteile. Moment...
Zitieren
#13
Ugh, muss mich morgen nochmal dran setzen, bin grad zu muede und wollte sowieso schon im Bett sein...
Zitieren
#14
Oder probier's grad nochmal so:

#((\b[UDFBLR]['2]?( |$)){3,})#
Zitieren
#15
Ja, die 2 nimmt er, das klappt!
Aber das letzte Zeichen einer Zeile linkt er nicht. Wahrscheinlich liegt das Problem im ( |$), da er ein alleiniges $ nicht als Zeilenende interpretieren kann oder so...

EDIT: Okay, es klappt wenn man #blablaausdruck#m dahinterschreibt, damit der multi-line mode aktiviert wird.
[Bild: signatur_image.php?name=Felix+K%F6nig&pb...=1&motiv=1][Bild: img.php?id=2009KONI03&ranking=NR&event_1...nsparent=1]
Zitieren
#16
Hat allerdings immer das Leerzeichen hinter dem Algo mitgenommen, das war unschoen. Ich hab's fuer's erste aufgegeben, den Ausdruck fuer einen Zug nicht zu wiederholen. Hier meine jetzige Loesung samt Tester mit Testfaellen:

PHP-Code:
<?php
test
"foo {R U' R' U' R U R D R' U' R D' R' U2 R' U'} bar" );
test"foo {R U R' U} Und das U vom Und nicht mitnehmen" );
test"foo {R U R' U}\nNeue Zeile..." );
test"foo {R U R' U}" );
function 
test $goal ) {     # remove solution markers and try to recreate them
  
$in preg_replace'/[{}]/'''$goal );
  
$move "\b[UDFBLR]('|2|\b)";
  
$out preg_replace"#($move$move){2,})#"'{$1}'$in );
  
printf"%-7s %s\n"$out==$goal?"ok:":"falsch:"$out );

In den Testfaellen ist die Loesung markiert (mit geschweiften Klammern). Die Markierung wird erstmal entfernt, das ist dann die Testeingabe. Dann wird versucht, die Loesung wieder zu finden, und das Ergebnis wird mit dem Ziel verglichen.

Ausgabe:
Code:
ok:     foo {R U' R' U' R U R D R' U' R D' R' U2 R' U'} bar
ok:     foo {R U R' U} Und das U vom Und nicht mitnehmen
ok:     foo {R U R' U}
Neue Zeile...
ok:     foo {R U R' U}

Also die Zeilen
PHP-Code:
$move "\b[UDFBLR]('|2|\b)";
$out preg_replace"#($move$move){2,})#"'{$1}'$in ); 
sind die eigentliche Loesung, es wird nach einem Zug gesucht, der von mindestens zwei weiteren Zuegen gefolgt wird (immer mit einem Leerzeichen Abstand, das koennte man aber auch noch quantifizieren). Kannst es auch ohne die $move-Variable machen, aber das find ich unuebersichtlicher:
PHP-Code:
$out preg_replace"#(\b[UDFBLR]('|2|\b)( \b[UDFBLR]('|2|\b)){2,})#"'{$1}'$in ); 

Mit so einem Prograemmchen bekommt man viel besser Hilfe, siehe auch:
The SSCCE - Short, Self Contained, Correct (Compilable), Example
Kannst es ja mal so im PHP-Forum zeigen und sie fragen, ob sie da noch bessere Ideen haben. Damit verstehen sie besser, um was es geht, und koennen eigene Ideen auch gleich ganz einfach testen.
Zitieren
#17
Das vorhin lief auch schon gut, aber es gibt da immernoch ein Problem:

Algorithmen werden auch da geparsed, wo sie es garnicht sollen, z.B. in HTML:
<a href="blabla/?alg=U2 R F R2"></a>
Das fette würde geparsed werden, solls aber nicht. Hatte es vorher gelöst indem keine algos geparsed werden, vor denen noch Algo-Bruchteile stehen. Ist aber eine schlechte Lösung gewesen
[Bild: signatur_image.php?name=Felix+K%F6nig&pb...=1&motiv=1][Bild: img.php?id=2009KONI03&ranking=NR&event_1...nsparent=1]
Zitieren
#18
Und die naechste spannende Frage ist dann, wie du Klammern mitnimmst, z.B.:
((FR'F'R)U²)((FR'F'R²)U²R')
Wenn du es mit einer Anwendung eines regulaeren Ausdrucks hinbekommst, einen solchen Algorithmus zu erkennen und die korrekte Klammerung zu ueberpruefen, hast du dir echt 'nen Nobelpreis oder so verdient (ganz im Ernst (aber den Witz wird wohl kaum jemand verstehen...)).
Zitieren
#19
(22.07.2011, 03:09)Felk schrieb: Algorithmen werden auch da geparsed, wo sie es garnicht sollen, z.B. in HTML:
<a href="blabla/?alg=U2 R F R2"></a>
Das fette würde geparsed werden, solls aber nicht.

Also zumindest an der Stelle ist das ja sowieso falsch. Eine URL sollte keine Leerzeichen enthalten, solltest du durch Unterstriche ersetzen. So macht Lucas es naemlich selbst, da sieht das so aus:

Code:
[url="http://alg.garron.us/?alg=R_U_R-_U-_R_U_R-_U-"]R U R' U' R U R' U'[/url]

Kann aber im Textteil ja noch gefunden werden. Da vielleicht zusaetzlich nach [url.../url] suchen und die ueberspringen.
Zitieren
#20
Und mir fällt grade auf, dass Cuberotations nicht dazugezählt werden. L' U R' z R2 U R' D U' R D' R2 U R' D
Zitieren


Gehe zu: