HA3 7

ChRiZz88
Mausschubser
Mausschubser
Beiträge: 87
Registriert: 7. Nov 2007 18:09
Kontaktdaten:

Beitrag von ChRiZz88 »

Ich würde spontan sagen, dass die in so einem Fall sogar doppelt kommen müssten, denn die korrekte Permutation von '(1 1 2) ist eben '((1 1 2) (1 1 2) (1 2 1) (1 2 1) (2 1 1) (2 1 1)) und so^^ oder?

Stumpf.Alex
Nerd
Nerd
Beiträge: 643
Registriert: 1. Okt 2007 12:40
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von Stumpf.Alex »

Bei mir ist es egal ob doppelte Elemente vorkommen. Es geht immer und bei den Permutationen tauchen auch wieder doppelte Elemente auf.

Christian.
Mausschubser
Mausschubser
Beiträge: 56
Registriert: 6. Aug 2007 22:38

Beitrag von Christian. »

endlich bin ich mit der funktion (flatten-once) fertig...ziemlich knifflig wars.
mal gucken was perm noch so hergibt :D

Benutzeravatar
bearmann
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 121
Registriert: 20. Okt 2006 13:53
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von bearmann »

Douh' ... ich hab gestern Nacht dann aufgegeben... werde mich heute abend wohl nochmal dransetzen.
Bei mir gabs entweder Fehler, oder er hat mir die Liste 1:1 wieder ausgespuckt. ~~

Grüße,
bearmann

Christian.
Mausschubser
Mausschubser
Beiträge: 56
Registriert: 6. Aug 2007 22:38

Beitrag von Christian. »

ich war auch kurz vorm verzweifeln muss ich sagen.
also mit map eine liste ausgeben geht nicht...zumindest hab ich es nicht hinbekommen.
dann hab ich mir eben selbst eine lokale funktion geschrieben, die das macht. :D

Benutzeravatar
Skylo
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 149
Registriert: 7. Nov 2006 20:08
Wohnort: Darmstadt (Woogsviertel)
Kontaktdaten:

Beitrag von Skylo »

also mein weg bisher..

