🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.javascript
Article #10227

Re: szkolka

#10227
From: Vax
Date: Sat, 18 Jan 2003 16:41
95 lines
3996 bytes
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.
Technical Details
Message-ID: <b0c04c$bfo$1@news.tpi.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!newsfeed.silweb.pl!newsfeed.tpinternet.pl!news.tpi.pl!not-for-mail
References: <b06bao$cp7$1@news.tpi.pl> <b07bqt$2d3$1@news.tpi.pl> <b08r07$62k$1@news.tpi.pl> <b09j6g$od1$1@news.tpi.pl> <b0b9tq$bhe$1@news.tpi.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!newsfeed.silweb.pl!newsfeed.tpinternet.pl!news.tpi.pl!not-for-mail
From: "Vax" <vax@ircx.pl>
Newsgroups: pl.comp.lang.javascript
Subject: Re: szkolka
Date: Sat, 18 Jan 2003 17:41:40 +0100
Organization: Vax
Lines: 97
Message-ID: <b0c04c$bfo$1@news.tpi.pl>
References: <b06bao$cp7$1@news.tpi.pl> <b07bqt$2d3$1@news.tpi.pl> <b08r07$62k$1@news.tpi.pl> <b09j6g$od1$1@news.tpi.pl> <b0b9tq$bhe$1@news.tpi.pl>
Reply-To: "Vax" <vax@ircx.pl>
NNTP-Posting-Host: pg170.wroclaw.cvx.ppp.tpnet.pl
X-Trace: news.tpi.pl 1042908109 11768 217.99.225.170 (18 Jan 2003 16:41:49 GMT)
X-Complaints-To: usenet@tpi.pl
NNTP-Posting-Date: Sat, 18 Jan 2003 16:41:49 +0000 (UTC)
X-Newsreader: Microsoft Outlook Express 6.00.2600.0000
X-MSMail-Priority: Normal
X-Priority: 3
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2600.0000
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit