Autor Beitrag
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: So 29.04.07 16:02 
Hallo und herzlich willkommen zum ersten Programmierwettbewerb in der Entwickler-Ecke seit langem!

Da das Programmieren zu einem Programmierer-Forum genauso dazugehört, wie die Fragen zu verschiedensten Themen aus dem Bereich der Entwicklung von Software, möchten wir hier allen Interessenten einmal die Möglichkeit geben, ihre Kreativität unter Beweis zu stellen.

Die Aufgaben werden hierbei jedoch bewusst nicht in 5 Minuten lösbar sein, da das zugrundeliegende Thema etwas umfangreicherer Natur ist, aber trotzdem sehr spannend für die meisten sein dürfte. Eine Anregung zu diesem Thema erhielten die Initiatoren user profile iconBenBE und user profile iconMartok dabei von einem Posting was user profile iconLuckie bereits vor längerer Zeit auf seiner Homepage veröffentlicht hat, in dem es um die simulierte Evolution von Computer-Programmen ging.
Dabei waren drei Dinge bemerkenswert:

  1. Es gibt eine Möglichkeit Computer-Programme sich selbstständig optimieren zu lassen!
  2. Dabei entstehen Programme, die effizienter als Menschengeschriebene Programme sind!
  3. Die Programme sind völlig unverständlich


Und wenn das ein Buchautor hinbekommt, so sollte es doch auch für einen Programmierer mit guten Grundkenntnissen eine lösbare Aufgabe darstellen, solch ein Programm zu entwickeln.

Um jedoch für alle die gleichen Chancen zu gewähren und die Evolution der Programme möglichst einfach gestalten zu können, haben wir uns eine Variante einer Turing-Maschine als Austragungsort ausgesucht, die mit wenigen Befehlen (nämlich genau 9 Stück). Ihr habt es erraten: Als Programmiersprache nutzen wir eine Variante von Suche in Wikipedia BRAINFUCK :mrgreen:

Die Aufgaben:


  1. Schreibe ein BF-Programm, was "Hello world!" auf dem Bildschirm ausgibt. Optimiere dieses so weit es geht. Alle Optimierungsschritte sollten erkennbar sein!

  2. Schreibe ein BF-Programm, was zwei Zahlen einliest, diese Potenziert UND dezimal auf dem Bildschirm ausgibt.

  3. Schreibe ein Programm, was für eine beliebige (Text-)Eingabe ein BF-Programm angibt, was genau diese Eingabe als Ausgabe liefert. Das ausgegebene BF-Programm soll dabei automatisch von einem Programm der Evolution unterworfen werden, um dieses soweit es geht zu optimieren. Das ausgegebene Programm muss den untenstehenden Anforderungen genügen.

  4. Dokumentiere alle geschriebenen Programme


Die Anforderungen:


  • Die fertigen BF-Programme müssen auf dem von Martok im DF vorgestellten BF-Interpreter lauffähig sein und fehlerfrei laufen.

  • Der Arbeitsspeicher des BF-Interpreters ist dabei auf maximal 8193 Speicherzellen begrenzt.

  • Die Maximallaufzeit für ein Programm darf maximal 16*n^2+65536 Takte betragen, wobei n die Anzahl auszugebender Zeichen angibt.


Die Regeln:


  1. Alle Programme müssen selbstgeschrieben, oder von selbst geschriebenen Programmen selbst geschrieben sein. ;-)

  2. Fehler in user profile iconMartoks BF-Interpreter sind zu melden, damit diese behoben werden können.

  3. Die Nutzung von Fremd-Sources ist in der Dokumentation anzugeben.

  4. Die eingesendete Lösung muss alle BF- und Delphi-Sources beinhalten, sowie die geschriebene Dokumentation.

  5. Abgabe der Programme ist der 01.09.2007 00:00:00 UTC.

  6. Von jedem User wird lediglich eine Lösung bewertet. Welche das bei Mehrfacheinsendungen ist, muss vor Abgabeschluss schriftlich (PN\Email) vorliegen. Bei Nichtvorliegen losen wir zufällig eine aus.


