# Programmierwettbewerb



## HD1920 (12. Mrz 2014)

Hallo, ich möchte gerne einfach so mal wissen, ob jemand Lust auf einen Programmierwettbewerb (natürlich in Java) hat. Falls ja, würde ich mich über eine gute Idee auch freuen (bitte nicht sowas auf die Art wie "wer schafft die tollste GUI" oder "wer schafft es den Code möglichst kurz zu machen").


----------



## Sen-Mithrarin (13. Mrz 2014)

an sich hätte ich schon lust drauf um einfach mal meinen können zu testen ... und auch erlich zu sein und an dem punkt wo ich mit DOC (was übrigens das einzige hilfsmittel sein sollte) nicht mehr weiter komme mir das auch einzugesthen

frage nur : wird lediglich "bewertet" ob man es überhaupt schafft ... oder gibt es auch kreterien (sollten vorher geklärt werden) nach denen man einen "sieger" fest machen kann ?
man sollte wenn dann aber schon recht genau festlegen was man meint ... sonst entbrennen wieder diskusionen über "ich dachte du meinstest dies und jenes" und jeder fühlt sich als sieger und macht die anderen niedriger ...

sollte wenn dann aber schon was recht komplexes sein und auch mit einigen restriktionen wie das man z.b. bestimmte helper nicht nutzen darf oder dafür eigene work-a-rounds schreiben muss oder sowas ... um halt wirklich vom einfachen bit-geschubse bis zum umfangreichen projekt alles drin zu haben ... sonst wird es eher nur ne fach-spezifische sache und sehr einseitig


----------



## TheWhiteShadow (13. Mrz 2014)

Man sollte sich die einzelnen Bereich überlegen, die vorkommen sollen.
XML, Datenbank, Servlet, AWT/Swing, ...

Damit kann man dann überlegen was es konkret sein soll.

Als echte Herausforderung ist ne KI immer toll, aber die Beurteilung ist da nicht trivial.

Wie wäre es mit einem Parser für arithmetische Operationen?


----------



## Lonsdaleit (13. Mrz 2014)

An der Uni hatte ich in einem Seminar als Thema für einen Fachvortrag die *Algorithmik von Schachcomputern.*
Das finde ich ein sehr interessantes Thema.

Die Programmierten Algorithmen kann man dann auch einfach gegeneinander antreten lassen und der Gewinner ist der jenige mit dem gewinnenden Algorithmus.

Dahinter steckt dann auch nicht nur stupides Herunterprogrammieren.


Optimierungsproblem/Entscheidungstheorie (Was ist die Beste der möglichen Stellungen?)
Evolution (Lernen der Spielmuster des Gegners, Anpassen der Gewichtungen in der Stellungsbewertung)
Codeoptimierung (Der schnellere Code kann mehr Züge vorrausberechnen (man sollte eine maximale Zeit pro Zug festlegen))

gruß
Lonsdaleit


----------



## hauptDev (13. Mrz 2014)

An sich schon, mir würde es da dann u.a. auch primär darum gehen, dass sich vielleicht andere mal meinen Code anschauen, da ich bisher wenig Feedback von außen dazu habe.

Da sollte man natürlich auch die Frage stellen, auf welchem Schwierigkeitsgrad das Ganze läuft oder ob man sogar unterschiedliche Schwierigkeitsgrade anbietet (mit weniger oder mehr Funktionalität).

Wie Sen-Mithrarin schon sagt, sollte man aber auch Einschränkungen einbauen, gerade was externe Bibliotheken angeht. 

KI ist auch äußerst interessant, wobei man dann vllt. Schnittstellen vorgeben sollte, wenn wirklich die KIs gegeneinander antreten sollen.


----------



## Lonsdaleit (13. Mrz 2014)

hauptDev hat gesagt.:


> KI ist auch äußerst interessant, wobei man dann vllt. Schnittstellen vorgeben sollte, wenn wirklich die KIs gegeneinander antreten sollen.



Bei einem Schach-Algorithmus ist die Definition der Schnittstellen sehr einfach:

Es gibt 2 Schnittstellen:
ausgehende Schnittstelle (Der Zug als String oder die neue Stellung)
eingehende Schnittstelle (aktuelle Stellung mit Flag wer am Zug ist)

