? pr [Not everyone needs to program computers.]

Na početnu stranicu! Udruga Darovitih Informatičara Rijeke Na glavni izbornik!

državna natjecanja

3. ZADATAK DRŽAVNOG NATJECANJA GODINE 2000.

UVOD:
Nažalost, opet se dogodio jedan propust! Sastavljač zadataka je dao kao službeno rješenje programski kod koji ne radi valjano. Pri tome mislim na kod za UCB Logo. Vjerujem da greška nije namjerna i da će slijedeći put biti bolje. Ali, kako moramo ukazati na grešku zbog toga jer se na službenim rješenjima uče budući natjecatelji, pojasnit ću u daljnjem tekstu o čemu se radi.

TEXT ZADATKA:
Ukratko: Napišite proceduru UREDI :l koja će urediti listu :l na taj način da na početak liste stavi riječi koje se nalaze u listi, a na kraj liste stavi liste koje se nalaze u listi. Redoslijed riječi mora biti onaj kojim su te riječi upisane u listu i isto tako redoslijed lista mora biti onaj kojim su te liste upisane u listu.
Na opisan način mora biti uređena i svaka lista koja se nalazi unutar neke liste.
Uređenu listu procedura vraća kao svoj rezultat.
Potpuni tekst možete pronaći na: http://jagor.srce.hr/hsin/dmih00/

IZVANREDNO RJEŠENJE by HRVOJE BLAŽEVIĆ:
Ovdje se nalazi rješenje koje u potpunosti prolazi sve testove i koristi sve napredne tehnike koje logo kao programski jezik dozvoljava, osobito verzije UCB Logo i MSW Logo. Naravno, na eleganciju rješenja ne treba niti ukazivati. Rješenje možete naći samo na ovim stranicama, ali smatram da bi ga obvezno trebao prikazati i organizator natjecanja.

to uredi :l
op se filter "word? :l map "uredi filter "list? :l
end

SLUŽBENO RJEŠENJE ZA UCB LOGO:

to uredi :l
	local "rijeci
	local "liste
	local "i
	make "rijeci []
	make "liste []
	for [i 1 count:l] ~
		[ifelse word? item :i :l [make "rijeci lput item :i :l :rijeci] ~
		 [if list? item :i :l [make "liste lput uredi item :i :l :liste]]]
	op se :rijeci :liste
end

Ovo rješenje neće raditi zbog pogrešaka u sintaksi. Trebalo je umjesto:

	for [i 1 count:l] ~

napisati i dodati razmak prije :l

	for [i 1 [count :l]] ~

Nažalost niti nakon takve intervencije, ovo službeno rješenje ne prolazi 5. test unos kojeg je sastavio sam sastavljač zadatka i testiranja zadataka. Radi se o testu:

	uredi [ [ [ [ [ ] 4] 3] 2] 1]
koji daje poruku:
	item doesn't like [] as input  in forloop
	[run :for.instr]