디지털 루트의 반대!


19

[아날로그 루트]라고도 함

( 디지털 루트의 반대! );)

숫자의 디지털 근은 한 자리가 될 때까지 숫자의 연속적인 합산입니다. 예를 들어 89456의 디지털 근은 다음과 같이 계산됩니다.

8 + 9 + 4 + 5 + 6 = 32

3 + 2 = 5

89456의 디지털 루트는 5입니다.

STDIN을 통해 입력 된 숫자가 주어지면 해당 디지털 루트가있는 가능한 두 자리 숫자를 모두 인쇄 / 반환합니다. 필요한 경우 자체를 포함 할 수 있습니다 (예 : 05).

다음은 가능한 모든 입력 및 출력입니다.

(숫자 자체에 선행 0을 포함할지 여부를 선택할 수 있습니다)

I / O

0 => 0 또는 00 또는 아무것도

1 => 01 및 / 또는 1, 10, 19, 28, 37, 46, 55, 64, 73, 82, 91-1이 100을 반환하지 않는지 확인하십시오

2 => 02 및 / 또는 2, 11, 20, 29, 38, 47, 56, 65, 74, 83, 92

3 => 03 및 / 또는 3, 12, 21, 30, 39, 48, 57, 66, 75, 84, 93

4 => 04 및 / 또는 4, 13, 22, 31, 40, 49, 58, 67, 76, 85, 94

5 => 05 및 / 또는 5, 14, 23, 32, 41, 50, 59, 68, 77, 86, 95

6 => 06 및 / 또는 6, 15, 24, 33, 42, 51, 60, 69, 78, 87, 96

7 => 07 및 / 또는 7, 16, 25, 34, 43, 52, 61, 70, 79, 88, 97

8 => 08 및 / 또는 8, 17, 26, 35, 44, 53, 62, 71, 80, 89, 98

9 => 09 및 / 또는 9, 18, 27, 36, 45, 54, 63, 72, 81, 90, 99

아니 표준 허점 , 그리고 그것의 바이트 승리의 짧은 대답 때문에.

놀라운 46 바이트의 두뇌 반응Heeby Jeeby Man 을 축하합니다 !


1
숫자 자체가 두 자리 숫자로 계산됩니까? (05)?
Destructible Lemon

2
역전

5
0의 출력은 무엇입니까? 다시 한 번, 10 개의 가능한 입력 만있는 경우와 같은 경우에는 문제에 대한 출력을 제공하는 것이 큰 도움이됩니다.
FryAmTheEggman

1
0을 처리하는 방법에 대한 결정은 게시 된 많은 답변을 무효화합니다. 결정을 내렸다는 사실을 참가자들에게 알리는 것이 좋습니다.
FryAmTheEggman

2
디지털 루트의 반대가 아날로그 루트입니까?
tuskiomi

답변:



9

자바 스크립트 (ES6), 27 31 30 바이트

반환 0을위한 0하거나 다양한 솔루션.

n=>n&&[...1e9+''].map(_=>n+=9)

데모


3
의견이없는
공감대

어떤 부분은 어떤 부분이 실제 코드 골프 함수이고 어떤 부분이 데모인지 확실하지 않을 수 있습니다. 함수 자체를 JavaScript 행 바로 아래에 두는 것이 좋습니다 .
David Mulder

@DavidMulder 제안 해 주셔서 감사합니다. 그것이 실제로 대부분의 시간에 답변하는 방식입니다. 업데이트되었습니다.
Arnauld

좋은 해결책! 오래된 솔루션을 드래그하여 죄송하지만 +다른 바이트를 저장하기 위해 드롭 할 수 있습니까? stdin 문자열로는 작동하지 않지만 가정합니다.
Craig Ayre

@CraigAyre 어디에서 +왔는지 잘 모르겠습니다 ... 업데이트되었습니다. 감사!
Arnauld

8

05AB1E , 13 12 9 바이트

Adnan 덕분에 -3 바이트

тL<ʒSOSOQ

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

설명

тL<ʒSOSOQ   Main link. Argument n
тL<         List from 1 to 100, then decrement to get 0 to 99
   ʒ        Filter
    SOSO    Sum of all chars, twice
        Q   Compare to input

SOSO숫자가 99보다 크지 않기 때문에 무한 루프를로 바꿀 수 있다고 생각합니다 .
Adnan

