청크 + 자릿수 목록 열거


12

소수 자릿수 목록이 있습니다.

4, 4, 4, 7, 7, 9, 9, 9, 9, 2, 2, 2, 4, 4

소수 자릿수 목록을 항목이라고합니다. 동일한 숫자와 인접한 숫자를 그룹화하여 이러한 항목에서 "청크"를 만들 수 있습니다. 1부터 시작하여 청크가 원래 목록에 나타나는 순서대로 1 씩 증가하는 각 청크에 고유 번호를 할당하고 싶습니다. 따라서 주어진 예제의 출력은 다음과 같습니다.

1, 1, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 5, 5

입력 형식

자릿수 목록. (0-9) 언어 내장 기능을 사용하여 원하는대로이 목록을 읽을 수 있습니다. 인코딩 : ASCII

출력 형식

구분 기호로 구분 된 일련의 10 진수입니다. 프로그램은 항상 동일한 구분자를 사용해야합니다. 분리 문자는 0 비트보다 길어야합니다. 인코딩 : ASCII

표준 허점이 적용됩니다.


8
엄격한 입력 및 출력 형식에 대한 특별한 이유가 있습니까?
관련이없는 문자열

2
@UnrelatedString 흠, 나는 그들을 풀 것이다.
noɥʇʎԀʎzɐɹƆ

8
IO는 여전히 다소 엄격합니다. "입력 및 출력은 목록과 같습니다"라고 말하고 사이트 기본값이이를 처리하도록 할 수 없습니까?
Jo King

2
목록이 비어 있지 않다고 가정 할 수 있습니까?
조 왕

1
정의 별 목록 에는 이미 구분자가 있습니다. 그것이 목록 인 이유입니다. 또한의 의미를 이해하지 못합니다 You may use your language built-ins to read this list however you want.. 제출할 때 목록 변환기를 나열하기 위해 문자열을 포함시켜야합니까? 그리고 되어 우리는 목록으로 출력 허용?
Jo King

답변:


7

Python 3.8 (시험판) , 41 바이트

lambda l,n=0:[n:=n+(l!=(l:=x))for x in l]

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

:=과제 표현 의 마술 해마 를 찬양하십시오 .


파이썬 2 , 42 바이트

n=0
for x in input():n+=x!=id;id=x;print n

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


흠,이게 Pyth에 얼마나 걸립니까?
noɥʇʎԀʎzɐɹƆ

허, 나는 id2 바이트 길이 때문에 피했다 ...
Outgolfer Erik

Oof 좋은 생각id
U10-Forward

@ noɥʇʎԀʎzɐɹƆ 간단한 번역을위한 8 바이트 : 온라인으로 사용해보십시오!
isaacg



3

젤리 , 6 5 바이트

ŒɠµJx

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

UnrelatedString 덕분에 1 바이트를 절약했습니다 !

어레이의 입력 및 출력 (개폐 브래킷 포함)

작동 원리

ŒɠµJx - Main link, takes one argument:                       [7, 7, 5, 5, 5, 1]
Œɠ    - Get the lengths of consecutive elements:             [2, 3, 1]
  µ   - Call these lengths A
   J  - range(length(A))                                     [1, 2, 3]
    x - Repeat each element by the corresponding value in A: [1, 1, 2, 2, 2, 3]


1
@UnrelatedString이 모든 새로운 원자들!
케어 드 coinheringaahing




2

펄 6 , 21 바이트

{+<<[\+] $,|$_ Zne$_}

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

목록을 가져 와서 목록을 반환하는 익명 코드 블록. 이것은 목록의 누적 합계를 취하는 것보다 인접한 요소의 각 쌍이 같지 않은지를 비교하여 작동합니다.




2

MATL , 8 바이트

Y'wn:wY"

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

설명:

    Y'      % run-length encoding
    w       % swap elements in stack
    n       % number of elements in array / size along each dimension
    :       % range; vector of equally spaced values
    w       % swap elements in stack
    Y"      % replicate elements of array
            % (implicit) convert to string and display





1

펄 5 , 27 바이트

s/\d/$i+=$&!=$p;$p=$&;$i/ge

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

명령 행 옵션 -p은 perl이 STDIN의 입력 행을 "default variable"로 읽도록합니다 $_. 그런 다음 모든 숫자를 검색 $_하여 카운터 로 바꿉니다 $i. 그리고 $i이전 자릿수와 다른 각 자릿수에 대해 증가하며, 첫 번째 자릿수이므로 카운터는에서 시작합니다 1. 이전 숫자는에 저장됩니다 $p.


1

Pyth , 13 11 바이트

s.e*]hkhbr8

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

         r8  # Run-length encode (implicit argument is the input) (-> [[frequency, char], ...]
 .e          # Enumerated map (current element is b, index is k) over rQ8
   *]hk      # [ k+1 ] *
       hb    #           b[0]
