Kurzer Prozess: Size Contest bei SPOJ

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

numerix hat geschrieben: Es bringt einem zumindest Punkte in der SPOJ-Rangliste ...
Genau. Habe jetzt schon 0.5 Punkte by SPOJ und Platz 3816. :)
Benutzeravatar
HerrHagen
User
Beiträge: 430
Registriert: Freitag 6. Juni 2008, 19:07

Bei der Gelegenheit will ich noch mal auf https://www.spoj.pl/problems/SIZECON/ hinweisen. Der Wettbewerb ist wirklich klasse! Ich hab mich jetzt ein paar Stunden dran probiert und muss sagen, dass das mit Abstand der beste Code-Golf ist den ich je gesehen hab. Das Problem ist viiieelll vertrackter als man zunächst denkt...

MFG HerrHagen
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Fass es nich wie's einer in 29 Zeichen schafft oO' Ich schaffs nichmal in 29 Zeichen das Zeug einzulesen in einer Datenstruktur...
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

@BlackVivi Wofür braucht man da eine Datenstruktur?

Ich komme jetzt auf 59 dass ist immer noch 30 Zeichen mehr als die beste Lösung :/

btw. Wieso sind negative Zahlen eigentlich True?
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

DasIch hat geschrieben:@BlackVivi Wofür braucht man da eine Datenstruktur?

Ich komme jetzt auf 59 dass ist immer noch 30 Zeichen mehr als die beste Lösung :/

btw. Wieso sind negative Zahlen eigentlich True?
Weil absolut alles außer 0, None und einer leeren Liste True ist. (vorrausgesetzt es ist nichts eigenes implementiert)

59 Zeichen ist auch mein bestes. Man braucht nicht zwangsweise eine Datenstruktur, aber ohne wirds doch viel zu lang. Ich denke mit dynamischer Codeerstellung (exec und so) wird's kürzer. Aber im Moment fehlt mir noch ein kurzer Gedanke, negative Zahlen zu überspringen.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

HerrHagen hat geschrieben:Bei der Gelegenheit will ich noch mal auf https://www.spoj.pl/problems/SIZECON/ hinweisen.
Auf die 34 Bytes kannst du wir wahrhaftig was einbilden!

Es gibt einen langen Thread im SPOJ-Forum, in dem Tim Peters und ein paar andere ihr Ringen um die beste Lösung darstellen und es mit viel Arbeit auf 37 Bytes geschafft haben. Ich habe mich in den letzten Tagen so nach und nach auf 43 Bytes vorgearbeitet und bin schon ganz glücklich darüber, dass ich es wenigstens bis auf die erste Seite im Python-Ranking geschafft habe. Aber wenn du jetzt einige andere hier im Forum noch infizierst, dann ist's damit wohl auch bald vorbei ... :cry:
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

DasIch hat geschrieben:btw. Wieso sind negative Zahlen eigentlich True?
Zum Beispiel damit nicht einige auf die Idee kommen -1 als Fehler-Rückgabewert zu verwenden, da das ja False wäre und man es prüfen könnte. Stattdessen besser Exceptions.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
HerrHagen
User
Beiträge: 430
Registriert: Freitag 6. Juni 2008, 19:07

Ahh..., mindestens 7 Personen aus diesen Forum beteiligen sich schon mal am Rätseln. Sehr schön...
Wer verbirgt sich hinter bords0?
Aber wenn du jetzt einige andere hier im Forum noch infizierst, dann ist's damit wohl auch bald vorbei ... Crying or Very sad
@numerix: Du hast ja noch genug Wettbewerbe in denen du auf Platz eins bist :wink:. (Hab leider im Moment wenig zeit, sonst würd ich mich ja mal an PRIME ranmachen :lol:).

MFG HerrHagen
Nocta
User
Beiträge: 290
Registriert: Freitag 22. Juni 2007, 14:13

