Die schriftlichen Grundrechenarten haben die meisten von uns in der Schule gelernt, einige können es vielleicht immer noch ...
Bei SPOJ gibt es eine nette Aufgabe, die sich damit beschäftigt: http://www.spoj.pl/problems/ARITH/
Dabei geht es nicht darum, ein möglichst kurzes Programm zur Lösung zu schreiben, sondern zunächst mal eins, das überhaupt läuft. Obwohl die Problemstellung nicht schwierig ist und man mit einfachen Python-Mitteln auskommt, kann das eine Weile dauern (jedenfalls, wenn man die Aufgabenstellung nicht GENAU liest - so wie ich ).
Wenn man sich dann ans Optimieren des Codes macht, sollte man ohne weiteres auf den vorderen Python-Rangplätzen landen, denn da ist noch viiiiel Luft.
Falls sich einige hier im Forum beteiligen wollen, können wir natürlich auch unseren eigenen size-contest daraus machen. Ist halt nur mit dem veröffentlichen des Codes so eine Sache.
SPOJ: Grundschulrechnen
Das Problem des nicht genauen Lesens habe ich, wie es scheint, auch. Der Output entspricht genau den Beispielen und ein paar Sonderfälle mit dem Alignment habe ich auch noch berücksichtigt. Dennoch erhalte ich stets nur "wrong answer". Damit kann man natürlich nicht optimieren ... jetzt liegt es erstmal auf Eis, bis ich wieder neu denken kann.
Ich habe fast 20 Fehlversuche produziert, bis ich die erste funktionierende Lösung hatte ...kbr hat geschrieben:Das Problem des nicht genauen Lesens habe ich, wie es scheint, auch. Der Output entspricht genau den Beispielen und ein paar Sonderfälle mit dem Alignment habe ich auch noch berücksichtigt. Dennoch erhalte ich stets nur "wrong answer". Damit kann man natürlich nicht optimieren ... jetzt liegt es erstmal auf Eis, bis ich wieder neu denken kann.
Wenn man den Fehler dann gefunden hat, versteht man gar nicht, wie man das bisher übersehen konnte.
Vielleicht helfen dir folgende testcases beim Fehler aufspüren:
Code: Alles auswählen
lines = ["1000-1", "325*440005", "98*9", "99*99", "1+1", "9+9", "1000+9001",
"7*19", "123451234567890*99","100001*10","1000-1","8-3","2*444444","9999+9"]
eval?
Ohloh | Mein Blog | Jabber: segfaulthunter@swissjabber.eu | asynchia – asynchrone Netzwerkbibliothek
In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.
In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.
Ich denke, name meint so etwas (natürlich nur der Ansatz):
Die Aufgabenstellung habe ich nur überflogen, sieht knifflig aus.
Code: Alles auswählen
In [34]: lines = ["1000-1", "325*440005", "98*9", "99*99", "1+1", "9+9", "1000+9001",
"7*19", "123451234567890*99","100001*10","1000-1","8-3","2*444444","9999+9"]
In [36]: print '\n'.join(str(eval(task)) for task in lines)
999
143001625
882
9801
2
18
10001
133
12221672222221110
1000010
999
5
888888
10008
Ach so. Auf die Idee, dass sich jemand zum Problem äußert, ohne die Aufgabenstellung gelesen zu haben, bin ich gar nicht gekommen ...derdon hat geschrieben:Ich denke, name meint so etwas (natürlich nur der Ansatz):
Also eigentlich nicht - wenn man die Aufgabenstellung gleich richtig liest und nicht nur überfliegt.derdon hat geschrieben:Die Aufgabenstellung habe ich nur überflogen, sieht knifflig aus.
Was funktioniert da nicht? Mein Script läuft und liefert für die vier enthaltenen Beispiele IMHO die richtige Ausgabe. Dass ich da nicht in der ersten Zeile die Anzahl der weiteren Zeilen erwarte sei geschenkt. Mir geht es nicht darum, ob ich wohl die Zeilen richtig einlesen kann, sondern um die korrekte Darstellung der mathematischen Operationen.numerix hat geschrieben:Funktioniert auf jeden Fall nicht ... :(sma hat geschrieben:Habe schnell eine Lösung zusammengestümpert. War Fun. Geht garantiert besser und kürzer.
Stefan
Naja, die Aufgabe lautete aber nicht, ein Programm zu schreiben, was nur die 4 Beispiele richtig verarbeitet. Von meinen oben geposteten Testcases werden mehrere nicht richtig verarbeitet. Kannst sie ja mal durchlaufen lassen. Und dann nochmal GENAU die Aufgabenstellung lesen ...sma hat geschrieben:Was funktioniert da nicht? Mein Script läuft und liefert für die vier enthaltenen Beispiele IMHO die richtige Ausgabe.
Mir ist es aber zunächst nicht anders ergangen als dir mit der Aufgabenstellung. Ich hatte einige Versionen, von denen ich jeweils der festen Überzeugung war, dass sie korrekt seien - bis ich sie eingeschickt habe und eines besseren belehrt wurde.
Wenn alle o.g. testcases korrekt laufen, dann ist die Wahrscheinlichkeit schon recht hoch, dass es auch bei SPOJ durchkommt.
Mir egal: Mehr kann ich nicht prüfen.numerix hat geschrieben:Naja, die Aufgabe lautete aber nicht, ein Programm zu schreiben, was nur die 4 Beispiele richtig verarbeitet.
Das ist mir zu viel Rätselraten. Ich denke, bei "print res" muss es "print res.ljust(l2)" heißt, denn "2*444444" passte nicht, doch ansonsten bin ich zufrieden :)numerix hat geschrieben:Von meinen oben geposteten Testcases werden mehrere nicht richtig verarbeitet. Kannst sie ja mal durchlaufen lassen. Und dann nochmal GENAU die Aufgabenstellung lesen ...
Ich glaube, die Beschreibung will, dass
Code: Alles auswählen
1000
-1
----
999
Code: Alles auswählen
1000
-1
---
999
Stefan
Ich verstehe nicht, was das mit Rätselraten zu tun hat. Auf Python Challenge trifft so eine Aussage sicher zu, aber hier muss doch nichts gerätselt werden. Die Aufgabenstellung ist eindeutig und lösbar. Dein Code löst sie halt nicht.sma hat geschrieben:Das ist mir zu viel Rätselraten.
Du behauptest, es ist fehlerhaft, ohne den Beweis dafür zu erbringen. Ich will nicht raten, was du wohl meinst. Das meine ich. Es ist mir schon klar, dass ein Teil der ursprünglichen SPOJ-Aufgabe auch das Knobeln ist, ob man wohl die Aufgabenstellung richtig verstanden hat, aber ich finde es nicht hilfreich, einfach nur "falsch" zu sagen. Dann bleibt es eben falsch ;)numerix hat geschrieben:Ich verstehe nicht, was das mit Rätselraten zu tun hat.sma hat geschrieben:Das ist mir zu viel Rätselraten.
Stefan
Wie soll der Beweis denn aussehen? Ich habe testcases gepostet, für diese liefert dein Programm nicht das, was die Aufgabenstellung verlangt. Konkreter möchte ich nicht werden, weil das richtige Lesen der Aufgabenstellung in diesem Fall so ziemlich der anspruchsvollste Teil der Lösung ist.sma hat geschrieben:Du behauptest, es ist fehlerhaft, ohne den Beweis dafür zu erbringen.
Wenn es dir wichtig ist, dass dein Code gemäß der Aufgabenstellung funktioniert, dann schick ihn einfach ein - die Antwort von SPOJ ist dann der "Beweis".
Code: Alles auswählen
>>> "*{0:6}".format(5)
'* 5'
Indem du einen anderen Weg gehst ...bremer hat geschrieben:Wie bekomme ich den Operator "eng" anliegend?Code: Alles auswählen
>>> "*{0:6}".format(5) '* 5'
Stichwort: rjust()