Das ganze kann dann auf einer gemeinsamen Oberfläche zusammenlaufen - ob nun grafisch oder in Notationsvorschrift spielt dabei keine Rolle.
An dieser Stelle sollte allerdings überprüft werden, ob der Zug gültig ist - zur Absicherung.

Die Bibliotheken festzulegen sollte auch überschaubar sein.
Gerade bei einer solchen Problematik ist es von großem Interesse nahezu alles selbst zu programmieren - die richtigen/besseren/guten Algorhitmen sind ja hier die Herausforderung.
Ohne mathematische und analytische Vorarbeit wird man hier nicht weit kommen.

Gruß


----------



## ARadauer (13. Mrz 2014)

TheWhiteShadow hat gesagt.:


> Als echte Herausforderung ist ne KI immer toll, aber die Beurteilung ist da nicht trivial.



Die Beurteilung ist sogar sehr trivial. Ist es eine Spiel KI, kann man sie gegeneinander antreten lassen...

zb Mühle.... mach ein Framework, dass zwei KIs gegeneinander spielen lässt, veröffentliche die KI Schnittstelle oder jeder kann seinen "Spieler" einreichen...


----------



## Tobse (13. Mrz 2014)

Hier mach ich immer mit: CCC | Catalysts Coding Contest.
Die Anforderung ist ziemlich hoch (Ein Programm muss Rätsel lösen, Muster erkennen und verarbeiten, komplexe Berechnungen durchführen etc.) und man kann mit fast jeder Sprache mitmachen.
Hier geht es aber nicht darum, wer den besten code schreibt sondern wessen code am besten funktioniert und am schnellsten fertig ist (weshalb ich dabei immer auf PHP setze weil das sehr gut in quick n dirty ist). Man bekommt input-daten und muss die Outputs an den Server schicken, diese werden dann geprüft und bei korrektheit ist man ein Level weiter.
Die ersten 1-2 Level kann man das noch im Kopf / von Hand lösen, danach werden es aber so komplexe (und so viele) Daten, dass man ein Programm dafür schreiben *muss*.


----------



## Sen-Mithrarin (14. Mrz 2014)

@tobse
sieht nett aus ... ist aber glaube ich eher weniger das was hier gesucht wird ...
ich hab mal soweit drüber geguckt ... und die daten an die man ohne registrierung einsehen kann sind dann teilweise doch sehr speziell

ich mein ... mal so als beispiel

"Calculate the perimeter of the a Koch snowflake in each iteration for the given length of equilateral triangle"
"Correct a given equation by moving sticks"
"Implement the bowling counting algorithm with strikes and spares."
"Compute the minimal genetic distance between viruses"

ich mein mal ... WHAT ?

ok .. das mit dem bowling klingt ja noch machbar ... aber die genetische distanz zwischen viren ? hab ich n biologie-studium ?
oder das mit dem "moving sticks" ... klar ... für n menschen sicher recht simpel und auf blatt papier zu lösen ... aber als "programm" ? da muss man erstmal die lage der sticks erkennen und daraus dann die zahlen bilden ... und dann dem ding noch höhere mathematik und sämtliche lösungen ... auch die völlig "sinnfreien" ... beibringen und dann mit fingers-crossed hoffen das man auf was kommt

das sind für mich schon keine enfachen "übungs-aufgaben" mehr wo man mal sein wissen testen kann ... da muss man schon sehr viel allgemein-wissen und vorlagen haben um da gewisse dinge überhaupt umsetzen zu können ...

und dann noch die ansage : es wird kein allgemeiner internetzugang bereitgestellt
gut ... man soll sich ja auch nicht alles ausm netz ziehen können oder sonst was machen ... aber für gewisse dinge von denen man kein plan hat muss man sich erstmal n plan machen ... was bestimmt auch schon wertvolle zeit kosten dürfte ...



ich denke DAS ist dann doch ETWAS weit übers ziel hinaus was hier angedacht ist


----------



## Tobse (14. Mrz 2014)

Sen-Mithrarin hat gesagt.:


> @tobse
> sieht nett aus ... ist aber glaube ich eher weniger das was hier gesucht wird ...
> ich hab mal soweit drüber geguckt ... und die daten an die man ohne registrierung einsehen kann sind dann teilweise doch sehr speziell
> 
> ...



