Seite 3 von 3

Verfasst: Sonntag 21. Februar 2010, 16:40
von BlackJack
@Jack Daniels: Dann könnte man Zeichenketten nicht mehr als Schlüssel in Dictionaries verwenden, und *das* wäre äusserst unpraktisch. Insbesondere weit CPython da intern ziemlich stark drauf setzt.

Verfasst: Sonntag 21. Februar 2010, 22:28
von numerix
cofi hat geschrieben:

Code: Alles auswählen

kapelle = ">" + kapelle[1:].replace("> < ","< > ")
Hiermit aber ;)
Wobei das aber der Problemstellung nicht gerecht wird und zu einer Endlosschleife führen kann ...

Verfasst: Montag 22. Februar 2010, 09:44
von numerix
Stephan1993 hat geschrieben:also wenn ich das bei dir richtig verstanden habe ungefähr so, dass ich in der schleife ersmal alles auf replace laufen lasse, dann den ersten trompeter richtig stelle und dann alles über den 2ten trompeter laufen lasse??? blicke da nicht so wirklich durch, wie du das meinst... und wie schaffe ich es denn das replace nur überm 2ten trompeter laufen lasse.. :-/
Sollst du ja nicht. Guckst du und liest du:
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 dann neu zusammen aus dem 1. Trompeter, der brav nach rechts schaut, und der restliche Kapelle ab dem 2. Trompeter.
Auch wenn es so wie gezeigt dein Problem nicht löst, findest du einen wichtigen Hinweis in der von cofi geposteten Code-Zeile.

Verfasst: Montag 22. Februar 2010, 18:08
von EyDu
Vielleicht wird es doch mal Zeit für eine Musterlösung. Ich hoffe mal, dass ich die Aufgabe einigermaßen getroffen habe:

Code: Alles auswählen

(lambda f,x:f(f,x))(lambda f,x:(print("".join(map("<>".__getitem__,x)),end=""),
len(set(x))>1and(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)])

Verfasst: Montag 22. Februar 2010, 19:24
von BlackJack
@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. :-)

Verfasst: Montag 22. Februar 2010, 19:34
von lunar
Ich konnte der Versuchung einer Ocaml-Lösung nicht widerstehen …

Verfasst: Montag 22. Februar 2010, 20:48
von numerix
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.

Verfasst: Montag 22. Februar 2010, 20:59
von EyDu
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

Verfasst: Montag 22. Februar 2010, 22:06
von 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.

Verfasst: Montag 22. Februar 2010, 22:13
von numerix
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.

Verfasst: Montag 22. Februar 2010, 22:16
von BlackJack
Grrr, Mist ich hätte testen sollen. Mit Abfrage von Tastatur und ohne Prompt komme ich auf 129. Diesmal auch getestet. :-)

Verfasst: Montag 22. Februar 2010, 22:33
von Stephan1993
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))

Verfasst: Montag 22. Februar 2010, 22:38
von numerix
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.

Verfasst: Montag 22. Februar 2010, 22:51
von Stephan1993
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^^

Verfasst: Montag 22. Februar 2010, 22:55
von EyDu
Ich gebe dir mal einen Hinweis:

Code: Alles auswählen

>>> ">"+"><><<>><".replace("><", "<>")[1:]
'>><><><>'
Ist eigentlich schon fast die Lösung.

Verfasst: Montag 22. Februar 2010, 22:56
von numerix
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.

Verfasst: Dienstag 23. Februar 2010, 08:03
von BlackJack
Eine richtig "javaesque" Lösung. In Java halt: http://paste.pocoo.org/show/181426/

Verfasst: Donnerstag 25. Februar 2010, 12:27
von Leonidas
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.

Verfasst: Donnerstag 25. Februar 2010, 13:40
von b.esser-wisser
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