도전:
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)으로 쓸 수도 있습니다. 그러나 이것은 유효하지 않은 출력입니다. 왼쪽에서 오른쪽으로 숫자를 반복해야합니다. 7657
7의 양을 반복 한다면 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)로 숫자를 출력하면 코드의 순서가 잘못되어 짝수 자리수를 출력해야합니다.
이것은 코드 골프 이므로 최소한의 바이트로 승리합니다.
답변
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"}))}
답변
파이썬 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
답변
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
답변
수학, 117 바이트
Grid@{Rest@NestList[FromDigits[Join@@(Reverse/@Tally@IntegerDigits@#//.{a_,b_}/;a>9->{9,b}~Sequence~{a-9,b})]&,#,4]}&
오래 걸리지 않아도 될 것 같습니다.
답변
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를 누르십시오)
답변
젤리 , 27 바이트
L,Ḣ
D©®i$ÞŒgs9$€Ç€€FḌµ4µÐ¡Ḋ
€
체인을 중첩 할 수 없으므로 연속적인을 중첩 할 수 없습니다.
설명
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
답변
PHP, 141 바이트
for($a=$argn;$i++<4;$a=$o,print$a._,$o="")foreach(array_count_values(str_split($a))as$n=>$c)$o.=str_repeat("9$n",$c/9^0).($c%9?($c%9).$n:"");