szkolka

336 views
Skip to first unread message

Vax

unread,
Jan 16, 2003, 8:17:00 AM1/16/03
to
kolejne zadanko (na algorytmizacje tym razem) ;))

wywolanie funkcji roma(N) gdzie N jest naturalne
ma zwrocic stringa z zapisem liczby w cyfrach rzymskich ;)

na "deser" wlasnie wymyslona ciekawostka:
<script>
document.write('<ol type=I start='+prompt('?',1)+'><li></li></ol>')
</script>
moze pomoc w weryfikacji wynikow wlasnej funkcji ;)

v.
PS. liczy sie elegancja, a nie zestaw if'ow ;))
PS2. jak ktos chce, moze tez zrobic w druga strone - z rzymskich na arabskie
:)
PS3. jak komus _bardzo_ to pomoze, moze przyjac N<4000 ;)


Coder

unread,
Jan 16, 2003, 9:01:11 AM1/16/03
to
> PS2. jak ktos chce, moze tez zrobic w druga strone - z rzymskich na
arabskie
> :)

A mozna zrobic 'w dwie strony' ? :P

> PS3. jak komus _bardzo_ to pomoze, moze przyjac N<4000 ;)

Hmm.. jakies ograniczenie trzeba bedzie wprowdzic, w koncu trudno zapisac
1000000 w rzymskim systemie ;)

Pozdrawiam


Krzyszt_off

unread,
Jan 16, 2003, 9:39:11 AM1/16/03
to
> PS3. jak komus _bardzo_ to pomoze, moze przyjac N<4000 ;)

Znaczy sie - MMMCMXCIX. Mowze do nas po rzymsku ;)

Krzysiek


Coder

unread,
Jan 16, 2003, 9:54:42 AM1/16/03
to
Pierwsze podejscie (czyli jak zwykle w moim przypadku - niewypal ;)):

function Roma(N){
if(!N||N>=4000)return false
var R='',s=[
['I','II','III','IV','V','VI','VII','VIII','IX'],
['X','XX','XXX','XL','L','LX','LXX','LXXX','XC'],
['C','CC','CCC','CD','D','DC','DCC','DCCC','CM'],
['M','MM','MMM']]
N=N.toString().split('').reverse()
for(i=N.length-1;i>=0;i--)if(N[i])R+=s[i][N[i]-1]
return R
}

> PS. liczy sie elegancja, a nie zestaw if'ow ;))

Jak widac poszedlem na latwizne. Chociaz z drugiej strony - czy jest sens
wymyslac jakis skomplikowany algorytm dla tak prostego zadania ?

> PS2. jak ktos chce, moze tez zrobic w druga strone - z rzymskich na
arabskie
> :)

Hehe.. sprobuje.

> PS3. jak komus _bardzo_ to pomoze, moze przyjac N<4000 ;)

Z matematyki orlem nigdy nie bylem.. Czy da sie przedstawic w systemie
rzymskim liczbe wieksza lub rowna 4000 ? Oczywiscie nie chodzi mi o cos w
stylu:

MMMM[itd.]

Da sie ?

Pozdrawiam


Krzyszt_off

unread,
Jan 16, 2003, 10:03:54 AM1/16/03
to
> PS2. jak ktos chce, moze tez zrobic w druga strone - z rzymskich na
arabskie

function Arab(rome){
function Digit(a){
return
a=='I'?1:a=='V'?5:a=='X'?10:a=='L'?50:a=='C'?100:a=='D'?500:a=='M'?1000:0
}
var sum=0
for(var i=0;i<rome.length;i++)

sum-=Digit(rome.charAt(i))*((Digit(rome.charAt(i))<Digit(rome.charAt(i+1)))*
2-1)
return sum
}

Nie mam teraz czasu na pierwsza czesc ;-(

Krzysiek

P.S.: jak Ci sie podoba moj boolean * 2 - 1 ? - pozbylem sie if-else ;)


Coder

unread,
Jan 16, 2003, 10:01:56 AM1/16/03
to

Użytkownik "Vax" <v...@ircx.pl> napisał w wiadomości
news:b06bao$cp7$1...@news.tpi.pl...

> kolejne zadanko (na algorytmizacje tym razem) ;))
>
> wywolanie funkcji roma(N) gdzie N jest naturalne
> ma zwrocic stringa z zapisem liczby w cyfrach rzymskich ;)
>
> na "deser" wlasnie wymyslona ciekawostka:
> <script>
> document.write('<ol type=I start='+prompt('?',1)+'><li></li></ol>')
> </script>
> moze pomoc w weryfikacji wynikow wlasnej funkcji ;)

Co ciekawe IE6 (nie wiem jak starsze wersje) przeznacza na liczbe porzadkowa
w <ol> tylko kilkadziesiat pikseli. W rezultacie dluzsze liczby sie nie
mieszcza i ich czesc jest ukrywana (po lewej stronie). Czyzby bug ?

Pozdrawiam


Vax

unread,
Jan 16, 2003, 10:03:23 AM1/16/03
to

Użytkownik "Coder" <mic...@w.pl> napisał w wiadomości
news:b06h34$gis$1...@news.tpi.pl...

> Pierwsze podejscie (czyli jak zwykle w moim przypadku - niewypal ;)):
[...]

> Jak widac poszedlem na latwizne. Chociaz z drugiej strony - czy jest sens
> wymyslac jakis skomplikowany algorytm dla tak prostego zadania ?

sens jest, a i temat ciekawy, znasz system binarny, szesnatkowy,
dziesietny... a tu masz piatkowo-dwojkowy naprzemienny ;))
najciekawsze algorytmy bazuja na zauwazaniu prawidlosci,
nie na silowym rozwiazaniu ;)

[...]

> Z matematyki orlem nigdy nie bylem.. Czy da sie przedstawic w systemie
> rzymskim liczbe wieksza lub rowna 4000 ? Oczywiscie nie chodzi mi o cos w
> stylu:
>
> MMMM[itd.]
>
> Da sie ?

wlasnie MMMMMM.....
ale mozemy poteoretyzowac i dodac kolejne wagi
5000, 100000 itd. literek troche zostalo ;)

v.


Vax

unread,
Jan 16, 2003, 10:11:19 AM1/16/03
to

Użytkownik "Coder" <mic...@w.pl> napisał w wiadomości
news:b06hgm$l3j$1...@news.tpi.pl...

> Co ciekawe IE6 (nie wiem jak starsze wersje) przeznacza na liczbe
porzadkowa
> w <ol> tylko kilkadziesiat pikseli. W rezultacie dluzsze liczby sie nie
> mieszcza i ich czesc jest ukrywana (po lewej stronie). Czyzby bug ?

yhy - ale mozesz poprzedzic <center> a takze <small> - pomaga ;)

w innych przegladarkach tez bywa "smiesznie" :)

v.


Vax

unread,
Jan 16, 2003, 2:07:42 PM1/16/03
to

Użytkownik "Krzyszt_off" <leszek...@grube.ryby.pl> napisał w wiadomości
news:b06hbj$jbk$1...@news.tpi.pl...
[...]

skupmy sie narazie na tym kawaleczku:

> function Digit(a){return
a=='I'?1:a=='V'?5:a=='X'?10:a=='L'?50:a=='C'?100:a=='D'?500:a=='M'?1000:0}

a ja sobie "z palucha" napisze pare innych "Digitow" :)

function
Digit(a,d,s){for(a='IVXLCDM'.indexOf(a),s=1,d=2;a--;s*=d=7-d);return s}
function Digit(a,s){for(a='IVXLCDM'.indexOf(a),s=1;a--;s*=a&1?2:5);return s}
function Digit(a){a='IVXLCDM'.indexOf(a);return
Math.pow(2,a>>1)*Math.pow(5,++a>>1)}
function Digit(a){a='IVXLCDM'.indexOf(a);return Math.pow(10,a>>1)*(a&1?5:1)}

wszystkie _algorytmiczne_, ktory Ci sie najbardziej podoba? ;)

