Время корректировать цены!


19

Я уверен, что вы знаете о ценовой схеме $ 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

Можем ли мы принять вход по одному? Или отделены чем-то другим, кроме новой строки?
minxomaτ

Для простоты я думаю, что указанный формат является лучшим, поэтому вы можете сосредоточиться на решении актуальной проблемы, а не на обработке форматирования. Но, конечно, допускается одно целое число в одном ряду. :)
ciscoheat 21.09.15

1
Да, список для конкретного языка, вероятно, легче обрабатывать. Но как долго я могу продолжать менять спецификации? Это одна из причин, по которой я не решался опубликовать что-либо в коде гольф.
ciscoheat

2
Новая строка теперь отбрасывается как требование, указывая только «список». Я надеюсь, что это будет лучше, а не хуже ...!
ciscoheat

6
«Но как долго я могу продолжать менять спецификации? Это одна из причин, по которой я не решался публиковать что-либо в Code Golf». В случае, если вы не знаете об этом, вы можете опубликовать идеи конкурса в песочнице, где вы можете получить обратную связь от сообщества до того, как вызов будет запущен, так что такие вещи можно (надеюсь) указать и исправить до того, как изменения сделают недействительными существующие ответы.
Мартин Эндер,

Ответы:


13

Brainfuck, 4428 байт (недействительно)

Когда я понял, что алгоритм работает, я потерял интерес и не закончил обработчик ввода. Вот почему это решение технически решает проблему, но очень сложно в использовании. Когда вы запускаете программу в интерактивном переводчике (чем быстрее, тем лучше), вы можете ввести свой «номер». Он должен быть введен в Base256, если ваш переводчик не поддерживает преобразование чисел (мое поддерживает). Поэтому максимальная цена, которую вы можете ввести, составляет 255.

Затем он выполняет цикл по модулю, если число больше 9, чтобы отделить все цифры, кроме последней. Результаты деления сохраняются, а последняя цифра округляется до 5 или 9. Затем они добавляются и печатаются. Затем программа очищает все используемые регистры (возможно, излишние) и запрашивает следующий номер.

Он обрабатывает все особые случаи ( $1и $20/$21 -> $19т. Д.). Смотрите его номер 4здесь (около 3 минут, видео сокращено):

видео демо

Код

