Đối diện của root kỹ thuật số!


19

Còn được gọi là [gốc tương tự]

( Đối diện với root kỹ thuật số! );)

Rễ kỹ thuật số của một số là tổng các chữ số liên tục cho đến khi nó là một chữ số, ví dụ, gốc kỹ thuật số của 89456 được tính như sau:

8 + 9 + 4 + 5 + 6 = 32

3 + 2 = 5

Các gốc kỹ thuật số của 89456 là 5.

Cho một chữ số làm đầu vào thông qua STDIN , in / trả lại tất cả các số có hai chữ số có thể có gốc kỹ thuật số đó. Nếu bạn cần nó, nó có thể bao gồm chính nó, ví dụ 05

Đây là tất cả các đầu vào và đầu ra có thể:

(Bạn có thể chọn có hay không bao gồm số 0 đứng đầu cho chính chữ số đó)

Tôi / O

0 => 0 hoặc 00 hoặc không có gì

1 => 01 và / hoặc 1, 10, 19, 28, 37, 46, 55, 64, 73, 82, 91 - Đảm bảo rằng 1 không trả về 100

2 => 02 và / hoặc 2, 11, 20, 29, 38, 47, 56, 65, 74, 83, 92

3 => 03 và / hoặc 3, 12, 21, 30, 39, 48, 57, 66, 75, 84, 93

4 => 04 và / hoặc 4, 13, 22, 31, 40, 49, 58, 67, 76, 85, 94

5 => 05 và / hoặc 5, 14, 23, 32, 41, 50, 59, 68, 77, 86, 95

6 => 06 và / hoặc 6, 15, 24, 33, 42, 51, 60, 69, 78, 87, 96

7 => 07 và / hoặc 7, 16, 25, 34, 43, 52, 61, 70, 79, 88, 97

8 => 08 và / hoặc 8, 17, 26, 35, 44, 53, 62, 71, 80, 89, 98

9 => 09 và / hoặc 9, 18, 27, 36, 45, 54, 63, 72, 81, 90, 99

Không có sơ hở tiêu chuẩn và đó là , vì vậy câu trả lời ngắn nhất bằng byte sẽ thắng.

Congrats để Heeby Jeeby Man trên 46 byte câu trả lời não-pháo phòng không tuyệt vời của mình!


1
số đó có được tính là một số có hai chữ số không? (05)?
Lemon phá hủy


5
Đầu ra nên là 0? Và một lần nữa, trong trường hợp như thế này khi chỉ có 10 đầu vào khả dĩ, sẽ rất có ích khi cung cấp đầu ra trong thử thách của bạn.
FryAmTheEggman

1
Quyết định của bạn về cách xử lý zero làm mất hiệu lực nhiều câu trả lời đã được đăng. Sẽ thật ân cần khi cho những người tham gia biết bạn đã đưa ra quyết định.
FryAmTheEggman

2
đối diện của một gốc kỹ thuật số là một gốc tương tự?
tuskiomi

Câu trả lời:



9

JavaScript (ES6), 27 31 30 byte

Lợi nhuận 0cho 0hay một loạt các giải pháp khác.

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

Bản giới thiệu


3
Một downvote mà không có bất kỳ bình luận nào không giúp cải thiện câu trả lời ...
Arnauld

Đối với một số người có thể không rõ phần nào là hàm được mã hóa thực sự và phần nào là một minh chứng. Có thể là một ý tưởng tốt khi chỉ cần đặt chính hàm bên dưới dòng JavaScript .
David Mulder

@DavidMulder Cảm ơn bạn đã gợi ý. Đó thực sự là cách tôi trả lời hầu hết thời gian. Cập nhật.
Arnauld

Giải pháp tốt đẹp! Xin lỗi vì đã kéo lên một giải pháp cũ nhưng bạn có thể bỏ +để lưu một byte khác không? Mặc dù nó không hoạt động với chuỗi stdin theo cách tôi cho là.
Craig Ayre

@CraigAyre Tôi không chắc thứ này +đến từ đâu ... Đã cập nhật. Cảm ơn!
Arnauld

8

05AB1E , 13 12 9 byte

-3 byte nhờ Adnan

тL<ʒSOSOQ

Hãy thử trực tuyến!

Giải trình

т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

Tôi nghĩ bạn có thể thay thế vòng lặp vô hạn bằng cách SOSO, vì con số sẽ không bao giờ lớn hơn 99.
Adnan

@Adnan Đừng nghĩ rằng, tôi đảm bảo với bạn rằng anh ta có thể.
Erik the Outgolfer

1
тL<không thực sự ngắn hơn đồng bằng 99Ý. ;)
Erik người vượt trội hơn

1
@EriktheOutgolfer Chà, có lẽ tôi đã cố gắng hết sức để tiết kiệm một byte ở đó; D
kalsowerus

2
"Liên kết" chính? Từ khi nào 05AB1E có liên kết? Đó không phải là Jelly.
Andrew Savinykh

7

Haskell , 21 byte