w dodatku to nie wszystkie metody, ale ciekawe,
ze jest ich az tyle na tak pozornie blache zagadnenie :)

> P.S.: jak Ci sie podoba moj boolean * 2 - 1 ? - pozbylem sie if-else ;)

ten zakres materialu uwazaj za opanowany ;)

pozdrawiam - v.


Coder

unread,
Jan 16, 2003, 3:33:07 PM1/16/03
to
> a ja sobie "z palucha" napisze pare innych "Digitow" :)
>
> function
> Digit(a,d,s){for(a='IVXLCDM'.indexOf(a),s=1,d=2;a--;s*=d=7-d);return s}
> function Digit(a,s){for(a='IVXLCDM'.indexOf(a),s=1;a--;s*=a&1?2:5);return
s}
> function Digit(a){a='IVXLCDM'.indexOf(a);return
> Math.pow(2,a>>1)*Math.pow(5,++a>>1)}
> function Digit(a){a='IVXLCDM'.indexOf(a);return
Math.pow(10,a>>1)*(a&1?5:1)}
>
> wszystkie _algorytmiczne_, ktory Ci sie najbardziej podoba? ;)

:-O (szczeka mi opadla). Ja wysiadam, to nie moj poziom ;).

Pozdrawiam


Bogdan Błaszczak

unread,
Jan 16, 2003, 5:33:35 PM1/16/03
to

Użytkownik "Vax" <v...@ircx.pl> napisał w wiadomości
news:b06bao$cp7$1...@news.tpi.pl...
> kolejne zadanko (na algorytmizacje tym razem) ;))

<html><head>
<meta name="author" content="BlaTek">
<script>

function roma(N){
var b,i,o,a,s='',
R=['I','V','X','L','C','D','M']

for(b=R.length-1;b>=0;b--){
a=Math.pow(10,b>>1)*(b&1?5:1)
o=Math.floor(N/a)
if(o<4)for(i=0;i<o;i++)s+=R[b]
else{i=s.slice(-1)==R[b+1]
s=(i?s.slice(0,-1):s)+R[b]+R[b+(i?2:1)]}
N-=o*a}
return s
}

</script>
</head><body style="margin-left:200px">
<script>
xx=prompt('?',3999)
ss=!~~xx||xx>3999?'Spadaj':'<ol type=I start='+xx+
'><li>wynik funkcji: '+roma(xx)+'.</li></ol>'
document.write(ss)
</script>
</body></html>


Krzyszt_off

unread,
Jan 17, 2003, 2:21:04 AM1/17/03
to
> Co ciekawe IE6 (nie wiem jak starsze wersje) przeznacza na liczbe
porzadkowa
> w <ol> tylko kilkadziesiat pikseli. W rezultacie dluzsze liczby sie nie
> mieszcza i ich czesc jest ukrywana (po lewej stronie). Czyzby bug ?

W IE 5.0 nie mozna za to zaznaczyc tak wygenerowanego tekstu... - zaznacza
mi sie tylko spacja, ktora nie wiedziec czemu, siedzi w srodku liczby.

Krzysiek


Krzyszt_off

unread,
Jan 17, 2003, 2:34:37 AM1/17/03
to
> w dodatku to nie wszystkie metody, ale ciekawe,
> ze jest ich az tyle na tak pozornie blache zagadnenie :)

Ech, czlowiek slepy na starosc ;-)

Na swoje wytlumaczenie mam tylko to, ze spieszylem sie maksymalnie,
zeby siasc do tego jeszcze wczoraj, a ze czasu nie mialem
za bardzo na myslenie, to zrobilem raz-ciach i puscilem posta...

Faktycznie, nietrudno zauwazyc, ze 1,5 10,50 100,500 :>
Mea culpa.

Krzysiek


Vax

unread,
Jan 17, 2003, 6:36:04 AM1/17/03
to

Użytkownik "Bogdan Błaszczak" <bla...@board.pl> napisał w wiadomości
news:b07bqt$2d3$1...@news.tpi.pl...
[...]

no tak, Blatek to Blatek :)))

generalnie algorytmy mozna podzielic na dwa rodzaje:
1. od najwyzszych "wag"
sprawdzamy, ile razy miesci sie 1000, 500, 100 itd.
tworzac ciag przez dodawanie kolejnych, coraz mniej znaczacych
czesci liczby
2. "od tylka strony" - bazujac na badaniu reszty z dzielenia
z podstawy systemu liczbowego - w tym wypadku zachodzi
drobna komplikacja, gdyz system rzymski jest specyficznym
przypadkiem systemu przemiennie-dwojkowo-piatkowego :)))
tu mala <dygresja>, "przelacznik" pomiedzy A i B
realizuje sie np. za pomoca: przelacznik=(A+B)-przelacznik
(zamiast np. przelacznik=(przelacznik==A)?B:A czy innych "ifow" ;)))
w naszym przypadku np. przelacznik=7-przelacznik
</dygresja>

Blatek poszedl droga pierwsza. Mnie osobiscie
ta druga (mniej oczywista) wydaje sie bardziej "wyrafinowana",
ale to juz dywagacje typu "rock czy jazz", nie wdajac sie w dyskusje
co lepsze, mozna tylko stwierdzic, ze jazz "rozumie" mniej osob,
a dobra muzka i tak jest dobra, bez wzgledu na gatunek :)))

skrypt Blatka nie wymaga chyba wiekszych komentarzy?
dorzuce tylko kilka "dingsow", ale to juz "poza konkurencja",
wszak nacisk kladlismy na _algorytm_ :))

> R=['I','V','X','L','C','D','M']

mozna by np.: R='I V X L C D M'.split(' ') ;)))
wiem, wiem... "zboczenie" ;))

[...]

> R[b+(i?2:1)]
a moze wystarczy R[1+b+i] ?
(wymuszona konwersja bool->int)

coz jeszcze... mozna inaczej rozwiazywac
wyjatki "czworek-dziewiatek" unikajac ciecia
juz wypisanego ciagu...

W kazdym razie Blatek pokazal klase, kto jeszcze
sie pokusi na eleganckie _algorytmiczne_ rozwiazanie
problemu? (moze ta druga metoda? :))))

pozdrawiam - v.
PS. to wlasnie jest piekne w informatyce, ze dobry programista
wychwytuje prawidlowosci i wykorzystuje je, szuka reguly
i uniwersalizuje :))
Sa wprawdzie tacy, ktorzy uwazaja, ze nie forma wazna, wystarczy,
by dzialalo, ale ja jestem zwolennikiem np. _ladnych_ aut,
_ladnych_ mebli, czy _ladnych_ kobiet. Te brzydkie tez "dzialaja",
ale na piekno jest jakby wiekszy popyt.... :)))

v.


Krzyszt_off

unread,
Jan 17, 2003, 7:17:22 AM1/17/03
to
> > R=['I','V','X','L','C','D','M']
> mozna by np.: R='I V X L C D M'.split(' ') ;)))

albo 'IVXLCDM'.split('') - 7 znakow krotsze :>>>

Krzysiek


Krzyszt_off

unread,
Jan 17, 2003, 7:32:50 AM1/17/03
to
> > function Digit(a){return
> a=='I'?1:a=='V'?5:a=='X'?10:a=='L'?50:a=='C'?100:a=='D'?500:a=='M'?1000:0}

function Digit(a){return[1,5,10,50,100,500,1000]['IVXLCDM'.indexOf(a)]}

Wprawdzie nie algorytmicznie (no bo nie bede kopiowal Twojego kodu),
ale troche sie poprawilem :)

Krzysiek


Vax

unread,
Jan 17, 2003, 7:37:00 AM1/17/03
to

Użytkownik "Krzyszt_off" <leszek...@grube.ryby.pl> napisał w wiadomości
news:b08rv7$fg1$1...@news.tpi.pl...

> > > R=['I','V','X','L','C','D','M']
> > mozna by np.: R='I V X L C D M'.split(' ') ;)))
>
> albo 'IVXLCDM'.split('') - 7 znakow krotsze :>>>