Wenn du dir das näher angeschaut hättest, wäre dir aufgefallen, dass es weitaus weniger kompliziert ist. Das einzige Wissen, was die vorraussetzen ist grundlegene Mathematik (Arthimetik und ein bisschen analysis) und wie man sie in der Programmiersprache der Wahl richtig implementiert. Bei der "Moving sticks to solve a given Equation" sahen die Aufgabenstellungen so aus:

```
Input:
4 + 9 = 3

Output
4 + 5 = 9
```
Es war sogar gegeben welche Zahlen sich durch hinzufügen/entfernen eines Sticks wie verändern. Mein Code fürs letzte Level war ganze 200 zeilen lang...

Was letztes mal die Aufgabe war: Ein Aufzug wird gerufen. Jetzt muss er zum richtigen Stockwerk fahren und dann ins zielstockwerk fahren. Wie lange ist er unterwegs (Formeln für die Zeitberechnung mit Beschleunigung und Bremsweg waren gegeben).
Als Beispiel also die Lösung für Level 2 (Aufgabenstellung im Anhang):

```
<?php
function calcTravelTime($acc, $deAcc, $maxSpeed, $dist) {
	// case 1 min-distance
	$accTime = $maxSpeed / $acc;
	$deAccTime = $maxSpeed / $deAcc;
	$accDist = 0.5 * $acc * pow($accTime, 2);
	$deAccDist = 0.5 * $deAcc * pow($deAccTime, 2);

	$result = -1;

	if ($dist - $accDist - $deAccDist >= 0)
	{ // case 1
		$maxSpeedDist = $dist - $accDist - $deAccDist;
		$maxSpeedTime = $maxSpeedDist / $maxSpeed;
		$result = ($accTime + $maxSpeedTime + $deAccTime) * 1000;
	}
	else
	{ // case 2
		$accTime = sqrt($dist / ($acc / 2 + ($deAcc / 2) * pow($acc / $deAcc, 2)));
		$deAccTime = ($acc * $accTime) / $deAcc;
		$result = ($accTime + $deAccTime) * 1000;
	}
	return (int) ($result + 1);
}

$input = file("input/" . $GLOBALS["argv"][1] . ".txt");
foreach ($input as &$l)
{
	$l = explode(" ", $l);
}
$acc = floatval($input[0][0]);
$maxSpeed = floatval($input[0][1]);
$deAcc = floatval($input[0][2]);
$nReq = floatval($input[1][0]);

$time = 0;
$lastFloor = 0;

for ($i = 0;$i < $nReq;$i++)
{
	$tDiff = $input[$i + 2][2] - $time;
	if ($tDiff > 0)
	{
		// echo "last was finished at " . $time . " so we wait " . $tDiff . " for new input\n";
		$time += $tDiff;
	}
	// echo "new request is on floor " . $input[$i + 2][0] . " so we go there until ";
	$time += $lastFloor != $input[$i + 2][0] ? calcTravelTime($acc, $deAcc, $maxSpeed, abs($lastFloor - $input[$i + 2][0]) * 4.5) : 0;
	// echo $time . "\n";
	$time += calcTravelTime($acc, $deAcc, $maxSpeed, abs($input[$i + 2][0] - $input[$i + 2][1]) * 4.5);
	// echo "and then travel until ";
	echo $time . " ";
	$lastFloor = $input[$i + 2][1];
}
?>
```

Ich halte das für durchaus machbar...


----------



## ARadauer (14. Mrz 2014)

Sen-Mithrarin hat gesagt.:


> das sind für mich schon keine enfachen "übungs-aufgaben" mehr wo man mal sein wissen testen kann ...



Das ist auch nicht Sinn der Sache, das ist ein Wettbewerb. Da wirst du keine erste Semester Baby Beispiele bekommen.


@HD1920: wie schauts jetzt aus? machst du was... ich denke sicher, dass die leute lust auf sowas hätten..


----------



## HD1920 (14. Mrz 2014)

Also, grundsätzlich scheint Interesse zu bestehen. Wie wäre es mit einem Programm, das ein Sierpinski-Dreieck aus einer SVG-Datei um eine Stufe verfeinert und dann in best. Datei schreibt? Und noch ein Wort zu Bibliotheken: Aus Fairnessgründen würde ich jedenfalls nur solche zulassen, die in 7u51 mitgeliefert werden.


