Благодаря вашей помощи в конкурсе « Пометить мою почту» PPCG-Post успешно проштамповала все свои посылки сгенерированными штрих-кодами!
Теперь пришло время расшифровать их.
В этом задании ваша программа с учетом штрих-кода, сгенерированного из задания « Пометьте мою почту» , расшифрует его и вернет закодированное целое число.
Но будь осторожен! Штрих-код может быть вверх ногами ...
Штрих-коды 4 штатов
В случае, если вы пропустили проблему кодирования, вам нужно знать, о каких штрих-кодах мы говорим. Штрих-код с 4 состояниями - это ряд столбцов с четырьмя возможными состояниями, каждое из которых представляет целое число с основанием 4:
| |
Bar: | | | |
| |
Digit: 0 1 2 3
Отрисованные в ASCII штрих-коды будут занимать три строки текста, используя |
символ pipe ( ) для представления части строки и пробел ( ) для представления пустого раздела. Между каждым баром будет один пробел. Пример штрих-кода может выглядеть следующим образом:
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
Чтобы преобразовать штрих-код обратно в целое число, которое он кодирует, сопоставьте каждую полосу с соответствующей ей цифрой base-4, объедините их и преобразуйте в десятичную.
Поскольку каждый штрих-код будет также представлять различный штрих-код в перевернутом положении, мы реализуем последовательность запуска / остановки, чтобы можно было рассчитать ориентацию. Для этой задачи мы будем использовать последовательность запуска / остановки, указанную Австралийской почтой: каждый штрих-код начинается и заканчивается 1 0
последовательностью.
Соревнование
Ваша задача состоит в том, чтобы, учитывая штрих-код ASCII с 4 состояниями, проанализировать его и вернуть целое число, которое он кодирует - по сути, это обратная функция Mark My Mail .
Но, чтобы оживить ситуацию, есть загвоздка - штрих-код может быть перевернут. Как и в реальном мире, он будет предоставлен считывателю штрих-кода (вашей программе) для определения правильной ориентации с использованием последовательности запуска / остановки.
Пример:
Учитывая следующий штрих-код:
| | | | | | | | | | | | | | | | | | | |
Мы можем четко видеть, что первая и последняя пары цифр есть 0, 2
и нет 1, 0
. Это означает, что штрих-код перевернут вверх дном, поэтому мы должны повернуть его на 180 градусов (а не просто перевернуть каждую полосу), чтобы получить правильную ориентацию:
| | | | | | | | | | | | | | | | | | | |
Теперь мы можем начать декодирование. Мы сопоставляем каждый столбец с соответствующей ему цифрой base-4, игнорируя последовательности запуска / остановки, поскольку они не кодируют данные.
| | | | | | | | | | | | | | | | | | | | - - 2 1 0 3 0 2 3 - -
Мы соединяем это с целым числом 4 2103023
, а затем преобразуем в десятичное представление 9419
для конечного результата.
правила
- На входе всегда будет действительный штрих-код из 4 состояний, отображаемый в ASCII, как описано выше, с описанной последовательностью запуска / остановки.
- Вы можете запросить завершающие пробелы или зачеркнутые строки, а также завершающий перевод новой строки - в зависимости от того, какой формат вам подходит.
- Он может или не может быть в правильной ориентации - ваша программа должна определить, читать ли ее вверх ногами, используя последовательность запуска / остановки.
- Он не будет кодировать первые нулевые цифры в целых числах от 4 до 4.
- Вы можете принять входные данные в виде списка строк или строки с символами новой строки.
- Выходными данными должно быть целое число в стандартной базе целых чисел вашего языка, представляющее данные, которые были закодированы штрих-кодом.
- Поскольку почтовые марки маленькие и могут вместить в себя очень мало кода, ваш код должен быть как можно короче: это код-гольф - поэтому выигрывает самая короткая (в байтах) программа!
Тестовые случаи
| | | | | | | | | | | | | |
= 4096 (перевернуто)
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
= 7313145 (перевернуто)
| | | | | | | | | | | | | | | | | | | |
= 9419 (перевернуто)
| | | | | | | | | | | | | | | | | | |
= 990 (не перевернуто)
| | | | | | | | | | | | | | | | | | |
= 12345 (не перевернуто)
[String]
, [{#Char}]
, [{Char}]
, [[Char]]
?, Учитывая , что String
эквивалентно{#Char}