내 담당자가 스택 교환 양식입니까?


16

전제:

메달 수 (골드,은, 브론즈를 따로 계산)를 기본 10 자리 숫자로 분해하고 주어진 순서에 따라 몇 가지 경고를 통해 결합 할 수 있다면 평판 교환 형식으로 평판이 나옵니다.

분해하는 동안 각각

  • 금메달 자리는 3 자리 숫자입니다.
  • 은은 두 자리 숫자입니다.
  • 청동은 한 자리입니다.
  • 당신이 어떤이없는 경우 SE는 메달 유형을 표시하지 않기 때문에 또한, 유형 0 메달의 수는 것입니다 하지 를 얻을 [0].

예:

  • [1 Gold, 2 Silvers, 3 Bronzes]로 분해됩니다 [1,1,1,2,2,3]. 321112 및 213121은이 메달에 대한 SE 형식 번호의 두 가지 예입니다.
  • [20 Golds, 0 Silvers, 20 Bronzes]로 분해됩니다 [2,2,2,0,0,0,2,0]. 20002022는 SE 양식 번호입니다.
  • [11 Golds, 0 Silvers, 0 Bronzes]로 분해됩니다 [1,1,1,1,1,1]. 이를위한 유일한 SE 형식 번호는 111111입니다.

SE 번호를 고려할 때 선행 0은 없습니다. 예를 들어, 위의 두 번째 예 00002222 -> 2222에서는에 대한 SE 형식 번호로 간주되지 않습니다 [20,0,20].

입출력:

입력은 목록 / 튜플 / 배열 / [reputation, gold_medals, silver_medals, bronze_medals]이것은 모두 음이 아닌 정수입니다. 이것은 가정 된 순서이지만 변경할 수 있습니다. 할 경우 답에 메모 해 두십시오.

출력은 true와 false에 대해 일관된 두 값입니다.

규칙 :

  • 입력은 항상 유효합니다
  • 당신은 항상 적어도 하나의 담당자를 가질 것입니다
  • 메달을 전혀 가질 수 없으므로 항상 false를 반환해야합니다.
  • 메달 수는 현실과 관련이 없습니다. 수백 개의 금과 청동이없는 것이 좋습니다.
  • 이것은 이므로 바이트 단위의 최단 답변이 승리합니다.

테스트 사례 :

#[Rep, Gold, Silver, Bronze] -> Output
[4, 0, 0, 4]       -> True
[1447, 0, 4, 17]   -> True
[74414, 4, 0, 17]  -> True
[4444, 4, 0, 4]    -> True
[4455, 0, 54, 0]   -> True
[5355, 5, 0, 3]    -> True
[53535, 5, 3, 0]   -> True
[4444, 0, 0, 4444] -> True
[444, 4, 0, 0]     -> True
[1234, 0, 0, 1234] -> True
[1234, 0, 0, 4321] -> True

[4444, 1, 0, 1]      -> False
[5555, 5, 0, 55]     -> False
[1234, 1, 23, 4]     -> False
[1, 0, 0, 0]         -> False
[1001001, 0, 10, 10] -> False

그렇다면 도전과 관련하여 명성은 정확히 무엇입니까?
OrangeCherries 12

3
@OrangeCherries 기계적으로, 아무것도. 글을 쓰는 시점에 1447 명의 대표와 4 개의은, 17 개의 청동을 가지고 있었기 때문에 도전에 영감을주었습니다.
Veskah 2016 년

1
주문 외에 입력이 유연합니까? 예를 들어 입력 목록 [bronze, silver, gold]과 분리 된 두 번째 입력을 취할 수 reputation있습니까?
Kevin Cruijssen

1
@KevinCruijssen 그래, 괜찮아. 내가 말할 수없는 유일한 것은 각 숫자를 구성하는 문자 / 숫자 목록으로 입력하는 것입니다.
Veskah 2016 년

출력에 허용 된 진실 / 거짓 값이 있습니까?
Nick Kennedy