Die Bewertung:


  • Die Initiatoren werden Referenz-Lösungen für die BF-Programme schreiben, die vor Beginn der Bwertung im DF veröffentlicht werden). Die Größe und Ausführungszeit dieser Programme wird reziprok ins Verhältnis gesetzt zu den eingesendeten Lösungen. Ein gleichschnelles und gleichgroßes Programm erhält 100 Punkte, ein halb so großes Programm 200.

  • Die Punktzahlen für Größe und Ausführungsgeschwindigkeit werden für jede Teillösung multipliziert.

  • Die Punktzahlen der Einzellösungen werden zur Gesamtpunktzahl multipliziert.

  • Auf die Dokumentation gibt es eine Maximal-Punktzahl von 5 Punkten, für Lesbarkeit, Umfang, Detailreichtum, Verständlichkeit und weitere Faktoren. Diese wird mit den Punkten der Programmlösungen multipliziert.


Der Preis:

Als Preis winkten dem Gewinner eine Verewigung im Museum der Entwickler-Ecke.
Geld- und\oder Sachpreise können wir leider nicht bereitstellen.

Viel Spaß und Erfolg beim Coden wünschen euch
user profile iconBenBE und user profile iconMartok


Moderiert von user profile iconKlabautermann: Topic aus Algorithmen, Optimierung und Assembler verschoben am So 29.04.2007 um 17:35

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.


Zuletzt bearbeitet von BenBE am So 29.04.07 16:25, insgesamt 1-mal bearbeitet
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: So 29.04.07 16:23 
Schöne Idee, aber auf Grund von Brainfuck enthalte ich mich. Darauf hab ich nun wirklich keine Lust.

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: So 29.04.07 16:31 
Ich weiss nicht, ob man mit einem Ev.Alg. ein Programm sinnvoll optimieren lassen kann, wenn die Antwort nur korrekt (= richtige Ausgabe) oder falsch ist... Der Raum der Lösungen (mit korrekter Ausgabe) ist extram dünnbesetzt. Man kann sich fragen, in wiefern hier (kleine) Mutationen, Kreuzungen usw. Sinn machen. Von Hand zu optimieren ist vermutlich effizienter.
Schade, dass die Aufgaben nur sehr wenig mit Delphi zu tun haben. Die Idee und das Thema wären aber super.
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: So 29.04.07 16:33 
Das Entwickler-Ecke Team möchte an dieser Stelle darauf hinweisen, dass es sich um keinen offiziellen Entwickler-Ecken Wettbewerb handelt.

Da wir solche Userinitiativen begrüßen und unterstützen markieren wir das Thema als Wichtig.

Da der hier versprochene Preis zwar angefragt aber niemals zugesagt wurde, machen wir eine Erwähnung des Gewinners im Museum von der Resonanz des Wettbewerbes abhängig.

Den Teilnehmern wünschen wir viel Erfolg.

Euer Entwickler-Ecke Team
Leuchtturm
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1087

