당신이 보는 것을 말하십시오


30

"보고 말하기"또는 "보이는 말"순서는 각각 마지막을 나타내는 일련의 숫자입니다.

1
11 (one one)
21 (two ones)
1211 (one two, one one)
111221 (one one, one two, two ones)
312211 (three ones, two twos, one one)

그리고 계속해서 ... https://oeis.org/A005150

어쨌든, 이것은 초기 코드와 반복 횟수의 두 가지 인수를 취하는 프로그램을 만들기위한 일반적인 코드 골프 도전 (최소 바이트 수 승리)입니다. 예를 들어 "1"과 "2"를 연결하면 결과는 "21"이됩니다. "2"와 "4"를 연결하면 결과는 "132112"가됩니다. 즐기세요!


2
자릿수 목록을 받거나 반환 할 수 있습니까?
LegionMammal978

5
필요한 경우 오래된 질문을 속임수로 닫습니다. 여기에는 제한이 없습니다.
lirtosiast

4
나는 이것을 중복으로 보지 않는다. 이전의 모습과 말은 모두 매우 제한적이었습니다 (하나는 소스 코드에 숫자가없고 다른 하나는 명명 된 변수, 명명 된 함수 또는 명명 된 인수가 없음). 경쟁이 치열한 이전 과제에 대한 답변을 허용하는 언어는 거의 없습니다.
trichoplax

3
숫자 목록으로 출력 할 수 있습니까?
lirtosiast

답변:


9

Pyth, 10 8 바이트

@FryAmTheEggman에 의해 -2 바이트

ussrG8Qz

설명:

            Implicit: z=first line as string, Q=second line
u         the result of reducing lambda G:
  s s rG8   flattened run-length-encoded G
  Q       Q times
  z     starting with z

여기에서 시도 하십시오 .


그러나 적어도 대괄호와 쉼표는 출력하지 않습니다. 숫자 사이에 공백 만은 - P
루이스 Mendo에게

2
소비에트 러시아에서ussrG8Qz
mbomb007

8

CJam, 8 바이트

q~{se`}*

입력 형식은 공백으로 구분 된 첫 번째 숫자, 두 번째 반복입니다.

여기에서 테스트하십시오.

설명

q~   e# Read and evaluate input, dumping both numbers on the stack.
{    e# Run this block once for each iteration...
  s  e#   Convert to string... in the first iteration this just stringifies the input
     e#   number again. In subsequent iterations it flattens and then stringifies the
     e#   array we get from the run-length encoding.
  e` e#   Run-length encode.
}*

배열은 인쇄하기 전에 평평 해 지므로 결과는 필요한 숫자입니다.


6

자바 스크립트, 57 바이트

F=(a,b)=>b?F(a.replace(/(.)\1*/g,c=>c.length+c[0]),b-1):a

재귀는이 문제에 효과적입니다. 첫 번째 매개 변수는 문자열의 초기 숫자이고 두 번째 매개 변수는 반복 수입니다.


당신은 이상한 재귀 카레와 3 바이트를 저장할 수 있습니다 b=>F=a=>b--?F(a.replace(/(.)\1*/g,c=>c.length+c[0])):a내가 실현하기 전에 내 대답을 골프를하면서 당신과 거의 동일한 것으로 나타났습니다;)
ETHproductions

4

MATL , 9 바이트

:"Y'wvX:!

입력은 반복 횟수, 초기 번호입니다.

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

:      % implicit input: number of iterations. Create vector with that size
"      % for loop
  Y'   %   RLE. Pushes two arrays: elements and numbers of repetitions.
       %   First time implicitly asks for input: initial number
  w    %   swap
  v    %   concatenate vertically
  X:   %   linearize to column array
  !    %   transpose to row array
       % implicitly end loop
       % implicitly display

배열로 출력 할 수 있다면 Pyth는 8입니다.
lirtosiast

@ThomasKwa 좋은 지적입니다. 나는 그것이 가능했던 가정
루이스 Mendo

4

R, 87 바이트

function(a,n){for(i in 1:n){r=rle(el(strsplit(a,"")));a=paste0(r$l,r$v,collapse="")};a}

