Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 20.06.2020, 07:06   #71
Kvark82
Пользователь
 
Регистрация: 18.06.2020
Сообщений: 37
По умолчанию

Цитата:
Сообщение от ViktorR Посмотреть сообщение
Код:
======== RESTART: E:\Programs\WinPython\WPy64-3830\Work\Forum\task_32.py =======
INFO:pyrob:Starting task task_8_18
INFO:pyrob:Task task_8_18 finished: +
INFO:pyrob:Total: 1/1
>>>
Вы про это?
Или показать код?
Тут нет сплоеров, так что код во вложении.
PS: В своих решения, дабы получить решение я разлагаю задачу на части, которые реализую в виде функций. В данном случае обслужить вертикальные коридоры - это то.
А на Ваш код вот что пишет:

Код:
C:\Users\Пользователь\PycharmProjects\project1\venv\Scripts\python.exe C:/Users/Пользователь/Desktop/task_232.py
Traceback (most recent call last):
  File "C:/Users/Пользователь/Desktop/task_232.py", line 3, in <module>
    from pyrob.api import *
ModuleNotFoundError: No module named 'pyrob'

Process finished with exit code 1



Разобрался и запустил уже)

Последний раз редактировалось Kvark82; 20.06.2020 в 07:10.
Kvark82 вне форума Ответить с цитированием
Старый 20.06.2020, 07:25   #72
BDA
Модератор
Заслуженный модератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 5,650
По умолчанию

Цитата:
Сообщение от Kvark82 Посмотреть сообщение
Но что эта строка означает?
Цитата:
mov(r, v) Поместить значение v в регистр r
Просто передаем некое значение наблюдателю.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 20.06.2020, 08:20   #73
Kvark82
Пользователь
 
Регистрация: 18.06.2020
Сообщений: 37
По умолчанию

До тех пор, пока сверху нет стены:
если клетка закрашена, то m+1, иначе (клетка не закрашена) - закрашивай клетку. (Но почему белые клетки не закрашиваются тогда?)
Потом идем вверх. (пока не упремся в стену сверху).
Код:
    while not wall_is_above():
        if cell_is_filled():
            m += 1
        else:
            fill_cell()
        move_up(1)
Потом, если клетка закрашена, то опять m+1,
а если не закрашена, то - закрашиваем
Код:
    if cell_is_filled():
        m += 1
    else:
        fill_cell()
Потом, пока снизу не появиться стенка - идем вниз.
В итоге возвращаем сумму всех m. Для чего нам эта m?


В итоге, мы идем, пока не появится справа стенка, и
если сверху есть стенка, то закрашиваем (все закрашиваем?!!)
иначе
идем вверх и присваиваем count значение coridor, но при этом ничего не вызывваем.
Потом идем вправо.
Потом mov('ax', count)
Вот что мы делаем в последней строчке?
Kvark82 вне форума Ответить с цитированием
Старый 20.06.2020, 08:26   #74
Kvark82
Пользователь
 
Регистрация: 18.06.2020
Сообщений: 37
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Просто передаем некое значение наблюдателю.
Осталось разобраться с наблюдателем)
Kvark82 вне форума Ответить с цитированием
Старый 20.06.2020, 08:40   #75
BDA
Модератор
Заслуженный модератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 5,650
По умолчанию

Цитата:
Сообщение от Kvark82 Посмотреть сообщение
Но почему белые клетки не закрашиваются тогда?
Потому что сначала заходим в коридор, а потом уже красим.
Цитата:
Сообщение от Kvark82 Посмотреть сообщение
Для чего нам эта m?
Потому что условие требует сосчитать количество уже закрашенных и вернуть его через регистр.
Цитата:
Сообщение от Kvark82 Посмотреть сообщение
В итоге, мы идем, пока не появится справа стенка
Правильнее сказать, не в итоге, а просто мы идем, пока не появится справа стенка. Потому что функция coridor вспомогательная, а task_8_18 главная.
Цитата:
Сообщение от Kvark82 Посмотреть сообщение
все закрашиваем?!!
Не всё, а всего лишь одну клетку, в тех случаях когда сверху нет коридора.
Цитата:
Сообщение от Kvark82 Посмотреть сообщение
но при этом ничего не вызывваем.
Это не так. Каждый раз вызывается функция coridor (для каждого коридора).
Цитата:
Сообщение от Kvark82 Посмотреть сообщение
Вот что мы делаем в последней строчке?
Записываем в регистр 'ax' значение count.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 20.06.2020, 08:44   #76
ViktorR
Участник клуба
 
Регистрация: 23.10.2010
Сообщений: 1,566
По умолчанию