@Adnan 생각하지 않습니다, 나는 당신이 그가 할 수 있다고 확신합니다.
Outgolfer Erik

1
тL<실제로 plain보다 짧지 않습니다 99Ý. ;)
Outgolfer Erik

1
@EriktheOutgolfer 글쎄, 아마 거기에 바이트를 저장하려고 열심히; D
kalsowerus

2
메인 "링크"? 05AB1E는 언제 링크를 가지고 있습니까? 젤리가 아닙니다.
앤드류 Savinykh

7

하스켈 , 21 바이트

f 정수를 취하고 정수 목록을 리턴합니다.

f d=[d,d+9..99^0^0^d]

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

  • 숫자로 시작 하고 의 까다로운 경우를 제외하고d 9 번째 숫자부터 최대 99까지의 범위를 생성합니다 .0
  • 에 대해 일찍 멈추려면 다른 자릿수 와 다른 자릿수에 대한 0거듭 제곱 0^d==1을 사용하십시오 . 따라서 제공 을위한 있지만 다른 거.0==099^0^0^d1099


7

Brain-Flak , 46 바이트

{((()()()()()){}){(({}[()])<(({}{}[]))>)}}{}{}

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

설명

이 답변은 스택 높이를 루프 카운터와 증분의 차이로 사용하는 Megatom의 답변 아이디어를 사용합니다. 이전 답변과 마찬가지로이 답변에는 모든 0을 잡을 수있는 큰 외부 루프가 있습니다. 루프 내부에서 10을 눌러 카운터로 작동 한 다음 다른 중첩 루프를 시작합니다. 이 루프에서 카운터를 1 씩 줄입니다.

({}[()])

그런 다음 카운터와 계산 한 마지막 항목 인 상위 두 항목을 표시합니다. 우리는 감소의 균형을 맞추기 위해 이것을 스택 높이에 추가 한 다음 출력을 위해 한 번, 다음 결과를 계산하는 데 소비 할 수 있도록 한 번 두 번 푸시합니다. 물건을 두 번 밀면 실수로 실행이 끝날 때 제거 해야하는 추가 값을 밀어 넣습니다.

이것이 메가 톰을 거의이기는 이유는 메가 톰의 대답이 스택 높이를 가져오고 마지막 결과는 여전히 스택에 있기 때문입니다. 즉 [()], 총 비용 을 1 씩 줄이려면 다소 비쌉니다 . 복제물을 루프의 끝으로 옮기면 프로그램의 맨 끝에 [()]추가 비용을 들이지 않아도 사용할 수 있습니다 {}. Megatom이이 전략을 사용한다면 그의 대답은 다음과 같습니다.

{<>((()()()()()){}){((({}[()])<>{}[]))<>}}<>{}

또한 46 바이트.

Brain-Flak , 52 바이트

{((()()()()()){}){({}[()]<(({})((()()())){}{})>)}}{}

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

설명

메인 외부 루프는 0을 입력하는 특별한 경우를 만듭니다. 0이 입력되면 전체 루프 위로 건너 뛰고 0을 팝 한 다음 아무것도 출력하지 않습니다. 그렇지 않으면 루프에 들어갑니다. 여기서 우리는 스택의 맨 위에 9를 더할 때마다 루프를 10 번 푸시하여 이전 값을 유지합니다. 9는 디지털 합계를 유지하므로 다음 값을 얻을 수 있습니다. 루프가 만료되면 생성 된 0을 사용하여 루프를 종료 한 후 {}끝에 의해 팝됩니다 .

Brain-Flak , 56 바이트

{([(((()()())){}{})]){({}()<(({})<(({}{}))>)>)}}{}({}{})

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

설명

이 버전은 마지막 값과 매우 유사하지만 원래 값을 제외하고 10 대신 9 번 반복한다는 점이 다릅니다. 이렇게하려면 메모리를 조금 처리하는 방식을 재정렬해야합니다. 이 방법을 사용하여 저장 한 모든 바이트가 정리됩니다.


