на главную
об игре
Robo Instructus 16.07.2019

Обмен алгоритмами и обсуждение

Приветствую всех интересующихся. Предлагаю в данной теме делиться своими наработками, мнениями, идеями по данной игре.
Поделюсь своими...

Уровень 1 "Hello, Robo"("Привет, Робо")

Спойлер

robo_forward()
robo_left()
robo_forward()
robo_forward()
robo_forward()
robo_left()
robo_forward()
robo_left()
robo_forward()

Статистика:
Время (мс): 3525
Кол-во фраз: 9
Общее кол-во фраз: 9

Комментарии: 12
Ваш комментарий

Уровень 2 "Keep Going!"("Так держать!")

Спойлер

loop
robo_forward()
robo_left()
robo_forward()

Статистика:
Время (мс): 18800
Кол-во фраз: 4
Общее кол-во фраз: 52

0

Уровень 3 "Look Before You Leap"("Смотри, куда идёшь")

Спойлер

robo_forward()
if robo_scan() is -1
robo_left()
robo_forward()

Статистика:
Время (мс): 2625
Кол-во фраз: 6
Общее кол-во фраз: 11

0

Уровень 4 "Testing Ground"("Учебные полигоны")

Спойлер

loop
if robo_scan() >= 1
robo_forward()
else
robo_left()

Статистика:
Время (мс): 44900
Кол-во фраз: 7
Общее кол-во фраз: 294

0

Уровень 5 "Use Your Powers Wisely"("Уходя, гасите свет") || Вариант 1

Спойлер

loop
var scan=robo_scan()
if scan >= 1
robo_forward()
if scan is 10
if robo_use() is 0
robo_use()
else
robo_left()

Статистика:
Время (мс): 119550
Кол-во фраз: 13
Общее кол-во фраз: 867

0

Уровень 5 "Use Your Powers Wisely"("Уходя, гасите свет") || Вариант 2

Спойлер

robo_left()
if robo_scan() is -1
robo_left()
robo_left()
robo_forward()
robo_left()
robo_forward()
robo_forward()
if robo_use() is 0
robo_use()
robo_left()
robo_forward()
robo_forward()
robo_forward()
if robo_scan() is -999
robo_left()
robo_left()
robo_forward()
robo_forward()
if robo_scan() is -999
robo_left()
robo_forward()
robo_forward()
robo_left()
robo_forward()
robo_forward()
robo_left()
robo_forward()
robo_use()
robo_left()
robo_left()
robo_forward()
robo_left()
robo_forward()
robo_forward()
robo_left()
robo_forward()
robo_left()
robo_forward()
robo_forward()
else
robo_left()
robo_forward()
robo_forward()
robo_left()
robo_forward()
robo_forward()
robo_left()
robo_forward()
robo_left()
robo_forward()
robo_left()
robo_forward()
robo_forward()
robo_left()
robo_forward()
robo_forward()
robo_left()
robo_forward()
robo_use()
robo_left()
robo_left()
robo_forward()
robo_forward()
robo_left()
robo_forward()
robo_forward()
robo_left()
robo_forward()
robo_forward()
robo_forward()
robo_forward()
robo_left()
robo_forward()
robo_forward()
robo_left()
robo_forward()
robo_left()
robo_forward()

Статистика:
Время (мс): 42150
Кол-во фраз: 87
Общее кол-во фраз: 122

0

Уровень 6 "Satnav To Safety"("Безопасная навигация")

Спойлер

var Secur_Loc_ID_Save = 0
var Scan = 0
loop
Scan=robo_scan()
if Scan > 0
robo_forward()
if Scan is 11
#if Secur_Loc_ID_Save is 0
Secur_Loc_ID_Save = robo_use()
#if Scan is 10
#if robo_use() is 0
#robo_use()
else if Secur_Loc_ID_Save is not 0
if Scan is -999
if robo_forward_location() is Secur_Loc_ID_Save
robo_forward()
else
robo_left()

else
robo_left()

Статистика:
Время (мс): 42975
Кол-во фраз: 22
Общее кол-во фраз: 531

0

Уровень 7 "Gatehouse"("Врата")

Спойлер

