//println("Введите число строк n(0<n<=10^3) и число столбцов m(0<m<=10^3)")
val str = Array(1, { r -> readLine().toString() })
var (n, m) = str[0]!!.split(' ')
// print(n.toInt() + m.toInt())
println("Введите координаты начала в лабиринте и финиша (выхода из него) 0<=Sn,Fn<n; 0<=Sm,Fm<m")
var tor = Array(1, { z -> readLine().toString() })
var (x, y, x1, y1) = tor[0]!!.split(' ')
var x2: Int = x.toInt()
var y2: Int = y.toInt()
var w: String = null.toString()
var w1: String = null.toString()
// var by lazy{ tx: Int}
// fun tx(lazy: Int) = x2
//println("$x+$y+$x1+$y1")
// println("Введите построчно описание клеток поля: 0 - есть проход, 1 - стена") var torus = Array(n.toInt(), { c -> readLine().toString() })
var v = torus[i].split(' ').toTypedArray()
var array = arrayOf<Int>()
for (j in 0..m.toInt() - 1) {
array += v[j].toInt()
}
torus2M[i] = array
}
var route = arrayOf<String>()
fun leftHandRuleL(w: String) {
if (w != null.toString() && w == "W") {
var k = 1
for (k in 1..m.toInt()) {
if (w1 != null.toString()) {
var w = w1
}
var tx = x2 + 1
var tx3 = x2 - 1
var ty = y2 - k
if (ty < 0) {
ty = m.toInt() - abs(y2 - k).toInt()
}
var ty1 = ty + 1
if (ty1 > m.toInt() - 1) {
ty1 = (ty + 1) - m.toInt()
}
var ty3 = ty + 2
if (ty3 > m.toInt() - 1) {
ty3 = (ty + 2) - m.toInt()
}
if (torus2M[tx][ty1] != 1) {
route += "S"
x2 = tx
y2 = ty1
w1 = "S"
return
} else if (torus2M[x2][ty] != 1) {
route += "W" // проверка на окончание if (x2 == x1.toInt() && ty == y1.toInt()) {
y2 = ty
return
}
continue
} else if (torus2M[tx3][ty1] != 1) {
route += "N"
x2 = tx3
w1 = "N"
return
} else {
route += "E"
y2 = ty3
w1 = "E"
return
}
}
}
}
fun leftHandRuleR(w: String) {
var k = 1
if (w != null.toString() && w == "E") {
for (k in 1..m.toInt()) {
if (w1 != null.toString()) {
var w = w1
}
var tx = x2 - 1
var tx3 = x2 + 1
var ty = y2 + k
if (ty > m.toInt() - 1) {
ty = (y2 + k) - m.toInt()
}
var ty1 = ty - 1
if (ty1 < 0) {
ty1 = m.toInt() - abs(ty - 1).toInt()
}
var ty3 = ty - 2
if (ty3 < 0) {
ty3 = m.toInt() - abs(ty - 2).toInt()
}
if (torus2M[tx][ty1] != 1) {
route += "N"
x2 = tx
w1 = "N"
return
} else if (torus2M[x2][ty] != 1) {
route += "E" // проверка на окончание if (x2 == x1.toInt() && ty == y1.toInt()) {
y2 = ty
return
}
continue
} else if (torus2M[tx3][ty1] != 1) {
route += "S"
x2 = tx3
w1 = "S"
return
} else {
route += "W"
y2 = ty3
w1 = "W"
return
}
}
}
}
fun leftHandRuleV(w: String) {
var k = 1
if (w != null.toString() && w == "N") {
for (k in 1..n.toInt()) {
if (w1 != null.toString()) {
var w = w1
}
var tx = x2 - k
if (tx < 0) {
tx = n.toInt() - abs(x2 - k).toInt()
}
var tx1 = tx + 1
if (tx1 > m.toInt() - 1) {
tx1 = (tx + 1) - n.toInt()
}
var tx3 = tx + 2
if (tx3 > m.toInt() - 1) {
tx3 = (tx + 2) - n.toInt()
}
var ty = y2 - 1
var ty3 = y2 + 1
if (torus2M[tx1][ty] != 1) {
route += "W"
y2 = ty
w1 = "W"
return
} else if (torus2M[tx][y2] != 1) {
route += "N" // проверка на окончание if (tx == x1.toInt() && y2 == y1.toInt()) {
x2 = tx
return
}
continue
} else if (torus2M[tx1][ty3] != 1) {
route += "E"
y2 = ty3
w1 = "E"
return
} else {
route += "S"
x2 = tx3
w1 = "S"
return
}
}
}
}
fun leftHandRuleD(w: String) {
var k = 1
if (w != null.toString() && w == "S") {
for (k in 1..n.toInt()) {
if (w1 != null.toString()) {
var w = w1
}
var tx = x2 + k
if (tx > n.toInt() - 1) {
tx = (x2 + k) - n.toInt()
}
var tx1 = tx - 1
if (tx1 < 0) {
tx1 = m.toInt() - abs(tx - 1).toInt()
}
var tx3 = tx - 2
if (tx3 < 0) {
tx3 = m.toInt() - abs(tx - 2).toInt()
}
var ty = y2 + 1
var ty3 = y2 - 1
if (torus2M[tx1][ty] != 1) {
route += "E"
y2 = ty
w1 = "E"
return
}
}
}
do {
if (w == null.toString()) {
w = "W"
} // проверка на окончание if (x2 == x1.toInt() && y2 == y1.toInt()) {
break
} //движение по направлениям:
// влево
if (w1 != null.toString()) {
w = w1
}
if (w == "W") {
leftHandRuleL(w)
}
if (w1 != null.toString()) {
w = w1
}
if (w == "S") {
leftHandRuleD(w)
}
if (w1 != null.toString()) {
w = w1
}
if (w == "N") {
leftHandRuleV(w)
}
if (w1 != null.toString()) {
w = w1
}
if (w == "E") {
leftHandRuleR(w)
}
} while (x2 != x1.toInt() || y2 != y1.toInt())
var z: String = route.contentToString() println("Описание пути выхода $z где E - вправо, W - влево, N - вверх, S - вниз")
}
Подписки НЕТ!
Поиск необходимой информации осуществляется в разделах Главного меню по ссылкам.
Уважая чужой опыт, считаю ОБЯЗАТЕЛЬНЫМ наличие «Обратной связи»:
Права на материалы, размещенные на сайте, принадлежат Автору.
Все права защищены и охраняются законом.
При использовании материалов с сайта ссылка на него обязательна.