----------



## Lonsdaleit (14. Mrz 2014)

Das Sierpinski-Dreieck an sich finde ich keine große Herausforderung.
Die Geschwindigkeit in der das Dreieck aufgebaut wird durchaus.

Bei dem Schachalgorithmus - oder vergleichbarem - bin ich dabei. (ich werde es vermutlich auch ohne Wettbewerb machen - einfach aus Interesse!)


----------



## HD1920 (15. Mrz 2014)

Lonsdaleit hat gesagt.:


> Das Sierpinski-Dreieck an sich finde ich keine große Herausforderung.
> Die Geschwindigkeit in der das Dreieck aufgebaut wird durchaus.


Dann wird die Geschwindigkeit eben von einer Jury getestet. Ach ja, ich selbst mach nicht mit, ich kontrolliere nur die Ergebnisse.


----------



## Sen-Mithrarin (15. Mrz 2014)

Tobse hat gesagt.:


> Wenn du dir das näher angeschaut hättest, wäre dir aufgefallen, dass es weitaus weniger kompliziert ist. Das einzige Wissen, was die vorraussetzen ist grundlegene Mathematik (Arthimetik und ein bisschen analysis) und wie man sie in der Programmiersprache der Wahl richtig implementiert.



sorry ... dann hast du mein post nicht richtig gelesen



> und die daten an die man ohne registrierung einsehen kann



es geht doch schon damit los das schon eine registrierung verlangt wird nur um sich beispiele bereits gelaufener events anzusehen ...
man bekommt also so noch nicht mal die möglichkeit sich einen eindruck zu machen was überhaupt verlangt wird ... da bei jedem und allen diese nette meldung kommt : "komm schon, registrier dich doch bitte wenn du dir das ansehen willst"
ähm ... NOPE ...
sorry ... aber ich melde mich doch nicht irgendwo an nur um mir einen eindruck zu holen ob ich mich überhaupt anmelden will ...



sicher ... nach deiner aussage und dem beispiel ist es wirklich relativ einfache mathematik ... da würde ich mit sicherheit vieles mit papier und bleistift hinbekommen ... aber warum werden dann solche beispiel-infos zurück gehalten ? hier wirklich ein ziemlich negativer kritikpunkt an den organisator

wobei das dann schon eher weniger was mit "programmier-wettbewerb" zu tun hat ... sondern eher in die richtung geht : hier habt ihr n paar aufgaben ... entwickelt dazu n paar algorithmen ... und implementiert das dann in der sprache eurer wahl ...


sicher ... wenn man schon angibt : jede sprache ist ok ... muss man sich auf das grundlegende reduzieren was jede sprache kann (bzw können sollte) und wofür die maschine auf der sie läuft entwickelt wurde : mathematik ... aber das dann als "programmierer-wettbewerb" auszupreisen geht doch etwas weit


außerdem kommen dabei viele fachgebiete für die viele sprache ja extra entwickelt wurde zu kurz oder gar nicht vor
da wäre man mit aufgaben die sich zumindest auf eine sprache ... oder eine sprach-familie festlegen besser dran weil man so deutlich mehr aspekte der konkreten sprache beleuchten könnte anstatt alles soweit abzustumpfen das man möglichst viele sprachen nutzen kann


----------



## Tobse (15. Mrz 2014)

Naja, es ist schon mehr wie pure Mathematik. Gerade bei der Aufzug.Aufgabe oder bei den Streichhölzern steckt sehr viel Logik und Verständnis für Programmabläufe dahinter.

Und welche Speziellen Aufgaben würde eine speziell für ein Fachbgebiet entwickelte Sprache dann bieten? Vielleicht viel Regex bei Perl, viel Web-Basiertes mit PHP. Und bei Java?


----------



## Shine (15. Mrz 2014)

Also ich würde mal sagen, das so kleine Games wie Schach oder Ähnliches am besten für einen Wettbewerb geeignet sind. (Mal so nebenbei, was würdet ihr von einem kleinen Poker-Bot-Turnier halten?)

Die Frage ist nur, wer den Server zur Verfügung stellt, auf dem dann die ganzen Daten verarbeitet werden?


----------