owszem, ale mialem z tym na ktoryms browserze klopot :)
ale fakt faktem, krotsze :)

v.


Bogdan Błaszczak

unread,
Jan 17, 2003, 9:25:28 AM1/17/03
to

Użytkownik "Vax" <v...@ircx.pl> napisał w wiadomości
news:b08r07$62k$1...@news.tpi.pl...

> no tak, Blatek to Blatek :)))

bla,bla,bla[...]

> > R=['I','V','X','L','C','D','M']
> mozna by np.: R='I V X L C D M'.split(' ') ;)))
> wiem, wiem... "zboczenie" ;))

R='IVXLCDM'.match(/./g)
;))

Blatq


Bogdan Błaszczak

unread,
Jan 17, 2003, 1:51:28 PM1/17/03
to

Użytkownik "Vax" <v...@ircx.pl> napisał w wiadomości
news:b08r07$62k$1...@news.tpi.pl...

<composed>
> 1. od najwyzszych "wag"


> 2. "od tylka strony" - bazujac na badaniu reszty z dzielenia

> ta druga (mniej oczywista) wydaje sie bardziej "wyrafinowana",

> wiem, wiem... "zboczenie" ;))
</composed>

:]]]]]]]]
a tak powaznie to

> Blatek poszedl droga pierwsza. Mnie osobiscie
> ta druga (mniej oczywista) wydaje sie bardziej "wyrafinowana",
> ale to juz dywagacje typu "rock czy jazz", nie wdajac sie w dyskusje
> co lepsze, mozna tylko stwierdzic, ze jazz "rozumie" mniej osob,
> a dobra muzka i tak jest dobra, bez wzgledu na gatunek :)))

dam jeszcze pare(nascie?) godzin szansy innym, a potem tez se pojazzuje :))

BlaTek


Vax

unread,
Jan 18, 2003, 5:13:59 AM1/18/03
to

Użytkownik "Bogdan Błaszczak" <bla...@board.pl> napisał w wiadomości
news:b093jq$4rl$1...@news.tpi.pl...
[...]
> R='IVXLCDM'.match(/./g)
> ;))

no to "przy okazji" zostaly przerobione "krokie deklaracje tablic"
zarowno literowych, jak i np. nazw miesiecy czy dni tygodnia ;)
fajnie, nie? ;)

v.
jest jeszcze potencjal do wykorzystania tkwiacy w exec,
np. zrobienie ze stringa stream'a, z ktorego mozna
sekwencyjnie czytac znaki, slowa, liczby, itp.,
ale to juz moze innym razem ;)


Vax

unread,
Jan 18, 2003, 5:21:02 AM1/18/03
to
Użytkownik "Bogdan Błaszczak" <blatek@twentyfive[toDigits].pl> napisał w
wiadomości news:b09j6g$od1$1...@news.tpi.pl...
[...]

> dam jeszcze pare(nascie?) godzin szansy innym, a potem tez se pojazzuje
:))

daj im wiecej, powiedzmy do poniedzialkowego wieczoru :)))
ja prawde mowiac zrobilem wersje rock i jazz rownolegle :)

a skad to "zadanko" - wlasnie szkolka, taki niby banal,
programistyczna wprawka, ale z "hakiem" (IV, IX etc.)
i wieloma mozliwosciami rozwiazan - mozna "poszalec" :)

v.


Bogdan Błaszczak

unread,
Jan 18, 2003, 5:25:27 AM1/18/03
to

Użytkownik "Bogdan Błaszczak" <blatek@twentyfive[toDigits].pl> napisał w
wiadomości news:b09j6g$od1$1...@news.tpi.pl...

[...]


> dam jeszcze pare(nascie?) godzin szansy innym, a potem tez se pojazzuje
:))

ok, let's jazz

function roma(N){
var b,i,o,a=2,s='',R='I,V,X,L,C,D,M'.split(',')
for(b in R){
a=7-a;o=N%a;N=(N-o)/a
if(o==4){s+=R[1*b+(N&1)+1]+R[b];i=o*(N&1)}
else{if(i!=4)for(i=0;i<o;i++)s+=R[b];i=0}
}
return s.match(/./g).reverse().join('')
}

BlaTek


Bogdan Błaszczak

unread,
Jan 18, 2003, 5:28:24 AM1/18/03
to

Użytkownik "Vax" <v...@ircx.pl> napisał w wiadomości
news:b0b9p2$a69$1...@news.tpi.pl...

[...]


> daj im wiecej, powiedzmy do poniedzialkowego wieczoru :)))

eech puscilismy jednoczesnie
sorry

BlaTek


Bogdan Błaszczak

unread,
Jan 18, 2003, 5:38:07 AM1/18/03
to

Użytkownik "Vax" <v...@ircx.pl> napisał w wiadomości
news:b0b9db$6q9$1...@news.tpi.pl...

>
> Użytkownik "Bogdan Błaszczak" <bla...@board.pl> napisał w wiadomości
> news:b093jq$4rl$1...@news.tpi.pl...
> [...]
> > R='IVXLCDM'.match(/./g)
> > ;))
>
> no to "przy okazji" zostaly przerobione "krokie deklaracje tablic"
> zarowno literowych, jak i np. nazw miesiecy czy dni tygodnia ;)
> fajnie, nie? ;)

uwaga, w NS/Moz to bedzie calkiem normalna tablica
w IE nia tak calkiem
mozna sie nadziac przy petli for..in

BlaTek


Bogdan Błaszczak

unread,
Jan 18, 2003, 7:09:45 AM1/18/03
to

Użytkownik "Bogdan Błaszczak" <blatek@twentyfive[toDigits].pl> napisał w
wiadomości news:b0balh$htp$1...@news.tpi.pl...

[...]


> uwaga, w NS/Moz to bedzie calkiem normalna tablica
> w IE nia tak calkiem

no wiesz, cos z gatunku Nie DoViary ;)))

function isIE(){return!!'kurwa'.match(/./g).input}

BlaTek
ps. sorry ze klne, ale nie moglem sie powstrzymac


Vax

unread,
Jan 18, 2003, 10:03:36 AM1/18/03
to

Użytkownik "Bogdan Błaszczak" <blatek@twentyfive[toDigits].pl> napisał w
wiadomości news:b0balh$htp$1...@news.tpi.pl...
[...]
> uwaga, w NS/Moz to bedzie calkiem normalna tablica
> w IE nia tak calkiem
> mozna sie nadziac przy petli for..in

czytajac dokumentacje da sie wychwycic ow niuans ;)

v.

Vax

unread,
Jan 18, 2003, 11:41:40 AM1/18/03
to

Użytkownik "Bogdan Błaszczak" <blatek@twentyfive[toDigits].pl> napisał w
wiadomości news:b0b9tq$bhe$1...@news.tpi.pl...

>
> Użytkownik "Bogdan Błaszczak" <blatek@twentyfive[toDigits].pl> napisał w
> wiadomości news:b09j6g$od1$1...@news.tpi.pl...
>
> [...]
> > dam jeszcze pare(nascie?) godzin szansy innym, a potem tez se pojazzuje
> :))
>
> ok, let's jazz

motyw zagrany bardzo ladnie, ze az chce sie wspolnie poimprowizowac ;)))
moge wiec wtracic swoich kilka dzwiekow? :)

> function roma(N){
> var b,i,o,a=2,s='',R='I,V,X,L,C,D,M'.split(',')
> for(b in R){
> a=7-a;o=N%a;N=(N-o)/a
> if(o==4){s+=R[1*b+(N&1)+1]+R[b];i=o*(N&1)}
> else{if(i!=4)for(i=0;i<o;i++)s+=R[b];i=0}
> }
> return s.match(/./g).reverse().join('')
> }

gdyby tak, zamiast for-in tablicy wag
zastosowac:

b=0;while(N)

W sumie bardziej naturalne wydaje sie iterowanie
dopoki liczba istnieje, niz poki starczy cyfr na reprezentacje ;)