HerrHagen hat geschrieben:Ahh..., mindestens 7 Personen aus diesen Forum beteiligen sich schon mal am Rätseln. Sehr schön...
Wer verbirgt sich hinter bords0?
Ich würde mal stark annehmen, bords0 verbirgt sich dahinter ;) Ist auch ein User aus dem Forum, hat sogar schon in diesem Thread geschrieben, afaik.
Ich bin auch dabei, komm aber nicht unter 51 Byte mit einem print sum(generator(bla
  • bla) :(
    Ich find's schon blöd, dass niemand seinen Code veröffentlichen will bzw kann (was verständlich ist), weil ich dann nie die ganzen Tricks kennenlernen werde ;) Aber gut, mit 51 Byte kann ich mich eigentlich auch zufrieden geben, ich find die Lösung jedenfalls kurz :p
Benutzeravatar
HerrHagen
User
Beiträge: 430
Registriert: Freitag 6. Juni 2008, 19:07

Ich würde mal stark annehmen, bords0 verbirgt sich dahinter
:oops: stimmt. ich hab n gedächtnis wie ein goldfisch... :oops:
Aber gut, mit 51 Byte kann ich mich eigentlich auch zufrieden geben, ich find die Lösung jedenfalls kurz :p
Nicht so schnell aufgeben!
Nocta
User
Beiträge: 290
Registriert: Freitag 22. Juni 2007, 14:13

HerrHagen hat geschrieben:Nicht so schnell aufgeben!
Ein Goldfisch als Personal Coach? :)
Ich geb ja gar nicht mal so schnell auf, aber wenn ich nicht weiterkomme, dann war's das halt :p Vielleicht sollte ich mir mal ein paar Seiten im Internet durchlesen, die Generator Expressions und List Comprehensions als Thema haben, eventuell find ich da irgendwelche Ideen.
Benutzeravatar
HerrHagen
User
Beiträge: 430
Registriert: Freitag 6. Juni 2008, 19:07

Vielleicht sollte ich mir mal ein paar Seiten im Internet durchlesen, die Generator Expressions und List Comprehensions als Thema haben, eventuell find ich da irgendwelche Ideen.
Soviel kann man ja verraten: Die Lösung geht in eine andere Richtung. :wink:
Nocta
User
Beiträge: 290
Registriert: Freitag 22. Juni 2007, 14:13

Hm, hab ich mir fast schon gedacht =) Aber in anderen Richtungen fällt mir ja noch weniger ein! :p
BlackJack

@Nocta: Nochmal die Aufgabe durchlesen, insbesondere die "komischen" Rahmenbedingungen.

Ich hab's noch nicht ausprobiert, aber ich denke ich könnte auf ca. 40 Bytes kommen, und wenn numerix wieder mal so ähnlich denkt wie ich, wüsste ich wahrscheinlich wo er noch drei Bytes "einsparen" kann. :-)
Nocta
User
Beiträge: 290
Registriert: Freitag 22. Juni 2007, 14:13

@BlackJack: Naja okay, aber ich weiß nicht, wie man das in Python einsetzen könnte. In Perl kann man's anscheinend so übertreiben, dass dann nur 6 Byte gezählt werden.
Ich bin wahrscheinlich einfach zu unkreativ oder ich kenne irgendwas an Python nicht, was man hier braucht oder es ist so abwegig (aber ihr kommt ja alle irgendwie drauf), dass kein normaler Mensch (ist das jetzt beleidigend? :p) drauf kommt. Oder aber es ist so einfach, dass jeder normale Mensch drauf kommt und ich mich ergo nicht zu solchen zählen kann. Wie auch immer, ich lass es einfach, es sei denn, mir fällt irgendwann mal zufällig mal ein genialer Trick (der euch nach 10 Sekunden einfällt) ein.
Vielleicht will mir ja jemand seinen Code per PN schicken, ich würde ihn dann selbstverständlich auch für mich behalten. Der Trick wie man auf <40 bytes kommt, würde mich jedenfalls interessieren.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

