Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

orliki i orly ;)

51 views
Skip to first unread message

Vax

unread,
May 2, 2004, 8:33:54 AM5/2/04
to
dobra, dwa zadanka,
jedno unijne (wiec proste ;)))
I.
silnia (tak, tak, zwykla prostacka silnia) czyli: s(n)
zakladamy, ze n spelnia warunek poprawnego argumentu silni

kryteria:
1. hermetyzacja
2. elegancja
3. ultrapack
4. wydajnosc zarowno dla malych (n<=10) i duzych (np. 150) wartosci
argumentu

Wykladowcy PSP(JS) (Polskiej Szkoly Programowania (JS)) nie biora udzialu,
a jedynie komentuja, naprowadzaja, ew. przedstawiaja wlasne "we wnioskach
koncowych) ;))

(zadanie popularyzatorskie, dla kandydatow na sluchaczy ;))
II.
drugie _polskie_, wiec bardziej zaawansowane:
Napisac system mierzacy wydajnosc skryptow.
Ma dzialac w IE, Moz, byc moze w Operetce ;)))
Np. wychodzimy z czegos takiego (to tylko _luzna_, niedoskonala propozycja,
majaca obrazowac, o co mniej wiecej chodzi, opera narazie olana):

<head>
<script>
function chalange(q,d){
d=document
q=d.createElement('script')
q[d.all?'text':'innerHTML']=d.c.source.value
d.body.appendChild(q)
d.body.removeChild(q)
}
</script>
</head>
<body>
<form name=c>
<textarea name=source style="width:100%;height:150px"></textarea>
<input type=button value=start onclick="chalange()">
</form>
</body>

Co by sie przydalo:
ustalana liczba iteracji, np. 1, 10, 100, 1000, 10000
sensowny pomiar czasu
wydzielenie skryptu "rozbiegowego", gdzie np.
bylaby deklaracja danyc i/lub funkcji, gdy badamy
wydajnosc uzycia, pomijac czas poswiecony
na parsowanie napisanych funkcji,
siakies statystyki, zliczanie znaczkow, inne wodotryski
sprawdzanie, czy skrypt po sobie posprzatal (chocby
przez analize obiektu window przed i po)
byc moze przechwytywanie wyjscia, document.write, alert(?),
wprowadzenie potoku wejsciowego (read? prompt?)
koloryzowanie skladni? ;)

W sumie to nie zadanie, ale propozycja napisania
_wspolnymi_silami_ engine'u do testowania roznych quizow
i przykladow ;))
Licza sie zarysy rozwiazan, propozycje bajerow etc.,
prototypy... gotowce? :)))
A takze propozycja rankingu rozwiazan, np.
ultrapack - wspolczynnik W1 za znaki pomiedzy {} funkcji
"uzywalnosc" - wspolczynnik W2 za zwiezlosc wywolania (argumenty)
szybkosc (moze byc dla roznych zakresow argumentow)
elegancja (ocena "sedziow" ;)))
itp. itd. ;))

milej zabawy - v.


faw0r

unread,
May 2, 2004, 9:25:17 AM5/2/04
to
"Vax" <v...@efabrika.pl.bez.tego.tu> wrote in
news:c72pr6$c16$1...@atlantis.news.tpi.pl:

> silnia (tak, tak, zwykla prostacka silnia) czyli: s(n)

to ja pierwszy :) ucze sie programowac w wiekszej czesci z tej grupy ;D i
chyba zaloze wasz fanklub ;> A teraz efekty waszej pracy, czyli co sie
nauczylem :D
function s(n){return n<=1?1:n*s(n-1);}

faw0r

unread,
May 2, 2004, 9:36:09 AM5/2/04
to
"Vax" <v...@efabrika.pl.bez.tego.tu> wrote in
news:c72pr6$c16$1...@atlantis.news.tpi.pl:

> silnia (tak, tak, zwykla prostacka silnia) czyli: s(n)

to ja pierwszy :) ucze sie programowac w wiekszej czesci z tej grupy ;D i

chyba zaloze wasz fanklub ;> A teraz efekty waszej pracy, czyli co sie

nauczylem :D Poprzedni post scancelowalem, bo sie udalo skrocic ;)
function s(n){return n<2?1:n*s(n-1)}

Vax

unread,
May 2, 2004, 9:44:34 AM5/2/04
to
Użytkownik "faw0r" <moj...@wp.pl> napisał w wiadomości
news:Xns94DD9EBC5E...@193.42.231.152...

> to ja pierwszy :)

1 punkt za szybkosc ;))

> ucze sie programowac w wiekszej czesci z tej grupy ;D i
> chyba zaloze wasz fanklub ;>

2 punkty za pochlebstwo (bylyby 3 ...ale ten kanciasty emotikon ;))))

> A teraz efekty waszej pracy, czyli co sie
> nauczylem :D Poprzedni post scancelowalem, bo sie udalo skrocic ;)
> function s(n){return n<2?1:n*s(n-1)}

spox, ocenka:
generalnie ok, plusik za wzrost wydajnosci dla malych "n"
(przy duzych nie ma znaczenia), niestety kosztem ultrapacka (-),
drugi plusik za rekurencje :))

Jak na poczatek, to calkiem, calkiem, poprzeczka wysoko :))

v.


PablO

unread,
May 2, 2004, 5:51:12 PM5/2/04
to
Użytkownik Vax napisał:

> dobra, dwa zadanka,
> jedno unijne (wiec proste ;)))
> I.
> silnia (tak, tak, zwykla prostacka silnia) czyli: s(n)
> zakladamy, ze n spelnia warunek poprawnego argumentu silni

Cholewka, spóźniłem się z wazelinką (faw0r :P)
A spróbuje, przynajmniej się dowiem dlaczego źle :)

function s(n){for(y=1;n;y*=n--);return y;}


--
Pozdrawiam,
PablO

PablO

unread,
May 2, 2004, 5:55:26 PM5/2/04
to
Użytkownik Vax napisał:

> Użytkownik "faw0r" <moj...@wp.pl> napisał w wiadomości
> news:Xns94DD9EBC5E...@193.42.231.152...
>

[8<]


>>function s(n){return n<2?1:n*s(n-1)}
>
>
> spox, ocenka:
> generalnie ok, plusik za wzrost wydajnosci dla malych "n"
> (przy duzych nie ma znaczenia), niestety kosztem ultrapacka (-),

Mógłbyś proszę to rozwinąć? Nie bardzo rozumiem :/


--
Pozdrawiam,
PablO

faw0r

unread,
May 2, 2004, 6:11:52 PM5/2/04
to
PablO <nie.ma...@psikre.nie?> wrote in
news:c73qld$ep6$1...@nemesis.news.tpi.pl:

> function s(n){for(y=1;n;y*=n--);return y;}

jak walczymy o znaki to juz wyrzucaj ten srednik z tylu :P, a przy okazji
poddales mi pomysl na skrocenie o jeszcze jeden znak mego kodu :P wiec juz
jest:
function s(n){return !n?1:n*s(n-1)}

faw0r

unread,
May 2, 2004, 6:16:53 PM5/2/04
to
PablO <nie.ma...@psikre.nie?> wrote in
news:c73qld$ep6$1...@nemesis.news.tpi.pl:

> function s(n){for(y=1;n;y*=n--);return y;}

