fork(5) download
  1. #include <stdio.h>
  2.  
  3. #define ABS(a) ({ typeof (a) _a = (a); _a > 0 ? _a : -_a; })
  4.  
  5. int movesRequired(int A, int B) {
  6. int X = 0, Y = 0;
  7. int count = 0;
  8. if (!(((A-X) % 2) ^ ((Y-B) % 2)))
  9. return -1;
  10. while (X != A && Y != B) {
  11. int distX = A-X;
  12. int distY = B-Y;
  13. if (ABS(distX) > ABS(distY)) {
  14. X += distX>0?2:-2;
  15. Y += distY>0?1:-1;
  16. } else {
  17. X += distX>0?1:-1;
  18. Y += distY>0?2:-2;
  19. }
  20. count++;
  21. }
  22. return count;
  23. }
  24.  
  25. int knightsDistance(int x, int y) {
  26. int t, delta, moves;
  27.  
  28. if (x < y) {
  29. t = x;
  30. x = y;
  31. y = t;
  32. }
  33.  
  34. // 0 <= y <= x
  35. delta = x - y;
  36. if (y > delta) {
  37. moves = delta + 2 * ((y - delta) / 3);
  38. } else {
  39. moves = delta - 2 * ((delta - y) / 4);
  40. }
  41. return moves;
  42. }
  43.  
  44. int main(void) {
  45. int a, b;
  46. for (a = 0; a < 10; a++) {
  47. for (b = a; b >= 0; b--) {
  48. printf("(%d,%d) is Alec %d KD %d\n", a, b,
  49. movesRequired(a,b), knightsDistance(a,b));
  50. }
  51. }
  52. return 0;
  53. }
  54.  
Success #stdin #stdout 0s 2248KB
stdin
Standard input is empty
stdout
(0,0) is Alec -1   KD 0
(1,1) is Alec 1   KD 0
(1,0) is Alec 0   KD 1
(2,2) is Alec -1   KD 0
(2,1) is Alec 1   KD 1
(2,0) is Alec -1   KD 2
(3,3) is Alec 2   KD 2
(3,2) is Alec 2   KD 1
(3,1) is Alec 1   KD 2
(3,0) is Alec 0   KD 3
(4,4) is Alec -1   KD 2
(4,3) is Alec 2   KD 1
(4,2) is Alec -1   KD 2
(4,1) is Alec 1   KD 3
(4,0) is Alec -1   KD 2
(5,5) is Alec 3   KD 2
(5,4) is Alec 3   KD 3
(5,3) is Alec 3   KD 2
(5,2) is Alec 2   KD 3
(5,1) is Alec 1   KD 4
(5,0) is Alec 0   KD 3
(6,6) is Alec -1   KD 4
(6,5) is Alec 4   KD 3
(6,4) is Alec -1   KD 2
(6,3) is Alec 3   KD 3
(6,2) is Alec -1   KD 4
(6,1) is Alec 1   KD 3
(6,0) is Alec -1   KD 4
(7,7) is Alec 5   KD 4
(7,6) is Alec 4   KD 3
(7,5) is Alec 4   KD 4
(7,4) is Alec 4   KD 3
(7,3) is Alec 3   KD 4
(7,2) is Alec 2   KD 5
(7,1) is Alec 1   KD 4
(7,0) is Alec 0   KD 5
(8,8) is Alec -1   KD 4
(8,7) is Alec 5   KD 5
(8,6) is Alec -1   KD 4
(8,5) is Alec 4   KD 3
(8,4) is Alec -1   KD 4
(8,3) is Alec 3   KD 5
(8,2) is Alec -1   KD 4
(8,1) is Alec 1   KD 5
(8,0) is Alec -1   KD 4
(9,9) is Alec 6   KD 6
(9,8) is Alec 6   KD 5
(9,7) is Alec 5   KD 4
(9,6) is Alec 5   KD 5
(9,5) is Alec 5   KD 4
(9,4) is Alec 4   KD 5
(9,3) is Alec 3   KD 6
(9,2) is Alec 2   KD 5
(9,1) is Alec 1   KD 6
(9,0) is Alec 0   KD 5