Die (insert-every-where) funktion wiederholt sich übrigens mit unterlisten quasi
(insert-everwhere 'x ( (1 2 3 ) ( 3 4 5)) )
fügt also X überall in beide unterlisten ein.

Das hat bei mir ein Problem gelöst das ich zum verfolgen des 1. Ansatz von perm gebraucht hab.

Nun bei Perm hab ich nun nur noch das problem, das nachdem ich schon die richtigen Ergebnisse ausgegeben habe (klappt eigentlich wunderbar) er dann irgendwelche komischen Listen generiert wie

(perm '(1 2 3))
... (2 2 3) ( 3 3 3)
und sowas!


Ich hab im prinzip halt keine abruchbedingung leider. Oder muss halt am Ende die falschen raussortieren. :(

Im prinzip kann man beim sortieren doppelte elemente in der liste löschen und dann elemente die nicht die länge 3 haben danach.

Aber es muss auch ohne gehen!
Was ist eure Lösung zu dem problem!
Junge, geh kacken! Echt jetzt!

Christian.
Mausschubser
Mausschubser
Beiträge: 56
Registriert: 6. Aug 2007 22:38

Beitrag von Christian. »

kannst du nicht irgendwie terminieren, wann das ende der richtigen ausgegebenen listen ist?

ich haenge noch ein paar schritte vor dir...

(perm '(1 2) liefert
(list (list 1 1 2) (list 1 1 2) (list 1 2 1) (list 2 1 2) (list 1 2 2) (list 1 2 2))

jetzt muss ich nur die doppelten zahlen in der liste und die doppelten listen mit filter irgendwie verschwinden lassen.
gibts da keinen vordefinierten operator fuer filter? :D

Benutzeravatar
Skylo
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 149
Registriert: 7. Nov 2006 20:08
Wohnort: Darmstadt (Woogsviertel)
Kontaktdaten:

Beitrag von Skylo »

hmmm ich hatte mal ne ähnlihce ausgabe bevor ich alles neu programmiert hab!

Nämlich wie gesagt insert-everywhere.

Die Hauptzeile meines Programms ist wohl

Code: Alles auswählen

 (map insert-x (perm (rest alon))) 
Perm wird solang aufgerufen bis die Liste nur 1 Lang ist und gibt dann nur die Einelement List zurück.

Also meist (3)

Dann führt er eigentlich zum ersten Mal map mit der Funktion insert-x aus.

Hier fügt er das element davor (first alon) in das Ergebnis aus (perm (rest)) ein.

Also kommen eigentlich zwei listen
(2 3) und (3 2) raus.

Dann fügt er quasi mit insert-everywhere 1 ein und das in beide listen an alle stellen.

Damit kommt er dann auf alle richtigen Ergebnisse.

Wichtig ist das INSERT-EVERYWHERE meiner Meinung nach auch alle Teillisten bearbeitet.

Noch dazu muss halt die Rekursion schlau gewählt sein.

Problem is ja immernoch (ich weiss auch nich mehr grad weiter), das er nach den richtigen Ergebnissen halt noch irgendeinen Müll auswirft ;)
Junge, geh kacken! Echt jetzt!

Benutzeravatar
Skylo
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 149
Registriert: 7. Nov 2006 20:08
Wohnort: Darmstadt (Woogsviertel)
Kontaktdaten:

Beitrag von Skylo »

gelöscht
Zuletzt geändert von Skylo am 15. Nov 2007 21:10, insgesamt 1-mal geändert.
Junge, geh kacken! Echt jetzt!

Benutzeravatar
Skylo
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 149
Registriert: 7. Nov 2006 20:08
Wohnort: Darmstadt (Woogsviertel)
Kontaktdaten:

Beitrag von Skylo »

mit einer weiteren hilfsfunktion komme ich nun auf dieses Ergebnis

Code: Alles auswählen

(list (list 1 2) (list 2 1))
(list (list 1 2 3) (list 2 1 3) (list 2 3 1) (list 1 3 2) (list 3 1 2) (list 3 2 1))
(list
 (list 1 2 3 4)
 (list 2 1 3 4)
 (list 2 3 1 4)
 (list 2 3 4 1)
 (list 1 3 2 4)
 (list 3 1 2 4)
 (list 3 2 1 4)
 (list 3 2 4 1)
 (list 1 3 4 2)
 (list 3 1 4 2)
 (list 3 4 1 2)
 (list 3 4 2 1)
 (list 1 2 4 3)
 (list 2 1 4 3)
 (list 2 4 1 3)
 (list 2 4 3 1)
 (list 1 4 2 3)
 (list 4 1 2 3)
 (list 4 2 1 3)
 (list 4 2 3 1)
 (list 1 4 3 2)
 (list 4 1 3 2)
 (list 4 3 1 2)
 (list 4 3 2 1))
Yeah! ;)

Leiderbrauch ich für diese Ausgabe pro lÄnge > 2 der Eingangsliste ein flatten-once mehr!

Wer kennt dieses Problem?

PS: Die Hilfsfunktion die mir gefehlt hat war eine Suche ob ein Objekt bereits inner Liste drinsteckt.

So fügt er kein 1 mehr in eine Liste wie 1 2 ein!
Junge, geh kacken! Echt jetzt!

Stumpf.Alex
Nerd
Nerd
Beiträge: 643
Registriert: 1. Okt 2007 12:40
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von Stumpf.Alex »

Das ist kein Problem, sondern wirklich so. Hab das auch in 5 oder 6 Zeilen implementiert und ich lass bei jeden rekursiven Aufruf flatten.

Benutzeravatar
Skylo
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 149
Registriert: 7. Nov 2006 20:08
Wohnort: Darmstadt (Woogsviertel)
Kontaktdaten:

Beitrag von Skylo »

bei mir wird auch bei jedem aufruf von (perm) flatten-once ausgeführt!

Hmmm...
Junge, geh kacken! Echt jetzt!

ChRiZz88
Mausschubser
Mausschubser
Beiträge: 87
Registriert: 7. Nov 2007 18:09
Kontaktdaten:

Beitrag von ChRiZz88 »

Is doch gut... Ich habs jetz auch...

BeatriceFriess
Mausschubser
Mausschubser
Beiträge: 70
Registriert: 1. Okt 2007 15:55
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von BeatriceFriess »

Hi, hab mal eine ganz kurze und wohl blöde Frage...

Und zwar soll ja in der Ausgabe bei der 7.1 stehen '( x x x)
Und bei mir steht jetzt (list x x x)

Im Prinzip ist es ja das gleiche, aber ich frage mich, ob wir jetzt speziel die Quote Ausgabe machen müssen oder nicht...
Und wenn, dann frage ich mich, wie ich das machen soll....
Ich stehe da gerade auf dem Schlauch

Osterlaus
BSc Spammer
BSc Spammer
Beiträge: 1263
Registriert: 23. Aug 2007 12:46
Wohnort: DA

Beitrag von Osterlaus »

Das ist äquivalent, weil Scheme intern jedes '() in eine Liste auflöst, die dann eben durch (list ) geschrieben wird.

Antworten

Zurück zu „Archiv“