jak walczymy o znaki to juz wyrzucaj ten srednik z tylu :P, a przy okazji
poddales mi pomysl na skrocenie mego kodu :P wiec juz
jest:

function s(n){return n?n*s(n-1):1}

Vax

unread,
May 2, 2004, 6:25:56 PM5/2/04
to

Użytkownik "PablO" <nie.ma...@psikre.nie?> napisał w wiadomości
news:c73qld$ep6$1...@nemesis.news.tpi.pl...
[...]

> A spróbuje, przynajmniej się dowiem dlaczego źle :)
>
> function s(n){for(y=1;n;y*=n--);return y;}

1. funkcja toksyczna, zostawia globalne, lub co gorsza
psuje _czyjes_uzywane_do_czegos_innego_ y ;))
2. a nie myslales, skoro juz wolisz wersje iteracyjna,
pojsc od tylka strony, np:

function s(n,y){for(y=n;--n;y*=n);return y}
juz jeden znaczek mniej (uwzgledniajac poprawke na ten nieszczesny y)

roznice:
zaczynamy od gory, predecrement przed mnozeniem, nie po
(bo wynik juz jest ok ;))

v.


Vax

unread,
May 2, 2004, 6:28:34 PM5/2/04
to

Użytkownik "PablO" <nie.ma...@psikre.nie?> napisał w wiadomości
news:c73qtd$fc2$1...@nemesis.news.tpi.pl...
[...]

> > (przy duzych nie ma znaczenia), niestety kosztem ultrapacka (-),
>
> Mógłbyś proszę to rozwinąć? Nie bardzo rozumiem :/

mozna sciac znaczki, gdy sie zrezygnuje z n<2 ;)))

v.
PS. a na deser: mozna napisac toto bez "a?b:c", znaczkow
sie nie zetnie duzo wiecej, ale ladniej wyglada ;)))


Vax

unread,
May 2, 2004, 6:30:20 PM5/2/04
to

Użytkownik "faw0r" <moj...@wp.pl> napisał w wiadomości
news:Xns94DE2DCD2E...@193.42.231.152...

> function s(n){return n?n*s(n-1):1}

i pieknie :)))
pytanie dodatkowe: a bez uzycia "?" ? ;))

v.


PablO

unread,
May 2, 2004, 6:36:56 PM5/2/04
to
Użytkownik Vax napisał:

> Użytkownik "PablO" <nie.ma...@psikre.nie?> napisał w wiadomości
> news:c73qld$ep6$1...@nemesis.news.tpi.pl...
> [...]
>
>>A spróbuje, przynajmniej się dowiem dlaczego źle :)
>>
>>function s(n){for(y=1;n;y*=n--);return y;}
>
>
> 1. funkcja toksyczna, zostawia globalne, lub co gorsza
> psuje _czyjes_uzywane_do_czegos_innego_ y ;))

OK, przyjąłem, zanotowałem, mam nadzieje że nie zapomne :P

> 2. a nie myslales, skoro juz wolisz wersje iteracyjna,
> pojsc od tylka strony, np:
>
> function s(n,y){for(y=n;--n;y*=n);return y}
> juz jeden znaczek mniej (uwzgledniajac poprawke na ten nieszczesny y)

Wychodzi na to samo (znaczkowo), ja średnik za return y miałem ;]

> roznice:
> zaczynamy od gory, predecrement przed mnozeniem, nie po
> (bo wynik juz jest ok ;))

:)
Tak przy okazji, lepiej używać rekurencji?


--
Pozdrawiam,
PablO

Vax

unread,
May 2, 2004, 7:16:20 PM5/2/04
to
Użytkownik "PablO" <nie.ma...@psikre.nie?> napisał w wiadomości
news:c73tb0$l27$1...@nemesis.news.tpi.pl...
[...]

> :)
> Tak przy okazji, lepiej używać rekurencji?

niekoniecznie, ale czasem bardziej elegancko ;)))
rekurencja jest wskazana przy problemie 8-miu
nieszachujacych sie hetmanow, lub jeszcze lepiej,
obejciu konikiem calej szachownicy bez stawania
wielokrotnie na tych samych polach ;)))

v.


Elus

unread,
May 2, 2004, 7:17:58 PM5/2/04
to
Użytkownik faw0r napisał:

> function s(n){return n?n*s(n-1):1}

dziwny zbieg okoliczności
http://tinyurl.com/23s8c

Marek Pawłowski

unread,
May 2, 2004, 9:11:21 PM5/2/04
to

Wymyśliłem coś takiego:
function s(n){return!n||n*s(n-1)}

Jeden znaczek mniej, ale dla n=0 zwraca true, czyli niby jedynkę :)
Zaliczysz mi? :)

--
Pozdrawiam
lockoom

faw0r

unread,
May 3, 2004, 3:25:34 AM5/3/04
to
Elus <elu...@poczta.onet.pl> wrote in news:c73vl7$10s$1...@news.onet.pl:

> dziwny zbieg okoliczności

moze i dziwny, ale napewno zbieg okolicznosci, chcialem byc fair w stosunku
do samego siebie i nie zagladalem do zadnych ksiazek, archiwow, a tego
posta nie czytalem bo w 2002 roku jeszcze tak javascriptem sie nie
zajmowalem. Zreszta mysl sobie co chcesz, ja nie pisze tutaj, zeby blysnac
cudzym rozwiazaniem, ja robiac to bez zadnego zagladania w inne algorytmy
swoja satysfakcje osiagnalem. Jedyne gdzie zajrzalem to ksiazka od matmy,
bo nie pamietalem co zwraca silnia dla 0. Pozdro ;P

Vax

unread,
May 3, 2004, 8:27:30 AM5/3/04
to

Użytkownik "Marek Pawłowski" <locko...@spamujpoczta.onet.pl> napisał w
wiadomości news:opr7ef87vdijgmyj@pawlowski...
[...]

> function s(n){return!n||n*s(n-1)}
>
> Jeden znaczek mniej, ale dla n=0 zwraca true, czyli niby jedynkę :)
> Zaliczysz mi? :)

dodaj ten jeden znaczek i bedzie ok ;)))

v.


Vax

unread,
May 3, 2004, 8:50:56 AM5/3/04
to

Użytkownik "Elus" <elu...@poczta.onet.pl> napisał w wiadomości
news:c73vl7$10s$1...@news.onet.pl...
bez jaj, "zagadnienie" jest tak proste, ze ciezko w tych paru znaczkach
zrobic cos absolutnie nowatorskiego ;)))
A ta silnia, to wstep do kolejnej "letniej szkoly JS", tym razem jednak
mamy w planach rozruszac niej zaawansowanych, bo jak sie znow
walnie z grubej rury problemem klasy "all lights", to 99% wymieknie ;))

Wiesz jak jest, siedzi w pociagu dwoch rabinow i ... milcza. Zaciekawiony
pasazer wyraza w koncu swe rozczarowanie: Mialem nadzieje wysluchac
ciekawej dysputy dwoch swiatlych mezow, a wy milczycie... Na co
jeden z rabinow: on wszystko wie, ja wszystko wiem, to o czym mamy
rozmawiac? ;)))
Tak jest i tu - "czolowka" juz parokrotnie podawala rozwiazania rozniace
sie na poziomie zaledwie 1-2% (np. 2 znaczki w 120 znakowym rozwiazaniu),
ciekawie zaczyna sie dopiero robic przy naprawde niebanalnych problemach,
ale tu poziom abstrakcji niektorych patentow czyni tematyke zbyt niepojeta
dla nie-cyborgow (patrz: liczby rzymskie - jazz-version ;))