teraz ow if... to, ze mozna (o>3) zamiast (o==4) to drobiazg ;)
bardziej chodzi o to else... mozna by np.:

if(o>3)s+=R[b+N%2+1],N&=-2,o=1

zalatwiamy po kolei:
a) dokladamy do stringa odpowiednio wyzsza literke
rzymska w zaleznosci od parzysosci N
b) samo N bezwarunkowo "uparzystowujemy" przez uciecie najmlodszego bitu
c) reszte z dzielenia ustawiamy na 1

...po czym nastapilo by juz naturalne i bezwarunkowe:

while(o--)s+=R[i];b++

i zamkniecie zewnetrznego while...
Tak, teraz tylko odwracanie stringa. Jednak dlugie...
Mozna by z niego zrezygnowac na rzecz zastapienia
wszytskich "s+=cokolwiek" sekwencja "s=cokolwiek+s"
nieznacznie tylko dluzsza ;)

moze wiec jakos tak (wersja robocza):

function rome(N,s,R,b,a,o){
R='IVXLCDM'.split(s='');b=0;a=2
while(N){
o=N%(a=7-a);N=N/a^0
if(o>3)s=R[b+N%2+1]+s,N&=-2,o=1
while(o--)s=R[b]+s;b++
}
return s
}

z komentarzem:
1. ucieczka przed lokalizacja za pomoca var ;)
2. inicjacja zmiennych, gdzie Blatek zazyczyl sobie aby:
N - liczba przetwarzana
s - string wynikowy
R - tablica cyfr rzymskich
b - wskaznik na aktualnie "przetwarzana" cyfre rzymska
a - przelacznik 2|5
o - reszta z dzielenia
(uzylem jednak split('') nie mogac sie oprzec pokusie rownoczesnej
deklaracji s='' ;))))
3. glowna petla, realizowana dopoty jest co liczyc
4. alternatywny sposob na wyciagniecie czesci calkowitej i reszty z
dzielenia :)
5. reakcja na wypisanie wiecej niz 3 jednakowych cyferek
nalezy wypisac odpowiednio wyzsza cyfre, by pozniej poprzedzic
ja _jedna_ aktualnie przetwarzana. N musi stac sie przy tym parzyste.
Nie pytajcie dlaczego, zastanowcie sie przez chwile sami ;p
(a dokladnie, w pewnych okolicznosciach pomniejszone o 1,
co na jedno w sumie wychodzi, wiec dlaczego z tego nie skorzystac?)
6. normalne juz wypisywanie cyfr, tak, jakby tego calego cyrku
z reszta=4 nie bylo, stad brak else
7. no to lecimy od poczatku (do pierwszego while)

tez "jazz" - choc juz nieco inny (co nie znaczy, ze lepszy, po prostu inny
;))

pozdrawiam - v.


VooDoo

unread,
Jan 18, 2003, 1:37:01 PM1/18/03
to
> tez "jazz" - choc juz nieco inny (co nie znaczy, ze lepszy, po prostu inny

Po wyczynach BLATKA i VAXA na usta cisna mi sie tylko gratulacje. Panowie
gratuluje wiedzy. Chcialbym umiec choc czesc tego czego Wy jestescie w
stanie uzywac bez najmniejszej pomocy jakis zrodel. GRATULUJE !!!!

P.S.
Jak sie uczyc JS ? Dodam ze jestem w trakcie czytania kursu BLATKA (bardzo
dobry).
I moze ktos moglby mi jeszcze jakos wyjasnic petle w jakis przyjazny sposob
tak zebym wiedzial kiedy i gdzie je stosowac

Jeszcze raz Wasz wiedza to mistrzostwo ja nie moge wyjsc z podziwu i nie
myslcie ze to wazelina :-)

pozdrawiam
Voodoo


Bogdan Błaszczak

unread,
Jan 19, 2003, 10:28:15 AM1/19/03
to

Użytkownik "Vax" <v...@ircx.pl> napisał w wiadomości
news:b0c04c$bfo$1...@news.tpi.pl...

[...]


> b) samo N bezwarunkowo "uparzystowujemy" przez uciecie najmlodszego bitu

rzeklbym "wyzerowanie" ;)
"uciecie" w pierwszym momencie falszywie mi sie skojarzylo z przesunieciem
bitowym w prawo.

W tym miejscu, bardziej "pogladawe" (nie mylic z "lepsze";) wydaje mi sie
AND-owanie z bitowa negacja jedynki. Przy okazji kumulujac dwie instrukcje
np

zamiast
N&=-2,o=1

moznaby
N&=~(o=1)

ale to juz kwestia indywidualnego poczucia estetyki... bajtow tyle samo;)))

[...]


> Tak, teraz tylko odwracanie stringa. Jednak dlugie...
> Mozna by z niego zrezygnowac na rzecz zastapienia
> wszytskich "s+=cokolwiek" sekwencja "s=cokolwiek+s"

racja... po co odwracac cos co mozna od razu ustawic w odpowiedniej
kolejnosci :)

[...]


> function rome(N,s,R,b,a,o){
> R='IVXLCDM'.split(s='');b=0;a=2
> while(N){
> o=N%(a=7-a);N=N/a^0
> if(o>3)s=R[b+N%2+1]+s,N&=-2,o=1
> while(o--)s=R[b]+s;b++
> }
> return s
> }
>
> z komentarzem:

[...]


> 5. reakcja na wypisanie wiecej niz 3 jednakowych cyferek
> nalezy wypisac odpowiednio wyzsza cyfre, by pozniej poprzedzic
> ja _jedna_ aktualnie przetwarzana. N musi stac sie przy tym parzyste.
> Nie pytajcie dlaczego, zastanowcie sie przez chwile sami ;p
> (a dokladnie, w pewnych okolicznosciach pomniejszone o 1,
> co na jedno w sumie wychodzi, wiec dlaczego z tego nie skorzystac?)

Pozostale punkty to betka, ale w punkcie piatym to mi szczeka dosc nisko
opadla. Masz Ty bracie kaaaaawal wyobrazni!!!

No i coz ja teraz mam zrobic, zeby wydac jeszcze jakis dzwiek w tym
duecie??!!
Chodza sluchy, ze wielka sztuka jest wyrwac Vaxowi kilka bajtow z kodu (i
bynajmiej nie mam na mysli wciec czy nl-ow:). Tak wiec podwijam rekawy,
likwiduje if-a i wyrywam 9 bajtow ;p

jazz must go on...

function rome(N,s,R,b,a,o){
R='IVXLCDM'.split(s='');b=0;a=2
while(N){
o=N%(a=7-a);N=N/a^0

while(o)s=R[o-->3?b+N%2+(N&=~1,o=1):b]+s;b++
}
return s
}

pozdrawiam
BlaTek


Bogdan Błaszczak

unread,
Jan 19, 2003, 10:28:28 AM1/19/03
to

Użytkownik "VooDoo" <p...@exodusnet.org> napisał w wiadomości
news:b0c75e$jtl$1...@news.tpi.pl...

> > tez "jazz" - choc juz nieco inny (co nie znaczy, ze lepszy, po prostu
inny

[...]


> Jak sie uczyc JS ? Dodam ze jestem w trakcie czytania kursu BLATKA (bardzo
> dobry).

Ksiazki i kursy moga (choc nie musza) byc dobre tylko w bardzo poczatkowym
okresie. Na pewnym etapie pozostaje juz tylko dokumentacja i... wyobraznia!
Wyobraznia, ktorej nie kazdemu moze nastarczyc...
Choc zdarzaja sie miejsca, w ktorych calkiem niezle mozna wyobraznie
pobudzic. Np. na tej grupie :)))

> I moze ktos moglby mi jeszcze jakos wyjasnic petle w jakis przyjazny
sposob
> tak zebym wiedzial kiedy i gdzie je stosowac

Trudno powiedziec co to jest przyjazny sposob. To co dla jednego jest super
przyjazne, dla innego moze byc nie do przelkniecia. Dlatego trzeba probowac
czerpac z roznych zrodel.

