Thời gian để điều chỉnh một số giá!


19

Tôi chắc chắn bạn biết về sơ đồ giá 9,99 đô la, thay vì sử dụng 10 đô la. Chà, trong công việc mới là quản trị viên hệ thống tại một cửa hàng bán lẻ lớn, họ muốn giá tuân thủ một sơ đồ tương tự:

  • Tất cả giá đều tính bằng đô la, không có xu.
  • Tất cả giá sẽ kết thúc bằng 5 hoặc 9, làm tròn đến gần nhất nhưng tăng nếu chữ số cuối cùng nằm trong khoảng từ 5 đến 9. (Áp dụng cho chữ số cuối 2 và 7)
  • Đầu vào thấp nhất là 1 đô la và giá đầu ra thấp nhất phải là 5 đô la.

Đầu vào của bạn là một danh sách các số nguyên:

12
8
41
27
144
99
3

Và đầu ra nên một danh sách các giá mới. Trong trường hợp trên:

15
9
39
29
145
99
5

Chúng ta có thể lấy đầu vào từng cái một không? Hoặc cách nhau bởi một cái gì đó khác với một dòng mới?
mınxomaτ

Để đơn giản, tôi nghĩ định dạng được chỉ định là tốt nhất, vì vậy bạn có thể tập trung vào giải quyết vấn đề thực tế thay vì xử lý định dạng. Nhưng tất nhiên một số nguyên duy nhất trên một hàng được cho phép. :)
ciscoheat

1
Có một danh sách cụ thể về ngôn ngữ có lẽ dễ xử lý hơn. Nhưng bao lâu tôi có thể tiếp tục thay đổi thông số kỹ thuật? Đây là một trong những lý do khiến tôi ngần ngại đăng bất cứ điều gì trong mã golf.
ciscoheat

2
Dòng mới hiện được bỏ theo yêu cầu, chỉ xác định "danh sách". Tôi hy vọng nó sẽ làm cho mọi thứ tốt hơn, không tồi tệ hơn ...!
ciscoheat

6
"Nhưng tôi có thể tiếp tục thay đổi thông số kỹ thuật trong bao lâu? Đây là một trong những lý do khiến tôi ngần ngại đăng bất cứ điều gì trong mã golf." Trong trường hợp bạn không biết về nó, bạn có thể đăng ý tưởng thử thách vào hộp cát nơi bạn có thể nhận phản hồi của cộng đồng trước khi thử thách được đưa ra, để những điều như thế này có thể (hy vọng) được chỉ ra và sửa chữa trước khi thay đổi làm mất hiệu lực câu trả lời hiện có.
Martin Ender

Câu trả lời:


13

Brainfuck, 4388 byte (không hợp lệ)

Khi tôi biết thuật toán hoạt động, tôi mất hứng thú và không hoàn thành trình xử lý đầu vào. Đó là lý do tại sao giải pháp này về mặt kỹ thuật giải quyết vấn đề, nhưng rất khó sử dụng. Khi bạn khởi động chương trình trong một trình thông dịch tương tác (nhanh hơn là tốt hơn), bạn có thể nhập "số" của mình. Nó phải được nhập vào Base256 nếu trình thông dịch của bạn không hỗ trợ chuyển đổi số (của tôi). Do đó, giá tối đa bạn có thể nhập là 255.

Sau đó, nó thực hiện một modulo lặp nếu số lớn hơn 9 để tách tất cả các chữ số trừ số cuối cùng. Các kết quả phân chia được lưu, trong khi chữ số cuối cùng được làm tròn thành 5 hoặc 9. Sau đó, chúng được thêm và in. Sau đó, chương trình xóa tất cả các thanh ghi đã sử dụng (có thể là quá mức cần thiết) và yêu cầu số tiếp theo.

Nó xử lý tất cả các trường hợp đặc biệt ( $1, $20/$21 -> $19vv). Xem nó chạy cho số 4ở đây (khoảng 3 phút, video được rút ngắn):

video demo

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

Bạn sẽ nhận được một phiếu bầu cho tham vọng, ước gì tôi có thể cho nhiều hơn một. :)
ciscoheat

8
Tôi nghĩ rằng gif cần một cảnh báo động kinh.
Alex A.

12

CJam, 19 17 byte

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

Kiểm tra nó ở đây.

Đưa đầu vào dưới dạng danh sách kiểu CJam và trả về dòng mới đầu ra được phân tách.

Giải trình

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

Con trăn 2, 47

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

Nếu chúng ta nhìn vào chuỗi các giá trị được làm tròn, chúng ta sẽ thấy rằng chúng có các khối 5.

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

Chúng tôi tìm thấy khối số chúng tôi đang ở (n+3)/5(gọi giá trị này J). Sau đó, chúng tôi nhận được nhiều quyền 5với J*5, và điều chỉnh những thứ như 30xuống 29bằng cách trừ đi 1bất cứ khi nào Jlà số chẵn.

Để đặc biệt hợp cụ thể 1Cung cấp cho 5hơn -1, chúng tôi vượt qua kết quả đến max(5,_).


