확장 및 계약


19

입력 으로 양의 정수 k 를 사용하십시오. n:=1 시작 하고 i ni + n k가 되도록 10 i 의 최대 정수로 n 을 반복해서 증가시킵니다 .iini+nk

n=k 까지 반복 하고 초기 1 과 최종 k 모두를 포함하여 n 의 모든 중간 값 목록을 반환합니다 .1k

이 과정에서 성장은 초기의 불평등에 의해 제한 될 것이며, 후자는 후자의 불평등에 의해서만 제한 될 것이다. 성장은 초기 "확장"기간의 형태를 취하는데,이 기간 동안 n 은 더 큰 전력으로 증가하고, "계약"기간이 뒤 따르며,이 기간 동안 "확대"하기 위해 n 은 더 작은 전력으로 증가합니다 올바른 번호로.

테스트 사례

1 => [1]
10 => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
321 => [1,  2,  3,  4,  5,  6,  7,  8,  9,
        10, 20, 30, 40, 50, 60, 70, 80, 90,
        100, 200, 300, 310, 320, 321]
1002 => [1,   2,   3,   4,   5,   6,   7,   8,   9,
         10,  20,  30,  40,  50,  60,  70,  80,  90,
         100, 200, 300, 400, 500, 600, 700, 800, 900,
         1000, 1001, 1002]

이것은 이므로 가장 짧은 답변 (바이트)이 이깁니다.


2
리스트를 반환하는 대신 숫자를 인쇄해도됩니까?
Adám

@ Adám 그렇습니다.
Esolanging 과일

답변:


8

하스켈 , 72 68 64 63 바이트

f=(1!)
c!t|t==c=[c]|t>c=c:(c+10^(pred.length.show.min c$t-c))!t

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

-4 바이트에 대해 Sriotchilism O'Zaic에게 감사드립니다!

용법

f 321
[1,2,3,4,5,6,7,8,9,10,20,30,40,50,60,70,80,90,100,200,300,310,320,321]

설명

c!t         -- c=current number, t=target number
 |t==c=[c]  -- Target is reached, return last number
 |t>c=c:(c+10^(pred.length.show.min c$t-c))!t
      c:                                        -- Add current number to list
                                min c$t-c       -- The minimum of the current number, and the difference between the current number and the target
                    length.show.                -- The length of this number
               pred.                            -- Minus 1
           10^(                          )      -- Raise 10 to this power
         c+                                     -- Add that to the current number
        (                                 )!t   -- Recursion

4
PPCG에 오신 것을 환영합니다! 좋은 첫 대답.
Arnauld

2
나는 하스켈 모르겠지만, 아마도 이러한 팁 중 하나가 도움이 될 수 있습니다 : 하스켈에서 골프에 대한 팁<모든 언어>에서 골프에 대한 팁 . 그러나 나는 좋은 대답에 동의합니다. 나에게서 +1
Kevin Cruijssen

2
사이트에 오신 것을 환영합니다! 식 주위에 괄호가 필요하지 않은 (^)것보다 우선 순위가 높 으므로 동일은 간다 와(+)(^)(!)(:)
밀 마법사

1
pred.length.show.min c$t-c로 단축 할 수 있습니다 length(show.min c$t-c)-1. 익명 함수도 허용되므로 Haskell의 골프 규칙 가이드에f= 설명 된대로 선행 기능을 삭제할 수 있습니다 .
Laikoni

1
경비원 대신 단 하나의 케이스와 조건부 만 사용할 수 있습니다 c!t=c: if t>c then (c+10^(length(show.min c$t-c)-1))!t else []. 이렇게하면 이 팁 을 적용 하여 몇 바이트를 더 절약 할 수 있습니다. 온라인으로 사용해보십시오!
Laikoni

6

자바 스크립트 (ES6), 50 바이트

f=n=>n?[...f(n-(1+/(^10)?(0*$)/.exec(n)[2])),n]:[]

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

어떻게?

이론

n=0 될 때까지 다음 단계가 반복됩니다 .

  • 의 숫자 찾으십시오.kn
  • kn10
  • x=10kn

이행

x

+---- leading '1'
|
1 + /(^10)?(0*$)/.exec(n)[2]
     \____/\___/
        |    |
        |    +---- trailing zeros (the capturing group that is appended to the leading '1')
        +--------- discard one zero if n starts with '10'

'10'10n=1000n=102300'10'


독창적 인 변수를 사용하면 하나의 변수 만 추적하면서 "뒤로"반복을 수행 할 수 있습니다! 조금 사용하는 것이 혼란 k도전 설명에서보다 완전히 다른 뭔가를 (당신이 실제로 n영업 이익의 혼합입니다 n그리고 k당신이 x그들의입니다 i.)
Ørjan 요한센


2

펄 6 , 48 41 바이트

->\k{1,{$_+10**min($_,k-$_).comb/10}...k}

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

설명:

->\k{                                   }  # Anonymous code block taking k
     1,                             ...k   # Start a sequence from 1 to k
       {                           }       # Where each element is
        $_+          # The previous element plus
           10**      # 10 to the power of
                           .comb     # The length of
               min($_,k-$_)          # The min of the current count and the remainder
                                /10  # Minus one