var tablica=[]
tablica[0]='pierwszy obieg petli'
tablica[1]='drugi obieg petli'
tablica[2]='trzeci obieg petli'

for(var i=0;i<tablica.length;i++){
alert(tablica[i])
}

pozdrawiam
BlaTek


Vax

unread,
Jan 19, 2003, 3:55:19 PM1/19/03
to

Użytkownik "Bogdan Błaszczak" <blatek@twentyfive[toDigits].pl> napisał w
wiadomości news:b0eg1c$ih5$1...@news.tpi.pl...
[...]
> rzeklbym "wyzerowanie" ;)

no coz, w jezykach programowania wyrazam
sie jednka scisliej niz np. w polskim ;))

[...]


> moznaby
> N&=~(o=1)
>
> ale to juz kwestia indywidualnego poczucia estetyki... bajtow tyle
samo;)))

nie widze przeciwskazan :)

[...]


> Chodza sluchy, ze wielka sztuka jest wyrwac Vaxowi kilka bajtow z kodu (i
> bynajmiej nie mam na mysli wciec czy nl-ow:). Tak wiec podwijam rekawy,
> likwiduje if-a i wyrywam 9 bajtow ;p
>
> jazz must go on...
>
> function rome(N,s,R,b,a,o){
> R='IVXLCDM'.split(s='');b=0;a=2
> while(N){
> o=N%(a=7-a);N=N/a^0
> while(o)s=R[o-->3?b+N%2+(N&=~1,o=1):b]+s;b++
> }
> return s
> }

wydajnosc nieznacznie spadla np. dla: MMMCCCXXXIII (3333)
warunek trzepie sie 12 razy zamiast 4, ale to juz urok tej konkretnej
"soloweczki" ;)

urwales 9... to ja z tego urwe jeszcze wiecej ;)

function rome(N,s,R,b,a,o){
for(R='IVXLCDM'.split(s=''),b=0,a=2;N;b++)
for(o=N%(a=7-a),N=N/a^0;o;)s=R[o-->3?b+N%2+(N&=~1,o=1):b]+s
return s
}

...i mniemam, ze to jeszcze nie wszystko, co mozna urwac :)))
to skrocilem "na szybciora" zmieniajac jedynie while na for'y,
bez zaglebiania sie w reszte ;) - eh, jak latwo mnie czasem podpuscic... ;)

v. :)))


VooDoo

unread,
Jan 19, 2003, 5:31:24 PM1/19/03
to
WOW


Krzyszt_off

unread,
Jan 20, 2003, 3:19:30 AM1/20/03
to
> ...i mniemam, ze to jeszcze nie wszystko, co mozna urwac :)))
> to skrocilem "na szybciora" zmieniajac jedynie while na for'y,
> bez zaglebiania sie w reszte ;) - eh, jak latwo mnie czasem podpuscic...
;)

Widze, ze sie niezle jazzy odchodzily w weekend...
Niezle mnie zaskoczyliscie z BlaTkiem, jak zwykle :>
Ja ze swojej strony chcialem tylko "wyrwac" Ci ze 3 znaki - poprzez pozbycie
sie R - ktore jest chyba srednio potrzebne - wpadles w pulapke
optymalizacji,
bo chciales miec jednoczesnie zadeklarowany s, tymczasem "normalnie" jest
krocej, co prawda split wykonuje sie za kazdym razem, ale co tam ;)

function rome(N,s,b,a,o){
for(s='',b=0,a=2;N;b++)

for(o=N%(a=7-a),N=N/a^0;o;)s='IVXLCDM'.split('')[o-->3?b+N%2+(N&=~1,o=1):b]+
s
return s
}

Krzysiek


Vax

unread,
Jan 20, 2003, 3:43:59 AM1/20/03
to

Użytkownik "Krzyszt_off" <leszek...@grube.ryby.pl> napisał w wiadomości
news:b0gb50$asn$1...@news.tpi.pl...
[...]
> wpadles w pulapke
> optymalizacji,

to nie pulapka, to nawyk ;))

> bo chciales miec jednoczesnie zadeklarowany s, tymczasem "normalnie" jest
> krocej, co prawda split wykonuje sie za kazdym razem, ale co tam ;)

no wlasnie...

najwazniejszymi przeslankami sa takie sprawy,
jak deklaracja stalych wyrazen jako zmienne,
wyciaganie co sie da poza petle, by nie krecic
jalowo zbytecznych w kazdym kroku instrukcji,
etc. etc.
powstaje (w zalozeniu) ladny algorytm,
teraz pora to zakodowac, najlepiej oszczednie w znakach...

osobna dziedzina sztuki jest kompresja objetosci kodu
kosztem jego wydajnosci - to juz raczej ciekawostka :)
(osobna dziedzina sztuki)
W zamierzchlych czasach ZX Spectrum i stacji dyskow
do tegoz z rozmiarem sektora 512 byte'ow uprawialo
sie taka sztuke dla np. BASIC'a.
Zamiast i=0 pisalo sie i=NOT PI - 0 to bylo:
'0'+#14+XXXXX gdzie 5 ostatnich byte'ow bylo reprezantacja
liczby na potrzeby spectrumowskiego arytmometru,
zas NOT PI to byly tylko dwa tokeny (po bajcie na kazdy).
analogicznie. Podobne patenty istnialy na inne liczby,
a wszytsko to po to, by np. 600 byte'ow (dwa sektory-1024)
upchnac w 512 ;)))

...no koniec archeologii

pozdrawiam - v.

PS. a to, co napisales _tez_ da sie skrocic ;)


Krzyszt_off

unread,
Jan 20, 2003, 3:59:59 AM1/20/03
to
> PS. a to, co napisales _tez_ da sie skrocic ;)

No to ostatecznie pozbywam sie tablicy - kolejne 3 znaki :>

for(s='',b=0,a=2;N;b++)
for(o=N%(a=7-a),N=N/a^0;o;)

s='IVXLCDM'.charAt(o-->3?b+N%2+(N&=~1,o=1):b)+s

Krzysiek


Krzyszt_off

unread,
Jan 20, 2003, 4:46:37 AM1/20/03
to

Zarywam kolejne 2 znaki - razem udalo mi sie "wydrzec" 8 :)

for(s=b='',a=5;N;b++,a=7-a)
for(o=N%a,N=N/a^0;o;)


s='IVXLCDM'.charAt(o-->3?b+N%2+(N&=~1,o=1):b)+s

Troche poprzestawialem kod, ale to akurat nie jest istotne,
natomiast zwroc uwage na s=b=''

Za jednym zamachem deklaruje pustego stringa, oraz inicjuje b jako 0
- co prawda to, ze b jest zerem, wychodzi dopiero przy inkrementacji:

var b
alert(b++) // kicha

b=''
alert(b++) // 1 - i o to chodzi

Vax, say You are proud of me... ;-)

Krzysiek


Vax

unread,
Jan 20, 2003, 5:56:14 AM1/20/03
to

Użytkownik "Krzyszt_off" <leszek...@grube.ryby.pl> napisał w wiadomości
news:b0gb50$asn$1...@news.tpi.pl...

[...]
skoro juz:


s='IVXLCDM'.split('')[o-->3?b+N%2+(N&=~1,o=1):b]+s

to czemu nie:

s='IVXLCDM'.charAt(o-->3?b+N%2+(N&=~1,o=1):b)+s

? ;)))

v.
PS. "cos tak czuje", ze to jeszcze nie koniec... ;)


Krzyszt_off

unread,
Jan 20, 2003, 6:04:43 AM1/20/03
to
> Vax, say You are proud of me... ;-)

