Можете ли да ми кажете, моля!
При кой вход се чупи тази JAVA програма:
https://judge.softuni.bg/Contests/Practice/Index/1247#9
Програмата работи със всички входове които се сетих да нашиша. Ще съм ви благодарен ако ми покаете входа/ входовете при които логиката ми се чупи.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class LadyBug {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int fieldSize = Integer.parseInt(reader.readLine());
// чете ред от конзолата и го преобразува в масив от цели числа
int[] bugLine = Arrays.stream(reader.readLine().split(" "))
.mapToInt(Integer::parseInt).toArray();
// въвежда нов масив с размера на полето
int[] fieldArray = new int[fieldSize];
// поставя калинките на посочените от входа места върху полето
for (int i = 0; i < fieldArray.length; i++) {
for (int j = 0; j < bugLine.length; j++) {
if (i == bugLine[j]) {
fieldArray[i] = 1;
}
}
}
// чете команда от конзолата
String line = reader.readLine();
int index = 0;
int moves = 0;
String command = "";
// докато командиата не е Край, програмата работи
while (!line.equals("end")) {
// разделя въведената команда от потребителя и елементите поставя в масив
String[] directionArray = line.split("\\s+");
// разделя масива полувен от командата на оперативните части на програмата
index = Integer.parseInt(directionArray[0]);
command = directionArray[1];
moves = Integer.parseInt(directionArray[2]);
// проверява от какъв тип е командата
switch (command) {
// при команда дясно изпълнява кода по-долу
case "right":
if(index > fieldArray.length - 1 || index < 0){
break;
}
if (fieldArray[index] == 0) {
break;
}
if ((index + moves) > fieldArray.length - 1 || (index + moves) < 0) {
fieldArray[index] = 0;
break;
} else {
for (int i = index; i < fieldArray.length; i++) {
if (i + moves > fieldArray.length - 1 || i + moves < 0) {
fieldArray[index] = 0;
break;
} else {
if (fieldArray[i + moves] == 0) {
fieldArray[i + moves] = 1;
fieldArray[index] = 0;
break;
}
}
}
}
break;
// при команда ляво изпълнява кода по-долу
case "left":
if(index > fieldArray.length - 1 || index < 0){
break;
}
if (fieldArray[index] == 0) {
break;
}
if ((index - moves) < 0 || (index - moves) > fieldArray.length - 1) {
fieldArray[index] = 0;
break;
} else {
for (int i = index; i < fieldArray.length; i++) {
if (i - moves > fieldArray.length - 1 || i - moves < 0) {
fieldArray[index] = 0;
break;
} else {
if (fieldArray[i - moves] == 0) {
fieldArray[i - moves] = 1;
fieldArray[index] = 0;
break;
}
}
}
}
break;
}
// след като изълни командата, чете нова команда подадена от потребителя
line = reader.readLine();
}
// след команда Край, печата на конзолата резултат
for (int bug : fieldArray) {
System.out.print(bug + " ");
}
}
}
Не успях да разбера, Явно тук е проблема :))
Така. При вход 4 за брий полета имаме 4 полета - нали? Това разбирам. Тук ли бъркам?
Ако имам 4 полета и на поле с номер ( разбираме индекс ) 0 и 2 т.е. на 1-во и 3-то имаме калинки, защо калнката от 0 при движение с 2 и след това при движение с 1 излиза от масива. Ще излезе от масива ако се движи с 2 и след като засече друга калинка. Това ли егрешката? При засичане с друга калинка не трябва да търся следващата вободна позиция а да запратя калинката отново с първоначалната скорост още напред. Така би излязла от масива.
Ако намери заета позиция продължава да си прескача със същата номерация.
7
0 3 6 са заети
right 3
от 0 проверява 3 е заета скача на 6 и там заета отива 9 извън масива и остава 3 и 6 заети.
Благодаря за тестовете. В ляво цялата задача е грешна.
Ще си налягам парцалите и ще видя къде бъркам.