2

APL (Dyalog Unicode) , 30 바이트 SBCS

익명의 암묵적 접두사 기능. 별도의 줄에 숫자를 stdout에 인쇄합니다.

{⍺=⍵:⍺⋄⍺∇⍵+10*⌊/⌊10⍟⍵,⍺-⎕←⍵}∘1

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

{}∘1n

⍺=⍵kn

    반환 (내재적으로 인쇄)k

  그밖에:

  ⎕←⍵n

  ⍺-  에서 빼기k

  ⍵,n

  10⍟log10

   그것들을 바닥

  ⌊/ 그중 최소

  10* 10의 힘으로 제기

  ⍵+n

  ⍺∇ 동일한 사용하여 재귀kn


2

05AB1E , 15 바이트

1[=ÐIαD_#‚ßg<°+

@PaulMutser 포트 (첫 번째) Haskell이 답하기 때문에 그를 찬성 해야합니다!

온라인으로 시도 하거나 모든 테스트 사례를 확인하십시오 .

줄 바꿈을 구분하여 숫자를 출력합니다.
목록이어야한다면 3 바이트를 추가해야합니다.

X[DˆÐIαD_#‚ßg<°+}¯

온라인으로 시도 하거나 모든 테스트 사례를 확인하십시오 .

설명:

1             # Push a 1 to the stack
 [            # Start an infinite loop
  =           #  Print the current number with trailing newline (without popping it)
  Ð           #  Triplicate the current number
   Iα         #  Get the absolute difference with the input
     D        #  Duplicate that absolute difference
      _       #  If this difference is 0:
       #      #   Stop the infinite loop
      ‚ß      #  Pair it with the current number, and pop and push the minimum
        g   #  Calculate 10 to the power of the length of the minimum minus 1
           +  #  And add it to the current number



1

배치, 131 바이트

@set/an=i=1
:e
@if %n%==%i%0 set i=%i%0
@echo %n%
:c
@set/an+=i
@if %n% leq %1 goto e
@set/an-=i,i/=10
@if %i% neq 0 goto c

입력을 명령 행 매개 변수로 사용하고 숫자 목록을 STDOUT에 출력합니다. 설명:

@set/an=i=1

10의 거듭 제곱으로 시작 n=1하고 i=1표현하십시오.

:e
@if %n%==%i%0 set i=%i%0

다음 10의 거듭 제곱에 도달하면 i10을 곱하십시오 n.

@echo %n%

의 현재 값을 출력합니다 n.

:c
@set/an+=i
@if %n% leq %1 goto e

입력을 초과하지 않고 반복 i할 수 있습니다 n.

@set/an-=i,i/=10

이전 값을 복원하고 10으로 n나눕니다 i.

@if %i% neq 0 goto c

경우 i없는 제로는 추가 시도 in다시.


1

R , 67 65 바이트

주세페 덕분에 -2 바이트

k=scan();o=1;i=10^(k:0);while(T<k)o=c(o,T<-T+i[i<=T&i+T<=k][1]);o

꽤 간단합니다. 역순으로 필요한 것보다 10의 거듭 제곱이 필요합니다 i.

( 후자는 계산적으로 비효율적이지만 골프는 골프이기 때문에 i=10^rev(0:log10(k))대신에 사용하는 것을 선호합니다 i=10^(k:0).)

그런 다음 while 루프에서 조건을 적용 i하고 첫 번째 (즉 가장 큰) 조건을 적용합니다 . 업데이트 n및 출력에 추가

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


1
T대신에를 사용하여 바이트를 저장하십시오 n. 그것은 2이어야하지만 그것이 TRUE수용 가능한 출력 이라고 생각하지 않으므로 k=1우리는 설정했습니다 o=+T. 시도 해봐!
주세페

2
그것은 끔찍한 코딩입니다. 우연히, 나는 설정할 o=1수 있고 두 번째 바이트를 얻을 수 있습니다 .
Aaron Hayman


1

, 27 바이트

Wa>Po+:y/t*Y1Ty>o|o+y>ay*:t

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

의사 코드에서 :

a = args[0]
o = 1
print o
while a > o {
  y = 1
  till y > o || o + y > a
    y *= 10
  o += y / 10
  print o
}

이 알고리즘을 단축하기 위해 적용 할 수있는 골프 트릭에 매우 만족합니다. 루프 헤더에서 물건을 초기화, 업데이트 및 인쇄함으로써 루프 본문에 중괄호가 필요하지 않습니다. 그래도 골퍼 알고리즘이있을 것입니다.


0

apt , 18 바이트

ÆT±ApTmTnU)sÊÉÃf§U

시도 해봐

ÆT±ApTmTnU)sÊÉÃf§U     :Implicit input of integer U
Æ                      :Map the range [0,U)
 T±                    :  Increment T (initially 0) by
   A                   :  10
    p                  :  Raised to the power of
     Tm                :    The minimum of T and
       TnU             :      T subtracted from U
          )            :    End minimum
           s           :    Convert to string
            Ê          :    Length
             É         :    Subtract 1
              Ã        :End map
               f       :Filter
                §U     :  Less than or equal to U


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