It looks like you're new here. If you want to get involved, click one of these buttons!

- 141.8K All Categories
- 104.8K Programming Languages
- 6.4K Assembler Developer
- 1.9K Basic
- 39.9K C and C++
- 4.3K C#
- 7.9K Delphi and Kylix
- 4 Haskell
- 9.6K Java
- 4.1K Pascal
- 1.3K Perl
- 2K PHP
- 523 Python
- 37 Ruby
- 4.3K VB.NET
- 1.6K VBA
- 20.8K Visual Basic
- 2.6K Game programming
- 312 Console programming
- 89 DirectX Game dev
- 1 Minecraft
- 110 Newbie Game Programmers
- 2 Oculus Rift
- 8.9K Applications
- 1.8K Computer Graphics
- 732 Computer Hardware
- 3.5K Database & SQL
- 524 Electronics development
- 1.6K Matlab
- 628 Sound & Music
- 257 XML Development
- 3.3K Classifieds
- 198 Co-operative Projects
- 189 For sale
- 189 FreeLance Software City
- 1.9K Jobs Available
- 601 Jobs Wanted
- 201 Wanted
- 2.9K Microsoft .NET
- 1.7K ASP.NET
- 1.1K .NET General
- 3.3K Miscellaneous
- 5 Join the Team
- 0 User Profiles
- 353 Comments on this site
- 62 Computer Emulators
- 2.1K General programming
- 187 New programming languages
- 612 Off topic board
- 177 Mobile & Wireless
- 51 Android
- 124 Palm Pilot
- 335 Multimedia
- 151 Demo programming
- 184 MP3 programming
- 0 Bash scripts
- 22 Cloud Computing
- 53 FreeBSD
- 1.7K LINUX programming
- 368 MS-DOS
- 0 Shell scripting
- 320 Windows CE & Pocket PC
- 4.1K Windows programming
- 906 Software Development
- 408 Algorithms
- 68 Object Orientation
- 89 Project Management
- 90 Quality & Testing
- 250 Security
- 7.6K WEB-Development
- 1.8K Active Server Pages
- 61 AJAX
- 2 Bootstrap Themes
- 55 CGI Development
- 19 ColdFusion
- 224 Flash development
- 1.4K HTML & WEB-Design
- 1.4K Internet Development
- 2.2K JavaScript
- 35 JQuery
- 290 WEB Servers
- 152 WEB-Services / SOAP

zydgyy
Member Posts: **13**

in Algorithms

As the following picture:

It's a circle that is consist of the numbers,how can i simply calculate the distance between some tow numbers,for example,5 and 8 is 3;22 and 2 is 4 ???????????

0 1 2 3 4 5

23 6

22 7

21 8

20 9

19 10

18 11

17 16 15 14 13 12

It's a circle that is consist of the numbers,how can i simply calculate the distance between some tow numbers,for example,5 and 8 is 3;22 and 2 is 4 ???????????

0 1 2 3 4 5

23 6

22 7

21 8

20 9

19 10

18 11

17 16 15 14 13 12

Terms of use / Privacy statement / Publisher: Lars Hagelin

Programmers Heaven articles / Programmers Heaven files / Programmers Heaven uploaded content / Programmers Heaven C Sharp ebook / Operated by CommunityHeaven LLC

© 1997-2015 Programmersheaven.com - All rights reserved.

## Comments

39lambda a, b, size: min((a - b) % size, (b - a) % size)

where a and b are inputs and size is the number of elements (24 for this case).

The slightly longer answer is

SIZE = 24

def dis(a, b):

d1 = (a - b) % size

d2 = (b - a) % size

return min(d1, d2)

And, if you don't like modular arithmetic,

SIZE = 24

def dis2(a, b):

high = max(a, b)

low = min(a, b)

dis1 = high - low

dis2 = SIZE - dis1

return min(dis1, dis2)

That one only works for values of a and b in range(0, 24), but it saves you the trouble of having to understand modular arithmetic.

13SIZE = 24

def dis(a, b):

d1 = (a - b) % size

d2 = (b - a) % size

return min(d1, d2)

-----------------------

It dosen't work:

a=22,b=2

d1=(22-2)%24 = 20

d2=(2-22)%24 = -20

min(d1,d2)=20 is not the right answer 4?!!!!!??!!?!

39-20 % 24 = 4

Bear in mind that % returns the remainder of the division of its arguments.

1339-20 % 24 is equivalent to -20 mod 24 (in psuedo code).

If you are questioning the math behind it, here is the complicated answer: http://en.wikipedia.org/wiki/Modular_arithmetic

Consider:

52 % 24 = 4

28 % 24 = 4

4 % 24 = 4

-20 % 24 = 4

52 = 2 * 24 +4

28 = 1 * 24 + 4

4 = 0 * 24 + 4

-20 = -1 * 24 + 4