Цитата:
Но почему белые клетки не закрашиваются тогда?
В вертикальных коридорах нет белых клеток.
Там либо уже закрашенные, либо те, которые надо красить.
Для коридоров у меня отдельная функция, которая проверяет клетку.
Если клетка уже закрашена, то подсчитываем. m - это счётчик, который "виден" в самой функции.
Если клетка не закрашенная, то красим.
Это мы делаем на проходе вверх, пока не упрёмся в стенку сверху.
Когда упёрлись, вываливаемся из цикла. Теперь проверим эту последнюю ячейку и назад, "домой", пока не упрёмся в пол.
Цитата:
В итоге возвращаем сумму всех m. Для чего нам эта m?
Как написал выше, m - считает число клеток, которые были закрашены перед стартом задачи.
Подсчёт таких клеток и есть ответ.
Из задания видно, что бирюзовый цвет (так я его оценил) в горизонтальном коридоре только там, где нет коридора вверх. Такие клетки надо красить во всех коридорах и в горизонтальном, и вертикальных.
Цитата:
идем вверх и присваиваем count значение coridor, но при этом ничего не вызываем
coridor() - это функция, которая возвращает число квадратов, закрашенных задачей до старта робота.
В моём случае вызов
Код:
count = coridor(count)
count - это счётчик в моей программе. Передав в функцию coridor() текущее значение count, я накапливаю число закрашенных квадратов.
Это можно было бы написать и так:
Код:
count += coridor()
но при этом надо удалить параметр в вызываемой функции coridor().
На последний вопрос ответил BDA.
В задании это описано невнятно. Как он [BDA] к этому пришёл, хз.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 20.06.2020, 08:52   #77
Kvark82
Пользователь
 
Регистрация: 18.06.2020
Сообщений: 37
По умолчанию

Короче, что такое наблюдатель и счетчик надо разобраться мне. Без этого не тяну задачку.
Kvark82 вне форума Ответить с цитированием
Старый 20.06.2020, 09:01   #78
BDA
Модератор
Заслуженный модератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 5,650
По умолчанию

Ну вы же считали шаги в своем же решении 21 задачи. А тут считаем не шаги, а закрашенные клетки. Не обязательно привязываться к слову наблюдатель. Нужно просто в какое-то определённое место записать число. Число это количество закрашенных клеток, а место это "регистр ах". Если бы это была просто переменная ax, то можно было бы написать ax = count. Но у робота есть специальная команда для записи в регистр - mov.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 20.06.2020, 11:55   #79
ViktorR
Участник клуба
 
Регистрация: 23.10.2010
Сообщений: 1,566
По умолчанию

Цитата:
Короче, что такое наблюдатель и счетчик надо разобраться мне. Без этого не тяну задачку.
Дополню.
Что такое наблюдатель.
Когда вы запускаете задачу, то вам предъявляется форма, в которой движется робот.
Это генерирует не Python, а среда, которая разбирает ваши команды и отображает их действие на робота.
Эта среда анализирует ваши команды и формирует сообщение: вид робота меняется, цвет клеток меняется.
Среда проверяет правильность заданной вами последовательности команд.
В некоторых случаях среда просит предоставить ей число.
Вот эта среда и есть наблюдатель.

Что такое счётчик.
При выполнении задания нам надо подсчитать число закрашенных, до начала движения, полей.
Переменная, которая сохраняет такое число, может быть названа счётчиком.
Вы можете, представить счёты с костяшками. Как только появилось закрашенное поле костяшка вправо.
Число накопленных костяшек на счётах и надо передать среде, в которой работает ваша задача.
Ещё раз. Ваша задача работает не в чистом Питоне.
У неё есть, можно сказать, отдельная виртуальная машина, которая генерирует задания, интерпретирует команды, проверяет их правильность ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 25.06.2020, 17:36   #80
ViktorR
Участник клуба
 
Регистрация: 23.10.2010
Сообщений: 1,566
По умолчанию

Задача 30.
Попробовал несколько вариантов и решил предложить этот:
Код:
#!/usr/bin/python3

from pyrob.api import *
def dimension():
    '''
    Получить размер
    Покрасить первую строку
    '''
    move_right(1)
    m = 2
    while not wall_is_on_the_right():
        fill_cell()
        move_right(1)
        m += 1
    return m

def fill_odd(line, m):
    '''
    Красим нечётные строки
    Двигаемся влево
    line - номер строки
    m - число столбцов
    '''
    for j in range(m, 0, -1): # номер столбца
        if ((line != j) and (line != m - j + 1)):
            fill_cell() # не на диагоналях
        if j > 1: # не последняя ячейка
            move_left(1)
        else:     # красим последнюю, если не на диагоналях
            if ((line != j) and (line != m - j + 1)):
                fill_cell()

def fill_even(line, m):
    '''
    Красим чётные строки
    Двигаемся вправо
    line - номер строки
    m - число столбцов
    '''
    for j in range(1, m + 1):
        if ((line != j) and (line != m - j + 1)):
            fill_cell()
        if j < m:
            move_right(1)
        else:
            if ((line != j) and (line != m - j + 1)):
                fill_cell()

@task(delay=0.05)
def task_9_3():
    row = col = dimension() # размер
    move_down(1)            # следующая строка
    for i in range(2, row + 1): # номер строки
        if i % 2:
            fill_even(i, col)
        else:
            fill_odd(i, col)
        if i < row:         # следующая строка
            move_down(1)
    move_left(col - 1)      # на исходную позицию

if __name__ == '__main__':
    run_tasks()
Использую знание о размере квадрата и закрашиваю змейкой.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сделать непроходимые стены NIKOLAYY2 Общие вопросы Delphi 6 10.02.2015 14:51
Парсер для стены в ВК EndoCrinolog PHP 14 15.11.2012 01:44
API ВКонтакте - получить все записи стены MILLIONERR PHP 0 23.09.2012 15:52
GLScene проходимость сквозь стены beygul Помощь студентам 0 10.10.2011 18:12
C# Создание стены и флага(финиш)! ZaVyLoN Общие вопросы .NET 6 23.10.2010 16:23


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS