차원 카운트 다운


17

n에서 k 차원 카운트 다운을 표시하는 함수 f (n, k)를 작성하십시오.

5의 1 차원 카운트 다운은 다음과 같습니다.

 54321

5의 2 차원 카운트 다운은 다음과 같습니다.

 54321
 4321
 321
 21
 1

마지막으로 5의 3 차원 카운트 다운은 다음과 같습니다.

 54321
 4321
 321
 21
 1
 4321
 321
 21
 1
 321
 21
 1
 21
 1
 1

공식적인 정의

n에서 1 차원 카운트 다운은 숫자 n, n-1, ..., 1이 연결된 단일 행입니다 (줄 바꾸기가 이어짐).

모든 k에 대해 1의 k 차원 카운트 다운은 단일 선입니다.

 1

n> 1 및 k> 1의 경우, n에서의 k- 차원 카운트 다운은 n에서의 (k-1)-차원 카운트 다운에 이어 n-1로부터의 k- 차원 카운트 다운이다.

입력

선택한 모든 형식의 두 양의 정수 k 및 n <= 9.

산출

n부터 k 차원 카운트 다운, 각 1 차원 카운트 다운 후 줄 바꿈. 출력에 추가 줄 바꿈이 허용됩니다.

채점

표준 골프 득점.

보너스 예

다음은 k> n, 3의 4 차원 카운트 다운 (실제 솔루션에 포함되지 않는 추가 주석 포함)이있는 예입니다.

 -- 3-dimensional countdown from 3
 321
 21
 1
 21
 1
 1
 -- 4-dimensional countdown from 2:
 ---- 3-dimensional countdown from 2:
 21
 1
 1
 ---- 4-dimensional countdown from 1:
 1  

설명 :

라인의 숫자는 인접 할 필요는 없지만 균등 한 간격을 두어야합니다.

원하는 경우 함수 대신 전체 프로그램을 작성할 수 있습니다.


테스트 사례를 올바르게 이해하고 있는지 잘 모르겠습니다. 2의 3D 및 4D 카운트 다운이 동일합니까?
Dennis

1
@Dennis 의도는 2에서 4D 카운트 다운 = 2에서 3D 카운트 다운 + 1에서 4D 카운트 다운
Sp3000

하나에서 3D 카운트 다운을 말해서는 안됩니까?
Destructible Lemon

출력에 추가 줄 바꿈이 허용됩니다. 그것은을 참고하십시오합니까 후행 줄 바꿈 또는 어디서든 발생할 수 있습니다?
Dennis

@Dennis 추가 줄 바꿈은 어디서나 발생할 수 있습니다. 글쎄, 543 \ n21은 괜찮지 만 '1'이후에는 괜찮습니다.
Eric Tressler

답변:


15

파이썬, 60 바이트

f=lambda n,k:n>1<k and f(n,k-1)+f(n-1,k)or'987654321\n'[~n:]

Ideone에서 테스트하십시오 .

작동 원리

nk 차원 카운트 다운은 단일 기본 사례로 정의 할 수 있습니다.

만약 N = 1 또는 K = 1 , 출력은 N || n-1 || ... || 1 || ¶ 여기서 || 연결을 나타냅니다.

질문에서 재귀 적 정의를 사용하여 n> 1 이고 k> 1이면를f(n,k) 반환 f(n,k-1)+f(n-1,k)합니다 . 그렇지 않으면에서 마지막 n + 1 자를 반환합니다 .'987654321\n'


데니스는 너무 좋아 그래도 어떻게 했어?
clismique

내 유일한 통찰력은 두 기본 사례를 결합 할 수 있다는 것입니다. 나머지는 재귀 적 정의를 직접 번역 한 것입니다.
Dennis

8

젤리 , 8 바이트

R¡UḌFṚp⁷

이것은 명령 행 인수로 nk 를 예상하는 전체 프로그램입니다 .

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

작동 원리

R¡UḌFṚp⁷  Main link. Left argument: n. Right argument: k

 ¡        Repeat the link to the left k times.
R           Range; map each integer j in the previous return value to [1, ..., j].
  U       Upend; reverse each 1-dimensional array in the result.
   Ḍ      Undecimal; convert each 1-dimensional array from base 10 to integer.
    F     Flatten the resulting array.
     Ṛ    Reverse the result.
      p⁷  Cartesian product with '\n'. (Join is weird for singleton arrays.)

Y대신에 작동 하지 p⁷않습니까?
마일 1

일종의. 의 경우을 5, 1표시합니다 [54321].
Dennis

5

자바 스크립트, 40 38 37 바이트

@ edc65 덕분에 1 바이트가 절약되었습니다.

f=(n,k)=>k*n?f(n,k-1)+f(n-1,k):n||`
`

이전 답변

@Neil 덕분에 38 바이트 :

f=(n,k)=>k&&n?f(n,k-1)+f(n-1,k):n||`
`

40 바이트 :

f=(n,k)=>k&&n?f(n,k-1)+f(n-1,k):n?n:'\n'