Wlasnie sie zastanawiam, ktory z "klasycznych" problemow wybrac
na nastepne zadanko... Wspominany juz skoczek moglby byc jeszcze
za trudny dla nierozruszanych... Ale moze sam wstep do niego, czyli
funkcja zwracajaca legalne ruchy? Ok, lecimy:

Stale:
N - okresla ilosc pol na boku szachownicy (N>=4)

teraz do wyboru:
albo pola szachownicy oznaczamy dwoma parametrami (wspolrzednymi),
albo tez numerujemy kolejno, np. dla N=8 od 0 do 63.

Nalezy napisac funkcje, ktora dla podanej pozycji skoczka zwroci
w postaci tablicy _wszystkie_mozliwe_ ruchy, jakie mozna wykonac
konikiem (oprocz konika, na szchownicy nie ma, rzecz jasna, nic :))).
Taka tablica bedzie miala od dwoch, do osmiu elementow.

Trudne? ;))

v.


Marek Pawłowski

unread,
May 3, 2004, 11:10:05 AM5/3/04
to
On Mon, 3 May 2004 14:27:30 +0200, Vax <v...@efabrika.pl.bez.tego.tu> wrote:

> dodaj ten jeden znaczek i bedzie ok ;)))

function s(n){return+!n||n*s(n-1)}
:D Teraz jest ładnie, ale w innej wiadomości sugerowałeś, że da się
skrócić ten zapis przez pozbycie się konstrukcji a?b:c... Da się?

--
Pozdrawiam
lockoom

Elus

unread,
May 3, 2004, 1:11:09 PM5/3/04
to
Użytkownik faw0r napisał:

>>dziwny zbieg okoliczności
>
> moze i dziwny, ale napewno zbieg okolicznosci

No, wcale nie mówię że tak nie jest. Po prostu kiedyś widziałem ten
przykład i wyrył mi się on w pamięci. Gdy zobaczyłem twój przykład od
razu skojarzył mi się on z twoim rozwiązaniem. Jednak silnia to
faktycznie przypadek w którym wręcz "intuicyjnie" większość
wykorzystałaby rekurencję. Tak wiec o nic nie oskarżam ;)

Elus

unread,
May 3, 2004, 1:51:26 PM5/3/04
to
Użytkownik faw0r napisał:
>>dziwny zbieg okoliczności
>
> moze i dziwny, ale napewno zbieg okolicznosci

No, wcale nie mówię że tak nie jest. Po prostu kiedyś widziałem ten
przykład i wyrył mi się on w pamięci. Gdy zobaczyłem twój przykład od

razu skojarzył mi się on z tym rozwiązaniem. Jednak silnia to

faw0r

unread,
May 3, 2004, 4:43:35 PM5/3/04
to
"Vax" <v...@efabrika.pl.bez.tego.tu> wrote in news:c75f6p$761$1...@atlantis.news.tpi.pl:

> Trudne? ;))

troche :D zastanawialem sie jak podejsc do tego zadania ;) caly czas w
glowie mialem tablice z mozliwymi posunieciami konika 1,2;-1,2;-1,-2
etc. i chcialem po niej wyznaczac te pola, a pozniej zaczalem od innej
strony myslec ;> czyli przeleciec przez wszystkie pola szachownicy i
sprawdzic czy sa one dozwolone ;). Jakos nie podoba mi sie ten moj kod
:D i wiem, ze mozna to lepiej zrobic, no ale ja poczatkujacy wiec moze
jakos mi wybaczycie :P a poza tym to znow jestem pierwszy :P
;). Wybralem wariant z numeracja pol wspolrzednymi, nie powinno sie
zlamac ;):

function k(x,y,n){r=[];b=Math.abs;for(i=0;i<n;i++){for(j=0;j<n;j++){if(b(x-j)+b(y-i)==3&&j!=x&&i!=y)r.push(j+';'+i)}}return r;}

Jesli da sie to zrobic jakos latwiej przez rekurencje to jestem z
mysleniem rekurencyjnym do tylu ;D

faw0r

unread,
May 3, 2004, 5:06:36 PM5/3/04
to
faw0r <moj...@wp.pl> wrote in news:Xns94DEE72FE2...@193.42.231.152:

> jakos mi wybaczycie :P

jakos sam sobie nie moge wybaczyc, ze zapomnialem o dzisiejszej nauce z
tego watku, zeby uniknac przypisywania czyjemus r i b moich tam glupot
to trzeba zrobic:
function k(x,y,n,b,r){r=[];b=Math.abs;for(i=0;i<n;i++){for(j=0;j<n;j++){if(b(x-j)+b(y-i)==3&&j!=x&&i!=y)r.push(j+';'+i)}}return r;}

przynajmniej tak wnioskuje z postu kolegi ;) da sie inaczej temu unikac?
;>

Vax

unread,
May 4, 2004, 2:45:43 AM5/4/04
to

Użytkownik "faw0r" <moj...@wp.pl> napisał w wiadomości
news:Xns94DEE72FE2...@193.42.231.152...

> "Vax" <v...@efabrika.pl.bez.tego.tu> wrote in
news:c75f6p$761$1...@atlantis.news.tpi.pl:
>
> > Trudne? ;))
>
> troche :D zastanawialem sie jak podejsc do tego zadania ;) caly czas w
> glowie mialem tablice z mozliwymi posunieciami konika 1,2;-1,2;-1,-2
> etc. i chcialem po niej wyznaczac te pola,

i co w tym zlego? Moze poszukac jakiejs reguly...? ;)

> a pozniej zaczalem od innej
> strony myslec ;> czyli przeleciec przez wszystkie pola szachownicy i
> sprawdzic czy sa one dozwolone ;)

nieee.... a co przy _naprawde_duzych_ szachownicach?
czyste szalenstwo ;))

v.


Vax

unread,
May 4, 2004, 2:47:40 AM5/4/04
to

Użytkownik "faw0r" <moj...@wp.pl> napisał w wiadomości
news:Xns94DEE72FE2...@193.42.231.152...
[...]

> czyli przeleciec przez wszystkie pola szachownicy i
> sprawdzic czy sa one dozwolone ;)

jak juz, to nie przez wszystkie pola, ale przez pola
"w zasiegu", czyli indeksy +/- 2 w kadza strone
od aktualnego ;)))

v.


Yoop

unread,
May 4, 2004, 3:41:07 AM5/4/04
to
> function s(n,y){for(y=n;--n;y*=n);return y}
> juz jeden znaczek mniej (uwzgledniajac poprawke na ten nieszczesny y)
Nie żebym sie czepiał, ale silnia to silnia, z definicji s(0)=1.... :)

Yoop


Vax

unread,
May 4, 2004, 4:13:41 AM5/4/04
to

Użytkownik "Yoop" <_NOSPA...@wp.pl> napisał w wiadomości
news:c77hf5$ftu$1...@atlantis.news.tpi.pl...

