가격을 조정할 시간입니다!


19

나는 당신이 $ 10 대신 $ 9.99 가격 체계에 대해 알고 있다고 확신합니다. 대형 소매점의 시스템 관리자로서 새 직장에서 가격이 비슷한 체계를 따르기를 원합니다.

  • 모든 가격은 센트가 아닌 1 달러입니다.
  • 모든 가격은 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
"하지만 얼마나 오랫동안 사양을 계속 변경할 수 있습니까? 이것이 코드 골프에 무엇이든 게시하는 것을 주저 한 이유 중 하나입니다." 모르는 경우 , 샌드 박스에 챌린지 아이디어 게시 하여 챌린지가 시작되기 전에 커뮤니티 피드백을 얻을 수 있습니다. 그래야 변경 사항이 기존 답변을 무효화하기 전에 이와 같은 사항을 지적하고 수정할 수 있습니다.
마틴 엔더

답변:


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

파이썬 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,_).


Pyth 버전을 수정하기 위해 당신이 할 수 있다고 생각합니다meS,-*hJ/-d2K5K%J2KQ
FryAmTheEggman

2
또는 2 바이트 더 짧은 :m-|*K5hJ/-d2K6%J2Q
Jakube

1
@Jakube 영리한데 어떻게 게시할까요?
xnor

알았어 그러나 파이썬 답변에 대한 아이디어를 얻을 수 있습니다. 1 바이트를 절약합니다 :lambda l:[((n+3)/5*5or 6)-(n-2)/5%2for n in l]
Jakube

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을 더하고 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

파이썬 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

@ daniero 올바른, 이제 목록을 수락하도록 수정되었습니다.
Todd

4

피스, 21 18 29 28 바이트

3 바이트를 잘라낸 @Jakube에게 감사합니다!

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

여기에서 시도하십시오.

편집 : 분명히 유효하지 않습니다. 나는 11 바이트의 비용으로 그것을 고쳤다. 나는 그것을 더 골프하려고합니다.


eQ와 동일합니다 %Q10. 또한 과제를 인라인 할 수 있습니다.I<KeQ6+-QK5;E+-QK9
Jakube

쿨, 나는 그것에 대해 몰랐다!
RK.

문제 없어요. 당신의 접근 방식은 잘못되었습니다. 9마지막 자릿수가 0또는 숫자 인 경우 로 반올림해야합니다.1
Jakube

아, 내가 할게
RK.

4

Pyth, 21 바이트

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

슬프게도 $ 1을 올바르게 처리하려면 4 바이트를 사용해야합니다.


꽤 영리합니다. 1그래도 2 바이트 만 처리 할 수 ​​있습니다 . mt|t+d@jC"²a<"6ed6Q
Jakube

4

Pyth, 18 바이트

m-|*K5hJ/-d2K6%J2Q

온라인으로 사용해보십시오 : 데모 또는 테스트 스위트

이 답변은 @xor의 Python / Pyth 솔루션을 기반으로합니다. 가장 큰 차이점은 특별한 경우를 1다르게 처리한다는 것 입니다. 에 대한 실제 결과는 1입니다 0 - 1 = -1. 파이썬을 사용하여의 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

Hassium , 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

코드 골프 태그 위키에 설명 된대로 답변은 완전한 프로그램 또는 기능이어야합니다. 질문에서 명시 적으로 달리 언급하지 않는 한 단순히 입력을 하드 코딩하는 스 니펫은 허용되지 않습니다.
Dennis

3

TI-BASIC, 19 바이트

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

xnor의 알고리즘을 사용합니다. TI-BASIC은 벡터화 및 곱셈을 무료로 얻지 만 모듈로가 없기 때문에 몇 바이트를 더 소비합니다.


1

하스켈, 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)

설명:

이 함수 g9-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)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.