>+<+[>>>>>>>>>>>>>>>>>>[<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>-]<<<<<<<<<<<<<<<<<[>[-]+<-]>
[<+>>>>>>>>>>>[-],>>[-]<[-]<[>+<<<<<<<<<<+>>>>>>>>>-]<<<<<<<<<[>>>>>>>>>+<<<<<<<<<-]>>>>
>>>>[-]>[<+<<<<<<<<+>>>>>>>>>-]<<<<<<<<<[>>>>>>>>>+<<<<<<<<<-]>>>>>>>[-]+++++++++>[<<<<+
>>>>-]<[<<<<<<+>+<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<-]>>[>>[<+<<<+>>>>-]<<<<[>>>>+<<<<-]
+>>>[<<->>>-<<<<->>>[-]]<<<[>>[-]+<<-]>>-]>>[>>>>-<<<<[-]]<<<[-]<->>>>>>>>[<<<<<<<<->>>>
>>>>-]<<<<<<<<[>>>>>>>>+<<<<<<<<-]>>>>>>>>[>>>>>+<<<<<<<<<<<<<<<->>>>>>>>>>[-]]<<<<<<<<<
-]>>>>>>>>>>>>>>>>>>>>[<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>-]<<<<<<<<<<<<<<<<<<<<
<[>[-]+<-]>[<+>>>>>>>>>>>>[-]<[>+<<<<<<<<<<+>>>>>>>>>-]<<<<<<<<<[>>>>>>>>>+<<<<<<<<<-]>>
>>>>>[-]++++++++++>>>[<<<<<<<+>>>>>>>-]<<<<<<<[>>>>[<<<<<+<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<
<<<<<-]>>[>-[<<+<+>>>-]<<<[>>>+<<<-]+>[<->[-]]<[>>-[>>>>>>>>-<<<<<<<<[-]]+<<[-]]>>-]>>>>
>>>>+<<<<<<<]>>>>>[-]>>[<<+<<<<<<<<+>>>>>>>>>>-]<<<<<<<<<<[>>>>>>>>>>+<<<<<<<<<<-]>>>>>>
>[-]++++++++++>[<<<<<<<+>>>>>>>-]<<<<<<<[>>>>>>[>+<<<<<<<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<
<<<-]>-]>>>>>>>>>[-]<<[>>+<<-][-]>>>[<<<+<<<<<<<<+>>>>>>>>>>>-]<<<<<<<<<<<[>>>>>>>>>>>+<
<<<<<<<<<<-]>>>>>>>[-]>>>[<<<+<<<<<<<+>>>>>>>>>>-]<<<<<<<<<<[>>>>>>>>>>+<<<<<<<<<<-]>>>>
>>>[>+<<<<<<<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<-]>>>>>>>>>>>[-]<<<[>>>+<<<-][-]>[<+<<<<<
<<<+>>>>>>>>>-]<<<<<<<<<[>>>>>>>>>+<<<<<<<<<-]>>>>>>>[-]>>>[<<<+<<<<<<<+>>>>>>>>>>-]<<<<
<<<<<<[>>>>>>>>>>+<<<<<<<<<<-]>>>>>>>[>-<<<<<<<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<-]>>>>>
>>>>[-]<[>+<-]<<<<<<<<<-]>>>>>>>>>>>>>>>>>>>[<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>-]
<<<<<<<<<<<<<<<<<<<<[>[-]+<-]>[<+>>>>>>>>>>[-]>>[<<+<<<<<<<<+>>>>>>>>>>-]<<<<<<<<<<[>>>>
>>>>>>+<<<<<<<<<<-]>>>>>>>[-]>[<<<<+>>>>-]<[<<<<<<+>+<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<
-]>>[>>[<+<<<+>>>>-]<<<<[>>>>+<<<<-]+>>>[<<->>>-<<<<->>>[-]]<<<[>>[-]+<<-]>>-]>>[>>>>-<<
<<[-]]<<<[-]<->>>>>>>>[<<<<<<<<->>>>>>>>-]<<<<<<<<[>>>>>>>>+<<<<<<<<-]>>>>>>>>[>>>>>>>>>
>>>+<<<<<<<<<<<<<<<<<<<<<<->>>>>>>>>>[-]]<<<<<<<<<-]>>>>>>>>>>>>>>[<<<<<<<<<<<<<<<+>>>>>
>>>>>>>>>>-]<<<<<<<<<<<<<<<[>[-]+<-]>[<+>>>>>>>>>>[-]>[<+<<<<<<<<+>>>>>>>>>-]<<<<<<<<<[>
>>>>>>>>+<<<<<<<<<-]>>>>>>>[-]++++>[<<<<+>>>>-]<[<<<<<<+>+<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<
<<<<<-]>>[>>[<+<<<+>>>>-]<<<<[>>>>+<<<<-]+>>>[<<->>>-<<<<->>>[-]]<<<[>>[-]+<<-]>>-]>>[>>
>>-<<<<[-]]<<<[-]<->>>>>>>>[<<<<<<<<->>>>>>>>-]<<<<<<<<[>>>>>>>>+<<<<<<<<-]>>>>>>>>[>>>>
>>+<<<<<<<<<<<<<<<<->>>>>>>>>>[-]]<<<<<<<<<-]<[>[-]+<-]>[<+>>>>>>>>>>>[-]+++++++++>>>>>>
>>+<<<<<<<<<<<<<<<<<<<->-]>>>>>>>>>>>>>>>[<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>-]<<<<<<<<<<<
<<<<<[>[-]+<-]>[<+>>>>>>>>>>[-]>[<+<<<<<<<<+>>>>>>>>>-]<<<<<<<<<[>>>>>>>>>+<<<<<<<<<-]>>
>>>>>[-]++>[<<<<+>>>>-]<[<<<<<<+>+<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<-]>>[>>[<+<<<+>>>>-
]<<<<[>>>>+<<<<-]+>>>[<<->>>-<<<<->>>[-]]<<<[>>[-]+<<-]>>-]<[>>>>>>>-<<<<<<<[-]]>>>[-]>>
>[-]>>>>[<<<<+<<<<<<<+>>>>>>>>>>>-]<<<<<<<<<<<[>>>>>>>>>>>+<<<<<<<<<<<-]>>>>>>>>>>>>[-]+
++++++++<<<<<[<<<+>>>-]>>>>>[<<<<<<<<<<<+>+<<+>>>>>>>>>>>>-]<<<<<<<<<<<<[>>>>>>>>>>>>+<<
<<<<<<<<<<-]>>[>>[<+<<<+>>>>-]<<<<[>>>>+<<<<-]+>>>[<<->>>-<<<<->>>[-]]<<<[>>[-]+<<-]>>-]
>>[>>>-<<<[-]]<<<[-]>>>>>>>[<<<<<<<<+>>>>>>>>-]<<<<<<<<[[-]>>>>>>>[<<<<<<<+>+>>>>>>-]<<<
<<<[>>>>>>+<<<<<<-]<[>>>>>>>>-<<<<<<<<[-]]]->>>>>>>>[<<<<<<<<->>>>>>>>-]<<<<<<<<[>>>>>>>
>+<<<<<<<<-]>>>>>>>>[>>>>>>>>+<<<<<<<<<<<<<<<<<<->>>>>>>>>>[-]]<<<<<<<<<-]<[>[-]+<-]>[<+
>>>>>>>>>>[-]>>>[<<<+<<<<<<<<+>>>>>>>>>>>-]<<<<<<<<<<<[>>>>>>>>>>>+<<<<<<<<<<<-]>>>>>>>>
->>>[-]<<<[>>>+<<<-]>[-]>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<->-]>>>>>>>>>>>>>>>>>[<<<<<<
<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>-]<<<<<<<<<<<<<<<<<<[>[-]+<-]>[<+>>>>>>>>>>>[-]+++++<<<<<
<<<<<-]>>>>>>>>>>>>>>>>>>>>>>[<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>-]<<<<[<<<<
<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>-]<<<<<<<<<<<<<<<<<<<[>[-]+<-]>[<+>>>>>>>>>>[-]>>>[<<
<+<<<<<<<<+>>>>>>>>>>>-]<<<<<<<<<<<[>>>>>>>>>>>+<<<<<<<<<<<-]>>>>>>>[-]>>[<<+<<<<<<<+>>>
>>>>>>-]<<<<<<<<<[>>>>>>>>>+<<<<<<<<<-]>>>>>>>[>+<<<<<<<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<
<<-]>>>>>>>>>>>[-]<<<[>>>+<<<-][-]>>>[<<<+<<<<<<<<+>>>>>>>>>>>-]<<<<<<<<<<<[>>>>>>>>>>>+
<<<<<<<<<<<-]>[-]>[-]>[-]>[-]>>>>[<<<<<+[>+<<<<+>>>-]<<<[>>>+<<<-]+>>>>----------[<<<<->
>>>[-]]<<<<[>>+>[-]<<<-]>>[>>+<<<<+>>-]<<[>>+<<-]+>>>>----------[<<<<->>>>[-]]<<<<[>+>[-
]<<-]>>>>>>>>-]<<<<<<<[<++++++++[>++++++>++++++<<-]>.>.[-]<[-]]>[<<++++++++[>>++++++<<-]
>>.[-]]<<++++++++[>>>++++++<<<-]>>>.[-]<<<++++++++++.[-]>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<
<->-]<[>[-]+<-]>[<+<->>-]<<]

