Problem mit einer Aufgabe

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.
lunar

Ich konnte der Versuchung einer Ocaml-Lösung nicht widerstehen …
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

BlackJack hat geschrieben:@EyDu: Ich dachte ja eigentlich immer dass es beim Code-Golf um eine möglichst kurze Lösung geht. Habe hier 122 Zeichen für Python 2.x zu bieten. :-)
Mit Möglichkeit der Benutzereingabe und zeilenweiser Weiterschaltung per Tastendruck? - Damit käme ich runter bis auf 124 Bytes.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Ich war noch gar nicht auf Golf eingestellt. Mir ging es eigentlich um eine möglichste konfuse Umsetzung, die aber immer noch sinnvoll ist. Immerhin soll sie dem Fragesteller auch helfen ^^ Entpackt sieht es aus gar nicht mehr so schlimm aus:

Code: Alles auswählen

(lambda f, x: f(f, x))(
    lambda f, x: (
        print("".join(map("<>".__getitem__, x)), end=""),
        len(set(x))>1 and (
            input(),
            f(f, [1] + list(
                map(lambda y: y[1] != (not y[0]<=y[1]<=y[2]),
                    zip(x, x[1:], x[2:]+[x[-1]])))))),
    [1]+[__import__("random").choice((0,1)) for _ in range(int(input("?:"))-1)])
Vielleicht spiele ich nachher noch eine Runde mit. 122 hören sich aber schon gar nicht schlecht an.

Sebastian
Das Leben ist wie ein Tennisball.
BlackJack

@Lunar: So in der Richtung hatte ich es dann auch schon mit Scala versucht und bin zu dem Schluss gekommen, dass ich die Sprache nicht mag. Man muss da dann dauernd den Typ von der Liste überall angeben, und das ist extrem nervig und hässlich.

@numerix: Nee, Mist. Dann hast Du mich geschlagen, mit Abfrage pro Zeile bin ich bei 130. Gibst Du auch ein '?' bei der "Frage" nach der Anzahl der Trompeter aus? Wenn nicht, könnte ich da noch einmal drei Zeichen sparen und käme fast an Dich ran. Wüsste aber nicht wo ich da noch mindestens ein Zeichen rausschlagen sollte.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

BlackJack hat geschrieben:Gibst Du auch ein '?' bei der "Frage" nach der Anzahl der Trompeter aus?
Nein, war ohne Prompt. Mit "?" komme ich auf 127 Bytes.
BlackJack

Grrr, Mist ich hätte testen sollen. Mit Abfrage von Tastatur und ohne Prompt komme ich auf 129. Diesmal auch getestet. :-)
Stephan1993
User
Beiträge: 16
Registriert: Freitag 19. Februar 2010, 15:08

EyDu hat geschrieben:
(lambda f, x: f(f, x))(
lambda f, x: (
print("".join(map("<>".__getitem__, x)), end=""),
len(set(x))>1 and (
input(),
f(f, [1] + list(
map(lambda y: y[1] != (not y[0]<=y[1]<=y[2]),
zip(x, x[1:], x[2:]+[x[-1]])))))),
[1]+[__import__("random").choice((0,1)) for _ in range(int(input("?:"))-1)])
danke ersmal :) aber irgendwie blicke ich da nicht so ganz durch :D
--> gibt es auch noch anfängerfreundlichere lösungswege, oder basieren alle auf so eine art
(sollte jetz nich heißen "gebt mir ein leichteres", sondern soll heißen "hab ich noch hoffnung das auf eigene faust hinzukriegen (:D))
Zuletzt geändert von Stephan1993 am Freitag 26. Februar 2010, 11:22, insgesamt 1-mal geändert.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Stephan1993 hat geschrieben:danke ersmal :) aber irgendwie blicke ich da nicht so ganz durch :D
Das dürfte in etwa der Sinn der Sache gewesen sein ...
Stephan1993 hat geschrieben:gibt es auch noch anfängerfreundlichere lösungswege, oder basieren alle auf so eine art
(sollte jetz nich heißen "gebt mir ein leichteres", sondern soll heißen "hab ich noch hoffnung das auf eigene faust hinzukriegen (:D))
Du bist doch schon weit gekommen. Wie es weitergehen kann, habe ich schon beschrieben. Die Aufgabe lässt sich mit einfachen, grundlegenden Python-Elementen lösen.
Stephan1993
User
Beiträge: 16
Registriert: Freitag 19. Februar 2010, 15:08

mein problem ist ja immernoch bei meinem liebem trompeter 1 und dem 2ten trompeter.... und ehrlich gesagt, hilft mit cofi's code, wie du gesagt hast nicht wirklich dabei auf die sprünge^^
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Ich gebe dir mal einen Hinweis:

Code: Alles auswählen

>>> ">"+"><><<>><".replace("><", "<>")[1:]
'>><><><>'
Ist eigentlich schon fast die Lösung.
Das Leben ist wie ein Tennisball.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Stephan1993 hat geschrieben:mein problem ist ja immernoch bei meinem liebem trompeter 1 und dem 2ten trompeter.... und ehrlich gesagt, hilft mit cofi's code, wie du gesagt hast nicht wirklich dabei auf die sprünge^^
numerix hat geschrieben:Zunächst ignorierst du, dass sich der 1. Trompeter nicht umdrehen darf und wendest das replace() einfach auf die ganze Kapelle an. Die neu ausgerichtete Kapelle setzt du dann neu zusammen aus dem 1. Trompeter, der brav nach rechts schaut, und der restliche Kapelle ab dem 2. Trompeter.
BlackJack

Eine richtig "javaesque" Lösung. In Java halt: http://paste.pocoo.org/show/181426/
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Eine Lösung in Factor: http://paste.factorcode.org/paste?id=1484

Ich weiß ich komme etwas spät, musste die Sprache aber erst ausreichend lernen. Hat länger gedauert als erwartet.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
b.esser-wisser
User
Beiträge: 272
Registriert: Freitag 20. Februar 2009, 14:21
Wohnort: Bundeshauptstadt B.

Ich kann noch eine Lösung in Vala anbieten - war zumindest mal eine Motivation, um mich durch die 'docs' zu wühlen.

mfg, Jörg
Wir haben schon 10% vom 21. Jahrhundert hinter uns!
Antworten