> > function s(n,y){for(y=n;--n;y*=n);return y}
> > juz jeden znaczek mniej (uwzgledniajac poprawke na ten nieszczesny y)
> Nie żebym sie czepiał, ale silnia to silnia, z definicji s(0)=1.... :)

w rzeczy samej :))
...a ja i tak wole rekurencyjnie - siakiestakies bardziej zgrabne i
wyrafinowane ;)

v.


Gurthg Shae

unread,
May 4, 2004, 5:07:25 AM5/4/04
to
to się zaraz zrobi "js golf" ;-)

--
__ __ __ __
| |--.|__| | |.-----.----. http://www.killer-mud.net/
| < |Gurthg Shae -__| _| mailto:Gurth...@mud.pl
|__|__||__|__|__||_____|__| telnet://killer-mud.net:4000/

Vax

unread,
May 4, 2004, 5:43:19 AM5/4/04
to

Użytkownik "Gurthg Shae" <Gurth...@mud.pl> napisał w wiadomości
news:b33km1-...@banshee.hq.eo.pl...

> to się zaraz zrobi "js golf" ;-)

my to nazywalismy "quizy", ale podobienstwo jest ;)))

v.


Yoop

unread,
May 4, 2004, 7:16:44 AM5/4/04
to
> Nalezy napisac funkcje, ktora dla podanej pozycji skoczka zwroci
> w postaci tablicy _wszystkie_mozliwe_ ruchy, jakie mozna wykonac
> konikiem (oprocz konika, na szchownicy nie ma, rzecz jasna, nic :))).
> Taka tablica bedzie miala od dwoch, do osmiu elementow.

function konik(x,y,n,P,w,v,T){
T=[[1,2],[-1,2],[-1,-2],[1,-2],[2,1],[-2,1],[-2,-1],[2,-1]];P=[]
for(var i in T)if(T[v=x+T[i][0]]&&T[w=y+T[i][1]])P.push([v,w])
return P
}
konik(x,y,n)

no i troche komentarza :)
1. pola sa numerowane od 0 do n-1 (wielkosc tablicy n x n)
2. nie mam za bardzo czasu wiec nie sprawdzalem, ale bardziej wydajna moze
sie okazac funkcja operujaca na numerach pol (fakt ze pewnie bedzie miala
wiecej znaczkow, ale za to mniej tablic)
3. ta tablice T mozna by pewnie jakos powypelniac automatem, albo w ogole
sprawdzac dostepne ruchy jakos mniej jawnie, ale taki zapis jest czytelny i
mysle ze i tak wzglednie krotki wiec nie bede na sile kombinowal
4. metoda jest absolutnie nieczula na wielkosc tablicy (pomijam oczywiscie
jakies extremalne wartosci)

PS
jesli jest jakis blad, to nie zauwazylem :)

Yoop


faw0r

unread,
May 4, 2004, 10:02:27 AM5/4/04
to
"Yoop" <_NOSPA...@wp.pl> wrote in
news:c77u3h$l5d$1...@atlantis.news.tpi.pl:

> 3. ta tablice T mozna by pewnie jakos powypelniac automatem, albo w
> ogole sprawdzac dostepne ruchy jakos mniej jawnie, ale taki zapis jest
> czytelny i mysle ze i tak wzglednie krotki wiec nie bede na sile
> kombinowal

no wlasnie ja szukalem takiej zaleznosci, zeby jakos wypelnic ta tablice i
nawet cos wymyslilem ;D, ale w koncu przeszedlem do podejscia do problemu z
innej strony

>4. metoda jest absolutnie nieczula na wielkosc tablicy
> (pomijam oczywiscie jakies extremalne wartosci)
>
> PS
> jesli jest jakis blad, to nie zauwazylem :)

Vax pisal o rozmiarze szachownicy n=>4, dla konik(2,2,4) zabijasz konika
sadysto Ty jeden :D, a tak na powaznie to wyskakuje Ci poza szachownice, a
ten ruch nie jest chyba dozwolonym :)

faw0r

unread,
May 4, 2004, 10:26:45 AM5/4/04
to
"Vax" <v...@efabrika.pl.bez.tego.tu> wrote in
news:c77eej$1je$1...@nemesis.news.tpi.pl:

> jak juz, to nie przez wszystkie pola, ale przez pola
> "w zasiegu", czyli indeksy +/- 2 w kadza strone
> od aktualnego ;)))

ok masz racje ;) tu wtopilem ;D

function k(x,y,n,r,b){r=[];b=Math.abs;for(i=y-2;i<y+3;i++){for(j=x-
2;j<x+3;j++){if(b(x-j)+b(y-i)==3&&j!=x&&i!=y)r.push(j+';'+i)}}return r;}

a jesli chodzi o zaleznosc w tej tablicy to cos tam znalazlem ;), ale to
raczej nie to :D

Bogdan Blaszczak

unread,
May 4, 2004, 1:39:06 PM5/4/04
to
Użytkownik Vax napisał:

> Użytkownik "faw0r" <moj...@wp.pl> napisał w wiadomości
> news:Xns94DEE72FE2...@193.42.231.152...
...

>>troche :D zastanawialem sie jak podejsc do tego zadania ;) caly czas w
>>glowie mialem tablice z mozliwymi posunieciami konika 1,2;-1,2;-1,-2
>>etc. i chcialem po niej wyznaczac te pola,
>
>
> i co w tym zlego? Moze poszukac jakiejs reguly...? ;)

Tak sie zastanawiam, czy sobie nie pokombinowales cos z przesuwaniem
bitow ;)
No bo tak. Jesli pole szachownicy ma 8x8=64, to przesuniecie figury np
- jeden ruch w lewo to x-1
- dwa ruchy w prawo x+2
- jeden ruch do gory x-8
- dwa ruchy w dol x+16
- itd itp

I teraz, mozna wypluc taka funkcje (prosze potraktowac jako luzna
analize "krokową", a nie jako rozwiazanie biorace udzial w quizie,
chociaz w gruncie rzeczy to chyba bedzie dzialac prawidlowo;)

function konik(x){
return(
(x%8-2>-1 && x-8>-1)+
(x%8-2>-1 && x+8<64)+
(x%8+2<8 && x-8>-1)+
(x%8+2<8 && x+8<64)+
(x%8-1>-1 && x-16>-1)+
(x%8-1>-1 && x+16<64)+
(x%8+1<8 && x-16>-1)+
(x%8+1<8 && x+16<64)
)
}
Osiem mozliwych przypadkow, dla dowolnego pola x. Sumowanie wyników
logicznych, bedzie dzialac jak sumowanie zer i jedynek, wiec powinno
dobrze policzyc.
Jesli z jakichs tam powodow (dla latwiejszej implementacji petli?)
chcemy miec wszystkie znaki "<" w jedna strone, to mozemy przeksztalcic
czysto matematycznie:

function konik(x){
return(
(2-x%8<1 && 8-x<1)+
(2-x%8<1 && 8+x<64)+
(2+x%8<8 && 8-x<1)+
(2+x%8<8 && 8+x<64)+
(1-x%8<1 && 16-x<1)+
(1-x%8<1 && 16+x<64)+
(1+x%8<8 && 16-x<1)+
(1+x%8<8 && 16+x<64)
)
}