BlackJack hat geschrieben:@Nocta: Nochmal die Aufgabe durchlesen, insbesondere die "komischen" Rahmenbedingungen.

Ich hab's noch nicht ausprobiert, aber ich denke ich könnte auf ca. 40 Bytes kommen, und wenn numerix wieder mal so ähnlich denkt wie ich, wüsste ich wahrscheinlich wo er noch drei Bytes "einsparen" kann. :-)
Danke, das baut auf :cry:

Ich kann mich allerdings für die algorithmisch etwas(!) anspruchsvolleren Probleme von SPOJ eher erwärmen. Ich denke ich werde nochmal einen neuen Thread hier zu einem ausgewählten Problem eröffnen - dieser hier ist doch arg lang geworden.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Nocta hat geschrieben:@BlackJack: Naja okay, aber ich weiß nicht, wie man das in Python einsetzen könnte. In Perl kann man's anscheinend so übertreiben, dass dann nur 6 Byte gezählt werden.
Was den SIZECON-Wettbewerb angeht, so ist der aller Wahrscheinlichkeit nach ohnehin kaputt, weil hier geschummelt wurde, was das Zeug hält. Im SPOJ-Forum kann man dazu einiges lesen. Irgendwo findet man die Information, dass die auszugebende Zahl 5 Bytes lang ist (meine ich) - da kannst du dir dann ausrechnen, wie man eine 6 Bytes Lösung schaffen kann. Außerdem wurde mit darstellbaren Zeichen gearbeitet, die nicht gezählt werden usw.

Mag auch spannend sein, aber ich habe bei der Beschäftigung mit den "richtigen" SPOJ-Problemen und meinen Python-Lösungen weit mehr gelernt als beim Code-Golf.

Vielleicht wäre das auch ein Ansatzpunkt für dich. Ich vermute, dass man bei algorithmisch etwas anspruchsvolleren Sachen auch eher mal einen Tipp geben kann, ohne gleich den ganzen Code posten zu müssen.
Benutzeravatar
HerrHagen
User
Beiträge: 430
Registriert: Freitag 6. Juni 2008, 19:07

Mag auch spannend sein, aber ich habe bei der Beschäftigung mit den "richtigen" SPOJ-Problemen und meinen Python-Lösungen weit mehr gelernt als beim Code-Golf.
@numerix: Das ist ja grad das geniale an diesem Rätsel. Es ist auch algorithmisch anspruchsvoll. Das findet man allerdings erst raus, wenn man den richtigen Ansatz hat. Ich bin kein großer Perl-Kenner, aber nachdem ich meine Lösung kenne, bin ich mir sicher das auch die besten Perl Lösungen (genau wie die beste Python-Lösung) die Aufgabe für jeden Input korekt lösen können und sich an die Regeln halten. Wenn du willst schick ich dir mal meine Lösung per PM. Du wirst überascht sein :wink: ....

MFG HerrHagen
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

Ich denke, ich werde mir demnächst auch mal bei SPOJ ein Problem aussuchen, bei dem es um Zeit und nicht um Codegrösse geht.
Der Faktor Zeit wird leider heute scheinbar von vielen Entwicklern ignoriert. Hauptsache es geht irgendwie. Schade eigentlich.

Hinsichtlich Golfing finde ich das Original etwas besser da die Problem einfach klarer spezifiziert sind. Es gibt auch kaum Möglichkeiten zu manipulieren, da die Inputdaten in den meisten Fällen zufällig sind. Allerdings sind die Testfälle auch nicht immer perfekt, wie beispielsweise bei der Primfaktorzerlegung.
Benutzeravatar
Blade Runner
User
Beiträge: 21
Registriert: Montag 23. Februar 2009, 11:41

Code: Alles auswählen

print sum(x for x in[input()for x in range(input())]if x>0)
Das ist bisher meine beste und vorallem am besten funktionierende Lösung. Da die nicht besonders toll ist, kann ich die schon posten, glaub ich.
Ich hab mit exec experimentiert, aber das hat zu nichts geführt.
Antworten