Ungolfed & 설명

f=function(a,n){
    for(i in 1:n){                      # For 1...n
        r=rle(el(strsplit(a,"")))       # Run length encoding
        a=paste0(r$l,r$v,collapse="")   # concatenate length vector and values vector and collapse
    };
    a                                   # print final result
}

3

펄 6, 63 바이트

say (@*ARGS[0],*.trans(/(.)$0*/=>{$/.chars~$0})…*)[@*ARGS[1]]

이것은 지금 당장 얻을 수있는 한 짧습니다. 축소 할 수있는 까다로운 플래그가있을 수 있습니다. 확실하지 않습니다.


3

루비, 63 바이트

질문이 그것을 요구하는 것처럼 보이기 때문에 전체 프로그램. 입력을 명령 행 인수로 사용합니다.

i,n=$*
n.to_i.times{i=i.gsub(/(.)\1*/){"#{$&.size}#$1"}}
puts i

아니요, gsub!문자열 $*이 고정 되어 있으므로 사용할 수 없습니다 : /


-p바이트를 저장하기 위해 플래그를 사용할 수 있습니까? 사용하는 gsub경우 마치 STDIN 라인 에서 작동합니다 $_.gsub!. 그런 다음 명령 행 인수는 반복이므로 n,=$*STDIN에서 다른 입력을 읽습니다.
Value Ink

3

망막 , 46 45 27 바이트

마틴은 골프를 돕기 위해 많은 일을했습니다.

+`(\d)(\1?)*(?=.*_)_?
$#2$1

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

다음 형식으로 입력을받습니다.

<start><count>

<start> 초기 번호입니다.

<count> 단항, 모든 밑줄 및 반복 횟수입니다.

단일 반복, 20 16 바이트 :

(\d)(\1?)*
$#2$1


2

자바 스크립트 ES6, 71 바이트

(m,n)=>[...Array(n)].map(_=>m=m.replace(/(.)\1*/g,x=>x.length+x[0]))&&m

문자열과 숫자로 입력을받습니다.


('1',2)12언제해야하는지 알려줍니다 21. 당신의 길이는 대치의 문자보다 앞에 와야합니다.
Mwr247

@ Mwr247 죄송합니다. 죄송합니다.
ETHproductions

2

펄 5, 50 바이트

$_=pop;for$i(1..pop){s/(.)\1*/length($&).$1/ge}say

인수는 역순입니다 (반복 횟수 및 시드). 예:

> perl -E'$_=pop;for$i(1..pop){s/(.)\1*/length($&).$1/ge}say' 4 2
132112
> perl -E'$_=pop;for$i(1..pop){s/(.)\1*/length($&).$1/ge}say' 0 2
2
> perl -E'$_=pop;for$i(1..pop){s/(.)\1*/length($&).$1/ge}say' 2 0
1110
> perl -E'$_=pop;for$i(1..pop){s/(.)\1*/length($&).$1/ge}say' 1 10
1110
> perl -E'$_=pop;for$i(1..pop){s/(.)\1*/length($&).$1/ge}say' 11 1
3113112221232112111312211312113211

서브 루틴으로 바이트 $_대신 바이트를 끝내면 면도 할 수 say있지만 테스트하지는 않았습니다. 현재 솔루션은 프로그램입니다.
msh210

2

05AB1E , 9 바이트 (비경쟁)

Emigna의 의견으로 수정되었습니다. 아래 / 편집을 참조하십시오.

F.¡vygyÙJ

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


1
나는 당신이 2 개의 인수 (초기 번호와 반복 횟수)를 취하는 것에 대한 부분을 놓쳤다 고 생각합니다. 운 좋게도 당신은 F시작 부분에 추가 하고 다음과 같은 주장을 취할 수 있습니다iterations,initialNo
Emigna

1
그리고 그것에 의해 잃어버린 바이트는로 대체 Dgs하여 회복 될 수 있습니다 gy.
Emigna

@Emigna y그 맥락에서 무엇을합니까?
매직 문어 Urn

1
첫 번째 y와 동일하게 루프에서 현재 값을 푸시합니다. 따라서 y를 복제하고 상단으로 바꾸는 대신 필요할 때 다시 밀어 넣으십시오.
Emigna 2012

@ Emigna 그것은 여전히 ​​haha를 배울 것이 많이있는 것 같습니다.
Magic Octopus Urn


1

수학, 81 73 바이트

FromDigits@Nest[Flatten[(Tally/@Split@#)~Reverse~3]&,IntegerDigits@#,#2]&

코드로 표시하기 위해 4 개의 공백이있는 코드를 추가하십시오 :)
Ogaday


1

Stax , 10 바이트

Çα▲ì4↔┌j█♀

온라인으로 실행하고 디버그하십시오!

적절한 IO 형식으로 너무 많은 바이트를 소비했습니다 ...

설명

압축이 풀린 버전을 사용하여 설명합니다.

DE|R{rm:f$e
D              Do `2nd parameter` times
 E             Convert number to digits
                   Starting from the `1st parmeter`
  |R           Convert to [element, count] pairs for each run
    {rm        Revert each pair
       :f      Flatten the array
         $     Convert array to string of digits
          e    Convert string of digits to integer

필수 부분은 D|R{rm:f(8 바이트)입니다.

첫 번째 입력을 숫자 배열로 사용할 수 있으면 전체 프로그램을 9 바이트로 작성할 수 있습니다. 온라인으로 실행하고 디버그하십시오!


0

파이썬 3, 138 바이트

나는 재귀 접근법을 사용했다.

def g(a,b):
 if b<1:return a
 else:
  c,n=1,'';f,*a=str(a)+'_'
  for i in a:
   if i==f:c+=1
   else:n+=str(c)+f;f,c=i,1
  return g(n,b-1)

함수는 두개의 int를 받아 ab같이 설명했다.

여기의 항목이 얼마나 간결한 지 놀랍습니다! 어쩌면 누군가 더 나은 파이썬 방법을 사용할 수도 있습니다.


0

펄, 38 + 2 바이트

for$i(1..<>){s/(.)\1*/(length$&).$1/ge}

-p플래그가 필요합니다 :

$ perl -pe'for$i(1..<>){s/(.)\1*/(length$&).$1/ge}' <<< $'1\n5'
312211

입력은 여러 줄 문자열입니다.

input number
numbers of iterations

모든 단계가 필요한 경우 44 + 2 바이트 인 다음으로 변경할 수 있습니다.

$ perl -nE'for$i(1..<>){s/(.)\1*/(length$&).$1/ge,print}' <<< $'1\n5'
11
21
1211
111221
312211

0

철탑 , 11

i:At,{n,A}j

작동 방식 :

i      # Get input from command line.
:A     # Initialize A
  t    # Set A to the top of the stack.
,      # Pop the top of the stack.
{      # Start a for loop.
 n     # Run length encode the stack.
  ,    # Seperate command and iteration
   A   # Repeat A times.
    }  # End for loop.
j      # Join the stack with '' and print it and then exit. 

0

SmileBASIC, 100 98 바이트

DEF S N,T?N
WHILE""<N
C=C+1C$=SHIFT(N)IF C$!=(N+@L)[0]THEN O$=O$+STR$(C)+C$C=0
WEND
S O$,T-T/T
END

모든 단계를 인쇄합니다. T/TT가 0 일 때 프로그램을 종료합니다.





0

파이썬 3.6, 100 98 93 바이트

import re
f=lambda s,n:n and eval("f'"+re.sub(r'((.)\2*)',r'{len("\1")}\2',f(s,n-1))+"'")or s

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

이것은 문자열과 정수를 취하는 람다를 생성하고 문자열을 반환합니다. 예:f('1', 5) == '312211'

모든 반복 문자 ( ((.)\2*)정규식)를 찾아 길이와 문자 자체 (f)에서 f- 문자열을 r'{len("\1")}\2'만든 다음 평가합니다. 카운터 ( n and ...f(s,n-1)... or s)에서 재귀 를 사용하여 적절한 기능과 루프를 정의하지 않아도됩니다.

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