Glebiej nie chce juz wchodzic (co wam bede kiza psul), ale te liczby: 1,
2, 8, 16, 64... to takie "dwojkowe" jest ;)
Vax musial cos tu "wyczarowac"... chyba ze poszedl zupelnie inna droga :)


Ciekawe natomiast jest, ze jesli wersje bezpetlowa dalej poupraszczamy i
poprzeksztalcamy matematycznie, to moze ona nawet okazac sie krótsza niz
deklaracja tablicy wszystkich ruchow + petla:

function konik(x,y){
y=x%8;return(0<-1+y&0<-7+x)+
(0<-1+y&0<56-x)+(0<6-y&0<-7+x)+
(0<6-y&0<56-x)+(0<y&0<-15+x)+
(0<y&0<48-x)+(0<7-y&0<-15+x)+
(0<7-y&0<48-x)
}

--
BlaTek

Vax

unread,
May 4, 2004, 2:55:43 PM5/4/04
to

Użytkownik "Bogdan Blaszczak" <bla...@UsuN-AntyspaMpoczta.wprost.pl> napisał
w wiadomości news:c78ka6$2lp$1...@atlantis.news.tpi.pl...
[...]

> Vax musial cos tu "wyczarowac"... chyba ze poszedl zupelnie inna droga :)

hehehe ;DDDD

[...ciach - masa dobrej roboty ...]
przyklady piekne :))

A ja tylko wtrace... cholera, nie dotknalem w weekend (jak sobie obiecalem),
edytora, choc strasznie mnie korcilo... odpalic ten projekt chalengera, bo
to jest
w sumie gotowe srodowisko do testowania (tylko zapisu na dysk nie ma ;))).
Wpisuje sie w tym okienku do testowania np. alert(2+2), klika start i dziala
;))
To samo z function i cala reszta...
I nie musialbym wpuszczac do edycji JS'a, zapisywac, przelaczac na browser
itd... e, chyba sobie zrobie takie cus z zapisem i odczytem z bazy ;)
...choc pewnie ameryki nie odkrylem, ale to dlatego, ze nie mam zwyczaju
lazic po stronkach ze skryptami i nie wiem, jakie sa trendy i wynalazki ;)))
(ale Blatka obiecuje sobie kiedys dokladnie zwiedzic :)))

pozdrawiam, zyczac dobrej zabawy - v. :)


PablO

unread,
May 4, 2004, 2:58:14 PM5/4/04
to
Użytkownik Yoop napisał:

>>function s(n,y){for(y=n;--n;y*=n);return y}
>>juz jeden znaczek mniej (uwzgledniajac poprawke na ten nieszczesny y)
>
> Nie żebym sie czepiał, ale silnia to silnia, z definicji s(0)=1.... :)

Fakt ;]
function s(n,y){y=n||1;while(--n){y*=n}return y}
Ale to już dłuuuugie wyszło :/
Następnym razem się bardziej postaram :]


--
Pozdrawiam,
PablO

faw0r

unread,
May 4, 2004, 4:33:03 PM5/4/04
to
"Vax" <v...@efabrika.pl.bez.tego.tu> wrote in
news:c77eej$1je$1...@nemesis.news.tpi.pl:

> jak juz, to nie przez wszystkie pola, ale przez pola
> "w zasiegu", czyli indeksy +/- 2 w kadza strone
> od aktualnego ;)))
>

function k(x,y,n,b,r){r=[];b=Math.abs;for(i=(y-2>=0?y-
2:0);i<(y+3<n?y+3:n);i++){for(j=(x-2>=0?x-2:0);j<(x+3<n?x+3:n);j++){if(b(x-
j)+b(y-i)==3&&j!=x&&i!=y)r.push(j+';'+i)}}return r;}

dobra powinno dzialac ;P a ja za jakies bity to narazie wole sie nie brac
:D tak to jest jak sie uczy programowania nie znajac zasad dzialania kompa
:>

Terk

unread,
May 4, 2004, 4:40:41 PM5/4/04
to
Vax wrote:
> i co w tym zlego? Moze poszukac jakiejs reguly...? ;)

Reguły szukać mi się nie chciało, wolałem wyłuskać te pola pętlą. ;)
Nie jest to najkrótsze możliwe rozwiązanie, ale trzeba zostawić pole do
popisu pozostałym. :))

Pierwszy parametr to numer pola (1-64 przy klasycznej szachownicy), drugi to
długość boku, pozostałe są używane tylko wewnątrz funkcji. Wydajność
niezależna od wielkości planszy - zawsze sprawdzanych jest tylko osiem pól.

function t(a,n,x,y,w,h,T){w=a%n||n;h=Math.ceil(a/n);T=[];for(x=-3;x++<2;)
for(y=-3;y++<2;)if(x-y&&x*y&&x+y)if(w+x>0&&w+x<=n&&h+y>0&&h+y<=n)
T.push((h+y-1)*n+w+x);return T}


Może udało mi się komuś podpowiedzieć metodę i doczekamy się czegoś
krótszego? ;)


PS. Dobry wieczór na grupie. Zaglądam tu średnio raz na dwa miesiące, ale
pisać mi się chyba jeszcze nie zdarzyło. ;)

--
Bartek Raciborski / Terk, gg:3017301, bartek () raciborski org

Terk

unread,
May 4, 2004, 4:48:51 PM5/4/04
to
Terk wrote:
> if(x-y&&x*y&&x+y)if(w+x>0&&w+x<=n&&h+y>0&&h+y<=n)

Aha, zapomniałem dopisać, że ten podwójny if zostawiam w celach
edukacyjnych - żeby bardziej wyraźnie było widać algorytm postępowania. W
"produkcyjnej" funkcji należałoby zamknąć to w jednej konstrukcji if
pozbywając się dwóch zbędnych znaków. ;)

Terk

unread,
May 4, 2004, 5:28:28 PM5/4/04
to
Terk wrote:
> Nie jest to najkrótsze możliwe rozwiązanie, ale trzeba zostawić pole do
> popisu pozostałym. :))

Jako, że nikogo z quizowiczów nie ma online, to idę na piwo. Jutro w
południe podeślę wersję 135-bajtową, ale może ktoś wcześniej napisze podobną
lub jeszcze krótszą funkcję? ;)

Miłego wieczorku. :))

Yoop

unread,
May 5, 2004, 2:23:56 AM5/5/04
to

> Vax pisal o rozmiarze szachownicy n=>4, dla konik(2,2,4) zabijasz konika
> sadysto Ty jeden :D, a tak na powaznie to wyskakuje Ci poza szachownice, a
> ten ruch nie jest chyba dozwolonym :)
eech, no tak, juz mi sie to rozwiazanie tak bardzo nie podoba, choc nadal ma
ta zalete
ze jest przejrzyste :)

function s(x,y,n,P,w,v,T){


T=[[1,2],[-1,2],[-1,-2],[1,-2],[2,1],[-2,1],[-2,-1],[2,-1]];P=[]

for(i in T)if(T[v=x+T[i][0]]&&T[w=y+T[i][1]]&&v<n&&w<n)P.push([v,w])
return P
}


Yoop

Yoop

unread,
May 5, 2004, 2:29:08 AM5/5/04
to
> Tak sie zastanawiam, czy sobie nie pokombinowales cos z przesuwaniem
> bitow ;)
> No bo tak. Jesli pole szachownicy ma 8x8=64, to przesuniecie figury np
Tak,tez mi to przyszlo do glowy, ale niestety, jesli N nie jest potega
dwojki
to trzeba sie bawic z dodatkowymi operacjami i jakos przestalo mi sie
podobac


Yoop


Bogdan Blaszczak

unread,
May 5, 2004, 3:47:36 AM5/5/04
to
Użytkownik Vax napisał:
..

> N - okresla ilosc pol na boku szachownicy (N>=4)
>
> teraz do wyboru:
> albo pola szachownicy oznaczamy dwoma parametrami (wspolrzednymi),

Ok, moja wersja opiera sie na przerzutniku xor-owym.
Wprowadzam wspolrzedne, zwracam tablice wspolrzednych.

function Kon(x,y,n){
for(var t=[],k,l,j=1,i=-3;i<2;j^=3){
k=++i&&(l=x+i)>0&l<=n
k&y+j<=n&&t.push([l,y+j]);k&y-j>0&&t.push([l,y-j])
}return t
}

index oparty na 1, tzn. lewy-gorny rog Kon(1,1,8), prawy-gorny
Kon(1,8,8) itp

--
BlaTek

Terk

unread,
May 5, 2004, 7:14:36 AM5/5/04
to
Bogdan Blaszczak wrote:
> index oparty na 1, tzn. lewy-gorny rog Kon(1,1,8), prawy-gorny
> Kon(1,8,8) itp

No to przyszedł czas na moją, zapowiadaną, 135-bajtową wersję. Założenia
takie same, jak powyżej u Blatka.

function t(w,h,n){for(var T=[],y,x=-3;x++<2;)for(y=-3;y++<2;)
if(x-y&&x*y&&x+y&&w+x>0&&w+x<=n&&h+y>0&&h+y<=n)T.push([w+x,h+y]);return T}

Bogdan Blaszczak

unread,
May 5, 2004, 12:48:09 PM5/5/04
to
Użytkownik Terk napisał:

> Bogdan Blaszczak wrote:
>
>>index oparty na 1, tzn. lewy-gorny rog Kon(1,1,8), prawy-gorny
>>Kon(1,8,8) itp
>
>
> No to przyszedł czas na moją, zapowiadaną, 135-bajtową wersję. Założenia
> takie same, jak powyżej u Blatka.
>
> function t(w,h,n){for(var T=[],y,x=-3;x++<2;)for(y=-3;y++<2;)
> if(x-y&&x*y&&x+y&&w+x>0&&w+x<=n&&h+y>0&&h+y<=n)T.push([w+x,h+y]);return T}

Ciekawe... ścisnąłem swoje w imadełku i wyszło mi dokładnie to samo, 135
bajtów. Ale za..isty zbieg okolicznosci ;)

function b(x,y,n){for(var t=[],k,l,j=1,i=-3;i<2;j^=3)
k=++i&&(l=x+i)>0&l<=n,
k&y+j<=n&&t.push([l,y+j]),k&y-j>0&&t.push([l,y-j]);return t}


--
BlaTek

Terk

unread,
May 6, 2004, 7:16:05 AM5/6/04
to
Bogdan Blaszczak wrote:
> Ciekawe... ścisnąłem swoje w imadełku i wyszło mi dokładnie to samo, 135
> bajtów. Ale za..isty zbieg okolicznosci ;)

;))

To co, może teraz "pełna wersja" problemu konika? Obskoczenie całej
szachownicy bez stawania dwa razy w tym samym miejscu. Na wejściu rozmiar
szachownicy i współrzędne pozycji początkowej, na wyjściu tablica z
współrzędnymi kolejnych ruchów (lub false w przypadku braku rozwiązania).

elu...@poczta.onet.pl

unread,
May 3, 2004, 1:52:39 PM5/3/04
to
This message was cancelled from within Mozilla.

Vax

unread,
May 7, 2004, 11:05:13 AM5/7/04
to

Vax

unread,
May 7, 2004, 7:28:33 AM5/7/04
to

Użytkownik "Terk" <em...@mam.w.stopce> napisał w wiadomości
news:c7d6q9$nkc$1...@korweta.task.gda.pl...

> Bogdan Blaszczak wrote:
> > Ciekawe... ścisnąłem swoje w imadełku i wyszło mi dokładnie to samo, 135
> > bajtów. Ale za..isty zbieg okolicznosci ;)
>
> ;))
>
> To co, może teraz "pełna wersja" problemu konika?

i juz? ;)))

sorry, mialem zawalony tydzien :)))
a liczylem jeszcze na powtorke z rozrywki, np.:
jest 8 potencjalnych ruchow koniem....
0-7 czyli:
000 1, 2
001 2, 1
010 -1,2
011 -2,1
100 1,-2
101 2,-1
110 -1,-2
111 -2,-1
co my tu mamy... wszelkie mozliwe kombinacje, nas interesujace, bo:
mozliwe przesuniecia konika to -2,-1,1,2 w kazda strone, czyli mamy
jeden bit dla znaku X (+ albo -), jeden bit dla znaku Y (+ albo -),
jeden bit dla... wartosci X (1 albo 2) no i...
slucham? bity sie skonczyly, a nie mamy wartosci Y?
I co jeszcze? Aha, ze (1,1) czy (2,2) z dowolnymi znakami nie sa
poprawnymi ruchami skoczka?
No pewnie :)))
Skoro mamy na jednym bicie wartosc X, to wartosc Y bedzie przeciwna.
Jak 1 to 2, jak 2 to 1.
np. (przypisanie bitow przypadkowe, nie sugerowac sie;))
najmlodszy oznacza "wage" X, srodkowy "znak" X, najstarszy "znak" Y :
000 1, 2
001 2, 1
010 -1,2
011 -2,1
100 1,-2
101 2,-1
110 -1,-2
111 -2,-1
No...a teraz zgrabnie AND'ami, XOR'ami, OR'ami czy "zwykla" arytmetyka
to pokodowac... i w jednej petli od 0 do 7 przeleciec ;)))

Jest tez wersja "hard", z lataniem po 25 polach i krotkim,wstepnym warunkiem
(w uproszczeniu, formuly nie podam na tacy ;)) czy i*j jest rowne |2| :))
Ale nie bedziemy chyba propagowac brutal-force'ow, nie? ;))

Jest tez wersja "sportowa", gdzie rzedy sa intami, a kolumny bitami tych
intow,
ale to juz calkiem inna bajeczka :)))

No to nad skoczkiem sie jeszcze zastanowcie, a kto chce, niech
przechodzi do nastepnego etapu.
Tam dla uproszczenia mozemy zrezygnowac w funkcji generujacej
ruchy z N (bedzie zewnetrzne), mozna tez wstepnie przygotowac
inne zmienne..

milej zabawy :)))

v.


Vax

unread,
May 7, 2004, 7:56:48 AM5/7/04
to
Użytkownik "Vax" <v...@efabrika.pl.bez.tego.tu> napisał w wiadomości
news:c7fs0o$m1d$1...@nemesis.news.tpi.pl...
[...]

> np. (przypisanie bitow przypadkowe, nie sugerowac sie;))
> najmlodszy oznacza "wage" X, srodkowy "znak" X, najstarszy "znak" Y :

