是时候调整一些价格了!


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

我们可以一一接受输入吗?还是用换行符分隔?
mınxomaτ

为简单起见,我认为指定的格式是最好的,因此您可以专注于解决实际问题,而不是同样处理格式。但是当然可以在一行上使用一个整数。:)
ciscoheat

1
是的,特定于语言的列表可能更易于处理。但是我可以继续更改规格多长时间?这就是我不愿意在代码高尔夫球中发布任何内容的原因之一。
ciscoheat

2
现在,按要求删除了换行符,仅指定“列表”。我希望它将使事情变得更好,而不是更糟...!
ciscoheat

6
“但是我可以不断更改规格多长时间?这就是我犹豫要在代码高尔夫中发布任何内容的原因之一。” 如果你不知道的话,你可以张贴挑战的想法在沙箱中,你可以得到社区的反馈之前的挑战去生活,这样的事情这样才能(希望)指出,并且固定之前改变现有无效答案。
马丁·恩德

Answers:


13

Brainfuck,4428字节(无效)

一旦知道算法有效,我就失去了兴趣,并且没有完成输入处理程序。这就是为什么该解决方案从技术上解决了问题,但是很难使用的原因。当您在交互式解释器中启动程序时(越快越好),您可以输入“数字”。如果您的解释器不支持数字转换(我的支持),则必须在Base256中输入。因此,您可以输入的最高价格是255。

然后,如果数字大于9,则执行循环取模以拆分除最后一位以外的所有数字。保存除法结果,最后一位四舍五入到5或9。然后将它们相加并打印。然后,程序将清除所有使用过的寄存器(可能是过度使用),并要求下一个数字。

它处理所有特殊情况($1$20/$21 -> $19等等)。在4此处观看其运行次数(大约3分钟,视频缩短):

视频演示

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

您将获得雄心壮志的一票,但愿我能提供不止一个。:)
ciscoheat

8
我认为gif需要癫痫病警告。
Alex A.

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)。然后,我们得到了正确的多5J*5,并调整之类的东西3029减去1只要J是偶数。

特殊情况下1给予5,而不是-1,我们通过结果max(5,_)


要修复Pyth版本,我认为您可以做到meS,-*hJ/-d2K5K%J2KQ
FryAmTheEggman

2
或缩短2个字节:m-|*K5hJ/-d2K6%J2Q
Jakube 2015年

1
@Jakube太聪明了,您发布它怎么样?
xnor

好的,我会。但是您可以将其用于您的Python答案。它保存一个字节:lambda l:[((n+3)/5*5or 6)-(n-2)/5%2for n in l]
Jakube 2015年

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)

应该有改善的空间,但我认为采用其他策略可能会更好。从scan获取一个整数向量,并输出一个整数向量。本质上,这是使用整数除法将数字四舍五入,然后加1并乘以5。被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 2015年

@daniero正确,现已修复,可以接受列表。
Todd

4

Pyth, 21 18岁 29 28字节

感谢@Jakube削减了3个字节!

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

在这里尝试。

编辑:显然这是无效的。我以11个字节为单位修复了该错误;我会尝试打更多的高尔夫球。


eQ与相同%Q10,您也可以内联作业:I<KeQ6+-QK5;E+-QK9
Jakube 2015年

酷,我对此一无所知!
RK。

没问题。但是,您的方法是错误的。你应该四舍五入到9,如果最后一位是01
Jakube

嗯,我会努力的。
RK。

4

Pyth,21个字节

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

可悲的是,我必须花费4个字节才能正确处理$ 1。


相当聪明。但是,您只能处理12个字节。mt|t+d@jC"²a<"6ed6Q
2015年

4

Pyth,18个字节

m-|*K5hJ/-d2K6%J2Q

在线尝试:演示测试套件

该答案基于@xor的Python / Pyth解决方案。主要区别在于,我对特例的处理方式1不同。的实际结果1将是0 - 1 = -1。使用Python or可以将替换06,结果为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

s 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


抱歉,链接断开,我们正在做一些数据库工作。现在可以使用。
Jacob Misirian

代码高尔夫标签Wiki中所述,答案必须是完整的程序或功能。除非问题明确指出,否则不允许使用仅对输入进行硬编码的代码段。
丹尼斯

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>6or else 5-nif n>1or else -n-1g被赋予最后一位数字,并返回应该添加到输入数字中的数字。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)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.