Вы получите голос за амбиции, если бы я мог дать больше, чем один. :)
ciscoheat

8
Я думаю, что GIF нуждается в предупреждении эпилепсии.
Алекс А.

12

CJam, 19 17 байт

q~{2-Ab)4>59s=N}/

Проверьте это здесь.

Принимает ввод в виде списка в стиле CJam и возвращает вывод новой строки в отдельности.

объяснение

qN/{   e# Run this block for each line of the input...
  ~    e#   Evaluate the current line to get the integer.
  2-   e#   Subtract 2 to get all but the last digit right.
  Ab)  e#   Convert to base 10 (discarding a potential minus sign) and split off
       e#   the last digit.
  4>   e#   Test if it's greater than 4.
  59s= e#   Select the correct digit from the string "59" based on this result.
  N    e#   Push a line feed.
}/

11

Python 2, 47

lambda l:[max(5,(n+3)/5*5-(n-2)/5%2)for n in l]

Если мы посмотрим на последовательность округленных значений, мы увидим, что они входят в блоки по 5.

... 25, 29, 29, 29, 29, 29, 35, 35, 35, 35, 35, 39, ...

Мы находим номер блока, с которым мы находимся (n+3)/5(вызовите это значение J). Затем мы получаем правильное кратное 5с J*5и корректируем такие вещи, как 30до 29, вычитая 1всякий раз, когда Jэто чётное.

Для специального случая 1отдавания , 5а не -1мы передаем результат max(5,_).


Чтобы исправить версию meS,-*hJ/-d2K5K%J2KQ
Pyth,

2
или на 2 байта короче:m-|*K5hJ/-d2K6%J2Q
Якуб

1
@Jakube Это умно, как насчет того, чтобы опубликовать это?
xnor

Хорошо, я сделаю. Но вы можете взять идею для своего ответа Python. lambda l:[((n+3)/5*5or 6)-(n-2)/5%2for n in l]
Сохраняет

8

Сетчатка, 32 байта

Принимает ввод в списке через запятую. Там должна быть запятая. Выходы в том же формате.

T`d`aa555559`.,
T+`da`ad`\da
a
5

Объяснение:

T`               #Transliteration mode.
  d`aa555559`    #Map the digits 0-9 to aa55555999
             .,  #Map only the trailing digits.
T+`              #Do until input does not change.
   da`ad`        #Map a to 9, 0 to a, and 1-9 to 0-8
         \da     #Only do this to each a and the character before each a.
a                #Match all leftover a's. This only happens when the input contains the integer 1.
5                #Replace them with 5.