## Tobse (15. Mrz 2014)

Shine hat gesagt.:


> Also ich würde mal sagen, das so kleine Games wie Schach oder Ähnliches am besten für einen Wettbewerb geeignet sind. (Mal so nebenbei, was würdet ihr von einem kleinen Poker-Bot-Turnier halten?)



Ein Schach- oder Poker Turnier fände ich sehr cool. (Das geht ja mit allen Brettspielen, Mühle, Dame, vllt sogar sowas wie Siedler).

Einen Server aufzutreiben ist weniger das Problem, denke ich. Nur besteht für den Veranstalter dann der eigene Wettbewerb darin einen Server zu schreiben der das Spiel quasi austrägt. Dass sich jemand findet, der dumm genug ist, die ganzen Clients bei sich auf dem Computer direkt auszuführen halte ich für unwahrscheinlich...

[EDIT]Wobei man hier natürlich wieder kritisieren könnte, dass ja (fast) jede Programmiersrpache Sockets hat und damit wieder jeder selbst entscheiden kann welche Sprache er/sie nimmt...[/EDIT]


----------



## Sen-Mithrarin (17. Mrz 2014)

naja ... server wäre nun nicht das problem ... ich hab z.b. einen recht leistungsfähigen und günstigen vServer ... und da läuft aktuell bis auf n MC server nichts weiter drauf (nicht mal ne domain ist aufgeschaltet)

auf die frage wofür java spezialisiert ist ...

java wurde ja ursprünglich mit 2 zielen entwickelt : dynamische websites und embedded usage
letzteres ist ja relativ schnell geflopt ... vermutlich war es einfach noch nicht die zeit einen kühlschrank mit java dazu zu befähigen selbst einzukaufen ... aber wenn man sich heutiges anguckt war die idee an sich damals schon mal gar nicht so falsch

zum zweiten punkt : dynamische websites ... tja .. auch das ist mitlerweile geflopt und mit den neuesten einschränkungen von J7U51 für otto-normal-user ja schon fast nicht mehr nutzbar wenn sich der entwickler nicht drum kümmert


ergo : die zwei "hauptgebiete" für java ursprünglich erdacht wurde gibt es nicht mehr
das man mit java an sich aber trotzdem allerhand machen kann ist nicht zuletzt dank minecraft bekannt
viele firmen nutzen es für ihre software ... oder aber auch als backends für webseiten ... wo java ja (zumindest meiner ansicht nach) aktuell sein größtes feld hat : application server


oder halt mal hier das eine oder andere tool was der eine oder andere hobby-bastler mal zusammengezimmert hat ... aber DAS trifft auf fast alle sprachen zu ...


was also sinnvoll für einen "java"-programmier-wettbewerb kommt wäre eine aufgabe die entweder auf java-spezfiscihe dinge eingeht ... was weis ich ... irgendwelche bestimmte "problem-stellungen" oder auf besondere implementierungen eingeht ... oder z.b. direkt in richtung JavaEE und server-programmierung ...
persönlich fällt mir dazu jetzt leider nichts ein ... aber stimmt schon : vieles (ich bin sicher eigentlich alles) was mit java machbar ist kann man auch in anderen sprachen umsetzen ... alleine weil java selbst ja auch nur auf ner VM aufsetzt ...

was java aber als vorteil hat : es gibt unglaublich viele und komplexe libs mit denen sich der "umfang" sehr weit ausdehnen lässt ... darum sollte man bei einem "wettbewerb" hier auf jeden fall einen riegel vor schieben und sich z.b. auf die SE-api beschränken (so fern für die aufgabe möglich oder sinnvoll)

z.b. macht es keinen sinn wenn man aufgaben mit bestimmten codecs wie z.b. Base64 oder ähnliche gibt und dann aber sagt das man sich Base64 selbst schreiben müsste ...
klar .. als kleines "extra" könnte man es sich geben ... aber alleine das es genug referenz-implementierungen gibt (sogar 1-zu-1 von wiki nutzbar) macht es sinnfrei ... da kommt es dann am ende wirklich nur auf millisekunden der performance an


----------



## Shine (18. Mrz 2014)

> irgendwelche bestimmte "problem-stellungen"


OK, dann starte ich jetzt mal nen kleinen Wettbewerb.

