하나 1, 둘 1, 하나 2 하나 1


16

도전:

0이 아닌 양의 정수를 입력하고 아래 설명 된 순서대로 다음 4 개의 숫자를 출력하는 프로그램을 작성하십시오.

참고 : 입력이 실제로 양의 0이 아닌 정수인지 확인하는 것은 필요하지 않습니다.

순서:

이 순서의 모든 숫자 (입력 된 첫 번째 숫자는 제외)는 n 자리로 구성되어야하며, 여기서 n은 짝수입니다. 숫자를 n / 2 쌍으로 나누면 각 쌍에 대해 첫 번째 숫자는 두 번째 숫자가 이전 숫자에 나타난 횟수 여야합니다.

시각적 설명 :
이 예제 "시퀀스 스타터"또는 입력 고려 입력에 1 "6", 1 "5"및 2 "7" 6577
이 있으므로 시퀀스의 다음 숫자는 다음과 같아야합니다 161527
.

입력에 너무 많은 자릿수 (한 자릿수의 9보다 많은 숫자)가 있으면 올바른 출력을 얻을 수 없습니다.
예 : 111111111111(12 1)
다음 숫자는 12 1을 나타냅니다. 따라서 우리는 그것을 9 1과 3 1로 나눕니다 (sum 9 + 3 = 12)
다음 숫자 :9131

입력에 대해 4 번 반복하여 출력해야합니다 (4 개의 정수 목록 / 배열을 반환하거나 공백으로 구분하여 출력하면 줄 바꿈도 허용됩니다)

"숫자는 여러 가지 방법으로 쓸 수 있는데 어떻게 쓰나요?" :
당신이 그것에 대해 생각하면, 입력 예 6577를 271516 (2 7, 1 5, 1 6)으로 쓸 수도 있습니다. 그러나 이것은 유효하지 않은 출력입니다. 왼쪽에서 오른쪽으로 숫자를 반복해야합니다. 76577의 양을 반복 한다면 6의 양과 5의 양을 반복하면 유효한 결과는 다음과 같습니다.271615

예제 I / O :

입력 : 75
출력 :1715 211715 12311715 4112131715

입력 : 1
출력 :11 21 1211 3112

입력 : 111111111111(12 1)
출력 :9131 192113 31191213 23411912


: 시퀀스가 다르기 때문에이 질문을 "당신이 무엇을보고 말"달리 https://oeis.org/A005150 <-이 같은이 한 반환 번호 :
입력 : 1211 출력 : 111,221가
동안을 위해 부탁 해요 순서 할 것이다
입력 : 1211 출력 : 3112

두 시퀀스는 다르며 다른 알고리즘이 필요합니다.
요청한 순서 : https://oeis.org/A063850
"가능한 복제"순서 : https://oeis.org/A005150


중요한 사양 :

이 질문에 대답하려는 일부 사람들에게는 충분히 명확하지 않았으므로 k> 9가 "kc"가 아닌 (c는 char) 9c (k-9) c 등인 k 문자에 대한 올바른 출력입니다. 12 1은 121(12 1)이 아니라 9131(9 1, (12-9) 1 등)입니다.

확실하지 않은 경우, 코드가 홀수 자리수 (예 : 121)로 숫자를 출력하면 코드의 순서가 잘못되어 짝수 자리수를 출력해야합니다.


이것은 이므로 최소한의 바이트로 승리합니다.


제안 된 테스트 1111111111111111111
사례


쉼표로 구분 된 정수 목록으로 출력 할 수 있습니까? 출력이 입력 정수로 시작하여 길이가 5 일 수 있습니까?
Greg Martin

마지막 테스트의 경우, 마지막 숫자는 안 23411912대신 23411219?
Greg Martin

@GregMartin 참으로. 지적 해 주셔서 감사합니다. 그러나 아니요, 줄 바꿈이나 공백 이외의 것으로 분리 된 정수 또는 출력 정수 목록을 반환 할 수 없습니다. 그리고 아닙니다. 입력을 출력
해서는 안됩니다

답변:


6

PowerShell , 111104 바이트

$z=$args;1..4|%{($z=-join($z-split'\B'|group|%{for($c,$n=$_.Count,$_.Name;$c-gt9;$c-=9){"9$n"}"$c$n"}))}

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