var Secur_Loc_ID_Save = 0
var Scan = 0
loop
Scan=robo_scan()
if Scan > 0
robo_forward()
if Scan is 11
if Secur_Loc_ID_Save is 0
Secur_Loc_ID_Save = robo_use()
if Scan is 10
if robo_use() is 0
robo_use()
else if Scan is -999
if Secur_Loc_ID_Save is not 0
if robo_forward_location() is Secur_Loc_ID_Save
robo_forward()
Secur_Loc_ID_Save = 0
else
robo_left()
else
robo_left()

else
robo_left()

Статистика:
Время (мс): 138175
Кол-во фраз: 33
Общее кол-во фраз: 1891

0

Уровень 8.1 "The Ring"("Кольцо") || Вариант 1

Спойлер

var Line_Type_Now
var Loop_Count_1
var Loop_Count_2
var Loop_Count_End_1
var Step_Type
var Step_Type_Next
var Step_Count = 0
var Flag_1=0

loop
for Line_Type_Now in 4,3,0,2,0,2,0,1
if Flag_1 is not 0
if Line_Type_Now is 4
continue
if Line_Type_Now is 3
continue

#БШ_1 - блок шагов 1-ого типа ( 1-ый субблок (первый по умолчанию): robo_forward() + 2-ой субблок: robo_forward() + robo_left() ); БШ_1.1 - 1-ый субблок 1-ого типа блока шагов и т.д. и т.п.
loop
if Line_Type_Now is 0 #Transition Zone (Зона перехода: <БШ_1.2(1шт.)> - 1 раз подряд)
Loop_Count_End_1 = 1*1
Step_Type = 2
break
if Line_Type_Now is 1 #Short Line (Короткая линия: <БШ_1(2 шт.)> - 1 раз подряд)
Loop_Count_End_1 = 2*2
Step_Type = 1
break
if Line_Type_Now is 2 #Long Line (Длинная линия: <БШ_1(3 шт.)> - 2 раза подряд)
Loop_Count_End_1 = 2*3
Step_Type = 1
break
if Line_Type_Now is 3 #Second Step (Подготовка к закольцованному перемещению: <БШ_1(1 шт.)> - 1 раз подряд)
Loop_Count_End_1 = 2*1
Step_Type = 1
break
if Line_Type_Now is 4 #First Step (Перемещение в кольцевую зону: <БШ_1.1(1шт.)> - 1 раз подряд)
Loop_Count_End_1 = 1*1
Step_Type = 1
break

Loop_Count_1 = 1
while Loop_Count_1 <= Loop_Count_End_1
if Step_Type is 1
robo_forward()
Step_Type_Next = 2
else
robo_forward()
robo_left()
Step_Type_Next = 1
Step_Count += 1
if Step_Count is 9
robo_left()
if robo_scan() > 0
robo_forward()
else
for Loop_Count_2 in 1,2
robo_left()
if Step_Count is 17
for Loop_Count_2 in 1,2
robo_left()
if robo_scan() > 0
robo_forward()
else
robo_left()
if Step_Count is 26
for Loop_Count_2 in 1,2
robo_left()
robo_forward()
if robo_scan() > 0
robo_forward()
else
for Loop_Count_2 in 1,2
robo_left()
for Loop_Count_2 in 1,2
robo_forward()
robo_left()
if Step_Count is 34
for Loop_Count_2 in 1,2
robo_left()
robo_forward()
if robo_scan() > 0
robo_forward()
#else
#for Loop_Count_2 in 1,2
#robo_left()
#robo_forward()
Step_Type = Step_Type_Next
Loop_Count_1 += 1
Flag_1 = 1

Статистика:
Время (мс): 66475
Кол-во фраз: 100
Общее кол-во фраз: 2277

0

Уровень 8.1 "The Ring"("Кольцо") || Вариант 2

Спойлер

var Count = 0
var Scan

loop
if Count is 94
robo_left()
Scan = robo_scan()
Count += 1
if Scan > 0
robo_forward()
else
robo_left()

Статистика:
Время (мс): 216375
Кол-во фраз: 12
Общее кол-во фраз: 3031

P.S. Данный вариант создан не мной, а найден в сети, но, думаю, он пришёл бы на ум почти любому...
P.P.S. Источник:

Спойлер
0

Уровень 8.2 "Sense Of Direction"("Чувство направления") || Вариант 1

Спойлер

var Scan_Type = 0
var Scan_Type_12_Direction = 0
var Cell_Type_Now
var Cell_Type_Following
var Cell_Side_Num_Now
var Cell_Side_Num_Following
var Cell_Side_Num_Safety = 0
var Robo_Move_Type