Win Vista, Knoppix, Ubuntu
Delphi 7 Pe, Turbo Delphi, C#(VS 2005 Express), (X)HTML + CSS, bald Assembler
BeitragVerfasst: So 29.04.07 16:38 
Ich werde aufgrund von Brainfuck wohl auch nicht mitmachen. :( Wenn es Delphi gewesen wäre hätte ich vllt mitgemacht. Die Idee ist aber gut. :zustimm:

_________________
Ich bin dafür verantwortlich was ich sage - nicht dafür was du verstehst.
BenBE Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: So 29.04.07 16:51 
Hi,

Martok und ich haben selber vor der Umsetzung dieses Wettbwerbs ein wenig rumexperimentiert und sind dabei bereits auf recht gute Methoden gekommen, wie man eine solche Evolution realisieren kann. Man darf dazu allerdings nicht Schwarz-Weiß-Denken nutzen, sondern muss sich ein wenig am Beispiel der Natur orientieren.

Auch sind alle Aufgaben (außer die 1.) bewusst so gestellt, dass sie automatisiert gelöst werden können, wenn man eine Idee zur Realisierung findet. Für 3. ist explizit keine Kenntnis für Brainfuck notwendig (haben es ausprobiert und haben bisher relativ brauchbare Möglichkeiten gefunden).

Die Sprachwahl für diesen Wettbewerb wäre sicherlich mit Delphi besser an dieses Forum angelehnt, macht aber die Entwicklung der zugrundeliegenden Algorithmen um einiges komplizierter. Die Wahl von Brainfuck für die zu bewertenden Programme hat daher 2 Gründe:
1. Vereinfachung der Evolutionsprogramme, da man sich nicht um die Programmsyntax kümmern muss
2. Vereinfachung der Bewertung, da alle Programme aus einfachen, objektiv vergleichbaren Befehlen bestehen.

Da wir selber einige Startschwierigkeiten mit unseren Ansätzen hatten, haben wir bewusst sehr viel Zeit gegeben. Wir hoffen, dass es nicht allein an der etwas ungewöhnlichen Programmiersprache scheitern sollte.

P.S.: Eure Optimierungsprogramme dürfen sehr wohl in Delphi (oder auch jeder anderen gewünschten Programmiersprache) geschrieben sein.

MfG,
BenBE.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
andras
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 460

Win XP, Win Vista Home Premium, Ubuntu Dapper Drake
Delphi 2005 Pers
BeitragVerfasst: Mi 09.05.07 12:31 
hi!

ich würd mal sagen brainfuck is f***ed!
aba trotzdem, ich bin dabei!
nur 2 fragen:

zu 2. das programm soll wahrscheinlich auch der evolution unterworfen werden und optimiert sein

zu 3. ich versteh nicht so ganz was ich da machen soll. könnte mir das jemand bitte genauer erklären.
Thx!
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5285
Erhaltene Danke: 28

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Mi 09.05.07 13:34 
dein Programm bekommt die Eingabe "Hello World" zum Beispiel, dann soll es ein BF Programm erzeugen, welches genau dieses als Ausgabe hat. (und das mit evolutionärer Optimierung)

mfg
andras
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 460

Win XP, Win Vista Home Premium, Ubuntu Dapper Drake
Delphi 2005 Pers
BeitragVerfasst: Do 10.05.07 12:51 
user profile iconF34r0fTh3D4rk hat folgendes geschrieben:
dein Programm bekommt die Eingabe "Hello World"...

damit ist mein delphi proggi gemeint und nicht das BF, das wird ja dann erst erzeugt, oder?

user profile iconF34r0fTh3D4rk hat folgendes geschrieben:
(und das mit evolutionärer Optimierung)

also echzeit evolution :P
BenBE Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Do 10.05.07 13:25 
user profile iconandras hat folgendes geschrieben:
hi!

ich würd mal sagen brainfuck is f***ed!
aba trotzdem, ich bin dabei!
nur 2 fragen:

zu 2. das programm soll wahrscheinlich auch der evolution unterworfen werden und optimiert sein

Wie das BF-Programm von 2. erstellt wird\wurde ist jedem selbst überlassen, solange der Weg dokumentiert ist, was zur Lösungsfindung genutzt wurde.

user profile iconandras hat folgendes geschrieben:
zu 3. ich versteh nicht so ganz was ich da machen soll. könnte mir das jemand bitte genauer erklären.
Thx!

Wie gerade bereits geschrieben: Du hast ein Delphi-Programm, welches für einen gegebenen Eingabe-String ein BF-Programm schreibt, was diesen String als Ausgabe liefer. Anschließend optimiert dein Delphi-Programm durch Evolution das erzeugte BF-Programm.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Christian V.
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 311

Win Xp Prof
Turbo Delphi 2005
BeitragVerfasst: Do 10.05.07 15:14 
@BenBe
Diese "Simulierte-Evolutions"-Sache klingt ja sehr interessant. Wo kann man sich denn über so etwas informieren?(Hab das von Luckie schon gelesen). Ich habe davon bisher noch nie etwas gehört. :oops:

_________________
Hardware runs the world, software controls the hardware, code generates software - Have You already coded today?
BenBE Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Do 10.05.07 20:12 
user profile iconChristian V. hat folgendes geschrieben:
Ich habe davon bisher noch nie etwas gehört. :oops:

Hi,

weißt Du, was das witzige daran ist??? Wir Initiatoren haben außer unserer Phantasie, dem Biologie-Unterricht und etwas kreativität sowie dem Post von Luckie keine detailiertere Beschreibung zum Thema selber. Ich habe Luckie einmal bzgl. des im Artikel erwähnten Buches angeschrieben; dieses handelt aber nicht von simulierter Evolution, sondern der Arbeitsweise von Computern - ist daher also für das Verständnis an dieser Stelle nicht wichtig.

Allgemein könnte Dir aber das Stichwort "Evolutionäre Algorithmen" weiterhelfen. Zu diesem Thema gibt es einiges ...

Ein gewisser Reiz an diesem Wettbewerb soll ja auch sein, einfach mal durch Probieren, Überlegen und Raten eine brauchbare Lösung zu finden ;-)

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Christian V.
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 311