1
||대신을 사용하여 1 바이트를 저장하십시오 ?n:. `s 대신 리터럴 개행을 사용하여 다른 바이트를 저장하십시오 '\n'.
Neil

추가 줄 바꿈없이 할 수있는 최선은 43이었습니다.f=(n,k)=>n?(k?f(n,k-1):n)+f(n-1,k):k?``:`\n`
Neil

@Neil 바이트를 계산하기 위해 notepad ++를 사용하고 리터럴 줄 바꿈은 2 문자로 계산됩니다.
Hedi

어쩌면 브라우저 스크래치 패드에서 시도해 볼 수 있습니까?
Neil

1
영리한 +1. 그러나 *대신 사용하십시오 &&.
edc65

3

파이썬, 76 75 바이트

@ Sp3000 덕분에 -1 바이트

c=lambda n,k:k>1and'\n'.join(c(n-i,k-1)for i in range(n))or'987654321'[-n:]

과 영업 이익에서 설명하는 절차 밖으로 충치가 : 감소 조인 n에 대한 결과 k-1의 재귀의 기초와 줄 바꿈을 'n...1'할 때 문자열 k입니다 1( k보다 크지 1우리가 긍정적 보장되기 때문에 k입력).

이데온의 테스트 사례


3

파이썬, 86 81 80 바이트

o=lambda d,n:"987654321"[-n:]if d<2else"\n".join([o(d-1,n-x) for x in range(n)])

d차원의 수이고 n카운트 다운 수입니다.

곧 설명을 게시합니다.

편집 # 1 : 람다로 변경했습니다.

편집 # 2 : @DestructibleWatermelon 덕분에 1 바이트가 절약되었습니다.


3

하스켈, 57 바이트

n#1='\n':(show=<<[n,n-1..1])
1#_=1#1
n#k=n#(k-1)++(n-1)#k

사용 예 : 5 # 3->"\n54321\n4321\n321\n21\n1\n4321\n321\n21\n1\n321\n21\n1\n21\n1\n1" .

정의의 직접적인 구현.


2

라켓 215 바이트

(define(g n k(s(number->string n)))(cond [(< k 2) n]
[else(define o(for/list((i(string-length s)))
(string->number(substring s i))))(for/list((x o))(g x(- k 1)))])) 
(define(f n k)(for-each println(flatten(g n k))))

테스트 :

(f 54321 3)

54321
4321
321
21
1
4321
321
21
1
321
21
1
21
1
1

음 ... 3D 모드에서 왜 54321두 번 나타 납니까?
Outgolfer Erik

문제를 정리하려고합니다.
rnso

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ 문제가 해결되었습니다.
rnso

멋지다. 또한 많은 공백을 제거했다.
Outgolfer Erik

라켓에서 lambda ( λ)를 사용하는 것은 항상 사용하는 것보다 바이트가 적습니다 define. 또한의 입력 값 n은을 (를) 빌드하는 숫자로 지정되었습니다 (range 1 n). 당신의 교체에 대한 참조 cond으로 if온 바이트 저장 당신 때문에 else.
Steven H.

2

J, 38 37 32 바이트

a:":@>@-.~&,0<@-."1~0&(](-i.)"0)

이것은 LHS에서 k 를 받는 함수입니다. 해당 를, RHS에서 .

@ Adám의 아이디어로 5 바이트를 절약했습니다.

용법

   f =: a:":@>@-.~&,0<@-."1~0&(](-i.)"0)
   3 f 5
5 4 3 2 1
4 3 2 1  
3 2 1    
2 1      
1        
4 3 2 1  
3 2 1    
2 1      
1        
3 2 1    
2 1      
1        
2 1      
1        
1

설명

a:":@>@-.~&,0<@-."1~0&(](-i.)"0)  Input: k on LHS, n on RHS
                    0&(        )  Repeat k times on initial value n
                        (   )"0   For each value x
                          i.        Make the range [0, x)
                         -          Subtract x from each to make the range [x, 1]
                       ]            Return the array of ranges
            0  -."1~              Remove the zeros from each row
             <@                   Box each row
          &,                      Flatten the array of boxes
a:     -.~                        Remove the empty boxes
     >@                           Unbox each
  ":@                             Convert it into a string and return

내 접근 방식 을 사용할 수 있어야합니다 .
Adám

@ Adám 감사합니다, 시도해 볼까요
마일

2

디아 로그 APL , 18 바이트

n을 프롬프트 한 다음 k 를 프롬프트합니다 .

~∘'0'1⍕(⌽⍳)⍤0⍣⎕⊢⎕

~∘'0'⍤1(제거 ~)를 ( ) 0을 ( '0'(행에서)⍤1 ) (공백 패딩을 필요에 따라)의

의 캐릭터 표현

(⌽⍳)⍤0⍣⎕ 반대로 ( 까지) 계수 ( )는 각 스칼라 ( ⍤0), 반복 ( ) 입력 ( ) 회

의 위에

숫자 입력

TryAPL 온라인!


2

C 93 바이트

반복적 인 구현.

m,i,j;f(n,k){for(;m<k+2;m++)for(j=0;j<n;j++){for(i=m;i<n-j;i++)printf("%d",n-j-i);puts("");}}

C 67 65 61 56 52 바이트

재귀 적 구현

f(n,k){n*k?f(n,k-1)+f(n-1,k):puts("987654321"+9-n);}

char *를 사용하지 않고 문자열을 선언 할 수 없으므로 재귀 구현이 컴파일되지 않습니다. 그러나 솔루션은 매우 쉽고 4 바이트를 절약합니다. 호출 m내부를로 대체하십시오 . puts()"987654321"
G. Sliepen

gcc (GCC) 3.4.4 (cydming special, gdc 0.12, dmd 0.125 사용)를 사용하여 컴파일했습니다. char *에서 int로 변환 한 이후로는 괜찮다고 생각하지만 솔루션이 4 바이트 작기 때문에 더 좋습니다. 감사합니다
cleblanc

1

배치, 117 바이트

@setlocal
@set/an=%1-1,k=%2-1,p=n*k,s=987654321
@if %p%==0 (call echo %%s:~-%1%%)else call %0 %1 %k%&call %0 %n% %2

Dennis 포트 ♦의 Python 답변.


1

루비, 56 바이트

f=->n,k{n>1&&k>1?[f[n,k-1],f[n-1,k]]:[*1..n].reverse*""}

용법

솔루션을 표시 할 때는 "Kernel # puts"를 사용해야합니다.

예:

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