s            # Reduce list on + ([a]+[b] = [a,b])

Mr. Xcoder 덕분에 -2 바이트


hMsM._+0nVt-2 바이트
Mr. Xcoder

또는 접근 방식을 유지하려는 경우 -2 와 rQ8동일 할 수 있습니다.r8.ns
Mr. Xcoder

아 좋다, 문서는 어떤 기능이 암묵적으로 작용하는지 언급하지 않았다Q
ar4093

1

스칼라 , 75 바이트

s=>s.scanLeft(("",0))((x,y)=>(y,x._2+(if(x._1!=y)1 else 0))).tail.map(_._2)

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

입력과 출력이 쉼표로 구분 된 문자열 (목록이 아닌) 이어야하는 경우 102 바이트입니다.

s=>s.split(", ").scanLeft(("",0))((x,y)=>(y,x._2+(if(x._1!=y)1 else 0))).tail.map(_._2).mkString(", ")

1

젤리 , 5 바이트

nƝÄŻ‘

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

나는 처음에는 4 바이트 (동일한 프로그램이지만 제외 Ż)를 목표로했지만 감독으로 인해 매번 1 을 앞에 붙여야 한다는 것을 빨리 깨달았습니다 ... 젤리에 또 다른 5 바이트가 있지만, 나는 실제로 다른 방법을 사용하기 때문에 이것을 유지하십시오.

LLiLi+1,1i<|L|



1

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

정수 배열로 입력을받습니다.

a=>a.map(p=n=>i+=p!=(p=n),i=0)

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

댓글

a =>                // a[] = input array
  a.map(p =         // initialize p to a non-numeric value
  n =>              // for each value n in a[]:
    i +=            //   increment i if:
      p != (p = n), //     p is not equal to n; and update p to n
    i = 0           //   start with i = 0 (chunk counter)
  )                 // end of map()

1

PHP , 52 바이트

while(''<$d=$argv[++$x])echo$i+=$argv[$x-1]!=$d,' ';

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

명령 행을 통해 입력하고로 출력합니다 STDOUT.

성가신 '0' == 0비교 버그 수정 을 위해 @ Night2에 Thx !


@ Night2 좋은 캐치! 업데이트 및 수정되었습니다. 고마워!
640KB



0

추가 ++ , 23 바이트

D,f,@*,BGd€bL$bLRz€¦XBF

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

작동 원리

D,f,@*,     - Define a function, f, that takes one argument:  [7 7 5 5 5 1]
       BG   - Group neighbouring elements together:           [[[7 7] [5 5 5] [1]]]          
       d    - Duplicate:                                      [[[7 7] [5 5 5] [1]] [[7 7] [5 5 5] [1]]]
       €bL  - Get the length of each:                         [[[7 7] [5 5 5] [1]] [2 3 1]]
       $bLR - Length, then range of length:                   [[2 3 1] [1 2 3]]
       z    - Zip together:                                   [[2 1] [3 2] [1 3]]
       €¦X  - Reduce each by repetition:                      [[1 1] [2 2 2] [3]]
       BF   - Flatten:                                        [1 1 2 2 2 3]
            - Due to the * in the function definition,
                 return the whole stack:                      [1 1 2 2 2 3]


0

레티 나 0.8.2 , 34 바이트

\b\d+\b(?<=(\b(\3|(\d+))\D*)*)
$#3

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

\b\d+\b

각 숫자를 차례로 일치시킵니다.

(?<=(...)*)

가능한 한 많은 경기를 거꾸로 살펴보십시오. (다음 항목은 lookbehind가 작동하는 방식이므로 오른쪽에서 왼쪽으로 정렬됩니다.)

\D*

분리기를 건너 뜁니다.

(\3|(\d+))

지난번과 같은 숫자를 일치 시키려고하지만 실패하면 아무 숫자 나 일치하지만 새 숫자와 일치해야한다는 것을 기억하십시오.

\b

정수가 일치하는지 확인하십시오.

$#3

새로운 숫자의 수를 세십시오.


0

Stax , 10 바이트

▓ª2ªmD?Ä╧╖

실행 및 디버깅

출력은 공백을 구분 기호로 사용합니다. 입력은 쉼표를 구분 기호로 사용하고 이제는 중괄호를 사용하여 정확한 사양을 따릅니다.


0

C (gcc) , 62 61 바이트

이것은 완전한 프로그램이 함수 제출보다 짧은 곳에서 내가 한 몇 가지 항목 중 하나입니다!

첫 번째 단계에서는 이전 값에 신경 쓰지 않으므로 argv어딘가에 대한 포인터이며 [0..9] 사이에있을 가능성이 거의 없다는 사실에 의존합니다 !

s;main(i,j){for(;~scanf("%d,",&i);j=i)printf("%d ",s+=j!=i);}

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



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