Rozwiązanie zadania tradycyjnie wymagało wykonania kilku operacji. Najpierw należało dokonać konwersji listy slashy na wartosci numeryczne, przez które przechodzi krzywa zygzakowata (slash_counter). Operacja ta przysporzyła wielu problemów, gdyż mimo sugestii z mojej strony, aby przetwarzać listę parami, niewiele osób tak do tej kwestii podeszło. :-(( Kolejna operacja to posortowanie listy przekonwertowanej w celu zebrania ze sobą tych samych wartości, przez jakie przeszła krzywa wejściowa (sort_nokey). Naturalna konsekwencja tej czynności było potem utworzenie listy podlist z tymi samymi wartościami przejść krzywej (group_sorted). Często potrzebny był do tego predykat wycinania początkowego fragmentu tych samych wartości (first_group), choć można to było zrobić w jednym predykacie. Mając taka listę można było zrealizować sortowanie z kluczem opartym na długości podlist (sort_key). Klucz taki mógł być jawnie sklejany z podlistami ale nie było to konieczne, gdyż w sortowaniu możliwe było przecież bezpośrednie porównywanie wartości funkcji length. Jeśli klucz występował jawnie, to niezbędne było potem jego usuniecie (del_key). Wszystkie operacje razem w odpowiedniej kolejności połączyć powinien predykat główny (main). Możliwe tez jest inne podejście, w którym lista slashy po konwersji poddawana jest przeszukiwaniu w celu znalezienia powtórzeń elementów. Te same znalezione elementy są zliczane (count_occurs) po to, żeby utworzyć z nich potem listę par licznik-element (group_counters). Jest to tym samym mechanizm, który pozwala od razu uzyskać klucz sortujący. Reszta programu jest juz taka sama: sortowanie z kluczem i usuwanie kluczy. Nieco bardziej szczegółowe zestawienie tego, co można było znaleźć w pracach znajdziecie Państwo poniżej w tabelkach, które zostały rozdzielone ze względu dwa różne możliwe sposoby rozwiązywania zadania. | indeks | slash_counter | help sort_nokey | sort_nokey | first_group | group_sorted | help sort_key | sort_key | del_key | main | |========|===============|=================|============|=============|==============|===============|==========|=========|==============| | 122518 | tak | tak | tak | --- | tak | tak | tak | tak | tak | |--------|---------------|-----------------|------------|-------------|--------------|---------------|----------|---------|--------------| | | | | | | | | | | | |--------|---------------|-----------------|------------|-------------|--------------|---------------|----------|---------|--------------| | 122579 | tak | tak | tak | tak | kopia | tak | tak | --- | tak | |--------|---------------|-----------------|------------|-------------|--------------|---------------|----------|---------|--------------| | 122587 | kopia | tak | tak | --- | kopia | tak | tak | brak | nie | |--------|---------------|-----------------|------------|-------------|--------------|---------------|----------|---------|--------------| | | | | | | | | | | | |--------|---------------|-----------------|------------|-------------|--------------|---------------|----------|---------|--------------| | 122465 | tak/kopia | tak/kopia | tak/kopia | tak/kopia | tak/kopia | brak | brak | brak | nie na temat | |--------|---------------|-----------------|------------|-------------|--------------|---------------|----------|---------|--------------| | 105988 | tak/kopia | tak/kopia | tak/kopia | tak/kopia | tak/kopia | brak | brak | brak | nie na temat | |--------|---------------|-----------------|------------|-------------|--------------|---------------|----------|---------|--------------| | 117334 | kopia | tak | tak | brak | nie | brak | brak | brak | brak | |========|===============|=================|============|=============|==============|===============|==========|=========|==============| | indeks | slash_counter | count_occurs | group_counters | help sort_key | sort_key | del_key | main | |========|===============|==============|================|===============|==========|=========|==============| | 117211 | nie | tak | nie | nie | nie | nie | brak | |--------|---------------|--------------|----------------|---------------|----------|---------|--------------| | 120121 | nie | tak/kopia | tak/kopia | brak | brak | brak | nie na temat | |--------|---------------|--------------|----------------|---------------|----------|---------|--------------| | 122507 | nie | tak | tak | nie | tak | tak | tak | |--------|---------------|--------------|----------------|---------------|----------|---------|--------------| | 122517 | nie | tak | tak | tak | tak | --- | tak | |--------|---------------|--------------|----------------|---------------|----------|---------|--------------| | 122568 | nie | nie | brak | nie | nie | nie | nie | |--------|---------------|--------------|----------------|---------------|----------|---------|--------------| | 117151 | nie | nie | brak | brak | brak | brak | brak | |--------|---------------|--------------|----------------|---------------|----------|---------|--------------| | 117220 | nie | tak | tak | tak | tak | tak | nie | |--------|---------------|--------------|----------------|---------------|----------|---------|--------------| | 122470 | nie | tak | tak | tak | tak | brak | nie | |--------|---------------|--------------|----------------|---------------|----------|---------|--------------| | | | | | | | | | |--------|---------------|--------------|----------------|---------------|----------|---------|--------------| | 122459 | nie | tak/kopia | nie/kopia | nie | nie | brak | brak | |--------|---------------|--------------|----------------|---------------|----------|---------|--------------| | 122487 | nie | tak/kopia | nie/kopia | tak | nie | brak | brak | |--------|---------------|--------------|----------------|---------------|----------|---------|--------------| | 124567 | nie | tak/kopia | nie/kopia | nie | nie | brak | brak | |========|===============|==============|================|===============|==========|=========|==============| Proszę jednak brać pod uwagę, iż nadal jest to zestawienie stosunkowo ogólne, gdyż wartość "nie" oznacza tylko, ze predykat nie działa w pełni poprawnie, ale nie odzwierciedla w jakim stopniu odbiega od docelowej definicji. Źródłowe kody programów zawierają jednak zbyt wiele niuansów, aby można było przedstawić je w takim zestawieniu i traktować to zestawienie należy poglądowo a nie ilościowo. Wartość "---" oznacza, ze ta pozycja nie miała wpływu na ocenę (np. nie była potrzebna w programie). Wartość "kopia" oznacza ze ta cześć pracy nie jest oryginalna i takie same definicje zostały niestety znalezione u innych osób. :-(( Z przykrością stwierdzam, ze doszło do "wymiany myśli intelektualnej" miedzy zdającymi w tej grupie. Nie ma tutaj znaczenia fakt, ze nie złapano nikogo na gorącym uczynku ani to, że nazwy predykatów są zmienione np. z 'pack' na 'pakuj' albo 'transfer' na 'przesun', bo jeśli nazwy zmiennych, ich liczba czy kolejność parametrów albo liczba oraz kolejność warunków jest identyczna, to oznacza to bez cienia wątpliwości "współpracę". W programowaniu deklaratywnym, gdzie nie ma mechanizmów deklaracji danych a przetwarzanie nie ma charakteru sekwencyjnego szansa, iz dwie osoby odizolowane napiszą na ten sam temat taki sam kod (w sensie ilości, kolejności, nazewnictwa itp.) jest niemal jak szansa wygrania w totka ;-) Postanowiłem zatem, ze będę oceniał wyłącznie oryginalny wkład autora (fragmenty określone jako "kopia" traktowane są jako nieistniejące) i jeśli był on zadowalający, to uzyskanie oceny pozytywnej nadal było możliwe. Jednak w przypadku dwóch prac podobieństwo było tak duże, iż jest to w zasadzie plagiat i dlatego nie mogłem zastosować tej reguły, a osoby te nie otrzymały oceny - a w zasadzie otrzymały, ale ocenę 0.0 (co należy traktować jako negatyw, rzecz jasna). Szczegółowe zapoznanie się z oceną możliwe jest w terminie konsultacji w semestrze zimowym 2015/16. P.S. Przepraszam osoby zrażone ewentualnym brakiem (kodowaniem) polskich liter, ale nadal pracuję na niezbyt stabilnej platformie sprzętowej, czekając cierpliwie na realizację zakupu nowego oraz wymianę uszkodzonego sprzętu.