Ech, lepiej nie mow (na razie) ;-(((

Krzysiek


Krzyszt_off

unread,
Jan 20, 2003, 6:16:17 AM1/20/03
to
> Zarywam kolejne 2 znaki - razem udalo mi sie "wydrzec" 8 :)

> for(s=b='',a=5;N;b++,a=7-a)
> for(o=N%a,N=N/a^0;o;)
> s='IVXLCDM'.charAt(o-->3?b+N%2+(N&=~1,o=1):b)+s

No coz, poprawiam ten kod (przy niektorych liczbach dzialal
nieprawidlowo) - dodaje jeden znak + ("nie tylko dla orlow
- toFloat") - ale i tak jest to o 1 znak mniej :)

for(s=b='',a=5;N;b++,a=7-a)
for(o=N%a,N=N/a^0;o;)

s='IVXLCDM'.charAt(o-->3?+b+N%2+(N&=~1,o=1):b)+s

> > Vax, say You are proud of me... ;-)
> Ech, lepiej nie mow (na razie) ;-(((

Teraz mozesz :>

Krzysiek


Krzyszt_off

unread,
Jan 20, 2003, 6:16:51 AM1/20/03
to
> skoro juz:
> s='IVXLCDM'.split('')[o-->3?b+N%2+(N&=~1,o=1):b]+s
>
> to czemu nie:
>
> s='IVXLCDM'.charAt(o-->3?b+N%2+(N&=~1,o=1):b)+s

Hehe, zrobilem to juz dawno :P

Krzysiek


Vax

unread,
Jan 20, 2003, 6:48:20 AM1/20/03
to

Użytkownik "Krzyszt_off" <leszek...@grube.ryby.pl> napisał w wiadomości
news:b0gg9m$38r$1...@news.tpi.pl...
[...]

> natomiast zwroc uwage na s=b=''
[...]

> Vax, say You are proud of me... ;-)

olac postincrementacje, ale...
spostrzezenie iz w np. charAt argument ''==0
jest godne podziwu :))))

pozdrawiam - v.

PS. rwiesz dalej? :))
function rome(N,s,b,a,o){
for(s=b='',a=5;N;b++,a=7-a)
for(o=N%a,N=N/a^0;o--;)s='IVXLCDM'.charAt(o&2?b+N-(N&=~1)+(o=1):b)+s
return s
}

Krzyszt_off

unread,
Jan 20, 2003, 7:02:56 AM1/20/03
to
> olac postincrementacje, ale...
...ale warto wiedziec :)

> PS. rwiesz dalej? :))
> function rome(N,s,b,a,o){
> for(s=b='',a=5;N;b++,a=7-a)
> for(o=N%a,N=N/a^0;o--;)s='IVXLCDM'.charAt(o&2?b+N-(N&=~1)+(o=1):b)+s
> return s
> }

Wynik dzialania Twojej funkcji:

I
II
IV
IV
V
VI
VII
IX
IX
X
XI
XII
XIV
XIV
XV
XVI
XVII
XIX
XIX
XX
...

Tez sie na tym nacialem, tylko w inny sposob, w jednym z moich poprzednich
postow, do ktorego zreszta wypuscilem errate. Wiec Vax, Ty tez sie popraw :P

Krzysiek


Vax

unread,
Jan 20, 2003, 7:04:00 AM1/20/03
to

Użytkownik "Vax" <v...@ircx.pl> napisał w wiadomości
news:b0gnmf$bqs$1...@news.tpi.pl...

errata - literowka, zamiast "&2" winno byc ">2"

function rome(N,s,b,a,o){
for(s=b='',a=5;N;b++,a=7-a)

for(o=N%a,N=N/a^0;o--;)s='IVXLCDM'.charAt(o>2?b+N-(N&=~1)+(o=1):b)+s
return s
}

dzieki '-' w srodku mam "toFloat" bez wymuszania nadmiarowym '+' na poczatku
;)))

v.


Vax

unread,
Jan 20, 2003, 7:07:22 AM1/20/03
to

Użytkownik "Krzyszt_off" <leszek...@grube.ryby.pl> napisał w wiadomości
news:b0go7k$gss$1...@news.tpi.pl...

> Wynik dzialania Twojej funkcji:
>
> I
> II
> IV
> IV

[...]

blednie poszlo &2 zamiast >2, "&" to wynik poszukiwania oszczednosci
gdzie indziej, nie usuniety przed wyslaniem - errata poszla przed momentem
;)

v.


Krzyszt_off

unread,
Jan 20, 2003, 9:34:58 AM1/20/03
to
IVXLCDM... Wlasnie zauwazylem, ze autorzy wielu terminow
(skrotow) zwiazanych z informatyka musieli sporo siedziec
nad cyframi rzymskimi...

XML
VIM
VXD
DLL
MCI
MDI
VCL
CLX
DVD
ICM
...

Znacie jeszcze cos (trzyliterowego)? :-)

Krzysiek


Bogdan Błaszczak

unread,
Jan 20, 2003, 10:40:31 AM1/20/03
to

Użytkownik "Vax" <v...@ircx.pl> napisał w wiadomości
news:b0gojo$kcq$1...@news.tpi.pl...

>
> Użytkownik "Vax" <v...@ircx.pl> napisał w wiadomości
> news:b0gnmf$bqs$1...@news.tpi.pl...
>
> errata - literowka, zamiast "&2" winno byc ">2"
>
> function rome(N,s,b,a,o){
> for(s=b='',a=5;N;b++,a=7-a)
> for(o=N%a,N=N/a^0;o--;)s='IVXLCDM'.charAt(o>2?b+N-(N&=~1)+(o=1):b)+s
> return s
> }

dobrze sie bawicie cooo? :)))

urywam jeden znak poprzez xorowa wersje przelacznika

function rome(N,s,b,a,o){
for(s=b='',a=5;N;b++,a^=7)


for(o=N%a,N=N/a^0;o--;)s='IVXLCDM'.charAt(o>2?b+N-(N&=~1)+(o=1):b)+s
return s
}

BlaTek
ps. i tak powstaje cos czego nikt pozniej nie rozumie, a jednak dziala
:)))))


Vax

unread,
Jan 20, 2003, 10:50:09 AM1/20/03
to

Użytkownik "Bogdan Błaszczak" <blatek@twentyfive[toDigits].pl> napisał w
wiadomości news:b0h54d$no9$1...@news.tpi.pl...
[...]

> dobrze sie bawicie cooo? :)))

yessssssss :)))))

> urywam jeden znak poprzez xorowa wersje przelacznika

E-U-RE-KA !!!
na to wlasnie czekalem, a jakos nikt nie kwestionowal
mojego a=7-a, a 111(2) az _kluje_ w oczy :)))))))))))))

> ps. i tak powstaje cos czego nikt pozniej nie rozumie, a jednak dziala
> :)))))

praca zbiorowa zrozumiala jedynie przez autorow i ok 5 postronnych osob,
ktorej analiza zajmuje duzo wiecej niz samo napisanie ;)))

ufff - v.
PS. czyzby to juz koniec? (mam jakies "niejasne" przeczucia, ze nie ;)))


Krzyszt_off

unread,
Jan 20, 2003, 5:59:30 PM1/20/03
to
> PS. czyzby to juz koniec? (mam jakies "niejasne" przeczucia, ze nie ;)))

Ha! Mam Cie!!! Teraz wszystko jasne - jesli jeszcze chcesz cos z tego
kodu wyciac, to znaczy, ze jednak jestes cyborgiem. Kamien z serca
- moge isc spokojnie spac i rano bez nerwow czytac dalej ten watek...

A tak na powaznie:
zastanawiam sie, czy zonglowac dalej tymi pileczkami, czy tez
skombinowac jakies nowe... Siedze i przerzucam bloki kodu z miejsca
na miejsce, bawie sie operatorami itp., ale ciagle to jest ten sam kod.
Moze sprobowac inaczej? Podpowiedz, Vax, czy ideal bardzo sie
rozni od obecnej wersji, czy jednak da sie bez radykalnych zmian
skrocic jeszcze ten kod?

Krzysiek

P.S.: Coder, a Ty gdzie sie podziewasz??? Juz tyle czasu ten watek
trwa, a Ciebie ani widu, ani slychu, tudziez czytu postu.


Coder