Win Xp Prof
Turbo Delphi 2005
BeitragVerfasst: Do 10.05.07 21:05 
;)

Nun, dann werde ich mich in drei Wochen vielleicht einfach mal daran versuchen. Dann habe ich nämlich neun Wochen Ferien. :D

_________________
Hardware runs the world, software controls the hardware, code generates software - Have You already coded today?
_Digger
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 46

Win XP
Delphi5 Prof
BeitragVerfasst: Fr 11.05.07 09:24 
Hallo
klingt ja sehr spannend, werde sicher selber auch versuchen was ich damit machen kann.
ich habe noch eine frage zu aufgabe 1: soll das Programm auch mit Evolution optimiert werden wie die anderen?
super idee!!!!
lg
BenBE Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Fr 11.05.07 10:18 
user profile icon_Digger hat folgendes geschrieben:
Hallo
klingt ja sehr spannend, werde sicher selber auch versuchen was ich damit machen kann.
ich habe noch eine frage zu aufgabe 1: soll das Programm auch mit Evolution optimiert werden wie die anderen?
super idee!!!!
lg

Die erste Aufgabe sollte mit Hand gelöst werden. Wenn Du das mit Evolution machen willst, gerne, solang Du jeden Evolutionsschritt erklären kannst ;-)

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
_Digger
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 46

Win XP
Delphi5 Prof
BeitragVerfasst: Fr 11.05.07 14:04 
hi
danke für die antwort
ich hätte da aber noch eine frage zu aufgabe 1: wie soll es jetzt genau heißen?
"Hello World" "Hello world" "hello world" "HELLO WORLD"??
lg
BenBE Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Fr 11.05.07 14:09 
Steht in der Aufgabenstellung wörtlich drin ... Vielleicht hilft Dir das???

Der auszugebende Text ist das Zeug zwischen den "" ;-)

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
_Digger
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 46

Win XP
Delphi5 Prof
BeitragVerfasst: Fr 11.05.07 14:27 
danke, ich wollte nur ganz sicher sein, man weiß ja nie...
Heiko
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: Mi 26.09.07 17:11 
Wieviele haben nun eigentlich mitgemacht?

PS @Benny: Ich gebs zu, ich hatte ja gesagt, dass ich evtl. mitmache, wenn ich Zeit habe... aber letzteres fehlte leider ;).
BenBE Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mi 26.09.07 19:07 
Es hat leider keine Einsendungen gegeben.

Leider war auch unsere Lösung nicht allzu perfekt, hat aber in einem gewissen Rahmen eine leicht optimalere Version des eingegebenen Algorithmus geliefert.

Somit wäre eigentlich jede halbwegs funktionierende Lösung besser als unsere gewesen *G*

Das Framework (unsere Lösung ...) stellen wir aber gern bereit (auf Anfrage), brauch nur ggf. ein wenig, da ich ATM keinen Zugriff auf die zugehörigen Files habe.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.