가변 가격 수입! 도전은 이미 2012 년 중학교

소개 및 신용

당신이 바텐더라고 가정하십시오. 당신은 대부분의 술집에 많은 행복한 사람들이 있지만, 많은 사람들은 항상 같은 음료를 마시고 취향에 비해 너무 적은 음료수를 마시고 그것을 바꾸고 싶어합니다. 따라서 이미 판매 된 수량에 따라 음료 가격이 변동이 있지만 특정 임계 값보다 높거나 적은 시스템을 소개합니다. 이상한 이유로 당신은 항상 판매 된 모든 음료와 가격을 적절히 추적하는 것을 잊어 버리므로 소비되는 음료의 양이 주어지면 수학을 수행하는 짧은 (= 기억에 남는!) 코드를 생각해야합니다.

이 도전은 이미 2012 년 중학교 시험에서 내 UNI의 기능 프로그래밍 과정에 나타 났으며 교수님이 여기에 게시 할 수 있습니다. 우리는 시험 언어로 예제 솔루션을 제공했습니다.

입력

입력 내용은 공백을 포함하지 않는 문자열 목록이 될 것입니다-판매 된 음료의 이름입니다. 선호하는 일반적으로 사용되는 입력 방법을 사용하여 입력하십시오 .

산출

당신의 산출물은 단일 숫자가 될 것입니다-이것은 당신이 오늘 저녁에 생성 한 소득입니다. 선호하는 일반적으로 허용되는 출력 방법을 사용하여 출력하십시오 .

무엇을해야합니까?

이것은 각 음료에 개별적으로 적용됩니다.

  • 시작 가격은 10입니다.
  • 음료를 구입할 때마다 다음 구매자의 가격이 1 씩 올라갑니다.
  • 최대 가격은 50입니다. 음료를 50로 구매 한 경우 새로운 가격은 다시 10이됩니다.

당신의 임무는 위의 규칙에 주어진 음료의 입력 목록에 의해 생성 된 전체 수입을 찾는 것입니다.


궁금한 경우 : “50 벅은 실제로 음료 비용이 비싸다!”, 이것은 50- 데시 벅, 그래서 50 * 0.1 * 단위이지만 부동 소수점 산술.

누가 이겼어?

이것은 이므로 바이트 단위의 가장 짧은 코드가 이깁니다! 표준 규칙이 적용됩니다.

잠재적 인 코너 케이스

입력 목록이 비어 있으면 출력은 0이어야합니다
. 입력 목록은 음료별로 정렬되어 있지 않은 것으로 가정합니다.

[] -> 0
["A"] -> 10
["A","B"] -> 20
["A","A","B"] -> 31
["A","B","A"] -> 31
["A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A"] -> 1240
["A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","B","B","B","C","C","D"] -> 1304
["D","A","A","C","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","B","B","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","B","C"] -> 1304
["A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","B","B","B","C","C","D","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A"] -> 1304


답변

자바 스크립트 (ES6), 50 바이트

a=>a.map(x=>t+=d[x]=d[x]<50?d[x]+1:10,t=0,d={})&&t

답변

파이썬 2, 79 74 54 48 바이트

문제를 다시 생각하면 대량 바이트 수가 증가합니다. 캐스트를 없애고 int싶지만 뇌가 작동하지 않습니다 . l.pop()목록을 두 번 트리밍하지 않고 좋은 오래된 람다 재귀를 피하기 위해 사용 🙂

f=lambda l:l and l.count(l.pop())%41+10+f(l)or 0

6 바이트를 절약 해 준 Jonathan Allan에게 감사합니다. 🙂

내 이전 54 바이트 버전은 매우 자랑 스러웠습니다. 🙂

f=lambda l:int(l>[])and~-l.count(l[0])%41+10+f(l[1:])

답변

Pyth, 15 바이트

ssm<*lQ}T50/Qd{

리스트를 입력 받아 결과를 출력하는 프로그램입니다.

테스트 스위트 (여러 입력을 허용하는 첫 번째 라인)

작동 원리

ssm<*lQ}T50/Qd{   Program. Input: Q
ssm<*lQ}T50/Qd{Q  Implicit input fill
              {Q  Deduplicate Q
  m               Map over that with variable d:
       }T50        Yield [10, 11, 12, ..., 48, 49, 50]
    *lQ            Repeat len(Q) times
   <       /Qd     First Q.count(d) elements of that
 s                Flatten
s                 Sum
                  Implicitly print

답변

젤리 , 14 11 10 바이트

50⁵rṁЀĠSS

TryItOnline!

어떻게?

50⁵rṁЀĠSS - Main link: list of drink names                e.g. ['d', 'a', 'b', 'a', 'c']
       Ġ   - group indices by values                       e.g. [[2, 4], [3], [5], [1]]
  ⁵        - 10
50         - 50
   r       - inclusive range, i.e. [10, 11, 12, ..., 48, 49, 50]
    ṁЀ    - mould left (the range) like €ach of right(Ð)  e.g. [[10, 11], [10], [10], [10]]
                 note: moulding wraps, so 42 items becomes [10, 11, 12, ..., 48, 49, 50, 10]
        S  - sum (vectorises)                              e.g. [40, 11]
         S - sum                                           e.g. 51

답변

05AB1E , 16 15 바이트

바이트를 저장해 준 Emigna 에게 감사합니다 !

ÎÙv¹y¢L<41%T+OO

CP-1252 인코딩을 사용합니다 . 온라인으로 사용해보십시오!


답변

펄 41 바이트

에 +1 포함 -p

$\+=$H{$_}+=$H{$_}?$H{$_}>49?-40:1:10;}{

개행을 입력합니다.

증분 해시 값의 : 10 이 있다면 undef, -40그건 경우 > 4950, 또는 1그렇지 않으면. 그런 다음 $\출력 분리기에 추가됩니다 .-p 인쇄합니다.

예:

$ echo -e 'A\nB\nA' | perl -pe '$\+=$H{$_}+=$H{$_}?$H{$_}>49?-40:1:10;}{'
31

답변

05AB1E , 13 바이트

{.¡€gL<41%T+O

설명

["A","B","A"] 예제로 사용됩니다.

{               # sort input
                # STACK: ["A","A","B"]
 .¡             # split on different
                # STACK: [["A","A"],["B"]]
   €g           # length of each sublist
                # STACK: [2,1]
     L          # range [1 ... x] (vectorized)
                # STACK: [1,2,1]
      <         # decrease by 1
                # STACK: [0,1,0]
       41%      # mod 41
                # STACK: [0,1,0]
          T+    # add 10
                # STACK: [10,11,10]
            O   # sum
                # OUTPUT: 31