번호판이 몇 점을 주나요?


31

(이것은 나의 첫 번째 코드 골프 질문입니다)

제가 어렸을 때, 아빠와 저는 자동차에서 볼 수있는 번호판이 간단한 규칙에 따라 특정 포인트를 줄 수있는 게임을 발명했습니다.

동일한 문자 또는 숫자의 X 금액은 X-1 포인트를 제공합니다.

22 = 1 point
aa = 1 point
5555 = 3 points

숫자는 서로 옆에 있어야하므로 33535는 3의 시퀀스를 나누기 때문에 1 점만 제공합니다.

최소 3의 오름차순 또는 내림차순으로 X 번호 시퀀스는 X 포인트를 제공합니다. 예 :

123 = 3 points
9753 = 4 points
147 = 3 points

포인트 시스템은 1 자리 숫자에 대해서만 작동하므로 1919포인트를 제공하지 않으며 147103, (147) 만 제공합니다.

더 많은 포인트를 만들기 위해 시퀀스를 결합 할 수 있습니다 (예 :

1135 = 4 points (1 point for 11 and 3 points for 135)
34543 = 6 points (3 points for 345 and 3 points for 543)

그러나 추가 포인트를 위해 더 큰 시퀀스를 2 개의 더 작은 시퀀스로자를 수 1234 = 123, 234 (6 points)없습니다. 허용되지 않습니다.

번호판이 부여하는 포인트 수를 결정하기 위해 일련의 작업이 수행됩니다.

덴마크에서는 번호판이 다음과 같이 구성되어 있습니다. CC II III. 여기서 C는 문자이고 I은 정수이므로 입력 예제는이 구조를 반영합니다. 원하는 경우 시퀀스를 자신의 구조에 맞게 만들거나 실제로 모험을 느끼는 경우 프로그램에서 번호판의 구조를 분석하여 전 세계 모든 유형의 번호판에서 작동하게하십시오. 대답에 사용하기로 결정한 구조를 명시하십시오.

원하는 방식으로 입력을 취할 수 있습니다. 문자열이나 배열이 가장 의미가있는 것 같습니다.

테스트 입력 | 산출:

AA 11 111 | 5
AB 15 436 | 3
OJ 82 645 | 0
UI 65 456 | 6
HH 45 670 | 5
YH 00 244 | 5
AJ 00 754 | 1

자신의 구조를 선택하거나 모든 구조를 다루는 특성으로 인해 반드시 승자가 명확하게 결정되는 방법을 볼 필요는 없습니다. 우승자가 결정한 구조에서 가장 짧은 바이트가 될 것이라고 생각합니다. (그리고 CICIC과 같은 입력을 취하지 마십시오.

편집하다:

의견 요청으로 인해 공유 할 정보가 몇 가지 더 있습니다. 오름차순 또는 내림차순의 숫자는 산술 순서를 나타내므로 X +/- a * 0, X +/- a * 1, ... X +/- a * n 등. 예를 들어 3-5-7은 3 + 2 * 0, 3 + 2 * 1, 3 + 2 * 2입니다. 그러나 시퀀스는 0에서 시작하거나 끝나지 않아도됩니다. 0.

더 많은 편집 :

원하는 방식으로 입력을 제공 할 수 있습니다. 공백, 대시 또는 기타 번호판을 더 읽기 쉽게 만드는 것은 입력 할 필요가 없습니다. 대문자 나 그와 비슷한 것을 받아들임으로써 바이트를 절약 할 수 있다면 그렇게 할 수 있습니다. 유일한 요구 사항은 프로그램이 문자와 숫자를 모두 포함하는 문자열 / 배열 / 모든 것을 취할 수 있고 명시된 규칙에 따라 올바른 양의 포인트를 출력 할 수 있다는 것입니다.


느슨하게 관련되어 있습니다. PPCG와 멋진 첫 질문에 오신 것을 환영합니다!
Mr. Xcoder

권장 테스트 사례 : XX 87 654. 나는 당신의 모든 테스트 케이스에는 맞지만 이것에 대해서는 틀린 것을 생각해 냈습니다. 그것을 고치기 위해 노력하고 있습니다.
케빈 크루이 ssen

7
나는 당신이 특정 구조를 고치라고 강력히 제안합니다 ( CCIIIII공백 없음). 그렇지 않으면이 문제에는 객관적인 승리 기준이 부족합니다. "(CICIC과 같은 입력을받지 말고 쉽게 만들 수 있습니다)"는 매우 주관적입니다. 허용되는 구조 란 무엇입니까?
Lynn

1
@Lynn 허용 가능한 구조는 실제로 포인트를 산출 할 수있는 구조이므로 CICIC은 포인트를 산출하는 시퀀스를 가지지 않으므로 허용되지 않습니다. 그리고 무엇보다 '선택한 프로그래밍 언어와 선택한 구조에서 바이트 단위의 최단 답변'이 분명하고 객관적인 승리 기준이 아닌 이유는 무엇입니까? 이 승리 기준은 똑 바르고 따르기 쉬운 규칙을 가지고 있지만 개발자가 원하는 구조를 자유롭게 선택할 수 있습니다. 다른 승자가 많을 수도 있지만 실제로는 무엇입니까?
Troels MB Jensen

3
테스트 사례 : IA99999(감소하는 코드 포인트 시퀀스를 포함하지만 숫자는 포함하지 않습니다).
Zgarb

답변:


7

05AB1E , 25 22 20 18 바이트

공백없이 소문자 영문자와 숫자로 된 문자열을 허용합니다.

Ç¥0Kγ€gXK>OIγ€g<OO

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


설명없이 05AB1E를 읽을 수 없습니다.)하지만 공백없이 입력을 가져 와서 바이트를 절약 할 수 있습니까?
Kevin Cruijssen

@ Mr.Xcoder 나도 의심합니다. 그러나 개인적으로 05AB1E를 읽을 수 없으므로 Emigna 가 공백을 제거 / 무시하는 코드를 추가 했다고 생각했습니다 . 아마도 여분의 바이트없이 암시 적 으로이 작업을 수행하지만, 그렇지 않은 경우 방금 요청했습니다.
Kevin Cruijssen

나는 방금 스윙을하기 위해 코드를 가져 갔고 거룩한 쓰레기는 실제로 어떤 길이나 순서로 작동합니다! 유일한 '문제'는 ABC에 대해 3 점을 제공한다는 것입니다 .ABC는 그 자체로도 틀리지 않습니다. 덴마크에서는 서로 옆에 2 글자 만 있기 때문에 설명하지 않았습니다.
Troels MB Jensen

2
@KevinCruijssen : 입력에 공백이 없으면 몇 바이트를 절약 할 수 있습니다. 우리 스스로 결정할 수있는 부분을 놓쳤다. 고마워요 (설명도오고있다).
Emigna September

@Emigna 나는 그것을 명시 적으로 질문에 언급하지 않았는데, 내가 쓸 때 충분히 힌트를 줄 것이라고 생각했습니다 . 문자열이나 배열은 나에게 가장 의미있는 것처럼 보일 수 있습니다. .
Troels MB Jensen

7

껍질 , 20 16 15 바이트

@Zgarb 덕분에 -1 바이트

공백없이 소문자로 입력합니다.

ṁ??¬o→LεL←gẊ¤-c

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

설명

           Ẋ      Map over all adjacent pairs
            ¤-c   get the difference of their codepoints
          g       Split into groups of equal elements
ṁ                 Map then sum
 ?       ←          If the head of the list is truthy (not 0)
  ?    ε              If the length of the list is 1
   ¬                    return 0
                       Else
    o→L                 return the length + 1
                     Else
        L             return the length

여기 K0있을 수 있다고 생각 ¬합니다.
Zgarb

흠, 이것은 실패한 것 같습니다 IA99999.
Zgarb

@Zgarb, 입력 형식을 소문자로 변경했습니다.
H.PWiz


2

자바 8, 195 바이트

a->{int r=a[0]==a[1]?1:0,i=3,j,p=a[2],x,y,z;for(;i<7;p=a[i++])for(r+=(x=a[i])==p?1:0,j=-4;++j<4;r+=j==0?0:i<6&&p+j==x&x+j==(y=a[i+1])?++i<6&&y+j==(z=a[i+1])?++i<6&&z+j==a[i+1]?5:4:3:0);return r;}

시퀀스를 확인하기 위해 다른 기술을 사용하여 더 많은 골프를 즐길 수 있습니다.

설명:

여기에서 시도하십시오.

a->{                      // Method with character-array parameter and integer return-type
  int r=                  //  Result-integer
        a[0]==a[1]?       //   If the two letters are equal:
         1                //    Start this result-integer at 1
        :                 //   Else:
         0,               //    Start the result-integer at 0 instead
      i=3,j,              //  Index-integers
      p=a[2],x,y,z;       //  Temp integers
   for(;i<7;              //  Loop (1) from index 3 to 7 (exclusive)
       p=a[i++])          //    And after every iteration: Set `p` and raise `i` by 1
     for(r+=(x=a[i])==p?  //   If the current digit (now `x`) equals the previous `p`:
             1            //    Raise the result-integer by 1
            :             //   Else:
             0,           //    Keep the result-integer the same
         j=-4;++j<4;      //   Inner loop (2) from -3 to 3 (inclusive)
       r+=j==0?           //    If `j` is 0:
           0              //     Skip it, so keep the result-integer the same
          :i<6            //    Else-if `i` is not 6,
           &&p+j==x       //    and the previous digit `p` + `j` equals the current digit,
           &x+j==(y=a[i+1])?
                          //    and the current digit `x` + `j` equals the next digit `y`:
            ++            //     Raise index `i` by 1 first,
              i<6         //     and check if `i` is not 6 again,
              &&y+j==(z=a[i+1])?
                          //     and if the new current digit `y` + `j` equals the next digit `z`:
               ++         //      Raise index `i` by 1 first again,
                 i<6      //      and check if `i` is not 6 again,
                 &&z+j==a[i+1]?
                          //      and if the new current digit `z` + `j` equals the next digit:
                  5       //       Raise the result-integer by 5
                 :        //      Else:
                  4       //       Raise it by 4 instead
              :           //     Else:
               3          //      Raise it by 3 instead
           :              //    Else:
            0             //     Keep it the same
     );                   //   End of inner loop (2)
                          //  End of loop (1) (implicit / single-line body)
  return r;               //  Return the result-integer
}                         // End of method


1

R , 153 , 145 , 143 바이트

function(x){p=0;s=sum;if(x[1]==x[2])p=1;a=diff(strtoi(x[3:7]));p=p+s(a==0);l=sort(table(a[a!=0]),T);(p=p+s(l[(l[((s(l)>0)&(l[1]>1))]+1)>2]+1))}

문자형 벡터를 가져 와서 정수를 반환하는 익명 함수
예상 입력z(c("A", "A", "1", "1", "1", "1", "1"))

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

언 골프 버전

function(x){
  pnt <- 0; s <- sum
  if(x[1] == x[2]) pnt <- 1
  a <- diff(strtoi(x[3:7]))
  pnt <- pnt + s(a == 0)
  l <- sort(table(a[a!=0]), T)
  (pnt <- pnt + s(l[(l[((s(l) > 0) & (l[1] > 1))] + 1) > 2] + 1))
}


0

Pyth , 48 42 바이트

내 파이썬 답변에서 직접 포트. b'aa11111 '과 같이 소문자가있는 바이트 문자열로 입력을받습니다.

이것은 Pyth에서 처음으로 코딩 한 것이므로 모든 팁을 환영합니다 : D

KJ=b0VQ=d&KqK-NJ=+b+qNJ*dZ=Z-3yd=K-NJ=JN;b

여기 사용해보십시오


0

자바 스크립트, 216 192 186 202 201 바이트

function f(s){var a=s.split(" "),c=a[1],a=a[0],r,h=b=i=p=0;for(i=0;i<4;i++){if(i<2&(r=a[i+1]-a[i]==a[i+2]-a[i+1])){p++;b=2}if(i>0){if(a[i]==a[i-1]){p++;h++}if(i<3&c[i]==c[i-1])p++}}return h==4?p+b:p-b}

축소되지 않은

function f(s){
    var a=s.split(" "),c=a[1],a=a[0],r,h=b=i=p=0;
    for(i=0;i<4;i++){
        if(i<2&(r=a[i+1]-a[i]==a[i+2]-a[i+1])){
            p++;
            b=2
        }
        if(i>0){
            if(a[i]==a[i-1]){
                p++;
                h++;
            }
            if(i<3&c[i]==c[i-1]) 
                p++;
        }
    }

    return h==4?p+b:p-b
}

기록 편집 :

  • 작동하도록 코드를 좁혔습니다. 0000 XXX형식 . (-24 바이트)
  • @Titus가 제안한대로 편집합니다. (-6 바이트)
  • 4 개의 동일한 숫자가 3 대신 7의 점수를주는 버그를 수정했습니다. (+16 바이트)
  • 마지막 세미콜론을 제거했습니다. (-1 바이트)
  • 코드에서 오타가 수정되었습니다. (바이트 변경 없음)

바이트 수는 어떻게 계산합니까?
Brian H.


메신저 정말 코드 블록이 ... 언어를 인식되지 않는다는 사실을 미워
브라이언 H.

구문 강조를 원하십니까?
H.PWiz

btw, 00007 점을 줘 맞습니까? (산술 시퀀스와 반복되는 숫자 시퀀스로 동시에 읽음)
Brian H.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.