Wektory, i ruch w czterech kierunkach

Wektory, i ruch w czterech kierunkach
adams0
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 333
0

Cześć!

Mam dwie tablice [a, b] i [x, y]* - gdzie a,b,x,y są liczbami całkowitymi, nieujemnymi.*
Które oznaczają położenia kwadratów na dwuwymiarowej planszy.
Potrzebuję napisać funkcję która zwróci true tylko
jeśli jeden do drugiego jest w relacji +1 na północ, południe, zachód , wschód to znaczy:
a+1= x; albo:
a-1 = x; albo:
b+1 = y albo:
b-1 = y
Jeśli wyłącznie jeden z podanych warunków zwraca true to funkcja powinna zwrócić** true**
W pozostałych wypadkach false;

Czy wiecie jak można to napisać bez dużej ilości if'ów ?

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
0

Coś takiego może?

Kopiuj
for delta in [ -1, +1 ]
  if a + delta == x || b + delta == y
    return true

return false

Choć IMO jest to porównywalnie czytelne do prostego:

Kopiuj
if a - 1 == x || b - 1 == y
  return true

if a + 1 == x || b + 1 == y
  return true

return false

Czy nawet:

Kopiuj
return a - 1 == x || a + 1 == x
    || b - 1 == y || b + 1 == y
adams0
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 333
0

Niestety nie o to mi chodziło. Te funkcje dopuszczają ruch po przekątnej.
Jeśli np. a+1 = x && b+1 = y to powinno zwracać false.

Freja Draco
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3394
3
Kopiuj
wynik = (a+1==x) + (a-1==x) + (b+1==y) + (b-1==y);
if (wynik==1) ...
LukeJL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8487
2

może coś takiego?

Kopiuj
Math.abs(x - a) + Math.abs(y - b) == 1

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.