f lấy một số nguyên và trả về một danh sách các số nguyên.

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

Hãy thử trực tuyến!

  • Bắt đầu bằng chữ số dvà tạo phạm vi với mọi số thứ 9 lên đến giới hạn 99, ngoại trừ trường hợp khó 0.
  • Để dừng sớm 0, sử dụng năng lượng 0^d==1cho 0==0cho tất cả các chữ số khác. Như vậy 99^0^0^dcho 1cho 0nhưng 99cho bất cứ điều gì khác.


7

Brain-Flak , 46 byte

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

Hãy thử trực tuyến!

Giải trình

Câu trả lời này sử dụng một ý tưởng từ câu trả lời của Megatom, cụ thể là sử dụng chiều cao ngăn xếp làm chênh lệch giữa bộ đếm vòng lặp và gia số. Giống như các câu trả lời trước, câu trả lời này có một vòng lặp lớn bên ngoài để bắt tất cả các số không. Trong vòng lặp, chúng ta đẩy 10 để hoạt động như một bộ đếm, sau đó chúng ta bắt đầu một vòng lặp lồng nhau khác. Trong vòng lặp này, chúng tôi giảm số lượt truy cập bằng 1

({}[()])

Sau đó, chúng tôi bật hai mục hàng đầu, đó là bộ đếm và mục cuối cùng chúng tôi tính toán. Chúng tôi thêm chúng vào chiều cao ngăn xếp để cân bằng sự giảm dần, sau đó chúng tôi đẩy nó hai lần, một lần cho đầu ra và một lần để có thể tiêu thụ để tính kết quả tiếp theo. Đẩy mọi thứ hai lần có nghĩa là chúng ta vô tình đẩy một giá trị bổ sung cần được loại bỏ khi kết thúc thực thi.

Lý do điều này chỉ vừa đủ đánh bại Megatom là câu trả lời của Megatom buộc phải tăng chiều cao ngăn xếp của nó trong khi kết quả cuối cùng vẫn nằm trên stack. Điều này có nghĩa là họ buộc phải sử dụng một mức giá khá đắt [()]để giảm tổng số một. Bằng cách di chuyển bản sao đến cuối vòng lặp, tôi có thể tránh phải sử dụng [()]với chi phí bổ sung {}vào cuối chương trình. Nếu Megatom sử dụng chiến lược này, câu trả lời của anh ta sẽ như sau:

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

còn 46 byte.

Brain-Flak , 52 byte

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

Hãy thử trực tuyến!

Giải trình

Lớp ngoài chính làm cho một trường hợp đặc biệt cho đầu vào bằng không. Nếu số 0 là đầu vào, chúng ta sẽ nhảy qua toàn bộ vòng lặp, bật số 0 và sau đó không xuất ra gì. Nếu không, chúng tôi nhập vòng lặp. Ở đây chúng tôi đẩy vòng lặp 10 lần mỗi lần thêm 9 vào đầu ngăn xếp, giữ các giá trị cũ. Vì 9 bảo toàn khoản tiền kỹ thuật số, điều này sẽ mang lại cho chúng tôi giá trị tiếp theo. Khi vòng lặp đã hết hạn, chúng tôi sử dụng số 0 mà nó tạo ra để thoát khỏi vòng lặp được bật lên bởi{} ở cuối.

Brain-Flak , 56 byte

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

Hãy thử trực tuyến!

Giải trình

Phiên bản này hoạt động rất giống với phiên bản cuối cùng, ngoại trừ chúng tôi lặp 9 lần thay vì 10 lần để lại giá trị ban đầu. Để làm điều này, chúng ta phải sắp xếp lại cách chúng ta xử lý bộ nhớ một chút. Tất cả các byte chúng ta có thể đã lưu bằng phương thức này được đưa vào dọn dẹp.


Số 46 không giữ số gốc :(
Jo King

@JoKing Vâng, nó chỉ làm các trường hợp 2 chữ số. Mà tôi nghĩ là loại ý định của câu hỏi, vì vậy mà làm cho tôi khá hạnh phúc.
Phù thủy lúa mì

Công việc tốt! Bạn đã kiếm được tiền thưởng.
FantaC



5

Bash ,31 27 byte

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

Hãy thử trực tuyến!

Trước

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

Làm thế nào để một người tìm thấy các trang man / bash help /? về "{x..y..z}"? đó là những gì được gọi là?
Olivier Dulac

tìm thấy nó: trong trang man, tìm kiếm [^.] \. \. [^.]: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

APL Dyalog, 15 byte

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

Làm sao?

⍵,10⍴9- nối đầu vào với 10 9s ( ⍵ 9 9 9 9 9 9 9 9 9 9).

+\ - Tổng tích lũy.

(×⍵)/ - mở rộng thời gian đăng nhập - trong đó Signum cho 1 cho 1-9 và 0 cho 0.

Hãy thử trực tuyến!

APL Dyalog, 24 byte

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

Yêu cầu ⎕IO←0.

Làm sao?

                      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

Toán học, 25 byte

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

làm việc cho 0


Không làm việc cho 0. Điều này cũng sẽ không bao gồm các số có chữ số cộng với số lớn hơn 9. (ví dụ: 9không có 99trong đầu ra).
JungHwan Min

Tôi hiểu ý bạn là gì. Bạn chỉ kiểm tra mã "của tôi"? vì nhiều mã ở đây không hoạt động trong 0 ...
J42161217

1
Welp, tôi có xu hướng tập trung vào mã Mathicala vì đó là ngôn ngữ tôi biết rõ nhất. Không có nghĩa là nhắm mục tiêu bạn hoặc bất cứ điều gì. Tôi xin lỗi nếu nó có vẻ như nó.
JungHwan Min

tất cả đã được sửa và đang hoạt động
J42161217

Gì? Không có nội dung?
OldBunny2800

4

Thạch , 12 byte

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

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

⁵²Ḷµ,³%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
Khi tôi sử dụng 1 làm đối số, nó cũng đưa ra 100, không phải là hai chữ số
FantaC

Điều này không phân chia 0 và 9 trường hợp.
Ørjan Johansen


4

Trên thực tế , 18 byte

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

Hãy thử trực tuyến!

Giải trình:

╗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 Đã sửa.
Mego

4

PHP, 41 byte

in các giá trị tách biệt

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

ERAlà hằng số ngắn nhất trong PHP với giá trị 131116. Bạn có thể thay thế nó bằng thay thế nhàm chán 100hoặc kết thúc chương trình vớidie

Phiên bản trực tuyến


4

Brain-Flak , 54 52 byte

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

Hãy thử trực tuyến!

Bước đột phá đầu tiên của tôi với Brain-Flak và tôi nghĩ tôi đã làm khá tốt. Bất cứ ai có nhiều kinh nghiệm có lời khuyên?

Làm thế nào nó hoạt động:

{ 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
Làm tốt lắm! Chào mừng đến với Brain-Flak.
MegaTom


3

PHP, 35

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

Tạo phạm vi [$argn, 100)với một bước 9là mảng và in nó. Nếu đầu vào là 0nó tạo ra phạm vi [0,0]=> array(0).


3

Python, 48 51 byte

3 byte được lưu nhờ @WheatWizard

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

1
thử ~-xthay vì(x-1)
Wheat Wizard

1
vẫn với mẹo của @ WheatWizard, xóa khoảng trống trongif ~-x%9
Felipe Nardi Batista

Bây giờ bạn có thể làm ~-n==~-x%9or x==nđể lưu một byte
Wheat Wizard


Tôi cần phải hỏi một câu hỏi ngớ ngẩn ... Tôi muốn chạy nó. Làm thế nào để tôi có được mã này để chạy? Có một số cấu trúc ở đây tôi đang tìm hiểu (chủ yếu là toán tử ~)
Allen Fisher




2

C (gcc) , 55 byte

f()không cần phải thực sự được gọi với bất kỳ đối số; các nchỉ có thay vì ngoài chức năng để tiết kiệm một byte.

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

Hãy thử trực tuyến!


Bạn có thể lưu 2 byte bằng cách đặt printftiêu đề bên trong vòng lặp: Hãy thử trực tuyến!
DLosc

@DLosc myeah, nhưng sau đó nó bắt đầu một số quá muộn.
dạ dày

Từ ngữ có thể rõ ràng hơn, nhưng câu hỏi cho phép bắt đầu từ (ví dụ) 10 thay vì 1: "... tất cả các số có hai chữ số có thể có gốc kỹ thuật số đó. Nếu bạn cần nó , nó có thể bao gồm [một -Số số] chính nó, ví dụ 05. " Nói cách khác, bao gồm số một chữ số trong đầu ra được cho phép nhưng không bắt buộc .
DLosc

2

Than , 14 11 byte

I∧N⁺Iθ×⁹…¹¹

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Chỉnh sửa: Đã lưu 2 byte bằng cách không in bất cứ thứ gì cho đầu vào bằng 0 và 1 byte bằng cách sử dụng các hoạt động véc tơ 3 byte chỉ nhờ @ ASCII. Giải trình:

         ¹¹ 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


tôi nghĩ rằng tôi vừa tìm thấy một giải pháp thay thế in 0, ở đây
ASCII - chỉ

1

Julia 0,6 , 18 byte

Tôi sử dụng một ternary để bắt 0trường hợp và một phạm vi n:9:99để tạo ra các con số. Trong julia, một phạm vi là một AbstractVectorvà có thể được sử dụng thay cho thực tế Vectorcác con số trong hầu hết các trường hợp, nhưng nó sẽ chỉ in ra khi 1:9:91không thỏa mãn thách thức, vì vậy tôi bọc nó [_;]để thu thập nội dung vào một Vector.

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

Hãy thử trực tuyến!





0

Perl 5, 62 byte

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

Có ràng buộc là một cách ngắn hơn


0

Gol> <> , 12 byte

I:ZhbF:N9+|;

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.