Jump to content

Jautājums par starpības atrašanu starp diviem skaitļiem ar JS


J.Reinis
 Share

Recommended Posts

Tikko paziņa, kas kodē sev interneta bodei bilžu karuseli atsūtīja interesantu jautājumu par JavaScript kodēšanu, ar ko gribēju padalīties - pievienoju arī bildīti, lai ilustrētu problēmu.

 

post-98258-0-04509200-1404215557.jpg

 

Iedomājies bilžu karuseļa animēšanas funkciju, kurai tiek padotas divas vērtības - sākuma un beigu pozīcijas:

function carouselDifference(startpos,endpos) { .. }

Uzdevums ir atrast mazāko pozīciju skaitu starp dotajām vērtībām, BET pieņemot, ka kopā ir tikai sešpadsmit pozīcijas, un viņas it kā ir izvietotas aplī (kā bildē).
Tātad, attiecīgi - ja tiek padotas sekojošas sākuma un beigu pozīcijas, tad rezultāts sanāktu:

 

(1,4) = 3
(1,9) = 8
(1, 14) = 3
(1, 10)  = 7

 

No sākuma iešāvās prātā vienkāršākais risinājums - pārdefinēt, ka pozīcijas virs 9 iet sarūkošā secībā. Attiecīgi

function carouselDifference(startpos,endpos) {
      if( endpos ==='10') endpos = 8;
      if( endpos ==='11') endpos = 7;
      if( endpos ==='12') endpos = 6;
      if( endpos ==='13') endpos = 5;
      if( endpos ==='14') endpos = 4;
      if( endpos ==='15') endpos = 3;
      if( endpos ==='16') endpos = 2;

var duration = (startpos - endpos);
animateCarousel(duration);
}

Bet tas, protams, nestrādā ja sākumpozīcija nav 1, un darbojas tikai tad, ja ir zināms kopējais bilžu skaits.

Kādam ir kāds labāks piedāvājums?


===============

Update: 

 

Cits paziņa esot piedāvājis vienkāršu un elegantu risinājumu

steps (a, b) {
 val1 = b - a
 val2 = 16 + a - b

 return val1 > val2 ? val1 : val2
}

Varbūt, intereses pēc, kādam vēl kāda neordināra ideja kā pieiet šai problēmai? :)

post-98258-0-04509200-1404215557_thumb.jpg

Labots - J.Reinis
Link to comment
Share on other sites

Tas "neordinārais" risinājums arī ir efektīvākais.

  • Patīk 2
Link to comment
Share on other sites

Izveido kontu, vai pieraksties esošajā, lai komentētu

Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas

Izveidot jaunu kontu

Piereģistrējies un izveido jaunu kontu, tas būs viegli!

Reģistrēt jaunu kontu

Pierakstīties

Jums jau ir konts? Pierakstieties tajā šeit!

Pierakstīties tagad!
 Share

×
×
  • Izveidot jaunu...