stop, stop, lekcja dla mniej zorientowanych, wyjasniam idee, ustalmy
inaczej:
w pierwszej cyfrze 0 na "+" a 1 na "-"
w drugiej cyfrze 0 na "2" a 1 na "1" (lub zostawmy w spokoju, na jedno
wychodzi ;)
w trzeciej znow 0 na "+" a 1 na "-"
...i dopiszmy na koncu dopelnienie do 3 (znaczy, jak bylo 1 to 2 i odwrotnie
;)

.0.0.0.
.+.2.+.1

.0.0.1.
.+.2.-.1

.0.1.0.
.+.1.+.2

.0.1.1.
.+.1.-.2

(...)

.1.1.1.
.-.1.-.2

a spiesze z tymi wyjasnieniami, zanim koledzy zdaza to zultrapackowac ;))))

v.


Terk

unread,
May 7, 2004, 8:55:44 AM5/7/04
to
Vax wrote:
> a spiesze z tymi wyjasnieniami, zanim koledzy zdaza to zultrapackowac
;))))

Mnie dopadła praca i nie znajdę chwili na zabawę. A gdy już skończę pracę
niezbędny mi będzie relaks z dala od monitora. ;))
Do quizów mogę więc wrócić jakoś od środy - będę miał luźniej wtedy.

Ale w "pełnego skoczka" możemy się pobawić już teraz.
Tych kilka dni temu, gdy pisałem funkcję zwracającą legalność ruchów,
"zagalopowałem się" i zrobiłem też funkcję pełnego skoczka. Ma trochę więcej
znaków niż 135 ;) ale nadal jest lekkim ultrapackiem (lekkim, bo nie chciało
mi się już nad tym zbytnio siedzieć - w razie czego da się jeszcze trochę
bajtów z tego uciąć:).

Tak więc moje rozwiązanie jest już gotowe. :)
Ale chyba nie będę rzucał go na pierwszy ogień, żeby nie zepsuć zabawy,
prawda?

Terk

unread,
May 7, 2004, 9:18:26 AM5/7/04
to
Vax wrote:
> Jest tez wersja "hard", z lataniem po 25 polach i krotkim,wstepnym
warunkiem
> (w uproszczeniu, formuly nie podam na tacy ;)) czy i*j jest rowne |2| :))
> Ale nie bedziemy chyba propagowac brutal-force'ow, nie? ;))

Tak właśnie wyglądała moja funkcja. :)
Latała po 25 polach, ale zamiast sprawdzać czy |i*j| jest równe 2,
sprawdzałem co innego: i-j&&i*j&&i+j. Wariant z mnożeniem mniej mi się
podobał i wyciągnąłbym go dopiero, jeśli ktoś zszedłby poniżej 135 znaków.
:)) Skoro jednak zdradziłeś ideę, to zamieniając "i-j&&i*j&&i+j" na
"x*y*x*y==4" mamy 132 bajty:

function t(w,h,n){for(var
T=[],y,x=-3;x++<2;)for(y=-3;y++<2;)if(x*y*x*y==4&&w+x>0&&w+x<=n&&h+y>0&&h+y<


=n)T.push([w+x,h+y]);return T}

A może komuś uda się _jeszcze_ skrócić? ;)


Ok, wracam do pracy żeby zdążyć przed wieczorkiem. :)

Vax

unread,
May 7, 2004, 10:05:33 AM5/7/04
to

Użytkownik "Terk" <em...@mam.w.stopce> napisał w wiadomości
news:c7g2bl$b7$1...@korweta.task.gda.pl...
[...]

"i-j&&i*j&&i+j" na
> "x*y*x*y==4" mamy 132 bajty:
[...]

> A może komuś uda się _jeszcze_ skrócić? ;)

iiii.... no wiesz?

"x*y*x*y&4" i juz masz 131 ;)

v.


Terk

unread,
May 7, 2004, 10:10:07 AM5/7/04
to
Vax wrote:
> iiii.... no wiesz?

No ja wiem. I wiem, że Ty wiesz, ale specjalnie zrobiłem nadmiar bajtów,
żeby mógł się ktoś wykazać. ;)

> "x*y*x*y&4" i juz masz 131 ;)

No to mamy:

function t(w,h,n){for(var T=[],y,x=-3;x++<2;)for(y=-3;y++<2;)

if(x*y*x*y&4&&w+x>0&&w+x<=n&&h+y>0&&h+y<=n)T.push([w+x,h+y]);return T}

Ktoś się pokusi o ucięcie _jeszcze_ czegoś z tych 131 bajtów? ;)

Vax

unread,
May 7, 2004, 10:52:55 AM5/7/04
to
Użytkownik "Terk" <em...@mam.w.stopce> napisał w wiadomości
news:c7g5bv$l26$1...@korweta.task.gda.pl...

> function t(w,h,n){for(var T=[],y,x=-3;x++<2;)for(y=-3;y++<2;)
> if(x*y*x*y&4&&w+x>0&&w+x<=n&&h+y>0&&h+y<=n)T.push([w+x,h+y]);return T}
>
> Ktoś się pokusi o ucięcie _jeszcze_ czegoś z tych 131 bajtów? ;)

nie _jeszcze_, ale z _tych_ ;)))

chcesz? to masz jeszcze jeden, dla rownego rachunku (130):


function t(w,h,n){for(var T=[],y,x=-3;x++<2;)for(y=-3;y++<2;)

x*y*x*y&4&&w+x>0&&w+x<=n&&h+y>0&&h+y<=n?T.push([w+x,h+y]):0;return T}

chcesz jeszcze? (wszak _rowny_ rachunek to 128 ;))

v.

Vax

unread,
May 7, 2004, 11:02:40 AM5/7/04
to

Użytkownik "Vax" <v...@efabrika.pl.bez.tego.tu> napisał w wiadomości
news:c7g7vt$39l$1...@nemesis.news.tpi.pl...
[...]

> chcesz? to masz jeszcze jeden, dla rownego rachunku (130):
[ciach]
nu tak, male niedociagniecie bylo ;))

> chcesz jeszcze? (wszak _rowny_ rachunek to 128 ;))

ale czy to aktualne? ;)

v.


Vax

unread,
May 7, 2004, 11:07:21 AM5/7/04
to

Użytkownik "Vax" <v...@efabrika.pl.bez.tego.tu> napisał w wiadomości
news:c7g8i3$4ra$1...@nemesis.news.tpi.pl...

>
> Użytkownik "Vax" <v...@efabrika.pl.bez.tego.tu> napisał w wiadomości
> news:c7g7vt$39l$1...@nemesis.news.tpi.pl...
> [...]
> > chcesz? to masz jeszcze jeden, dla rownego rachunku (130):
> nu tak, male niedociagniecie bylo ;))
nie no, ja cos mieszam... ;))
(do siebie gadam, sprawdzam jedno, pisze o drugim i do tego zajmuje sie
"cudzym" kodem ;))

> > chcesz jeszcze? (wszak _rowny_ rachunek to 128 ;))
>
> ale czy to aktualne? ;)

a jak myslisz? ;p

v.


Vax

unread,
May 7, 2004, 11:17:19 AM5/7/04
to

Użytkownik "Vax" <v...@efabrika.pl.bez.tego.tu> napisał w wiadomości
news:c7g8qs$5j9$1...@nemesis.news.tpi.pl...
[...]
> a jak myslisz? ;p