답변:


11

05AB1E , 16 14 13 11 10 바이트

∞×0KJ‚€{íË

메달 입력을 순서 [bronze, silver, gold]대로 첫 번째 입력으로 취하고reputation 두 번째 입력으로 사용합니다.

@Grimy 덕분에 -1 바이트 .

온라인으로 시도 하거나 모든 테스트 사례를 확인하십시오 .

설명:

           # Push an infinite positive list: [1,2,3,...]
 ×          # Repeat the values in the (implicit) input-list that many times as string
            # (since the input-list contains just 3 values, the rest of the infinite
            #  list is ignored)
  0K        # Remove all 0s (so all "0", "00" and "000")
    J       # Join the strings in the list together
           # Pair this string with the (implicit) second input
      €{í   # Sort the digits in both strings in descending order
         Ë  # And check if both are now equal
            # (after which the result is output implicitly as result)

1
3L-> -1.
Grimmy

1
@Grimy 때로는 목록이 가장 작은 목록으로 잘리는 것이 유용합니다. :) 감사!
Kevin Cruijssen

이것은 10 바이트가 아닌 utf-8의 19 바이트입니다.
거짓말 라이언

@LieRyan 맞습니다. 실제로 UTF-8의 19 바이트입니다. 05AB1E는 알고있는 256 개의 문자마다 각각 1 바이트로 인코딩 되는 사용자 정의 코드 페이지 ( 예 : Jelly 및 Charcoal)를 사용 합니다 . 16 진수로 된이 10 바이트 버전의 바이트는 다음과 \x19\xd7\x30\x4b\x4a\x82\x80\x7b\xec\xcb같습니다. 16 진수 바이트를 --osabie플래그 와 함께 실행할 수 는 있지만 05AB1E Elixir 버전에서 완전히 정직하게 수행하는 방법을 잘 모르겠습니다. 다른 사람들이 답변을 확인하고 답장을 드릴 수 있습니다).
Kevin Cruijssen

@LieRyan 05AB1E (레거시) Python 버전에서는 이와 같이 수행 할 수 있지만 (물론 다른 문제에 대한 다른 프로그램 임) 16 진 바이트 실행 방법에 대한 아이디어를 제공해야합니다.
케빈 Cruijssen

7

자바 스크립트 (ES6),  92  74 바이트

로 입력을 (['gold','silver','bronze'])('rep')받습니다. 부울 값을 반환합니다.

b=>r=>[...b.map((n,i)=>n.repeat(+n&&3-i)).join``].sort()+''==[...r].sort()

온라인으로 사용해보십시오!


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

로 입력을 (gold, silver, bronze, 'rep')받습니다. 부울 값을 반환합니다.

(g,s,b,r)=>(F=s=>[...s].sort()+0)(r)==F([g,g,g,s,s,b].filter(x=>x).join``)

온라인으로 사용해보십시오!


7

MATL , 28 바이트 20 바이트 16 바이트 13 바이트

false는 0, true는 1을 반환합니다. 이것은 확실히 골프 다운 될 수 있습니다.

[1,3,2,1]Y"t2:7)XzVXzY@Ums0>

평판 점수를 따로 따를 수 있고 순서가 [청동,은, 금], 명성
이 Luis Mendo 덕분에 최저 13 바이트 인 경우 최저 16 바이트

3:Y"XzVXzY@Um

온라인으로 사용해보십시오!




5

Japt , 14 13 12 바이트

íp fn ¬á øUg

다음과 같이 입력을받습니다. [rep, bronze, silver, gold]

사용해 보거나 모든 테스트 사례를 확인하십시오.

Sample input: U = [1447, 17, 4, 0]
íp            Repeats each value of U by it's index amount e.g. ["","17","44","000"]
  fn          Remove all falsy values when converted to a number e.g. ["17","44"]
    ¬         Concatenate e.g. "1744"
     á        All permutations e.g. ["1744","1744","1474","1447","1474","1447","7144","7144","7414","7441","7414","7441","4174","4147","4714","4741","4417","4471","4174","4147","4714","4741","4417","4471"]
      øUg     Does it contain the first item of the input? 

