Я уверен, что вы знаете о ценовой схеме $ 9,99, вместо того, чтобы использовать $ 10. Итак, на вашей новой работе в качестве системного администратора в крупном розничном магазине они хотят, чтобы цены придерживались аналогичной схемы:
- Все цены указаны в долларах, без центов.
- Все цены должны заканчиваться на 5 или 9, округляясь до ближайшего, но вверх, если последняя цифра находится между 5 и 9 (относится к последней цифре 2 и 7).
- Наименьший вход составляет 1 доллар, а наименьшая цена должна составлять 5 долларов.
Ваш ввод представляет собой список целых чисел:
12
8
41
27
144
99
3
И выводить следует список новых цен. В приведенном выше случае:
15
9
39
29
145
99
5
Ответы:
Brainfuck, 4428 байт (недействительно)
Когда я понял, что алгоритм работает, я потерял интерес и не закончил обработчик ввода. Вот почему это решение технически решает проблему, но очень сложно в использовании. Когда вы запускаете программу в интерактивном переводчике (чем быстрее, тем лучше), вы можете ввести свой «номер». Он должен быть введен в Base256, если ваш переводчик не поддерживает преобразование чисел (мое поддерживает). Поэтому максимальная цена, которую вы можете ввести, составляет 255.
Затем он выполняет цикл по модулю, если число больше 9, чтобы отделить все цифры, кроме последней. Результаты деления сохраняются, а последняя цифра округляется до 5 или 9. Затем они добавляются и печатаются. Затем программа очищает все используемые регистры (возможно, излишние) и запрашивает следующий номер.
Он обрабатывает все особые случаи (
$1
и$20/$21 -> $19
т. Д.). Смотрите его номер4
здесь (около 3 минут, видео сокращено):Код
источник
CJam,
1917 байтПроверьте это здесь.
Принимает ввод в виде списка в стиле CJam и возвращает вывод новой строки в отдельности.
объяснение
источник
Python 2, 47
Если мы посмотрим на последовательность округленных значений, мы увидим, что они входят в блоки по 5.
Мы находим номер блока, с которым мы находимся
(n+3)/5
(вызовите это значениеJ
). Затем мы получаем правильное кратное5
сJ*5
и корректируем такие вещи, как30
до29
, вычитая1
всякий раз, когдаJ
это чётное.Для специального случая
1
отдавания ,5
а не-1
мы передаем результатmax(5,_)
.источник
meS,-*hJ/-d2K5K%J2KQ
m-|*K5hJ/-d2K6%J2Q
lambda l:[((n+3)/5*5or 6)-(n-2)/5%2for n in l]
Сетчатка, 32 байта
Принимает ввод в списке через запятую. Там должна быть запятая. Выходы в том же формате.
Объяснение:
источник
R
51494743 байтаДолжны быть возможности для улучшения, но я думаю, что другая стратегия может быть лучше. Извлекает вектор целых чисел из сканирования и выводит вектор целых чисел. По сути это использует целочисленное деление для округления числа вниз, добавляет 1 и умножает его на пять. Все, что делится на 10, забрал 1. Если n = 1, то это увеличивает целочисленное деление на 1.
Тестовый забег
источник
Python 3,
7482 байтаЯ боролся за краткость на значениях меньше 11 и требовании 1 для оценки до 5.
источник
Pyth,
21182928 байтБлагодаря @Jakube отрезные 3 байта!
Попробуй это здесь.
EDIT: Видимо , он был признан недействительным. Я установил его за счет 11 байтов; Я постараюсь играть в гольф больше.
источник
eQ
это то же самое, что%Q10
, вы также можетеI<KeQ6+-QK5;E+-QK9
9
, если последняя цифра0
или1
Pyth, 21 байт
К сожалению, я должен потратить 4 байта, чтобы правильно обработать 1 доллар.
источник
1
только 2 байта.mt|t+d@jC"²a<"6ed6Q
Pyth, 18 байт
Попробуйте онлайн: демонстрация или тестовый набор
Этот ответ основан на решении Python / Pyth @ XOR в. Главное отличие в том, что я обрабатывать особый случай по-
1
разному. Фактический результат для1
будет0 - 1 = -1
. Использование Python этоor
я могу заменить0
с6
, в результате чего6 - 1 = 5
. Это экономит боль принимая максимум5
и результат.Объяснение:
источник
гания , 133 Б
Запуск и увидеть расширенную онлайн: http://hassiumlang.com/Hassium/index.php?code=4f1c14f4d699b11da7a6392a74b720c4
источник
TI-BASIC, 19 байт
Алгоритм использует XNOR в. TI-BASIC получает векторизации и умножение бесплатно, но мы проводим еще несколько байт, потому что он не имеет по модулю.
источник
Haskell, 114 байт
Объяснение:
Функция
g
возвращает9-n
ifn>6
или else5-n
ifn>1
или else-n-1
.g
дается последняя цифра и возвращает то , что должно быть добавлено к входному номеру.f
используетg
для получения решения (плюс много манипуляций со строками).main
выводит результатf
для каждой строки ввода.источник
Рубин,
5550 + 1 байтЗапустите его с
n
флагом, например , так:ruby -n prices.rb
. Введите каждую цену в отдельной строке.источник