하나 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.