5

R 51 49 47 43 байта

(f=((n=scan()-2)%/%5+1+(n<0))*5)-(f%%10==0)

Должны быть возможности для улучшения, но я думаю, что другая стратегия может быть лучше. Извлекает вектор целых чисел из сканирования и выводит вектор целых чисел. По сути это использует целочисленное деление для округления числа вниз, добавляет 1 и умножает его на пять. Все, что делится на 10, забрал 1. Если n = 1, то это увеличивает целочисленное деление на 1.

Тестовый забег

> (f=((n=scan()-2)%/%5+1+(n<0))*5)-(f%%10==0)
1: 1
2: 12
3: 8
4: 41
5: 27
6: 144
7: 99
8: 3
9: 
Read 8 items
[1]   5  15   9  39  29 145  99   5
> 

5

Python 3, 74 82 байта

a=eval(input())
for i in a:print(round(i,-1)+[5,-1][max(4,i-2)%10>4])

Я боролся за краткость на значениях меньше 11 и требовании 1 для оценки до 5.


Похоже, ваша программа занимает всего одно целое число?
Даниеро

@daniero правильно, исправлено теперь принимать список.
Тодд

4

Pyth, 21 18 29 28 байт

Благодаря @Jakube отрезные 3 байта!

KeQJ-QKI<K2tJ.q;I<K6+J5;E+J9

Попробуй это здесь.

EDIT: Видимо , он был признан недействительным. Я установил его за счет 11 байтов; Я постараюсь играть в гольф больше.


eQэто то же самое, что %Q10, вы также можете I<KeQ6+-QK5;E+-QK9
встроить

Круто, я не знал об этом!
РК.

Нет проблем. Ваш подход неверен, хотя. Вы должны округлять вниз 9, если последняя цифра 0или1
Jakube

Ах, я буду работать над этим.
RK.

4

Pyth, 21 байт

m?tdtt+d@jC"²a<"6ed5Q

К сожалению, я должен потратить 4 байта, чтобы правильно обработать 1 доллар.


Очень умный. Вы можете обращаться1 только 2 байта. mt|t+d@jC"²a<"6ed6Q
Jakube

4

Pyth, 18 байт

m-|*K5hJ/-d2K6%J2Q

Попробуйте онлайн: демонстрация или тестовый набор

Этот ответ основан на решении Python / Pyth @ XOR в. Главное отличие в том, что я обрабатывать особый случай по- 1разному. Фактический результат для 1будет 0 - 1 = -1. Использование Python это orя могу заменить 0с 6, в результате чего 6 - 1 = 5. Это экономит боль принимая максимум 5и результат.

Объяснение:

m-|*K5hJ/-d2K6%J2Q
m                Q   map each number d of the input list Q to:
    K5                  K = 5
       J/-d2K           J = (d - 2) / K
   *K hJ                   K * (J + 1)
  |                     or
             6             6 # if K*(J+1)==0
 -            %J2       minus (J mod 2)

3

гания , 133 Б

func main(){i=[12,8,41,27,144,99,3];foreach(e in i){f=e%10;if(!(e/10==0))print(e/10);if(f<5)r=5;else if(f>5)r=9;elser=f;println(r);}}

Запуск и увидеть расширенную онлайн: http://hassiumlang.com/Hassium/index.php?code=4f1c14f4d699b11da7a6392a74b720c4


Извините, что ссылка не работает, мы работали с базой данных. Работает сейчас.
Джейкоб Мисирян

Как указано в коде гольф-тега вики , ответы должны быть полными программами или функциями. Отрывки , которые просто жёстко вход не допускается, если вопрос явно не говорит иначе.
Деннис

3

TI-BASIC, 19 байт

int(Ans/5+.6
max(5,5Ans-not(fPart(Ans/2

Алгоритм использует XNOR в. TI-BASIC получает векторизации и умножение бесплатно, но мы проводим еще несколько байт, потому что он не имеет по модулю.


1

Haskell, 114 байт

g n
 |n>6=9-n
 |n>1=5-n
 |1>0=(-n-1)
f n=show$(read n)+(g$read$(:[])$last n)
main=interact(unlines.(map f).lines)

Объяснение:

Функция gвозвращает 9-nif n>6или else 5-nif n>1или else -n-1. gдается последняя цифра и возвращает то , что должно быть добавлено к входному номеру. fиспользует gдля получения решения (плюс много манипуляций со строками). mainвыводит результат fдля каждой строки ввода.


1

Рубин, 55 50 + 1 байт

Запустите его с nфлагом, например , так: ruby -n prices.rb. Введите каждую цену в отдельной строке.

x=$_.to_i
p x<7?5:(x-2).round(-1)+(~/[2-6]$/?5:-1)
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.