Konkurs oraz ocena kodu

4

Witam wszystkich ;)

Ostatnio strasznie mi się nudziło, więc przez ostatnie 5 dni pisałem własny prosty "język programowania" oparty na BeFunge.
W paczce jest edytor (wraz z prostym debuggerem i kodem źródłowym), krótki poradnik oraz .... konkurs.
Zamieszczając post w tym dziale liczę po części na ocenę kodu, który napisałem (jakoś nie chciało mi się komentować, ale liczę na to, że dacie radę się w nim zorientować ;)), a po części także na to, że ktoś się tym zainteresuje i spróbuje swoich sił w moim konkursie.
Edytor napisany jest w Delphi, lecz sama biblioteka będąca interpreterem w Lazarusie (na początku także chciałem napisać edytor w Lazarusie, ale przegrałem walkę z SynEditem).
A powracając do konkursu - należy rozpracować ten kod:

v>v>>:1av*:l1a'18'62j27'15'               @#< >062j
&& /j260_">    ^"04p042j>">3> > > >"00p002j ^_^#N=d::/*,<
>^*^<>"Stage 1 finished :> 3 more to go.",Nv>"Almost ;)"^
  >2^^v      /             3              #<^#p3'15'">"<>062j
<><><>>>v<><>>"Stage 2 finished :> 2 more to go.",Nv^  |  $   <
>072j   >::d=|j21'25'                              <   >^ '100'
"Failed :<",@>062j>"Stage 3 finished :> 1 more to go.",N>>^
"Success! :D",@>:l\:'220000'-l\2;\//'18'0gd/d:'13'a*v
>>V/*:d\-'100'*'25'v            v3<           <     <                                
               j270_062j        >*:'9000000'`!|
                                              >082j

user image


Dokładniej: kod prosi użytkownika o dwie liczby i wykonuje na nich czarną magię, po czym jeżeli wprowadzone liczby wytrzymały tortury, wyświetlana jest informacja `"Success! :D"` (od razu mówię, iż wprowadzenie dwa razy zera nie jest poprawnym rozwiązaniem, trzeba cały kod przeanalizować i podebugować (w edytorze jest kolorowanie składni i parę innych rzeczy, które to ułatwią)). Jest wiele liczb spełniających ten kod, lecz pomimo wszystko nie radzę brute-forceować ;) Kto wyśle więcej liczb, niebędących kolejnymi po sobie, a będących poprawnymi, wygra ... e.... satysfakcję z rozpracowania kodu :D

Wszelkie rozwiązania proszę pisać na moje PW, a oceny kodu jak i samego edytora, proszę pisać w tym temacie.
Czas konkursu: od teraz do odwołania.

Pozdrawiam :)

PS: ten kod na pierwszy rzut oka jest rzeczywiście czarną magią (chyba, że ktoś masowo pisze w językach ezoterycznych pokroju BeFunge), lecz - jak już napisałem wcześniej - w paczce w załączniku znajduje się krótki tutorial oraz parę dem, więc chyba się odnajdziecie ;)

PS2: jeżeli pomysł się sprawdzi, być może zorganizuje więcej konkursów tego typu.

0
Patryk27 napisał(a)

Edytor napisany jest w Delphi, lecz sama biblioteka będąca interpreterem w Lazarusie (na początku także chciałem napisać edytor w Lazarusie, ale przegrałem walkę z SynEditem).

Więc dlatego pisałeś wątek o numerowaniu wierszy w TSynEdit? Nie rozumiem, przecież kładąc tą kontrolkę na formularzu od razu jest numerowanie włączone...


Składnia tego języka to czarna magia, BrainFuck już ma łatwiejszą... :]


To ja może z innej beczki - moje uwagi na temat GUI;

0. Ikona programu

Nie ładnie, brak własnej ikony... O.o

1. Rozmiar okna

Niestety podczas powiększenia okna na cały ekran przez systemowy przycisk nie działa to jak należy (sam się dziwię czemu - tym też się bawiłeś?) - okno nie "dotyka" górnej krawędzi ekranu, a dolna część (połowa StatusBar'a) wchodzi pod pasek zadań - na WinXP; Nie wiem dlaczego tak się dzieje, ale cóż - fail;

2. Rozmiar kontrolek

Jak dla mnie edytor kodu jest za mały i nie można go na życzenie powiększyć - brak Splitter'a; Z racji tej, że mam niską rozdzielczość (1024x768) trochę niewygodnie się pisze; Przydałaby się możliwość dostosowania wielkości kontrolek według własnych potrzeb;

3. Menu główne

Mało tych opcji (i nie ma pomocy!); Przydałoby się jeszcze kilka, ale to sprawa mniej ważna;

4. Menu podręczne

A raczej jego brak w edytorze kodu; Szkoda, bo często z niego korzystam w innych kompilatorach środowiskach; Ponadto w grupie Stack and Input, w kontrolce zapewne od stosu jest menu podręczne, ale nie obsługuje skrótów klawiszowych - odkryłem przez przypadek chcąc usunąć pozycję klawiszem Del;

5. Edytor kodu

Tutaj wszystko wygląda w porządku (chociaż brak PopupMenu), ale jedno mnie dziwi, dlaczego w pasku z numerami wierszy (z lewej obok numeru wiersza) wyświetlana jest także pozycja X kursora - trochę myli patrząc na numer linii, te dwie liczby zlewają się w jedną;


Tak tylko pomarudziłem, teraz spróbujemy rozszyfrować kod, który podałeś :]


Chyba zepsułem coś, bo program się zapętlił... podałem dwie liczby, wyjście wygląda tak:

Stage 1 finished :> 3 more to go.
Stage 2 finished :> 2 more to go.
Stage 3 finished :> 1 more to go.
Almost ;)

i nie chce przestać działać... :]

1

Przecież par liczb spełniających warunki zadania jest nieskończenie wiele :/. No, w pewnym momencie można przekroczyć zakres obsługiwany przez typ Extended w Pascalu. Nie wiem czy program do końca jest poprawny, czy robi to co według ciebie miał robić. Gdzie jest w jakikolwiek sposób wykorzystywany wynik and 13 oprócz tego byle nie wyniósł 0, bo pętla się nie skończy (jak wyżej)?

W przedziale od 0 do 1000000000 jest ich 44193928. Jak duże załączniki przyjmuje twoja poczta ;P?

0

Czy liczby muszą spełnić wszystkie Stage finished, czy tylko Success?
Nie wiem, czy to zamierzone, ale na pozycji (5, 14) masz j21'25' (w lewo), co spowoduje skok na pozycję (1, 2) z kierunkiem w prawo.
A tam masz: /j (co daje skok uzależniony od wejścia użytkownika).

0

@iooi: no jak? wchodząc tam z prawej strony na stos masz wrzucone 25 1 2, więc skaczesz do (1, 25).

0

Może i się czepiam, ale...

Konkurs oraz ocena kodu

Ten wątek się źle nazywa. Dużo lepiej byłoby "MLang - ocena kodu i konkurs". Tak to nawet nie masz nazwy tego 'kodu'. To tak przyszłościowo, warto myśleć co to znaczy na liście, żeby temat mówił o zawartości.

 Reg := TRegistry.Create;
 Try
  Try
   Reg.RootKey := HKEY_CLASSES_ROOT;
   Reg.OpenKey('.'+Ext, True);
   Reg.WriteString('', Ext+'file');
   Reg.CloseKey;
   Reg.OpenKey(Ext+'file', True);
   Reg.WriteString('', 'MLang program');
   Reg.CloseKey;
   Reg.OpenKey(Ext+'file\DefaultIcon', True);
   Reg.WriteString('', Application.ExeName+',0');
   Reg.CloseKey;
   Reg.OpenKey(Ext+'file\shell\open', True);
   Reg.WriteString('', '&Open in MLang Editor');
   Reg.CloseKey;
   Reg.OpenKey(Ext+'file\shell\open\command', True);
   Reg.WriteString('', Application.ExeName+' "%1"');
   Reg.CloseKey;
  Except
  End;
 Finally
  Reg.Free;
 End;
 

Darmowe zaśmiecanie rejestru... I fajne bloki try.

3.Zapisywanie kodu jako 'temp.src' i w ten sposób przekazywanie go do Dllki to słaby pomysł...

Kto wyśle więcej liczb, niebędących kolejnymi po sobie, a będących poprawnymi

No to trzeba dopisać warstwę losującą kolejność tych liczb... czy uważasz że będziemy ręcznie myśleć nad liczbami które spełniają twoje warunki?...

TMLang.Load:
Direction := dNone;
 Case Prog[0, 1] of
  '>': Direction := dRight;
  'v': Direction := dDown;
  else Direction := dRight;
 End;

Ten kod po pierwsze zawiera niepotrzebne ustawianie Directory na dNone, a po drugie wystarczy dać Direction:=dRight;.

Tyle dotychczas wynika z mojej pobieżnej analizy...

1

Ok. Podaję swoje liczby tutaj, bo konkurs i tak jest IMO spaczony. Plik tekstowy z liczbami oddzielonymi znakiem nowej linii. W sumie czterdzieści cztery miliony sto dziewięćdziesiąt trzy tysiące dziewięćset dwadzieścia osiem liczb. Mogę dać więcej.

http://ja.revciu.pl/pub/4p/130176-konkurs_oraz_ocena_kodu/liczby.7z (17.4MB)

Podane liczby to a w (a * b) / 2. Więc do algorytmu trzeba podać tę liczbę oraz 2 albo dwa razy mniejszą liczbę niż podaną i 4, itd.

0

spoko że stage 1, 2, 3 aż do "almost" są proste a potem nagle zaczyna się dziać tyle rzeczy że nawet przestałem śledzić :O mimo to magicznie przechodzą chyba wszystkie wyniki które tam dochodzą

nie chce mi się generować wyników ani zresztą nie mam jak wysłać PM więc napiszę tu w ukryciu solucję
iloczyn liczb musi być podzielny przez 4 i 9, połowa tego iloczynu musi mieć nieparzystą liczbę cyfr

0

Prawdę mówiąc, nie sądziłem iż tyle liczb jest poprawnych :D
Dzisiaj napiszę ten kod od nowa, a zadaniem będzie podanie wzoru, a nie liczb spełniających równanie.

Furious Programming napisał(a)

Nie ładnie, brak własnej ikony... O.o

Nie jestem grafikiem, lecz może dzisiaj postaram się jakąś wykonać.

Furious Programming napisał(a)

Niestety podczas powiększenia okna na cały ekran przez systemowy przycisk nie działa to jak należy (sam się dziwię czemu - tym też się bawiłeś?) - okno nie "dotyka" górnej krawędzi ekranu, a dolna część (połowa StatusBar'a) wchodzi pod pasek zadań - na WinXP; Nie wiem dlaczego tak się dzieje, ale cóż - fail;

Windows 7, 1280x800 - wszystko jest ok, nic się nie rozjeżdża ani nie wychodzi poza ekran.
Problemem może być fakt, iż automatycznie ustawiam szerokość/wysokość każdego GroupBox'a na odpowiednie wymiary przy zdarzeniu onResize.

Furious Programming napisał(a)

Jak dla mnie edytor kodu jest za mały i nie można go na życzenie powiększyć - brak Splitter'a; Z racji tej, że mam niską rozdzielczość (1024x768) trochę niewygodnie się pisze; Przydałaby się możliwość dostosowania wielkości kontrolek według własnych potrzeb;

Ok, dzięki - pomyślę nad tym.

Furious Programming napisał(a)

Mało tych opcji (i nie ma pomocy!); Przydałoby się jeszcze kilka, ale to sprawa mniej ważna;

Jest plik Readme, które jest całą pomocą, lecz dodam odpowiednią opcję w edytorze.

Furious Programming napisał(a)

A raczej jego brak w edytorze kodu; Szkoda, bo często z niego korzystam w innych kompilatorach;

Faktycznie, zapomniałem dodać, zaraz się poprawi ;)

Furious Programming napisał(a)

Ponadto w grupie Stack and Input, w kontrolce zapewne od stosu jest menu podręczne, ale nie obsługuje skrótów klawiszowych - odkryłem przez przypadek chcąc usunąć pozycję klawiszem Del;

Ok, dodałem do listy rzeczy do zrobienia.

Furious Programming napisał(a)

Tutaj wszystko wygląda w porządku (chociaż brak PopupMenu), ale jedno mnie dziwi, dlaczego w pasku z numerami wierszy (z lewej obok numeru wiersza) wyświetlana jest także pozycja X kursora - trochę myli patrząc na numer linii, te dwie liczby zlewają się w jedną;

Ten język umożliwia metaprogramowanie, instrukcje takie jak g czy p wymagają podania numeru linii oraz numeru znaku, liczenie ich samemu byłoby żmudne.

Furious Programming napisał(a)

Chyba zepsułem coś, bo program się zapętlił... podałem dwie liczby, wyjście wygląda tak:

Mój błąd, w pewnym momencie pod koniec kodu następuje mnożenie liczby przez 3, dopóki nie będzie ona większa od 9000000.
Nie przewidziałem, że może być ona równa zero, przez co zawsze będzie mniejsza od 9000000.

Furious Programming napisał(a)

i nie chce przestać działać...

F10 lub Program->Stop ;)

Rev napisał(a)

W przedziale od 0 do 1000000000 jest ich 44193928. Jak duże załączniki przyjmuje twoja poczta ;P?

Nie sądziłem, iż tyle liczb jest poprawnych, dlatego w następnym konkursie jako rozwiązanie trzeba będzie wysłać wzór ;)

cloudm33 napisał(a)

Czy w pierwszym inpucie wpiszemy 0, czy w drugim, to program się zapętla.

Na początku następuje mnożenie obu liczb, jeżeli któreś z nich jest równe zero, mnożenie także zwróci zero i program się zapętli.

clodum33 napisał(a)

- omija następną instrukcję. Wszystko było by ok, tylko, że spacja to też pewna instrukcja (NOT), a tego nie napisałeś..

Mój błąd, było dosyć późno jak to pisałem, zaraz wprowadzę odpowiednie poprawki.

cloudm33 napisał(a)

komenda 'd' - w nawiasie nie napisałeś że string konwertuje się na liczbę całkowitą, tylko że na liczbę

Niedopatrzenie, zaraz się poprawi ;)

-123oho napisał(a)

Darmowe zaśmiecanie rejestru... I fajne bloki try.

To copy&paste z mojego starszego dawnego kodu, blok "try...except" jest po to, aby w razie gdy np.user nie ma dostępu do rejestru niepotrzebnie nie wyświetlać informacji o niedodanym wpisie, ale zmienię to.

-123oho napisał(a)

Zapisywanie kodu jako 'temp.src' i w ten sposób przekazywanie go do Dllki to słaby pomysł..

Może w takim razie przekazywanie TStringList do dllki?

-123oho napisał(a)

Ten kod po pierwsze zawiera niepotrzebne ustawianie Directory na dNone, a po drugie wystarczy dać Direction:=dRight;.

Na początku było założenie, aby pierwszy znak w kodzie był znakiem kierunku (>, <, ^, v), potem to zmodyfikowałem i nie zauważyłem tej pozostałości.


Dzięki wszystkim za przejrzenie kodu i uczestnictwo :) Przyjrzę się waszym sugestiom i poprawie odpowiednio kod, a także napiszę nowy kod na konkurs (tylko jak już wspomniałem - nie będzie chodziło o podanie liczb, a wzoru).
0
Patryk27 napisał(a):
-123oho napisał(a)

Darmowe zaśmiecanie rejestru... I fajne bloki try.

To copy&paste z mojego starszego dawnego kodu, blok "try...except" jest po to, aby w razie gdy np.user nie ma dostępu do rejestru niepotrzebnie nie wyświetlać informacji o niedodanym wpisie, ale zmienię to.

Rozumiem że cały czas siedzisz na adminie? Do HKCR nie można zapisywać ze zwykłego użytkownika. Takie pierdoły powinny być opcjonalne do wyboru przy instalacji.

0

Może w takim razie przekazywanie TStringList do dllki?

W sumie to mogłoby się nadać (ale mam wątpliwości o takiej możliwości na D7 z Lazarusem). W sumie to wydaje mi się że lepiej wysłać to z #13 w PChar a potem można łatwo skonwertować obustronnie na TStrings. Jeszcze lepiej by było gdyby komunikacja editor<->dll byłaby oparta na interfejsach, wtedy dllka mogłaby wykonywać niektóre funkcje editora, ale tutaj to głównie edytor rozkazuje dllce więc nie ma większego problemu.

Ah, jeszcze zapomniałem się przyczepić do edytora: Brakuje możliwości stawiania breakpointów, a masz 'opcode' odpowiedzialny za breakpoint, ale jego wstawianie w gotowy kod jest niewygodne ;P .

0
-123oho napisał(a)

W sumie to wydaje mi się że lepiej wysłać to z #13 w PChar

Ok, z tym akurat większego problemu nie będzie ;)

-123oho napisał(a)

Brakuje możliwości stawiania breakpointów, a masz 'opcode' odpowiedzialny za breakpoint, ale jego wstawianie w gotowy kod jest niewygodne ;P .

Może dodać taką możliwość do menu kontekstowego edytora?
Znaki ustawione jako "breakpoint" miałyby dodatkowo jakieś podświetlenie czy coś.
Nic innego mi nie przychodzi na myśl.


Macie jakieś pomysły na ikonę? Póki co wykombinowałem coś takiego: ![ico.png](//static.4programmers.net/uploads/attachment/1046723521503dfef4e296f.png)
0
Patryk27 napisał(a):

Może dodać taką możliwość do menu kontekstowego edytora?
Znaki ustawione jako "breakpoint" miałyby dodatkowo jakieś podświetlenie czy coś.
Nic innego mi nie przychodzi na myśl.

Tylko dodaj też żeby ten breakpoint gdy zostanie osiągnięty to zamieniał się w opcode który tam wcześniej był i żeby dało się te breakpointy usuwać. Jak jeszcze zbindujesz dodawanie/usuwanie na F2 to będzie prawie jak IDA ;) .

Powalające to jakoś nie jest i takie "puste".

Możesz dodać tam opcody 'v' '>' '^' '<', random idea.

3

Generator liczb do programu:

class Program
{
	static bool IsValid(int number)
	{
		if (number % 2 != 0) return false;
		if (number % 9 != 0) return false;

		int numberLength = (int)Math.Ceiling(Math.Log10(number));
		if (numberLength % 2 == 0) return false;

		int nineth = number / 9;

		int ninethLength = (int)Math.Ceiling(Math.Log10(nineth));
		int strangeNumber = nineth - 220000;
		int strangeNumberLength = strangeNumber.ToString().Length;

		double ratio = (double)ninethLength / strangeNumberLength;

		double number2 = nineth / ratio;
		number2 /= 6;

		int number3 = (int)Math.Round(number2);

		return (number3 & 13) != 0;
	}

	static void Main(string[] args)
	{
		var numbers = from number in Enumerable.Range(1, 1000).AsParallel().AsOrdered()
						where IsValid(number)
						select number;

		foreach (int number in numbers)
			Console.WriteLine(number);
	}
}
0
Patryk27 napisał(a)
Furious Programming napisał(a)

i nie chce przestać działać...

F10 lub Program->Stop

No nie traktuj mnie jak matoła... Sprawdziłem obsługę zanim zacząłem się nim bawić :]

Patryk napisał(a)
Furious Programming napisał(a)

Mało tych opcji (i nie ma pomocy!); Przydałoby się jeszcze kilka, ale to sprawa mniej ważna;

Jest plik Readme, które jest całą pomocą, lecz dodam odpowiednią opcję w edytorze.

Bardziej chodziło mi o pozycję w menu, dzięki której otwiera się okienko z zawartością pomocy (np. F1); Nie musi to mieć drzewiastej struktury, ale zwykłe TMemo z zawartością pliku (ew. dorzuć kolorowanie, żeby zwiększyć czytelność);


Co do ikon - sieć jest ich pełna, polecam IconsPedia - potężny zbiór ikon (większość mam na dysku);

0

Bardziej chodziło mi o pozycję w menu, dzięki której otwiera się okienko z zawartością pomocy (np. F1); Nie musi to mieć drzewiastej struktury, ale zwykłe TMemo z zawartością pliku (ew. dorzuć kolorowanie, żeby zwiększyć czytelność);

Aktualnie po naciśnięciu F1 otwiera się domyślny edytor tekstowy otwierając plik pomocy.
Ponadto dodałem funkcję "opisu funkcji"; po zaznaczeniu jakiegoś znaku w kodzie i naciśnięciu F3 otwierana jest pomoc wraz z krótkim opisem zaznaczonej funkcji.

0
Rev napisał(a)

dajmy więc na to parę liczb: 252 i 2. iloczyn to 504 i nie przejdzie :)

ok, źle napisałem
nie podzielny, tylko ma się rozkładać na te liczby

0

a jaka jest różnica? bez wzięcia pod uwagę tego and 13 na obliczonej liczbie nie otrzymasz poprawnej listy liczb

różnica spora, w każdym razie tak jak mówiłem - nawet nie przeglądałem tej części programu. po prostu sprawdziłem kilkanaście liczb spełniających tamte warunki i przechodziły, np:

a = 2

b:
4 * 4 * 9 = 144 (przechodzi)
4 * 9 * 9 = 324 (przechodzi)
4 * 4 * 9 * 9 * 9 = 11664 (przechodzi)
9 * 4 * 4 * 4 * 4 * 4 * 4 = 36864 (przechodzi)

więc stwierdziłem że to może być już rozwiązanie, ale faktycznie dla niektórych liczb program się zawiesza
godzina i tak była późna więc musiałem kończyć ;)

0

a właściwie znowu mi zagmatwałeś, jednak wystarczyło że była podzielna, po prostu to była jedna z liczb, druga ma być 2 i wtedy podane przez Ciebie 504 też przechodzi ;)

0

9 * 9 * 9 * 9 * 4 = 2304 (nie przechodzi)
9 * 7 * 2 = 126 (przechodzi)
:P

0
Rev napisał(a):

9 * 9 * 9 * 9 * 4 = 2304 (nie przechodzi)
9 * 7 * 2 = 126 (przechodzi)
:P

mój kalkulator mnie oszukuje i mówi że 9 * 9 * 9 * 9 * 4 = 26244 (przechodzi) ;P

0

a 2304 nie ma nieparzystej liczby cyfr ;P

0

no i napisałem że iloczyn ma być podzielny przez 4, a tak naprawdę po prostu połowa iloczynu ma być podzielna przez 2 - niby to samo ale trochę wprowadziło zamętu ;)

w każdym razie brakuje jeszcze jednego warunku, a nie wiem czy da się go prosto opisać - może ktoś spróbuje ;P

1

A, dziewiątki z czwórkami się pomyliły. Ale ok, faktycznie, nie ma nieparzystej liczby cyfr.

4 * 4 * 4 * 4 * 9 * 9 = 20736
4 * 4 * 4 * 4 * 9 * 9 * 9 * 9 = 1679616
Nie przechodzą. Bo nie spełniają tego brakującego warunku właśnie. Masz go w moim programie do generowania na poprzedniej stronie.

Raczej nie da się go prosto opisać. Jak dla mnie to Patrykowi po prostu znudziło się w pewnym momencie wymyślanie sensownego algorytmu i włączył mu się totalny random ;P.

0

W nowszej wersji dodałem ustawienia, a w nich:
-możliwość powiązania/usunięcia powiązania z rozszerzeniem
-możliwość zmiany rozmieszczenia (tj.jest do wyboru pomiędzy statyczne a dynamiczne), jeżeli wybierze się statyczne, można ustawić sobie wymiary komponentów za pomocą splittera, jeżeli jest ustawione dynamiczne, ustawia się dwa czynniki, które podstawiane są pod wzór:

  gbOutput.Left  := Round(Width-Width/AlignFactor1);
  gbOutput.Width := Round(Width/AlignFactor1);
  gbStack.Top    := Round(Height-Height/AlignFactor2);
  gbStack.Height := Round(Height/AlignFactor2);
  StatusBar.Top  := Height;

-możliwość zmiany czcionki
Oczywiście wszystko zapisywane do pliku ;)
Dodatkowo:
-breakpointy
-możliwość "w locie" z poziomu edytora dodawania/edycji/usuwania elementów ze stosu
-możliwość po wciśnięciu "F3" zobaczenia opisu aktualnie zaznaczonej funkcji
-wszystko (włącznie z komunikatami błędów) zostało spolszczone
-menu podręczne edytora
-drobne poprawki z wyświetlaniem pozycji "X" na gutterze (tym szarym polu po lewej)
I coś pewnie jeszcze dodałem, ale zapomniałem :>


Wersję wrzucę dopiero pojutrze, ponieważ zostało mi parę rzeczy do zrobienia, a dzisiaj wyjeżdżam i jutro mnie cały dzień nie ma ;)
0
Patryk27 napisał(a):

Wersję wrzucę dopiero pojutrze, ponieważ zostało mi parę rzeczy do zrobienia, a dzisiaj wyjeżdżam i jutro mnie cały dzień nie ma ;)

to po co teraz piszesz :P

  1. wtf - jakie znowu współczynniki? jakie wzory? :O widzę że masz wrodzony talent do utrudniania rzeczy; zrób po prostu splittery które można ustawiać przez drag&drop i po ich ustawieniu samemu odczytaj te czynniki żeby przy zmianie rozmiaru okna się automatycznie skalowało

  2. przy redo zmień może hotkey z ctrl+shift+z na standardowo używane do tego celu ctrl+y

  3. "Stack and input" zmień może na "Input and stack" skoro to "input" jest z lewej a "stack" z prawej...

0

btw - gdyby to trochę uprościć i dodać grafikę to mogłaby powstać całkiem niezła gra logiczna

0

dobra - okazuje się że już oczywiście są takie gry

np Carnage Heart - :)

0

Moja próba ogarnięcia tego "syfu": (bez urazy ;) ) :P

vVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> $23r2j
> 0'30'2j Adres początku programu
> '24'    Linia obsługa funkcji
> Rejestry: (0xw - zapis; 0xr - odczyt)
05 - domyślny rejestr zwracania wartości
06
07
08      
09

v INT16 "Random" V103j 
                  >0v     >3'13'2j
>08\4*'18''13'0jv1?2>+\1-:|
                v 3 ^     >$05w\5+\2j
                > > ^

v INT16 "Random_range" V203j (05 min, 06 max)
>06r05r -1+05r\ V103j 05r\%+ 05w\5+\2j

v VOID "Next_line" V303j
>\$1+0\2j

01234567890123456789012345678901234567 Vx03j
vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv Obsługa funkcji
   > 0'20'2j      Przejście do następnej linii kodu :D
  > 0'18'2j      Random_range
 > 0'13'2j      Random
> 0'24'2j      Adres początku programu

vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv Początek programu
> "Podaj dolną wartość zakresu"{: 05w V303j
> "Podaj górną wartość zakresu"{: 06w V203j V303j
> \"Losowa liczba w przedziale ",."- ",."to: ",05r.@

obsługę funkcji można by było zrobić prościej i ładniej najzwyklejszymi jumpami ale nie chciałem całkowicie porzucać idei tego języka ;P
przydałaby się jakaś funkcja umożliwiająca zrobienie ramki stosu ;P
albo żeby nie było łatwo - funkcja wrzucająca na stos aktualny rozmiar stosu ;)

to kto się podejmie zrobienia generatora liczb do poprzedniego zadania w tym języku? :D

2

albo jednak trochę przerobiłem żeby nie trzeba było zmieniać adresu w dwóch miejscach gdy dochodzą nowe funkcje:

vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
0VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> $03r+2\2j
'23' "numer linii początku programu"
>>>> 0j -> Rejestry: (0xw - zapis; 0xr - odczyt)
05 - domyślny rejestr zwracania wartości
06
07
08      
09
 
v INT16 "Random" V100j 
                  >0v     >3'13'2j
>08\4*'18''13'0jv1?2>+\1-:|
                v 3 ^     >$05w\5+\2j
                > > ^
 
v INT16 "Random_range" V200j (05 min, 06 max)
>06r05r -1+05r\ V100j 05r\%+ 05w\5+\2j
 
v VOID "Next_line" V300j
>\$1+0\2j
 
vvvVVV LINIA POCZĄTKU PROGRAMU VVVvvv 
v 0'13'2j Random
v 0'18'2j Random_range
v 0'20'2j Przejście do następnej linii kodu :D
 
vvvVVV POCZĄTEK PROGRAMU VVVvvv
> "Podaj dolną wartość zakresu"{: 05w V300j
> "Podaj górną wartość zakresu"{: 06w V200j V300j
> \"Losowa liczba w przedziale ",."- ",."to: ",05r.@

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