Wer es als erstes schafft mit Java nen Algo zu schreiben mit dem man in annehmbarer Zeit aus dem Produkt zweier Primzahlen diese beiden Primfaktoren wieder zurückrechnen kann, der bekommt von mir 10 €.

Regeln:
- der Algo muss selbstverständlich mit allen möglichen PrimProdukten funktionieren
- Rechennetzwerke sind nicht erlaubt
- die Lösung muss auch dann noch in annehmbarer Zeit errechnet werden, wenn das Primprodukt mehrere 1000 dezimalstellen besitzen.
- Super- bzw. Quanten-Computer sind nicht erlaubt
*
Los gehts!!!*


----------



## stg (18. Mrz 2014)

Shine hat gesagt.:


> OK, dann starte ich jetzt mal nen kleinen Wettbewerb.
> 
> Wer es als erstes schafft mit Java nen Algo zu schreiben mit dem man in annehmbarer Zeit aus dem Produkt zweier Primzahlen diese beiden Primfaktoren wieder zurückrechnen kann, der bekommt von mir 10 €.
> 
> ...



Ich frage mich, wie lange es dauert, bis du das erste Primzahlsieb zugeschickt bekommst


----------



## redJava99 (18. Mrz 2014)

"mehrere 1000 dezimalstellen" ... scheitert ja schon am Datentyp.


----------



## Shine (18. Mrz 2014)

> Ich frage mich, wie lange es dauert, bis du das erste Primzahlsieb zugeschickt bekommst


Wenn das jemand so zurechtbastelt, das damit die Regeln eingehlaten werden... Warum nicht. =)



> "mehrere 1000 dezimalstellen" ... scheitert ja schon am Datentyp.



Ja, da ist kreativer Umgang mit ByteArrays gefragt. ^^

Nachtrag:
Ich vergaß zu sagen... Wer mir seinen Algorithmus zuschickt, tritt damit automatisch alle Rechte an selbigem an mich ab aber was soll's, immerhin gibts ja 10€ dafür.


----------



## dcc (19. Mrz 2014)

Wie wäre es mit dem kürzesten, abstürzenden Programm welches keine Kompilierfehler wirft?


----------



## Unlikus (19. Mrz 2014)

Lonsdaleit hat gesagt.:


> An der Uni hatte ich in einem Seminar als Thema für einen Fachvortrag die *Algorithmik von Schachcomputern.*
> Das finde ich ein sehr interessantes Thema.
> 
> Die Programmierten Algorithmen kann man dann auch einfach gegeneinander antreten lassen und der Gewinner ist der jenige mit dem gewinnenden Algorithmus.
> ...



Die Idee halte ich für durchaus interessant. Aber Leute mit Schacherfahrung sind mir glaube zu überproportial im Vorteil. Der Letze Punkt ist nicht so extrem wichtig, weil die Rechenzeit pro Zug exponetial zunimmt, da muss man schon verdammt viel optimieren um nur einen weiteren Zug zu schaffen


----------



## Lonsdaleit (19. Mrz 2014)

dcc hat gesagt.:


> Wie wäre es mit dem kürzesten, abstürzenden Programm welches keine Kompilierfehler wirft?


Das ist keine Herausforderung. Einen Out-of-Memory-Error kann man ganz leicht über das Erzeugen eines String-ArrayList erzeugen.
Jedes Stringobjekt bekommt automatisch mindestens eine bestimmte Länge reserviert (ich glaube es waren 20 Byte).
Wenn man also eine große Länge für die Array-List festlegt, wird direkt eine große Menge an Speicher reserviert....und schon hat man einen Out-of-Memory-Error.




Unlikus hat gesagt.:


> Die Idee halte ich für durchaus interessant. Aber Leute mit Schacherfahrung sind mir glaube zu überproportial im Vorteil. Der Letze Punkt ist nicht so extrem wichtig, weil die Rechenzeit pro Zug exponetial zunimmt, da muss man schon verdammt viel optimieren um nur einen weiteren Zug zu schaffen



Der Vorteil an Schacherfahrung ist minimal. Die Regeln müssen bekannt sein. Den Rest soll das Programm automatisch erarbeiten (Gewichtung von Stellungen, etc).