a chcesz po jednym, czy hurtowo? ;p

> v.

vax - ty sie qna uspokoj, lecz, alboco, nie pisz sam do siebie

pozdrawiam - zdrovy rozsadek


Terk

unread,
May 7, 2004, 11:19:06 AM5/7/04
to
Vax wrote:
> vax - ty sie qna uspokoj, lecz, alboco, nie pisz sam do siebie

Zdecydowanie się uspokój. Konkurs na skracanie był dla innych nie dla
Ciebie. Skoro już popsułeś im zabawę, to wklejam tych 128 bajtów. A co. :)

function t(w,h,n){for(var T=[],y,x=-3;x++<2;)for(y=-3;y++<2;)

x*y*x*y&4&&w+x>0&&n-w+x&&h+y>0&&n-h+y?T.push([w+x,h+y]):0;return T}

Od teraz konkurs na skracanie może obejmować również Ciebie. ;)

Vax

unread,
May 7, 2004, 11:41:07 AM5/7/04
to

Użytkownik "Terk" <em...@mam.w.stopce> napisał w wiadomości
news:c7g9db$d86$1...@korweta.task.gda.pl...

> Vax wrote:
> > vax - ty sie qna uspokoj, lecz, alboco, nie pisz sam do siebie
>
> Zdecydowanie się uspokój. Konkurs na skracanie był dla innych nie dla
> Ciebie. Skoro już popsułeś im zabawę, to wklejam tych 128 bajtów. A co. :)
>
> function t(w,h,n){for(var T=[],y,x=-3;x++<2;)for(y=-3;y++<2;)
> x*y*x*y&4&&w+x>0&&n-w+x&&h+y>0&&n-h+y?T.push([w+x,h+y]):0;return T}
>
> Od teraz konkurs na skracanie może obejmować również Ciebie. ;)

np.: t(2,7,8) i wypadles poza szachownice :))
falstart, kombinuj dalej :)

v.


Terk

unread,
May 7, 2004, 11:44:01 AM5/7/04
to
Vax wrote:
> np.: t(2,7,8) i wypadles poza szachownice :))

Fakt, nawet nie popatrzyłem jak to będzie działać. :)

Ale przyznam, że rzeczy, które specjalnie zostawiłem do skrócenia, już
zostały "naprawione" (szkoda, że nikt inny się nie włączył;))).

Skoro mówisz, że jeszcze dwa bajty zostały, to zerknę w to wieczorkiem jak
skończę robotę. :)

Vax

unread,
May 7, 2004, 12:07:51 PM5/7/04
to

Użytkownik "Terk" <em...@mam.w.stopce> napisał w wiadomo¶ci
news:c7gas1$kna$1...@korweta.task.gda.pl...
> Vax wrote:
[...]

> Ale przyznam, że rzeczy, które specjalnie zostawiłem do skrócenia, już
> zostały "naprawione" (szkoda, że nikt inny się nie wł±czył;))).

>
> Skoro mówisz, że jeszcze dwa bajty zostały, to zerknę w to wieczorkiem jak
> skończę robotę. :)

dwa? to masz na rozbiegowke, powiedzmy 1111111 bajtow (127 ;))
no, teraz sie zastanawiaj ;)

function t(w,h,n){for(var T=[],y,x=-3;x++<2;)for(y=-3;y++<2;)

x*y*x*y&4&&w>-x&&w+x<=n&&h>-y&&h+y<=n&&T.push([w+x,h+y]);return T}

Dla tych, co sie pogubili, wyjasniam ostatnie zmiany Terkowego ultra-packa:

1. zmiana techniczno-warsztatowa
Ten if, co sie zmienil w a?b:c zostal calkiem zastapiony przez logiczny &&
(ten ostatni),
jak wiadomo, JS poniecha sprawdzania warunku logicznego "||" gdy napotka na
ekwiwalent prawdy, zas "&&" gdy spotka sie z falszem.
W tym wypadku ostatnim "warunkiem" jest push, do ktorego dojdzie dopiero,
gdy wszelkie poprzednie beda spelnione. A wynik... a na co komu jakis wynik,
skoro wszystko, co mialo sie stac, juz sie stalo? ;)))

2. zmiana arytmetyczno-logiczno-dedukcyjna ;))
Taaa.... komputery swa moca obliczeniowa odzwyczajaja od myslenia.
Nie dajmy sie. Takie np.:
w+x>0
No ok, co tu kombinowac?
Ano... wiadomo, skadinad, ze "w" jest _naturalne_ (a wiec dodatnie).
Co do x, to nie wiadomo... ale jesli bedzie:
a) dodatnie, to warunek i tak jest spelniony
b) ujemne, no to wartosc bezwzgledna tego ujemnego x, czyli -x
musialaby byc mniejsza od "w" by dalaje byla to prawda,
starczy zatem warunek:
w>-x
...chyba, ze komus sie kojarzy ze szkoly, ze:
"przenosimy x na druga strone nierownosci, zmieniajac znak" i juz ;p

no, kto nastepny urywa?

v.


Terk

unread,
May 7, 2004, 12:55:27 PM5/7/04
to
Vax wrote:
> 2. zmiana arytmetyczno-logiczno-dedukcyjna ;))

Roztargnienie i szwankująca wielozadaniowość. :)
To tę nierównośc miałem zamienić, a nie tamtą drugą (przy której wyjechałem
za szachownicę). ;)


> function t(w,h,n){for(var T=[],y,x=-3;x++<2;)for(y=-3;y++<2;)
> x*y*x*y&4&&w>-x&&w+x<=n&&h>-y&&h+y<=n&&T.push([w+x,h+y]);return T}

Ultrapack jest już dość mocny. Zerknę na niego jak wrócę w nocy po 6-8
piwach. Wtedy najszybciej z niego coś urwę, teraz nie mam siły już myśleć
nad tym (ileż można na trzeźwo). ;))


A tymczasem w ramach relaksu po pracy i na Twoje specjalne życzenie skrobnę
wersję operującą na bitach. ;)

Terk

unread,
May 7, 2004, 2:00:15 PM5/7/04
to
Terk wrote:
> A tymczasem w ramach relaksu po pracy i na Twoje specjalne życzenie
> skrobnę wersję operującą na bitach. ;)

Okay, tak na szybko wersja z pętlą 8-elementową, operująca na bitach. :)

function t(w,h,n){for(var T=[],a,b,c,i=8;i--;)c=i>>2,a=++c*(i&1||-1)+w,
b=h+(c^3)*((i&2)-1),a>0&&a<=n&&b>0&&b<=n&&T.push([a,b]);return T}


Pętla leci od 7 do 0 (od 111b do 000b).
Pierwszy bit (od prawej) oznacza znak X-ów.
Drugi bit to znak Y-ków.
Trzeci determinuje to, czy w danej kombinacji X przesuwamy o 2 a Y o 1, czy
odwrotnie.

Z operacji binarnych bawimy się z AND, XOR i SHR.

136 bajtów - chyba wystarczająco jak na pierwsze podejście na szybko. ;)

Uciekam na kręgle i pivko, jutro mam nadzieję zobaczyć tu kilka Waszych
rozwiązań operujących na bitach (krótszych rzecz jasna) i wtedy napisać
drugą wersję. ;))

Miłego wieczorku.

0 new messages