46은 원래 숫자를 유지하지 않습니다 :(
Jo King

@ JoKing 그래, 그것은 단지 두 자리 경우를 수행합니다. 내가 생각하는 것은 일종의 질문의 의도이기 때문에 꽤 행복합니다.
밀 마법사

좋은 작업! 현상금을 얻었습니다.
FantaC



5

배쉬 ,31 27 바이트

seq $1 9 $(($1?99:0))|xargs

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

이전

eval echo {$1..$(($1?99:0))..9}

맨 페이지 / bash help /를 어떻게 찾습니까? "{x..y..z}"에 대해? 뭐라고 해요?
Olivier Dulac

그것을 발견 : 맨 페이지에서 검색 [^.] \. \. [^.] :brace expansion: (...) A sequence expression takes the form {x..y[..incr]}, where x and y are either integers or single characters, and incr, an optional increment, is an integer. (...) When the increment is supplied, it is used as the difference between each term. The default increment is 1 or -1 as appropriate.
Olivier Dulac

5

Dyalog APL, 15 바이트

{(×⍵)/+\⍵,109}

어떻게?

⍵,10⍴9-입력을 10 9초 ( ⍵ 9 9 9 9 9 9 9 9 9 9)로 연결합니다 .

+\ -누적 합계.

(×⍵)/ -부호 시간 확장-부호는 1-9에 1을, 0에 0을 제공합니다.

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

Dyalog APL, 24 바이트

{⍵/⍨⎕=(⍵≠01+9|⍵-1}⍳100

필요합니다 ⎕IO←0.

어떻게?

                      100   0 .. 99
              1+9|⍵-1       digit sum (⍵-1 mod 9 + 1)
        (⍵≠0              edge case for 0
     ⎕=                     equals to the input
 ⍵/⍨                        compress with the range


4

Mathematica, 25 바이트

If[#==0,0,Range[#,99,9]]&

0에 작동


작동하지 않습니다 0. 여기에는 숫자가 9보다 큰 숫자의 숫자도 포함되지 않습니다 (예 : 출력에 9없는 숫자 99).
JungHwan Min

무슨 말인지 알 겠어 "내"코드 만 검사합니까? 여기에 많은 코드가 0에서 작동하지 않습니다 ...
J42161217

1
Welp, Mathematica 코드에 집중하는 경향이 있습니다. 왜냐하면 제가 가장 잘 알고있는 언어이기 때문입니다. 당신이나 다른 것을 목표로하지 않았습니다. 그 것처럼 보인다면 사과드립니다.
JungHwan Min

모든 고정 및 작동
J42161217

뭐? 내장이 없습니까?
OldBunny2800

4

젤리 , 12 바이트

⁵²Ḷµ,³%9EµÐf

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

작동 원리

⁵²Ḷµ,³%9EµÐf
⁵             - literal 10
 ²            - square
  R           - lowered range: 0 to 99 inclusive.
   µ     µÐf  - filter based on:
    ,³          - element and input
      %9        - mod 9
        E       - are equal

1
1을 인수로 사용하면 두 자리가 아닌 100도 표시됩니다.
FantaC

이것은 0과 9의 경우를 나누지 않습니다.
Ørjan Johansen


4

실제로 18 바이트

╗2╤DR⌠╜-9@%Y⌡░╜;)I

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

설명:

╗2╤DR⌠╜-9@%Y⌡░╜;)I
╗                   save input to register 0
 2╤DR               range(1, 100)
     ⌠╜-9@%Y⌡░      elements in range where function returns truthy:
      ╜-              subtract from input
        9@%           mod 9
           Y          is equal to 0
              ╜;)   push a copy of the input on the top and the bottom of the stack
                 I  if input is truthy, return the filtered range, else return the input (special-cases 0)

@FryAmTheEggman 수정되었습니다.
Mego

4

PHP, 41 바이트

밑줄로 구분 된 값을 인쇄합니다

for(;100>$a=&$argn;$a+=$a?9:ERA)echo$a._;

ERA값이 PHP에서 가장 짧은 상수입니다 131116. 지루한 대안으로 대체 100하거나 프로그램을 종료 할 수 있습니다die

온라인 버전


4

Brain-Flak , 54 52 바이트

{<>((((()()())){}{})()){({}<(({})<>({}))><>[()])}}<>

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

Brain-Flak과의 첫 번째 진출은 매우 잘했다고 생각합니다. 더 많은 경험이있는 사람은 조언이 있습니까?

작동 방식 :

{ Don't do anything if input is 0
  <>((((()()())){}{})()) Switch to other stack and add 9 and 10
                         10 is the counter, 9 is to add to the current num
  { While counter
     (
       {} Pop the counter
       <(({})<>({}))> Get a copy of the 9, switch to the other stack and add it to a copy of the top of it. Use <...> to make it return 0
       <>[()] Switch to the other stack and decrement the counter
     ) 
  }
}<> Switch to the stack with the values on it

1
잘 했어! Brain-Flak에 오신 것을 환영합니다.
MegaTom


3

PHP, 35

print_r(range($argn,!!$argn*99,9));

배열 [$argn, 100)의 단계로 범위 를 작성 9하고 인쇄합니다. 입력이 입력 0되면 범위 [0,0]=> 가 생성 array(0)됩니다.


3

파이썬, 48 51 바이트

@WheatWizard 덕분에 3 바이트 절약

lambda n:[x for x in range(100)if~-n==~-x%9or x==n]

1
~-x대신 시도(x-1)
밀 마법사

1
@WheatWizard의 팁으로 여전히 공간을 제거하십시오.if ~-x%9
Felipe Nardi Batista

이제 ~-n==~-x%9or x==n바이트를 절약 할 수 있습니다
Wheat Wizard


바보 같은 질문을해야하는데 ... 이것을 실행하고 싶습니다. 이 코드를 어떻게 실행합니까? 여기에 내가 배우고있는 몇 가지 구성이 있습니다 (주로 ~ 연산자)
Allen Fisher


2

파이크, 6 바이트 (이전 버전)

커밋 커밋

TXU#sq

설명:

TX     -   10**2
  U    -  range(^)
   #   - filter(^)
    s  -   digital_root(^)
     q -  ^==input


2

C (gcc) , 55 바이트

f()실제로 어떤 인수로도 불릴 필요는 없습니다. 는 n대신 함수가 바이트를 저장하는 외부의 단지가있다.

f(n){for(scanf("%d",&n);n&&n<100;n+=9)printf("%d ",n);}

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


printf루프 헤더 내부 를 넣어 2 바이트를 절약 할 수 있습니다 . 온라인으로 사용해보십시오!
DLosc

@DLosc myeah,하지만 너무 늦게 시작합니다.
gastropner

문구가 명확하게 수 있지만, 문제는 (예를 들어) (10) 대신 1에서 시작 허용 않습니다 "... 그 디지털 루트가 가능한 두 자리 숫자의 모든. 당신이 그것을 필요로하는 경우 , 그것은 [포함 하나를 -자리 숫자] 자체 (예 : 05) 즉, 출력에 한 자리 숫자를 포함하는 것은 허용 되지만 필수 는 아닙니다 .
DLosc

2

, 14 11 바이트

I∧N⁺Iθ×⁹…¹¹

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 편집 : @ASCII 전용 덕분 에 제로 입력을 위해 아무것도 인쇄하지 않고 2 바이트를 절약 하고 벡터화 연산 3 바이트 를 사용하여 1 바이트를 절약했습니다 . 설명:

         ¹¹ Literal 11
        …   Range
       ⁹    Literal 9
      ×     Vector multiply
     θ      (First) input
    I       Cast to number
   ⁺        Vector add
  N         Input digit as a number
 ∧          Logical AND
I           Cast to string
            Implicitly print on separate lines


난 그냥 대안을 찾을 생각 인쇄 0, 여기
ASCII 전용

1

줄리아 0.6 , 18 바이트

나는 삼항을 사용하여 0 사건 범위 n:9:99를 만들어 숫자를 만듭니다. 줄리아에서는 범위가 있으며 대부분의 경우 AbstractVector실제 Vector숫자 대신 사용할 수 있지만 1:9:91도전을 만족시키지 못하는 그대로 인쇄 하므로 [_;]내용을에 수집하기 위해 포장합니다 Vector.

n->n>0?[n:9:99;]:0

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





0

펄 5, 62 바이트

sub x{$f=$_[0];@x=("0$f",$f);push@x,map$f+$_*10,(1..9)if$f;@x}

더 짧은 방법이 있어야합니다.


0

Gol> <> , 12 바이트

I:ZhbF:N9+|;

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

작동 원리

I:ZhbF:N9+|;

I             Take input as number
 :            Duplicate
  Z           Pop and skip one if nonzero
   h          If zero, print the top as number and halt
              Otherwise...
    bF....|   Repeat these commands 11 times
      :N      Print top as number, with newline
        9+    Add 9
           ;  Halt
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.