Я новичок в Objective-C, поэтому я пытаюсь учиться, реализуя алгоритмы. Я выполняю поиск A* для решения задачи с 8 головоломками. Перед запуском самого алгоритма я хочу проверить, разрешима ли данная комбинация головоломок. Я уже писал этот код на C++ и Swift раньше, но у меня он не работает корректно в Objective-C. Для этого массива количество инверсий равно 7, хотя должно быть равно 0. Может быть, мне следует использовать метод [NSArray objectAtIndex:] для доступа к элементам, а затем преобразовать их в целые числа для сравнения? Я тестировал разные способы, и сравнение работает правильно. Пожалуйста, помогите мне найти ошибку.
NSArray *test = @[@1, @2, @3, @4, @5, @6, @7, @0, @8];
NSInteger inv_count = 0;
for (NSInteger i = 0; i < 8; i++) {
for (NSInteger j = i + 1; j < 9; j++) {
if (test[j] && test[i] && test[i] > test[j]) {
inv_count++;
}
}
}
NSLog(@"inv_count = %ld", (long)inv_count);
if (inv_count % 2 == 0) {
NSLog(@"Solvable.");
} else {
NSLog(@"Not solvable.");
}