Konkurs :)

0

Język programowania dowolny (znaczy Pascal, C, Java, asm, Haskell).
Cel: napisać program, który wypisze swój kod źródłowy.
Trudność: nie można korzystać z żadnych plików czy zasobów :)

0

Tzn, ma wyświetlić kod np. w pascalu, czy tylko w assemblerze? Bo to pierwszejest raczej niemożliwe bez żadnego osobnego dołączenia tegoż kodu. No, nie mówię oczywiście o czymś w rodzaju:

ShowMessage('ShowMessage(''ShowMessage(''ShowMessage(itd...)'')'')');

:-P

0

W tym samym języku, w jakim napisałeś program :)

Dryo: nie podawaj im odpowiedzi :)

0

http://www.256b.com/demo.php?demoId=195
W języku wysokiego poziomu jest to awykonalne.

i pisz normalne tematy [diabel]

0

Język dowolny powiadasz, a maszyna? Może być BASIC na C64? Tam chyba można było LIST wrzucić:)) (ale nie mam pewności) - tylko to był raczej interpreter:) Aaa... i w JavaScript i większości języków interpretowanych na upartego pewnie można by było:p

0

Marooned: jest wykonalne. Nawet bardziej niz w asm. Nie bez powodu Vogel podal w przykladowych jezykach Haskell. Jezyki funkcyjne idealnie sie do tego nadaja. Jak juz kiedys wspominalem pierwszym kompilatorem byla funkcja napisana w LISPie kompilujaca programy w LISPie. Analogicznie jest z tymi programikami. Maja one swoja nazwe... ale nie bede podawal bo zepsuje konkurs (chcialem naprowadzic was, ale niestety tam byly linki do gotowych programow :( ).
Krecik: nie mozna wykorzystywac LIST z basica. Zabroniony jest odczyt kodu zrodlowego (czyli np. napisanie programu, zapisanie zrodla na dysk i odczytanie go). LIST jest analogiczna instrukcja wczytujaca tylko ze z pamieci.

//hmm - chodziło mi raczej o Pascal/C++ etc. ;) - m.M

0

A Js może być ?

Bo w Js to bardzo proste :d

alert(document.getElementsByTagName('HTML')[0].outerHTML)
0

A Js może być ?

Bo w Js to bardzo proste :d

alert(document.getElementsByTagName('HTML')[0].outerHTML)

Ale w ten sposob odczytujesz zrodla strony, dlatego jest to niepoprawne, tak samo jak LIST z Basic'a. Chodzi o "stworzenie" kodu. Czyli moze on powstawac np. za pomoca jakies suerinteligentnego programu generujacego inny program (tzn. samego siebie) albo miec w kodzie gdzies jakis lancuch znakow zapisany, ktory bedzie identyczny z kodem programu. Problemem w niektorych jezykach jest koniecznosc zachowania formatowania (np. w TP mialem problem ze zbyt dlugim stringiem :/).
Juz chyba dosc podpowiedzialem. Wiecej to musialbym juz umiescic kod.

0

W Assemblerze by się chyba dało takim sposobem: znaleźć napisany w ASM dekompilator ASM, przerobić tak, żeby od razu brał się za siebie i wypisywał wynik, kilka razy przemaglować go kolejno przez jego samego i kompilator, żeby w końcu nie było żadnych rżnic wywołanych optymalizacją i tyle tego. Wypisze własne źródła.

Ewentualnie można zrobić plik EXE składający się z samego nagłówka - kodu źródłowego nie ma, więce nie ma czego wypisywać - program nie robi nic, natychmiast się zamyka. W pełni zgodne z zasadami, Vogel nie napisał, że są jakieś ograniczenia rozmiaru kodu :P :D :D :D

0

żeby w końcu nie było żadnych rżnic wywołanych optymalizacją i tyle tego.

Dlatego trzeba uzyc popularnie nazywanych "pure assembler", czyli generujacych kod taki jak uzytkownik sobie zazyczy, a nie co kompilator uzna za lepsze (np. FASM).

Ewentualnie można zrobić plik EXE składający się z samego nagłówka - kodu źródłowego nie ma, więce nie ma czego wypisywać - program nie robi nic, natychmiast się zamyka.

Tak. Zamknie sie... po jakims czasie z komunikatem access? :P
Jakis kod jest. W koncu musi byc jakis program. Czym innym jest program, a czym innym plik. Gdyby chodzilo o plik to moglbym stworzyc np. pusty plik js, albo lepiej plik txt i powiedziec, ze takie rozszerzenie maja pliki mojego wyimaginowanego kompilatora :)

0

Przecież dałem link do programu w Assemblerze, który spełnia wymogi. To czemu rozmyślacie, czy to możliwe?

0

Czyli moze on powstawac np. za pomoca jakies suerinteligentnego programu generujacego inny program (tzn. samego siebie) albo miec w kodzie gdzies jakis lancuch znakow zapisany, ktory bedzie identyczny z kodem programu.

Ta opcja jest chyba awykonalna. Bo dajesz np. showmessage() z kodem programu, którym jest showmessage(), który ma w sobie treść programu, czyli showmessage() i tak w nieskończoność. Przynajmniej na mój rozum... :). Naomista zapisanie łańcucha znaku w zasobach, czy w pliku odpada z powodu założeń konkursu.

0

Marooned: obawiam sie, ze program nie spelnia zalozen. Nie wypisuje m. in. etykiet. Program musi wypisywac dokladnie taki kod z jakiego zostal skompilowany. O ile moznaby jeszcze przezyc, ze etykiet nie wypisuje, to akurat ten program nie wypisuje zmiennych na samym koncu (db...).
thenkles: jest mozliwe. Mi po 2-dniowej walce udalo sie jakos... Ale przyznaje, proste nie jest. Tzn. problemy sa zwykle natury technicznej. Proponuje sprobowac, a wszystko stanie sie latwiejsze.
Moge dac podpowiedz. Zrob program wypisujacy stringa (na poczatek pustego). Potem wypelnij tego stringa kodem programu i... kombinuj dalej.

0

Bez przesady, to nie takie trudne, ja pisałem w pascalu, zajęło mi jakieś 2 godziny. Podpowiem tylko że apostrof ma kod #39 :-)

0

Bez przesady, to nie takie trudne, ja pisałem w pascalu, zajęło mi jakieś 2 godziny. Podpowiem tylko że apostrof ma kod #39 :-)

Mi troche zajelo dojscie jak to zrobic :( Najgorsze wlasnie z tym apostrofem bylo i enterami (bo za dluga linia wychodzila :( )

0

slimy wygrał :) Brawa i oklaski :P

Dryobates: Twój wygenerowany kod się u mnie nie kompiluje :)

0

slimy wygrał :) Brawa i oklaski :P

Dzięki :-) ;p Już wgrałem na serwer http://4programmers.net/view_file.php?id=1428

0

slimy wygrał :) Brawa i oklaski :P
Dryobates: Twój wygenerowany kod się u mnie nie kompiluje :)

Przecież ten kod nie spełnia zadania - wypisuje tylko część swojego kodu! błąd polega na tym, że program - tak jak napisał wczesniej thenkles - nie pokazuje kodu do wypisywania kodu. a chyba trzeba było wypisać CAŁY kod, nie?

[dopisane]
hehe ups [glowa]. faktycznie, nie chciało mi się go uruchomić. zwracam honor i chyba idę się wreszcie porządnie wyspać.

0

Po przediffowaniu kodu oryginalnego i wygenerowanego wyszło 0 (pliki identyczne). ŁF - uruchomiłeś to w ogóle?

1 użytkowników online, w tym zalogowanych: 0, gości: 1