unread,
Jan 21, 2003, 6:38:31 AM1/21/03
to
> P.S.: Coder, a Ty gdzie sie podziewasz??? Juz tyle czasu ten watek
> trwa, a Ciebie ani widu, ani slychu, tudziez czytu postu.

Pan coder jest chory i lezy w lozeczku. Przy 39C nie jest w stanie sklecic
ani jednego madrego zdania...

Pozdrawiam


Krzyszt_off

unread,
Jan 21, 2003, 7:00:14 AM1/21/03
to

Zalecam dwa razy dziennie podwojna dawke operatora this oraz czeste
plukanie gardla operatorem void, a takze - w razie koniecznosci -
postinkrementacje. Acha, zapomnialbym o okladach z setTimeout.
Jak widzisz, JavaScript jest dobre na wszystko, a wiec kuruj
sie i wracaj do zywych.

Krzysiek


Vax

unread,
Jan 21, 2003, 8:02:36 AM1/21/03
to

Użytkownik "Krzyszt_off" <leszek...@grube.ryby.pl> napisał w wiadomości
news:b0hv01$hto$1...@news.tpi.pl...

> > PS. czyzby to juz koniec? (mam jakies "niejasne" przeczucia, ze nie ;)))

...a ja sie tu cholera spodziewalem zachwytow i glebszej
analizy patentu binarnego... czy _nikt_ procz Blatka
nie pamieta poprzedniej "szkolki" z zadaniem "all lights"? ;)))

tam wlasnie bylo napomkniete, ze XOR jest jednoznaczny
i odwracalny ;))
wiec procz:
C=(A*B)/C
C=(A+B)-C
czemu nie:
C=(A^B)^C (tylko calkowite, niestety ;)

a Blatek skorzystal z faktu, ze kolejnosc argumentow
przy XOR nie ma znaczenia, wobec czego
C=C^(A^B) --> C^=(A+B)

...ucial niby tylko jeden byte, ale to jedno z _najladniejszych_ ciec
w tym przykladzie :)))

a co de reszty pytan... "przerzucanie blokow kodu" to chyba eufemizm...
tu mamy do czynienia co najwyzej z zonglowaniem literkami ;))))

eh... nawet spirytusu nie da sie destylowac w nieskonczonosc,
a my juz jestesmy bardzo, bardzo blisko "absolutu"... ;)

v.


Krzyszt_off

unread,
Jan 21, 2003, 8:17:46 AM1/21/03
to
> ...a ja sie tu cholera spodziewalem zachwytow i glebszej
> analizy patentu binarnego... czy _nikt_ procz Blatka
> nie pamieta poprzedniej "szkolki" z zadaniem "all lights"? ;)))

Co to jest XOR to nie musisz mi tlumaczyc :P
Prawde mowiac, to sam nie wiem, czemu tego nie zrobilem od razu,
pomyslalem o tym, ale na mysleniu sie skonczylo, bo sie za bardzo
skoncentrowalem na reszcie, i o tamtym zapomnialem...

> eh... nawet spirytusu nie da sie destylowac w nieskonczonosc,
> a my juz jestesmy bardzo, bardzo blisko "absolutu"... ;)

No to niedlugo pijemy? ;-)

Krzysiek


Bogdan Błaszczak

unread,
Jan 21, 2003, 9:48:41 AM1/21/03
to

Użytkownik "Vax" <v...@ircx.pl> napisał w wiadomości
news:b0jgca$pv0$1...@news.tpi.pl...

[...]


> eh... nawet spirytusu nie da sie destylowac w nieskonczonosc,
> a my juz jestesmy bardzo, bardzo blisko "absolutu"... ;)

ja tam jeszcze jednego asa w rekawie trzymam... ale sie do tablicy nie
wywrywam
moze Ktos wczesniej to pokaze... choc do dosc hmm.. "ekstremalne" ciecie ;)

BlaTek


Bogdan Błaszczak

unread,
Jan 21, 2003, 10:51:43 AM1/21/03
to

Użytkownik "Krzyszt_off" <leszek...@grube.ryby.pl> napisał w wiadomości
news:b0h14v$aps$1...@news.tpi.pl...

> IVXLCDM... Wlasnie zauwazylem, ze autorzy wielu terminow
> (skrotow) zwiazanych z informatyka musieli sporo siedziec
> nad cyframi rzymskimi...
>
> XML
> VIM
> VXD
> DLL
> MCI
> MDI
> VCL
> CLX
> DVD
> ICM
> ...

LCD
CCD
DCD
DCE
DDC

jeszcze cztero
DIMM
MIDI

BlaTek


Coder

unread,
Jan 21, 2003, 1:11:51 PM1/21/03
to
> > eh... nawet spirytusu nie da sie destylowac w nieskonczonosc,
> > a my juz jestesmy bardzo, bardzo blisko "absolutu"... ;)
>
> ja tam jeszcze jednego asa w rekawie trzymam... ale sie do tablicy nie
> wywrywam
> moze Ktos wczesniej to pokaze... choc do dosc hmm.. "ekstremalne" ciecie
;)

Dawaj, suszy mnie ;))

Pozdrawiam


Vax

unread,
Jan 21, 2003, 2:31:24 PM1/21/03
to

Użytkownik "Coder" <mic...@w.pl> napisał w wiadomości
news:b0k2gj$257$1...@news.tpi.pl...
[...]

> Dawaj, suszy mnie ;))

nie przesadzaj, juz jakies 6 destylacji (wersji) temu
nadawalo sie do picia i u coniektorych moglo
powodowac zawroty glowy ;)))

v.


Bogdan Błaszczak

unread,
Jan 22, 2003, 9:58:56 AM1/22/03
to

Użytkownik "Coder" <mic...@w.pl> napisał w wiadomości
news:b0k2gj$257$1...@news.tpi.pl...

> Dawaj, suszy mnie ;))

I jak tam? Meczycie sie? Probujecie odciac chocby jeszcze jeden znak? Nie da
sie?
Chyba zabawa zbliza sie do konca :)
Ok, sprobuje odciac jeszcze... 13 znakow!!!

Jak juz mowilem, to dosyc extremalne i dziwaczne ciecia i wlasciwie mozna
sie zasatanawiac, czy warto robic cyrk dla zaoszczedzenia kilku bytow. Ale
na upartego to sie jeszcze da ;)))

Ograniczam nazwe funkcji do jednego znaku, czyli rwe trzy znaki...
Tu slysze glosy powszechnego oburzenia:
- Nie o to chodzi!!!
- To sie nie liiiiiiiiczy!!!

Dobra, ok, jedziem dalej ;)
Majac takie cos, usuwam jedna ze zmiennych lokalnych. Urywam nastepne dwa
znaki:

function r(N,b,a,o){
for(r=b='',a=5;N;b++,a^=7)
for(o=N%a,N=N/a^0;o--;)r='IVXLCDM'.charAt(o>2?b+N-(N&=~1)+(o=1):b)+r
return r
}

Zaraz, zaraz...
Skoro teraz wynik dzialania mamy tak czy inaczej w zmiennej globalnej, to
funkcja moze, ale wcale nie musi zwracac wartosci.
Usuwam nastepne 8 znakow:

function r(N,b,a,o){
for(r=b='',a=5;N;b++,a^=7)
for(o=N%a,N=N/a^0;o--;)r='IVXLCDM'.charAt(o>2?b+N-(N&=~1)+(o=1):b)+r
}

Suma sumarum 13 znakow.
A teraz, zeby nie bylo nieporozumien, sposob wywolania takiej funkcji
zamiast
wynik=r(x)

r(x);wynik=r

Wywolanie i przechwycenie wartosci - dwa znaki wiecej. Ogolny bilans 11
znakow zaoszczedzonych ;)

Dla przecietnego kodera (nie mylic z Coderem), funkcja ma jedna wade:
jednorazowka!!!
Ale dla magikow I i II stopnia, to zaden problem. Odpowiednia zonglerka
zmiennymi pozwoli Im odpalic funkcje dowolna ilosc razy :)))

