Здравствуйте уважаемые посетители VGTimes.Ru. Сегодня мы продолжим разбирать прохождение головоломки Human Resource Machine. Поскольку игра сложная, но интересная, наверняка данный гайд будет полезен.
Посмотреть прохождение Human Resource Machine можно и в других материалах нашего сайта:
Сегодня мы разберем следующие уровни:
Не будем откладывать дело в долгий ящик и сразу перейдем к гайду по прохождению Human Resource Machine. Поскольку задачи теперь будут более высокого уровня, некоторые из них имеют большое решение. Мы склеили их на одном скриншоте, чтобы было удобнее, так что просто будьте внимательнее.
Задача: возьмите ДВЕ вещи из ВВОДА и ВЫВЕДИТЕ только НАИБОЛЬШУЮ. Если они равны, то выведите любую из них. Это очень интересный уровень, пройти который с первого раза может быть, и не получится, но стоит перебрать варианты. Не получится — решение ниже:
Смотрим небольшую заставку и переходим к следующему заданию, а точнее вилке заданий. Но мы сначала пройдем факультативное (слева от линии).
Задача: для каждых ДВУХ вещей, подаваемых на ВВОД: отправьте 0 на ВЫХОД, если они имеют одинаковый знак (оба положительны или отрицательны); отправьте 1 на ВЫХОД, если они имеют различные знаки. Также очень интересный уровень, над которым в первый раз придется хорошенько поразмыслить.
Решение же задачи на следующем скриншоте:
Возвращаемся к основной ветке заданий (справа от линии).
Задача: отправьте каждую вещь из ВВОДА в ВЫВОД. Однако, если число отрицательное, сначала избавьтесь от минуса. А вот у этой задачи, несмотря на всю простоту, есть два решения, а не одно. Чтобы победить в режиме «скорость», придется сделать 9 команд:
Второй вариант, рассчитанный на объем кода в 8 строк, использует указатели перехода другим способом:
Смотрим небольшую заставку и переходим к следующему заданию.
Задача: для каждого ВВОДИМОГО числа, выведите это число, а также все остальные вплоть до нуля. Это счетчик! Данная задача также имеет два решения. Первое, на количество операций, содержит 18 строк кода (две картинки):
Второй вариант, рассчитанный на объем кода в 10 строк — активно использует циклы:
Задача: для каждых двух ВВОДИМЫХ вещей перемножьте их и ВЫВЕДИТЕ результат. Первое решение потребует значительного кода:
Второе решение несколько короче и расположилось бы на двух скриншотах, если бы мы их не склеивали:
Теперь займемся более сложными «факультативными» задачами (слева от линии).
Задача: для каждого ВВОДИМОГО числа отправьте на ВЫВОД последовательность Фиббоначи вплоть до этого значения, но не превышая его. Решение этой задачи также имеет два способа. Первый рассчитан на 19 команд:
Второй быстрее, но команд в нем больше:
Задача: для каждых двух ВВОДИМЫХ вещей ВЫВЕДИТЕ остаток, который получился бы в результате деления первого числа на второе. Довольно простое и изящное решение мною было обнаружено практически сразу же:
Задача: для каждых двух ВВОДИМЫХ вещей определите, сколько раз первая вещь поместится во вторую. Копируем предыдущее решение и делаем пару корректировок:
Задача: для каждых ТРЕХ ВЕЩЕЙ, подаваемых на ВВОД, ВЫВЕДИТЕ их в порядке возрастания. Надо признать, это довольно сложная задача, справиться с которой мне помог только интернет, да и то в варианте наименьшего количества команд:
Если у вас есть решение данной задачи на скорость (а может быть и на то и на другое), дайте мне знать отправив личное сообщение.
Возвращаемся к задачам, расположенным на правой стороне.
Задача: сложите все числа в заданной последовательности. Когда достигните ее конца (который помечен НУЛЕМ), ВЫВЕДИТЕ полученную сумму. Повторите для каждой последовательности. Интересная и простая задача одновременно, легко решается в 10 команд:
Задача: для каждой ВВОДИМОЙ нуль-терминированной последовательности ВЫВЕДИТЕ только НАИМЕНЬШЕЕ ее число. Повторите для каждой последовательности. Задача интересная, но решается практически так же, как и предыдущая:
Задача: для каждого ВВОДИМОГО числа, ВЫВЕДИТЕ сумму его самого и всех чисел вплоть до нуля. Чтобы решить эту задачу придется поломать голову несколько минут и попробовать пару вариантов. Не получается? Тогда решение перед вами:
***Спасибо за внимание!***
-- HUMAN RESOURCE MACHINE PROGRAM --
JUMP c
a:
COPYTO 0
SUB 0
SUB 0
b:
OUTBOX
c:
INBOX
JUMPN a
JUMP b
8 команду "copyto 0" можно смело удалять. И тогда у вас получается не 12 как нужно а 11 команд и 53 шага вместо 57 (Идеально) ;)
8 команду "copyto 0" можно смело удалять. И тогда у вас получается не 12 как нужно а 11 команд и 53 шага вместо 57 (Идеально) ;)
24. Модуль модуля
8 команду "copyto 0" можно смело удалять. И тогда у вас получается не 12 как нужно а 11 команд и 53 шага вместо 57 (Идеально) ;)
// JUMPN — Jump if negative
// :blabla — Метка для перехода
:start
INBOX
COPYTO 2
INBOX
COPYTO 1
INBOX
COPYTO 0
// Сравниваем a и b
SUB 1
JUMPN if0
// a >= b
// Сравниваем b и c
COPYFROM 1
SUB 2
JUMPN if1
// a >= b && b >= c
JUMP outputCBA
:if1
// a >= b && b < c
// Сравниваем a и c
COPYFROM 0
SUB 2
JUMPN outputBAC // a >= b && b < c && a < c
JUMP outputBCA // a >= b && b < c && a >= c
:if0
// a < b
// Сравниваем b и c
COPYFROM 1
SUB 2
JUMPN outputABC // a < b && b < c
// a < b && b >= c
// Сравниваем a и c
COPYFROM 0
SUB 2
JUMPN outputACB // a < b && b >= c && a < c
// a < b && b >= c && a >= c
:outputCAB
COPYFROM 2
OUTBOX
COPYFROM 0
OUTBOX
COPYFROM 1
OUTBOX
JUMP start
:outputABC
COPYFROM 0
OUTBOX
COPYFROM 1
OUTBOX
COPYFROM 2
OUTBOX
JUMP start
:outputACB
COPYFROM 0
OUTBOX
COPYFROM 2
OUTBOX
COPYFROM 1
OUTBOX
JUMP start
:outputBAC
COPYFROM 1
OUTBOX
COPYFROM 0
OUTBOX
COPYFROM 2
OUTBOX
JUMP start
:outputBCA
COPYFROM 1
OUTBOX
COPYFROM 2
OUTBOX
COPYFROM 0
OUTBOX
JUMP start
:outputCBA
COPYFROM 2
OUTBOX
COPYFROM 1
OUTBOX
COPYFROM 0
OUTBOX
JUMP start
year 22: 19/134