
Hallo Leute! Wieder mal ne 'Denksportaufgabe': Auf dem derzeit stattfindenden Linuxtag, den ich 2 Tage lang besucht habe, wurde ich in einen Programmierwettbewerb am hp-Stand verwickelt. Die gestellte Aufgabe war leider etwas - gelinde gesagt - sonderbar: Schreibe ein Programm in einer beliebigen Progammiersprache, das eine als Argument beigesteuerte Ziffernfolge als 7-Segmentdarstellung ausgibt, mit *möglichst kurzem Quellcode* (!) Randbedingung: Zeilenlänge <= 132. Die Eingabe 0123456789 erzeugt z.B.: - - - - - - - - | | | | || || | || || | - - - - - - - | | || | | || | || | | - - - - - - - Wie es das folgende 171 Byte lange Python-Programm tut (Meine dortige Lösung war sogar etwas länger): import sys for i in range(5): r="" for c in sys.argv[1]: n=3*int("14041030301312113131041301213112141130301414114131"[5*int(c)+i]);r+=" - | || |"[n:n+3] print r Natürlich gab es kürzere (in anderen Sprachen). (Versungen und vertan!) Wie kann man es in Python besser machen? Gregor _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

Gregor Lingl wrote:
Wie kann man es in Python besser machen?
Wie Du mit Deinem Programm auf 171 Zeichen kommst, weiß ich nicht - ich hab' 173 gezählt. Mit leicht veränderter Logik kann ich das auf 166 Zeichen stutzen, siehe attachment. Ciao, Martin import sys for i in range(5): r="" for c in sys.argv[1]: n=int("37173151513530335353173513035330373351513737337353"[5*int(c)+i]);r+="| - | |"[n:n+3] print r _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

Martin v. Löwis wrote:
In base-36 wird es nochmal kürzer: 155 Zeichen (anbei). Ciao, Martin import sys for i in range(5): r="" for c in sys.argv[1]: n=int('HFTZQO0XS1TP4U4JJ58EJ7R860KMZ',36)//8**(5*int(c)+i)%8;r+="| - | |"[n:n+3] print r _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

Hallo Liste, entschuldigt meine Unkenntnis - aber was ist das? [...]
n=int("37173151513530335353173513035330373351513737337353"[5*int(c)+i]);r+="| - | |"[n:n+3] Kann jemand diesen Ausdruck erlaeutern?
Gruss, Ralf Schoenian
_______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Ralf Schönian wrote: | entschuldigt meine Unkenntnis - aber was ist das? | [...] | |> n=int("37173151513530335353173513035330373351513737337353"[5*int(c)+i]);r+="| - | |"[n:n+3] Die Ausgabe besteht aus 5 Zeilen zu je 3 Zeichen breite die die Zahl darstellt. Das bedeutet, daß du für jedes Zahl die dargestellt werden soll, 5 Informationen brauchst, für jede Zeile eine. Die lange Zahl ist eigendlich nur die Information wie die Zahlen dargestellt werden soll. 37173 ist z.B. wird z.b. zur 0 3 ist erste Zeile, 7 zweite,.... Wie die Zeile gezeichnet wird, steht in "| - | |" 3 bedeutet ab dem 3 Zeichen drei weitere darstellen. 3 = " - " 7 = "| |" 1 = " " 7 = "| |" 3 = " - " Tara, die 0 :) Eigendlich ganz einfach, wenn mans verstanden hat. Aber die Lösung ist schon sehr brilliant wie ich finde. Gruß ~ Daniel - -- nihil me cirumdat .. . .. ... . . .. . ... . .. . ... . . . pgp key @ http://files.poelzi.org/pgp.txt ED80 E53D 5269 4BB1 1E73 3A53 CBF9 A421 0A7B 003D -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.4 (GNU/Linux) Comment: Using GnuPG with Debian - http://enigmail.mozdev.org iD8DBQFA3s3wy/mkIQp7AD0RAqhTAJkB2vxnwoiIw1/0Om9j+YLXmYjKgwCeJpHD +a9GNpLKTq3TyMgRa8Qh/VQ= =gCdV -----END PGP SIGNATURE----- _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

Hi Am 26.06.2004 20:33:34 schrieb Gregor Lingl:
*möglichst kurzem Quellcode* (!)
Naja wenn der Quellcode beliebig lang sein darf, ist das Problem ziemlich trivial.
War die Ausgabe auf 5 Zeilen vorgeschrieben? Ich finde 3 Zeilen deutlich besser zu lesen. Und dann geht das auch in 152 Bytes (mit Base36 und r zusammenfalten oder auch ohne Base36) -> siehe Anhaenge Gabs auch Lösungen die ein komplett anderes Prinzip verfolgten? Interessant waere vielleicht eine Funktion, die die Abbildung (Zahl, Zeile) -> Index_in_Symboltabelle direkt löst In welcher Sprache war denn die kürzeste Lösung? Und wie kurz war die? cu boesi -- No matter where you are. #1671 : icq-intern Everyone is always connected. #73628288 : icq-extern boesi111 : aim i171 : reallife _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

Hallo, Zunächst vielen Dank für Euer aller Lösungen. Für mich waren sie recht interessant. Zu den unten gestellten Fragen: das mit den 3 Zeilen finde ich auch gut. Die Anforderung war aber die 5-Zeilen-Variante (vorgezeigt als Beispiel). Weiß nicht, was zu einer 3 - Zeilen - Lösung gesagt worden wäre. Siegerprogramm war in Ruby. Lösungen habe ich keine gesehen, weil ich zum Zeitpunkt der Preisvergabe nicht mehr dort war. Das einzige was ich sonst noch dazu weiß steht auch hier: http://derstandard.at/?id=1711800 An sich hat hp versprochen den Code der Lösungen per email an die Teilnehmer zu versenden. Hat es bis jetzt aber nicht gemacht. Sollte er noch kommen, werde ich ihn posten. Glaub' aber kaum. Viele Grüße, Gregor Alexander 'boesi' Bösecke schrieb:
_______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

Gregor Lingl wrote:
Wie kann man es in Python besser machen?
Wie Du mit Deinem Programm auf 171 Zeichen kommst, weiß ich nicht - ich hab' 173 gezählt. Mit leicht veränderter Logik kann ich das auf 166 Zeichen stutzen, siehe attachment. Ciao, Martin import sys for i in range(5): r="" for c in sys.argv[1]: n=int("37173151513530335353173513035330373351513737337353"[5*int(c)+i]);r+="| - | |"[n:n+3] print r _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

Martin v. Löwis wrote:
In base-36 wird es nochmal kürzer: 155 Zeichen (anbei). Ciao, Martin import sys for i in range(5): r="" for c in sys.argv[1]: n=int('HFTZQO0XS1TP4U4JJ58EJ7R860KMZ',36)//8**(5*int(c)+i)%8;r+="| - | |"[n:n+3] print r _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

Hallo Liste, entschuldigt meine Unkenntnis - aber was ist das? [...]
n=int("37173151513530335353173513035330373351513737337353"[5*int(c)+i]);r+="| - | |"[n:n+3] Kann jemand diesen Ausdruck erlaeutern?
Gruss, Ralf Schoenian
_______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Ralf Schönian wrote: | entschuldigt meine Unkenntnis - aber was ist das? | [...] | |> n=int("37173151513530335353173513035330373351513737337353"[5*int(c)+i]);r+="| - | |"[n:n+3] Die Ausgabe besteht aus 5 Zeilen zu je 3 Zeichen breite die die Zahl darstellt. Das bedeutet, daß du für jedes Zahl die dargestellt werden soll, 5 Informationen brauchst, für jede Zeile eine. Die lange Zahl ist eigendlich nur die Information wie die Zahlen dargestellt werden soll. 37173 ist z.B. wird z.b. zur 0 3 ist erste Zeile, 7 zweite,.... Wie die Zeile gezeichnet wird, steht in "| - | |" 3 bedeutet ab dem 3 Zeichen drei weitere darstellen. 3 = " - " 7 = "| |" 1 = " " 7 = "| |" 3 = " - " Tara, die 0 :) Eigendlich ganz einfach, wenn mans verstanden hat. Aber die Lösung ist schon sehr brilliant wie ich finde. Gruß ~ Daniel - -- nihil me cirumdat .. . .. ... . . .. . ... . .. . ... . . . pgp key @ http://files.poelzi.org/pgp.txt ED80 E53D 5269 4BB1 1E73 3A53 CBF9 A421 0A7B 003D -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.4 (GNU/Linux) Comment: Using GnuPG with Debian - http://enigmail.mozdev.org iD8DBQFA3s3wy/mkIQp7AD0RAqhTAJkB2vxnwoiIw1/0Om9j+YLXmYjKgwCeJpHD +a9GNpLKTq3TyMgRa8Qh/VQ= =gCdV -----END PGP SIGNATURE----- _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

Hi Am 26.06.2004 20:33:34 schrieb Gregor Lingl:
*möglichst kurzem Quellcode* (!)
Naja wenn der Quellcode beliebig lang sein darf, ist das Problem ziemlich trivial.
War die Ausgabe auf 5 Zeilen vorgeschrieben? Ich finde 3 Zeilen deutlich besser zu lesen. Und dann geht das auch in 152 Bytes (mit Base36 und r zusammenfalten oder auch ohne Base36) -> siehe Anhaenge Gabs auch Lösungen die ein komplett anderes Prinzip verfolgten? Interessant waere vielleicht eine Funktion, die die Abbildung (Zahl, Zeile) -> Index_in_Symboltabelle direkt löst In welcher Sprache war denn die kürzeste Lösung? Und wie kurz war die? cu boesi -- No matter where you are. #1671 : icq-intern Everyone is always connected. #73628288 : icq-extern boesi111 : aim i171 : reallife _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

Hallo, Zunächst vielen Dank für Euer aller Lösungen. Für mich waren sie recht interessant. Zu den unten gestellten Fragen: das mit den 3 Zeilen finde ich auch gut. Die Anforderung war aber die 5-Zeilen-Variante (vorgezeigt als Beispiel). Weiß nicht, was zu einer 3 - Zeilen - Lösung gesagt worden wäre. Siegerprogramm war in Ruby. Lösungen habe ich keine gesehen, weil ich zum Zeitpunkt der Preisvergabe nicht mehr dort war. Das einzige was ich sonst noch dazu weiß steht auch hier: http://derstandard.at/?id=1711800 An sich hat hp versprochen den Code der Lösungen per email an die Teilnehmer zu versenden. Hat es bis jetzt aber nicht gemacht. Sollte er noch kommen, werde ich ihn posten. Glaub' aber kaum. Viele Grüße, Gregor Alexander 'boesi' Bösecke schrieb:
_______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
participants (5)
-
"Martin v. Löwis"
-
Alexander 'boesi' Bösecke
-
daniel.poelzleithner
-
Gregor Lingl
-
Ralf Schönian