pozdrawiam
BlaTek


Coder

unread,
Jan 22, 2003, 10:13:15 AM1/22/03
to
> I jak tam? Meczycie sie? Probujecie odciac chocby jeszcze jeden znak? Nie
da
> sie?
> Chyba zabawa zbliza sie do konca :)
> Ok, sprobuje odciac jeszcze... 13 znakow!!!

OK, ja w takim razie zetne z tego 10 ;).

> Jak juz mowilem, to dosyc extremalne i dziwaczne ciecia i wlasciwie mozna
> sie zasatanawiac, czy warto robic cyrk dla zaoszczedzenia kilku bytow. Ale
> na upartego to sie jeszcze da ;)))

No wlasnie ;). Rwe wszystkie new-liny i wciecia (a Outlook i tak linie
polamie):

function
r(N,b,a,o){for(r=b='',a=5;N;b++,a^=7)for(o=N%a,N=N/a^0;o--;)r='IVXLCDM'.char
At(o>2?b+N-(N&=~1)+(o=1):b)+r}

"Nie o to chodzi !"
"To sie nie liczy"

A jednak 10 bajtow mniej ;).

Pozdrawiam


Zbigniew Braniecki

unread,
Jan 22, 2003, 1:51:51 PM1/22/03
to
Bogdan Błaszczak wrote:
> Suma sumarum 13 znakow.
> A teraz, zeby nie bylo nieporozumien, sposob wywolania takiej funkcji
> zamiast
> wynik=r(x)
>
> r(x);wynik=r
>
> Wywolanie i przechwycenie wartosci - dwa znaki wiecej. Ogolny bilans 11
> znakow zaoszczedzonych ;)

Ale gubisz urode... Gdzie tu OOP?

> Dla przecietnego kodera (nie mylic z Coderem), funkcja ma jedna wade:
> jednorazowka!!!
> Ale dla magikow I i II stopnia, to zaden problem. Odpowiednia zonglerka
> zmiennymi pozwoli Im odpalic funkcje dowolna ilosc razy :)))

Tylko, ze zaglerka to kolejne bajty... Moim zdaniem to juz nic nie daje.
Uwazam, ze poprzednia wersja jest piekniejsza... Podejrzewam niesmialo,
ze Vax mnie poprze.

Ogolnie wspaniala robota chlopaki :) Gratuluje

A teraz, kiedy juz mozna chyba uznac dzielo za kompletne, pozwole sobie
na dwie personalne uwagi...

1) Ktos mial mi cos przyslac
2) Ktos moglby sie zajac tym co obiecal, a nie kastrowac niewinny kod...

Ktos wie o co mi chodzi ;p

pozdr.
Gandalf

Krzyszt_off

unread,
Jan 23, 2003, 2:54:14 AM1/23/03
to
> Wywolanie i przechwycenie wartosci - dwa znaki wiecej. Ogolny bilans 11
> znakow zaoszczedzonych ;)

BlaTku, musiales byc juz niezle zdesperowany, skoro cos takiego
wymysliles :P A tak na serio: pomysl ciekawy, mozna sobie zapisac
w zeszyciku z "patentami" - swoja droga w tym watku wyszlo ich
calkiem sporo. Podoba mi sie zwlaszcza Vaxowe N-(N&=~1), no i Twoj xor,
oraz moje s=b='' ;-) Faktycznie, niby zadanko proste, ale nasze
(chyba mamy juz prawo tak powiedziec, Vax?) rozwiazanie, choc krotkie,
zawieta tyle fajnych sztuczek... A co do Twojej ostatniej propozycji,
jednak wyglada mi to na akt desperacji, niestety, chociaz calkiem,
calkiem zgrabny :>

Krzysiek

Zbigniew Braniecki

unread,
Jan 23, 2003, 5:35:16 AM1/23/03
to
Krzyszt_off wrote:
> A co do Twojej ostatniej propozycji,
> jednak wyglada mi to na akt desperacji, niestety, chociaz calkiem,
> calkiem zgrabny :>

Mozna tez przeciez usunac to z funkcji i zaoszczedzic 13 bajtow!!!!

I znowu, lamer nie da rady z tym nic zrobic, ale profesjonalista
pozagluje i bedzie mogl tego uzywac ile razy zechce...

pozdr.
Gandalf

Vax

unread,
Jan 23, 2003, 5:46:17 AM1/23/03
to

Użytkownik "Bogdan Błaszczak" <blatek@twentyfive[toDigits].pl> napisał w
wiadomości news:b0mbec$h91$1...@news.tpi.pl...
[...]

> r(x);wynik=r

iii.... ja tam mam cos innego ;)))
ale o tym pozniej... ;)))

v.


Krzyszt_off

unread,
Jan 23, 2003, 5:52:42 AM1/23/03
to
> I znowu, lamer nie da rady z tym nic zrobic, ale profesjonalista
> pozagluje i bedzie mogl tego uzywac ile razy zechce...

Ja tam uzywam tego ile razy zechce :-)))

for(i=1;i<11;i++){a=r;r(i);document.write(r+'<br>');r=a}

Krzysiek


Vax

unread,
Jan 23, 2003, 5:48:37 AM1/23/03
to

Użytkownik "Zbigniew Braniecki" <gan...@alladyn.art.pl> napisał w
wiadomości news:b0mp9n$arc$1...@news.tpi.pl...
[...]

> Uwazam, ze poprzednia wersja jest piekniejsza... Podejrzewam niesmialo,
> ze Vax mnie poprze.

popieram :)))
(za to jako "publikacyjna" najladniejsza jest ta z "while",
moze z dodatkiem kilku sztuczek z nastepnych wersji :))

[...]

> 1) Ktos mial mi cos przyslac
> 2) Ktos moglby sie zajac tym co obiecal, a nie kastrowac niewinny kod...
>
> Ktos wie o co mi chodzi ;p

tu tez sie zgadzam ;)

v.


Bogdan Błaszczak

unread,
Jan 23, 2003, 9:23:10 AM1/23/03
to

Użytkownik "Zbigniew Braniecki" <gan...@alladyn.art.pl> napisał w
wiadomości news:b0mp9n$arc$1...@news.tpi.pl...

[...]


> Ale gubisz urode... Gdzie tu OOP?

kompresja jest?... jest
dziala?... dziala
dziekuje ;)

A tak powaznie to

> Uwazam, ze poprzednia wersja jest piekniejsza... Podejrzewam niesmialo,
> ze Vax mnie poprze.

Nie tylko Vax. Ja Cie tez popre :)))
Nie na darmo uzylem takich pojec jak: "extremalne", "dziwaczne", "cyrk", "na
upartego".
Nic tam nie zachwalalem. Pokazalem tylko pewne mozliwosci i ush.

> Ogolnie wspaniala robota chlopaki :) Gratuluje

Dzie-ku-je-my !!!

pozdr.
BlaTek


Zbigniew Braniecki

unread,
Jan 27, 2003, 7:45:32 AM1/27/03
to
Bogdan Błaszczak wrote:
> Użytkownik "Zbigniew Braniecki" <gan...@alladyn.art.pl> napisał w
> wiadomości news:b0mp9n$arc$1...@news.tpi.pl...
>
> [...]
>
>>Ale gubisz urode... Gdzie tu OOP?
>
>
> kompresja jest?... jest
> dziala?... dziala
> dziekuje ;)

No tak... Wedle zasady "Co tam potwor..." ;p

pozdr.
Gandalf

Krzyszt_off

unread,
Jan 27, 2003, 8:07:56 AM1/27/03
to
> >>Ale gubisz urode... Gdzie tu OOP?
> >
> >
> > kompresja jest?... jest
> > dziala?... dziala
> > dziekuje ;)
>
> No tak... Wedle zasady "Co tam potwor..." ;p

LOL Gandalfie, LOL x 10 :)

Krzysiek

P.S.: Vaxiu, daj juz rozwiazanie...


Vax

unread,
Jan 27, 2003, 9:24:53 AM1/27/03