나는 몇 가지 다른 각도에서 이것에 몇 가지 찌르기를했지만 13보다 더 잘 할 수는 없습니다.
얽히고 설킨

@Shaggy 첫 번째 값을 없애기 Å때문에 불필요 하다는 것이 밝혀졌습니다 fn. 제거 Å하면 12 바이트가됩니다
무지의 구현

이것은 utf-8에서 16 바이트이며 12 바이트가 아닙니다.
거짓말 라이언

@LieRyan 일부 골프 언어는 자체 인코딩을 사용합니다. Japt는 ISO-8859-1을 사용합니다
무지의

@ImbodimentofIgnorance, Ah, goddamnit, 왜 내가 그것을 발견하지 못했습니까?! 나는 그 달에 Japt에게 열린 현상금을 내기 시작한 이래로 실제로 기분이 좋지 않습니다.
얽히고 설킨

4

레티 나 0.8.2 , 45 바이트

,0
,
,(\d*),(\d*),
¶$1$1$1$2$2
%O`.
^(.+)¶\1$

온라인으로 사용해보십시오! 링크에는 테스트 스위트가 포함되어 있습니다. 설명:

,0
,

0 점을 삭제하십시오.

,(\d*),(\d*),
¶$1$1$1$2$2

금색과 은색 점수를 확장하고 구분 기호를 줄 바꿈으로 변환하십시오.

%O`.

평판과 확장 점수를 별도로 정렬하십시오.

^(.+)¶\1$

정렬 된 숫자를 비교하십시오.



4

라켓, 149 (107) 98 바이트

(λ(r b s g[h(λ x(sort(string->list(apply ~a(remq*'(0)x)))char<?))])(equal?(h r)(h b s s g g g)))

온라인으로 사용해보십시오!

라켓에서 처음으로 골프를 쳤으므로 여전히 개선을 찾고 있습니다 ...

설명 (원래 더 긴 버전이지만 동일한 아이디어) :

(λ(r b                              ; take rep and badges as arguments
     [g(λ(x)                        ; helper function g which takes a string
         (sort                      ; and returns the sorted
           (string->list x)         ; list of characters
           char<?))])               ; (sort by ascii code)
  (equal?                           ; compare...
    (g(~a r))                       ; g called on the rep converted to string
    (g                              ; and g called on...
      (string-join                  ; the concatenation of
        (map ~a                     ; the stringified elements of
             (append*               ; the flattened list given by
               (filter              ; the elements of the following list where
                 (λ(x)(>(car x)0))  ; the badge count is nonzero:
                 (map make-list     ; repeat the badge counts
                      '(1 2 3)b)))) ; 1, 2, and 3 times respectively
        ""))))

2

, 24 바이트

1F⁴F↨NχFι⊞υκFχ¿⁻№υι№θIι⎚

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 담당자, 청동,은, 금의 순서로 입력을 1받고 담당자가 유효한 경우 출력 합니다. 설명:

1

담당자가 유효하다고 가정하십시오.

F⁴F↨NχFι⊞υκ

네 개의 입력 값을 반복합니다. 각 값의 각 숫자를 눌러 i시간 i값의 인덱스 0의 인덱스이다. 여기에서는 숫자 형베이스 변환이 사용 0되어 빈 배열 로 변환 됩니다.

Fχ¿⁻№υι№θIι⎚

배열의 각 숫자의 카운트가 첫 번째 입력의 숫자와 일치하는지 확인하십시오. 다른 경우 캔버스를 지우십시오.


이것은 24 바이트가 아닌 utf-8에서 60 바이트입니다.
거짓말 라이언

@LieRyan UTF-8 바이트라고 말하지 않았습니다.
Neil



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