Để sửa phiên bản Pyth tôi nghĩ bạn có thể làmmeS,-*hJ/-d2K5K%J2KQ
FryAmTheEggman

2
hoặc ngắn hơn 2 byte:m-|*K5hJ/-d2K6%J2Q
Jakube

1
@Jakube Thật thông minh, còn bạn thì sao?
xnor

Ok tôi sẽ làm. Nhưng bạn có thể lấy ý tưởng cho câu trả lời Python của bạn. Nó tiết kiệm một byte:lambda l:[((n+3)/5*5or 6)-(n-2)/5%2for n in l]
Jakube

8

Võng mạc, 32 byte

Chấp nhận đầu vào trong một danh sách được phân tách bằng dấu phẩy. Phải có dấu phẩy. Đầu ra trong cùng định dạng.

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

Giải trình:

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 byte

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

Cần có chỗ để cải thiện điều này, nhưng tôi nghĩ một chiến lược khác có thể tốt hơn. Lấy một vectơ số nguyên từ quét và xuất ra một vectơ số nguyên. Về cơ bản, điều này sử dụng phép chia số nguyên để làm tròn số xuống, cộng 1 và nhân nó với năm. Bất cứ điều gì chia hết cho 10 có 1 lấy đi. Nếu n = 1 thì nó tăng phép chia số nguyên lên 1.

Chạy thử nghiệm

> (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 byte

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

Tôi đã đấu tranh cho sự ngắn gọn về các giá trị nhỏ hơn 11 và yêu cầu 1 để đánh giá thành 5.


Có vẻ như chương trình của bạn chỉ mất một số nguyên?
daniero

@daniero đúng, sửa ngay để chấp nhận danh sách.
Todd

4

Bình thường 21 18 29 28 byte

Cảm ơn @Jakube đã cắt 3 byte!

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

Hãy thử nó ở đây.

EDIT: Rõ ràng nó không hợp lệ. Tôi đã sửa nó với chi phí 11 byte; Tôi sẽ cố gắng chơi gôn nhiều hơn.


eQcũng giống như %Q10, bạn cũng có thể thực hiện chuyển nhượng:I<KeQ6+-QK5;E+-QK9
Jakube

Thật tuyệt, tôi không biết về điều đó!
RK.

Không vấn đề gì. Cách tiếp cận của bạn là sai mặc dù. Bạn nên làm tròn xuống 9, nếu chữ số cuối cùng là 0hoặc1
Jakube

Ah, tôi sẽ làm việc với nó.
RK.

4

Bình thường, 21 byte

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

Đáng buồn là tôi phải chi 4 byte để xử lý chính xác $ 1.


Khá thông minh. Bạn có thể xử lý 1chỉ với 2 byte. mt|t+d@jC"²a<"6ed6Q
Jakube

4

Bình thường, 18 byte

m-|*K5hJ/-d2K6%J2Q

Dùng thử trực tuyến: Trình diễn hoặc Test Suite

Câu trả lời này dựa trên giải pháp Python / Pyth của @ xor. Sự khác biệt chính là, tôi xử lý trường hợp đặc biệt 1khác nhau. Kết quả thực tế 1sẽ là 0 - 1 = -1. Sử dụng Python ortôi có thể thay thế 0bằng một 6, kết quả là 6 - 1 = 5. Điều này tiết kiệm nỗi đau của việc lấy tối đa 5và kết quả.

Giải trình:

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

Hassi , 133 Bytes

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);}}

Chạy và xem bản mở rộng trực tuyến: http://halilang.com/Hali/index.php?code=4f1c14f4d699b11da7a6392a74b720c4


Xin lỗi về liên kết bị hỏng, chúng tôi đã làm một số công việc cơ sở dữ liệu. Hoạt động ngay bây giờ.
Jacob Misirian

Như được nêu trong wiki thẻ golf mã , câu trả lời phải có đầy đủ các chương trình hoặc chức năng. Đoạn mã chỉ đơn giản là mã hóa cứng đầu vào không được phép, trừ khi câu hỏi nói rõ ràng khác.
Dennis

3

TI-BASIC, 19 byte

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

Sử dụng thuật toán của xnor. TI-BASIC được vector hóa và nhân miễn phí, nhưng chúng tôi dành thêm một vài byte vì nó không có modulo.


1

Haskell, 114 byte

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)

Giải trình:

Hàm gtrả về 9-nnếu n>6hoặc 5-nnếu n>1khác -n-1. gđược đưa ra chữ số cuối cùng và trả về những gì cần được thêm vào số đầu vào. fsử dụng gđể có được giải pháp (cộng với nhiều thao tác chuỗi). mainxuất kết quả fcho mỗi dòng đầu vào.


1

Hồng ngọc 55 50 + 1 byte

Chạy nó với ncờ, như vậy : ruby -n prices.rb. Nhập từng giá trên một dòng riêng biệt.

x=$_.to_i
p x<7?5:(x-2).round(-1)+(~/[2-6]$/?5:-1)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.