Cell_Type_Now = 1
Cell_Side_Num_Now = 3
Robo_Move_Type = 0

loop
if Robo_Move_Type is not 0
loop
if Robo_Move_Type is 1 #robo_forward()
#robo_forward()
if Cell_Type_Now is 1 #1-левая сторона; 2-правая сторона; 3-верхняя сторона
Cell_Type_Following = 2
if Cell_Side_Num_Now is 1
Cell_Side_Num_Following = 1
break
if Cell_Side_Num_Now is 2
Cell_Side_Num_Following = 4
break
if Cell_Side_Num_Now is 3
Cell_Side_Num_Following = 2
break
if Cell_Type_Now is 2 #1-левая сторона; 2-правая сторона; 4-нижняя сторона
Cell_Type_Following = 1
if Cell_Side_Num_Now is 1
Cell_Side_Num_Following = 3
break
if Cell_Side_Num_Now is 2
Cell_Side_Num_Following = 2
break
if Cell_Side_Num_Now is 4
Cell_Side_Num_Following = 1
break

if Robo_Move_Type is 2 #robo_left()
#robo_left()
if Cell_Type_Now is 1 #1-левая сторона; 2-правая сторона; 3-верхняя сторона
Cell_Type_Following = 1
if Cell_Side_Num_Now is 1
Cell_Side_Num_Following = 2
break
if Cell_Side_Num_Now is 2
Cell_Side_Num_Following = 3
break
if Cell_Side_Num_Now is 3
Cell_Side_Num_Following = 1
break
if Cell_Type_Now is 2 #1-левая сторона; 2-правая сторона; 4-нижняя сторона
Cell_Type_Following = 2
if Cell_Side_Num_Now is 1
Cell_Side_Num_Following = 4
break
if Cell_Side_Num_Now is 2
Cell_Side_Num_Following = 1
break
if Cell_Side_Num_Now is 4
Cell_Side_Num_Following = 2
break

Cell_Type_Now = Cell_Type_Following
Cell_Side_Num_Now = Cell_Side_Num_Following


if Scan_Type_12_Direction is 0
Scan_Type = robo_scan()
if Scan_Type > 0
robo_forward()
Robo_Move_Type = 1
if Scan_Type is 12
Scan_Type_12_Direction = robo_use()
else
if Scan_Type is -999
if Cell_Side_Num_Safety is 1
robo_forward()
robo_left()
Robo_Move_Type = 2
else
loop
if Scan_Type_12_Direction is 1
if Cell_Side_Num_Now is 3
Cell_Side_Num_Safety = 1
Scan_Type_12_Direction = 0
Robo_Move_Type = 0
break
else
robo_left()
Robo_Move_Type = 2
break
if Scan_Type_12_Direction is 2
if Cell_Side_Num_Now is 2
Cell_Side_Num_Safety = 1
Scan_Type_12_Direction = 0
Robo_Move_Type = 0
break
else
robo_left()
Robo_Move_Type = 2
break

Статистика:
Время (мс): 25225
Кол-во фраз: 109
Общее кол-во фраз: 1086

0

Уровень 8.2 "Sense Of Direction"("Чувство направления") || Вариант 2

Спойлер

var Scan_Type
var Loop_Count

Scan_Type = robo_scan()
if Scan_Type is 1
robo_forward()
robo_left()
Scan_Type = robo_scan()
if Scan_Type is 12
for Loop_Count in 1,2
robo_forward()
else
for Loop_Count in 1,2
robo_left()
for Loop_Count in 1,2
for Loop_Count in 1,2
robo_forward()
robo_left()
robo_forward()
robo_left()
robo_forward()
else
for Loop_Count in 1,2
robo_forward()
robo_left()
robo_forward()

Статистика:
Время (мс): 11600
Кол-во фраз: 27
Общее кол-во фраз: 62

0

На данный момент не играю, но буду очень благодарен тому, кто подскажет универсальный принцип определения стороны правильного многоугольника (в данном случае - равносторонний треугольник) при его смене (перемещение) на обратную ему фигуру с учётом наличия/отсутствия данных о начальной позиции. На данный момент разработал сложный код из множества простых функций для решения данной задачи, но он, на мой взгляд, не оптимален, к тому же ещё и не функционален ввиду отсутствия необходимой информации по взаимодействию с переменными типа "массив".

0