당신은 $i당신의 루프에서 사용하지 않기 때문에 , 그냥 직접 처럼 루프 하지 않는 이유$z=$args;0..3|%{...
AdmBorkBork

@AdmBorkBork 나는 그것에 대해 생각했지만 할당 후 더 길어질 것이라고 느꼈습니다 $args(그리고 원래는 내가 사용할 것이라고 생각했습니다 $i). 나는 그것을 측정하려고했지만 질문은 끝났습니다.
briantist

@AdmBorkBork ... aaaand 편집 (감사)
briantist

5

파이썬 2 , 116 바이트

x=input()
exec"x=''.join(x.count(n)/9*(`9`+n)+`x.count(n)%9`+n for i,n in enumerate(x)if n not in x[:i]);print x;"*4

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


19 개의 출력 1111111111111111111이 잘못되었습니다. 해야 919111하지만, 제공919121
CSharpie

많은 값에 대해 출력이 잘못되었습니다. 예 : image.prntscr.com/image/ed4c523b105b41169e8aa8c46a95f963.png , 입력 11출력이 있어야 21 1211 3112 132112하는 이유는 왜 111전체 체인이 잘못 진행되는 첫 번째 반복으로 출력되는지 이해하지 못합니다
P. Ktinos

@ P.Ktinos 입력 형식이 잘못되었습니다. 문자열이어야합니다 (내가하고있는 테스트의 남은 것이어야 함). 링크 수정
Rod

4

05AB1E , 30 23 21 바이트

4F©Ùv9y«®y¢9‰`U×XyJ}=

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

설명

4F                     # 4 times do:
  ©                    # store a copy of the current number in register
   Ùv                  # for each unique digit y in the number
     9y«               # concatenate 9 with y
        ®y¢            # count occurrences of y in current number
           9‰          # divmod by 9
             `U        # store the result of modulus in X
               ×       # repeat the number "9y" result_of_div times
                X      # push result of modulus
                 y     # push y
                  J    # join everything to one number
                   }   # end inner loop
                    =  # print the current number without popping

@MagicOctopusUrn : 예를 들어 TIO 링크의 예와 같이 9 자리 이상의 숫자가 반복되는 숫자에는 작동하지 않습니다.
Emigna

오 .. 지금 알았어
매직 문어 Urn

1

수학, 117 바이트

Grid@{Rest@NestList[FromDigits[Join@@(Reverse/@Tally@IntegerDigits@#//.{a_,b_}/;a>9->{9,b}~Sequence~{a-9,b})]&,#,4]}&

오래 걸리지 않아도 될 것 같습니다.


1

C # 246 바이트

namespace System{using Linq;using f=String;class p{static void Main(f[] s){f p=s[0];for(int i=0,n;i++<4;Console.Write(p+" "))p=f.Concat(p.GroupBy(c=>c).SelectMany(g=>new int[(n=g.Count())/9].Select(_ =>"9"+g.Key).Concat(new[]{n%9+""+g.Key})));}}}

언 골프 드 :

namespace System
{
    using Linq;
    using f = String;
    class p
    {
        static void Main(f[] s)
        {
            f p = s[0];
            for (int i = 0, n; i++ < 4; Console.Write(p + " "))

                p = f.Concat(p.GroupBy(c => c).SelectMany(g =>
                    new int[(n = g.Count()) / 9].Select(_ => "9" + g.Key).Concat(new[] { n % 9 + "" + g.Key }
                )));
            Console.ReadKey();
        }
    }
}

여기에서 시도하십시오 (컴파일되면 하단 프레임에 입력을 입력하고 ENTER를 누르십시오)


0

젤리 , 27 바이트

L,Ḣ
D©®i$ÞŒgs9$€Ç€€FḌµ4µÐ¡Ḋ

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

체인을 중첩 할 수 없으므로 연속적인을 중첩 할 수 없습니다.

별도의 링크가있는 중첩 : 27 바이트

누적 대신 인쇄 : 27 바이트.

설명

L,Ḣ                     - helper function, does the look-and-say. Input is a list of digits
 ,                      - return 2-tuple of:
L                       -   length of input
  Ḣ                     -   first element of input

D©®i$ÞŒgs9$€Ç€€FḌµ4µÐ¡Ḋ - main link, takes input as integer
                 µ4µÐ¡  - repeat 4 times, saving the results of each iteration:
D                       -   convert integer to list of digits
 ©                      -   save into register, for later use
  ®i$Þ                  -   sort list's elements by first occurrence in list
      Œg                -   group runs of equal elements
        s9$€            -   split each run into sets which are at most 9 elements long
            Ç€€         -   do the look-and-say with helper function
               FḌ       -   flatten and convert back into integer for next iteration
                      Ḋ - remove the first element from the list since it includes the
                           initial element

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