Und die Möglichkeiten der Optimierung sind durchaus nicht zu vernachlässigen. Wenn man genau weiß, welche Stellungen überhaupt bewertet werden müssen, bzw. welche Stellungen in Frage kommen, dann kann man sich das Bewerten von vielen Stellungen ersparen -> Man kann mehr Züge vorraus berechnen, da weniger Stellungen zu bewerten sind.


Gruß
Lonsdaleit


----------



## Tobse (19. Mrz 2014)

Lonsdaleit hat gesagt.:


> Und die Möglichkeiten der Optimierung sind durchaus nicht zu vernachlässigen. Wenn man genau weiß, welche Stellungen überhaupt bewertet werden müssen, bzw. welche Stellungen in Frage kommen,



Was wiederum durch Erfahrung im Schach deutlich vereinfacht wird.


----------



## Lonsdaleit (19. Mrz 2014)

Tobse hat gesagt.:


> Was wiederum durch Erfahrung im Schach deutlich vereinfacht wird.



Nein, man braucht ein mathematisches Verständnis über den Aufbau von Bäumen und wie man diese schneiden bzw. minimieren kann.


----------



## Tobse (19. Mrz 2014)

Lonsdaleit hat gesagt.:


> Nein, man braucht ein mathematisches Verständnis über den Aufbau von Bäumen und wie man diese schneiden bzw. minimieren kann.



Bitte was? Um zu wissen ob eine Stellung "Sinn" macht, ist es durchaus notwendig, dass ich das Spiel kenne. EIn völliger Neuling würde z.B. nicht ausschließen, im ersten Zug einen Bauern auf B,C,F oder D zu bewegen. Jemand mit einiger Spielerfahrung aber schon weil das völliger Schwachsinn ist und einen nicht weiter bringt.


----------



## Lonsdaleit (19. Mrz 2014)

Tobse hat gesagt.:


> Bitte was? Um zu wissen ob eine Stellung "Sinn" macht, ist es durchaus notwendig, dass ich das Spiel kenne. EIn völliger Neuling würde z.B. nicht ausschließen, im ersten Zug einen Bauern auf B,C,F oder D zu bewegen. Jemand mit einiger Spielerfahrung aber schon weil das völliger Schwachsinn ist und einen nicht weiter bringt.



Das ist wieder die Frage der Gewichtung.
Diese Bewertung bzw. Gewichtung wird durch den Algorithmus der die Stellungen analysiert ermittelt. Anhand gewonnener/verlorener Spiele kann der Algorithmus die Gewichtung bei der Bewertung einer Stellung selbst anpassen.
Dafür musst du selbst nicht wissen, was eine gute Stellung ist und was nicht.
Wenn du eine gute Gewichtung aufgrund deiner Erfahrung vorgeben kannst, wird der Algorithmus weniger Spiele brauchen, um eine funktionierende Gewichtung zu ermitteln, aber grundsätzlich benötigst du nur die Kenntnis über die Regeln.

Was ich meinte ist, dass man den Baum stuzen kann, um Stellungen, die man nicht erreichen wird.

Ich möchte hier nicht detailierter oder mit Beispielen darauf eingehen, weil dies den Algorithmus wirklich erheblich verbessern kann bzw. es ermöglicht mehrere Züge vorraus zu planen.


----------



## Sen-Mithrarin (21. Mrz 2014)

@Shine
das ist keine java-relevante aufgabe ... und RSA-keys zu knacken ... na wenn da einer was findet mit dem man RSA2048 in "annehmbarer" zeit auf nem normalen desktop knacken könnte ... ich glaube kaum das man sowas hier veröffentlichen würde ... und schon gar nicht in richtung : hier haste n 10er für die rechte an deinem code


----------



## Shine (21. Mrz 2014)

> das ist keine java-relevante aufgabe


Meinetwegen kann's auch in ner anderen Sprache programmiert werden.



> ich glaube kaum das man sowas hier veröffentlichen würde


Das verstehe ich natürlich, deswegen kann mir der Algo selbstverständlich auch gern per PN zugeschickt werden. =)



> und schon gar nicht in richtung : hier haste n 10er für die rechte an deinem code


OK, hast mich überredet... Ich mach 20€ daraus. ^^


----------



## Sen-Mithrarin (21. Mrz 2014)

1) ich muss mal TO fragen : geht es eigentlich grundsätzlich um das thema : "programmieren" ... oder war diese frage java-spezifisch gemeint ?
2) ich bin urheber meines codes ... und ich werde dieses recht mit sicherheit nicht freiwillig abtreten ... schon gar nicht für sowas billiges (für 20€ würd ich mir vielleicht die mühe machen Base64 selbst zu implementieren ... wenn überhaupt)


----------



## Tobse (21. Mrz 2014)

Und wann versteht ihr, dass Shine das nicht ernst meint? Is ja nicht mit an zu gucken....


----------



## hauptDev (21. Mrz 2014)

Ich dachte seine Smileys sollten die Ernsthaftigkeit seiner Aussagen untermauern. :toll:


----------



## HD1920 (24. Mrz 2014)

Shine hat gesagt.:


> OK, dann starte ich jetzt mal nen kleinen Wettbewerb.
> 
> Wer es als erstes schafft mit Java nen Algo zu schreiben mit dem man in annehmbarer Zeit aus dem Produkt zweier Primzahlen diese beiden Primfaktoren wieder zurückrechnen kann, der bekommt von mir 10 €.
> 
> ...



Das dauert ewig! Wenn überhaupt, sollte es besser reichen, dass der Algo für Carmichael-Zahlen funktioniert (was ich nicht für 10€ mache, sondern sogar kostenlos!).



redJava99 hat gesagt.:


> "mehrere 1000 dezimalstellen" ... scheitert ja schon am Datentyp.



Schon mal was von java.math.BigInteger gehört?


----------



## Tobse (20. Apr 2014)

Aaalso, das ganze ist hier ja etwas eingeschlafen. Ich hatte die Idee, dass man ein Poker-Turnier veranstalten könnte. Jeder schreibt den Logik-Code bei sich und zum Turnier wird sich dann mit einem Server verbunden. Der Client, der zuerst alle Anderen ausgespielt oder nach einger festgelegten anzahl an Runden die meissten Chips hat, hat gewonnen.

Ich wäre bereit den Server bereitzustellen und die Server-Software sowie eine Library für das Protokoll zu erstellen. ALlerdings nur wenn sich auch genügend Mitspieler finden. Wie fändet ihr das?


----------



## !GH!Budd (20. Apr 2014)

Klingt lustig. Wie hoch ist der Einsatz? Bzw was gibts zu gewinnen? Payouts? Limits? Blindlevel?


----------



## Tobse (20. Apr 2014)

Auf Blinds und eine Chip-Verteilung müsste man sich dann einigen. Was einen Gewinn angeht kann ich nicht viel Beisteuern. Man könnte sich aber beispielsweise darauf einigen, dass jeder Teilnehmer maximal 10€ einsatz setzen kann und das dann 10.000 in Chipwert entspricht. Am Ende bekommt man dann auch so viel wieder raus, wie der eigene Code erspielt hat.


----------



## strußi (20. Apr 2014)

bei den themen, die vorgeschlagen werden, merk ich gerade, dass ich noch ziehmlich am anfang meiner laufbahn stehe^^


----------



## !GH!Budd (21. Apr 2014)

Hast du denn die API/den Server schon? Wenn ja, immer her damit...
 ich finde das Projekt ziemlich interessant, hab mich mit Poker schon etwas beschäftigt, aber noch kein größeres Softwareprojekt alleine entwickelt. Kann man auch Teams bilden? Kriegt man eine Rückmeldung über das Setzverhalten der Gegner?


----------



## Tobse (21. Apr 2014)

Nein, API / Server gibts leider noch nicht. Wenn mir jemand den Server abnimmt wär ich dankbar, die API und das Protokoll würd ich aber dann gern selbst definieren (zu Übungszwecken bzgl. API-Design), implementiert haben muss ich sie aber auch nicht.

Wenn wir das umsetzen bin ich stark dafür, dass der Server die Clients mit allen möglichen Infos versorgt, die zur Verfügung stehen. Wann jemand wie viel setzt, wieviel Geld wer hat, wer gerade Big Blind/Small Blind/Dealer ist u.s.w. u.s.w.
Ob man zusätzlich was ins Protokoll einbaut um Eckdaten abzufragen (Eigener Kontostand, Rundenposition etc) liese sich dann diskutieren.


----------

