Đây có phải là số Harshad Hardy-Ramanujan không?


16

Lý lịch

Số 1729 là số Hardy-Ramanujan. Một tài sản đáng kinh ngạc của nó được phát hiện bởi S. Ramanujan (người được coi là nhà toán học vĩ đại nhất Ấn Độ 1 ), khi GH Hardy đến thăm ông trong một bệnh viện. Nói cách riêng của Hardy:

Tôi nhớ một lần sẽ gặp anh khi anh bị ốm ở Putney. Tôi đã lái xe taxi số 1729 và nhận xét rằng con số đó đối với tôi khá buồn tẻ và tôi hy vọng đó không phải là điềm báo bất lợi. "Không," anh trả lời, "đó là một con số rất thú vị, nó là con số nhỏ nhất có thể biểu thị bằng tổng hai khối theo hai cách khác nhau."

Bên cạnh đó, nó có nhiều tính chất tuyệt vời khác. Một thuộc tính như vậy là số Harshad, tức là tổng các chữ số của nó (1 + 7 + 2 + 9 = 19) là một yếu tố của nó. Điều đó cũng vậy, một điều đặc biệt. Như Masahiko Fujiwara đã chỉ ra, 1729 là một số nguyên dương, khi các chữ số của nó được cộng lại với nhau, tạo ra một tổng số, khi được nhân với sự đảo ngược của nó, sẽ mang lại số gốc:

1 + 7 + 2 + 9 = 19

19 × 91 = 1729

Một số nguyên dương có thuộc tính như vậy là những gì tôi xác định là Hardy-Ramanujan- ish Harshad Number, cho mục đích của bài này. (Có thể có một thuật ngữ kỹ thuật cho nó, nhưng tôi không thể tìm thấy nó, trừ khi nó là thành viên của A110921 )


Nhiệm vụ

Cho một số nguyên dương nlàm đầu vào, xuất giá trị trung thực hoặc giá trị falsey dựa trên việc đầu vào ncó phải là Số Harshad Hardy-Ramanujan- ish hay không . Đầu ra trung thực, nếu nó là. Nếu không, đầu ra falsey.

Lưu ý rằng chỉ có bốn Hardy-Ramanujan- ish số Harshad tồn tại ( 1, 81, 14581729), và bạn có thể viết mã mà kiểm tra cho tương đương với họ. Nhưng tôi không nghĩ rằng nó sẽ vui


Đầu vào

Chương trình của bạn nên lấy một số nguyên dương (một số tự nhiên, nói cách khác). Nó có thể mang nó theo bất kỳ cách nào ngoại trừ giả sử nó có mặt trong một biến. Đọc từ cửa sổ phương thức, hộp đầu vào, dòng lệnh, tập tin, vv được cho phép. Lấy đầu vào làm đối số chức năng cũng được cho phép.


Đầu ra

Chương trình của bạn sẽ xuất ra một giá trị trung thực hoặc falsey. Họ không cần phải nhất quán. Chương trình của bạn có thể xuất ra theo bất kỳ cách nào ngoại trừ việc viết đầu ra cho một biến. Viết lên màn hình, dòng lệnh, tập tin, vv được cho phép. Đầu ra với chức năng returncũng được cho phép.


Quy tắc bổ sung

  • Bạn phải không sử dụng một built-in để hoàn thành nhiệm vụ (Tôi tự hỏi ngôn ngữ nào sẽ có như vậy built-in, nhưng sau đó Mathematica ... )

  • Áp dụng sơ hở tiêu chuẩn .


Các trường hợp thử nghiệm

Input        Output
1            Truthy (because 1 × 1 (reverse of 1) = 1)
2            Falsey
3            Falsey
4            Falsey
5            Falsey
81           Truthy (because 9 (8 + 1) × 9 (reverse of 9) = 81)
1458         Truthy (because 18 (1 + 4 + 5 + 8) × 81 (reverse of 18) = 1458)
1729         Truthy (because 19 (1 + 7 + 2 + 9) × 91 (reverse of 19) = 1729)
1730         Falsey
2017         Falsey

Tiêu chí chiến thắng

Đây là , vì vậy mã ngắn nhất tính bằng byte sẽ thắng!


1 Hàng năm, vào ngày 22 thứ mười hai, ngày sinh nhật của Srinivasa Ramanujan, Toán Quốc khánh được quan sát thấy ở Ấn Độ. Các đồng nghiệp của ông, những người ở Cambridge, đã so sánh ông với Jacobi, Euler và thậm chí cả Newton. Bên cạnh việc rất tuyệt vời, anh ta hầu như không được đào tạo chính thức về Toán học thuần túy , nhưng vẫn vậy, anh ta đã có những đóng góp quan trọng cho phân tích toán học , lý thuyết số , chuỗi vô hạn và các phân số tiếp tục . Thật không may, ông qua đời ở tuổi 32 với hàng ngàn khám phá toán học trong tâm trí. Một bộ phim cũng được thực hiện về anh ta, dựa trên tiểu sử của anh ta ,Người đàn ông biết vô cực .


4
"nhưng bạn không được viết mã kiểm tra sự tương đương với chúng." Đây là một yêu cầu chương trình không thể quan sát .
Martin Ender

@MartinEnder Nhưng sau đó, nó sẽ chỉ là số bằng 1729, 1458, 81 hoặc 1 . Tôi không nghĩ rằng đó sẽ là niềm vui.
Arjun

2
Tại sao các downvote?
Arjun

Chứng minh: tổng kỹ thuật số tối đa của một số có n chữ số là 9n. Đảo ngược của 9n sẽ nhiều nhất là 90n. Vì vậy, sản phẩm sẽ có nhiều nhất là 810n ^ 2, phải có n chữ số, vì vậy nó phải có ít nhất 10 ^ (n-1). Khi n = 7, nó đã được thực hiện khá nhiều, vì vậy người ta chỉ phải kiểm tra cho đến 999999.
Leaky Nun

6
Tôi nghĩ bạn chỉ nên cho phép kiểm tra sự tương đương với họ. Những câu trả lời kiểu này sẽ nhận được downvote dù sao, và có thể sẽ dài hơn trong một số trường hợp.
Okx

Câu trả lời:


12

Neim , 5 byte

𝐬D𝐫𝕋𝔼

Giải trình:

Example input: 1729
𝐬      Implicitly convert to digit list and 𝐬um the digits [19]
 D     Duplicate [19, 19]
  𝐫    𝐫everse [19, 91]
   𝕋   mul𝕋iply [1729]
    𝔼  check for 𝔼quality with input [1]
Implicit output: 1

Thử nó!


Là 4 byte khác không thể in được? Tôi đếm 1 byte
GamrCorps

1
@GamrCorps Có vẻ như chúng không được trình duyệt của bạn hỗ trợ. Đây là một hình ảnh: puu.sh/wpETt/9f92af18e0.png
Okx

1
Đẹp, nhưng 5 byte trong mã hóa gì? :-) Trong số 5 nhân vật ở đây, 𝐬 (U + 1D42C TOÁN BOLD NHỎ S) , 𝐫 (U + 1D42B TOÁN BOLD NHỎ R) , 𝕋 (U + 1D54B TOÁN DOUBLE-struck VỐN T)𝔼 (U + 1D53C TOÁN VỐN NHÂN ĐÔI NHÂN ĐÔI E) mỗi loại chiếm 4 byte trong UTF-8 (cũng trong UTF-16 và trong (rõ ràng) UTF-32). Vì vậy, đây thực sự là 17 byte, mặc dù tôi đoán người ta có thể định nghĩa một mã hóa tùy chỉnh được tối ưu hóa cho ASCII + các ký tự đó.
ShreevatsaR

3
@ShreevatsaR Neim dường như sử dụng trang mã
The_Lone_Devil

@The_Lone_Devil Ah sẽ giải thích nó, cảm ơn!
ShreevatsaR

15

ArnoldC, 888 byte

IT'S SHOWTIME
HEY CHRISTMAS TREE i
YOU SET US UP 0
GET YOUR ASS TO MARS i
DO IT NOW
I WANT TO ASK YOU A BUNCH OF QUESTIONS AND I WANT TO HAVE THEM ANSWERED IMMEDIATELY
HEY CHRISTMAS TREE a
YOU SET US UP 0
GET TO THE CHOPPER a
HERE IS MY INVITATION 1
YOU ARE NOT YOU YOU ARE ME i
ENOUGH TALK
HEY CHRISTMAS TREE b
YOU SET US UP 0
GET TO THE CHOPPER b
HERE IS MY INVITATION 81
YOU ARE NOT YOU YOU ARE ME i
ENOUGH TALK
HEY CHRISTMAS TREE c
YOU SET US UP 0
GET TO THE CHOPPER c
HERE IS MY INVITATION 1458
YOU ARE NOT YOU YOU ARE ME i
ENOUGH TALK
HEY CHRISTMAS TREE d
YOU SET US UP 0
GET TO THE CHOPPER d
HERE IS MY INVITATION 1729
YOU ARE NOT YOU YOU ARE ME i
ENOUGH TALK
HEY CHRISTMAS TREE res
YOU SET US UP 0
GET TO THE CHOPPER res
HERE IS MY INVITATION a
CONSIDER THAT A DIVORCE b
CONSIDER THAT A DIVORCE c
CONSIDER THAT A DIVORCE d
ENOUGH TALK
TALK TO THE HAND res
YOU HAVE BEEN TERMINATED

Tôi biết, tôi chỉ kiểm tra sự bình đẳng, nhưng đó không phải là phần thú vị của chương trình.

Thích đọc nó. :)

Đã thêm một số dòng mới ở đó để dễ đọc hơn:

Dùng thử trực tuyến


6
Tôi thích bạn. Đó là lý do tôi sẽ giết bạn lần cuối.
David Conrad

12

Hội x86, 55 35 33 31 byte:

Giả sử ABI trong đó giá trị trả về nằm trong EAX và các tham số được đẩy trên ngăn xếp ... vì vậy hầu hết tất cả chúng.

00000000: 8B 44 24 04        mov         eax,dword ptr [esp+4]
00000004: 48                 dec         eax
00000005: 74 16              je          0000001D
00000007: 83 E8 50           sub         eax,50h
0000000A: 74 11              je          0000001D
0000000C: 2D 61 05 00 00     sub         eax,561h
00000011: 74 0A              je          0000001D
00000013: 2D 0F 01 00 00     sub         eax,10Fh
00000018: 74 03              je          0000001D
0000001A: 33 C0              xor         eax,eax
0000001C: C3                 ret
0000001D: 40                 inc         eax
0000001E: C3                 ret



4

JavaScript ES6, 59 57 byte

x=>(q=eval([...x].join`+`)+'')*[...q].reverse().join``==x

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

Về cơ bản phân chia thành mảng chữ số, và tham gia +và biểu thị biểu thức đó để tổng hợp các chữ số. string*stringsẽ tự động chuyển đổi chuỗi thành ints. Lấy đầu vào dưới dạng chuỗi



2

Ruby, 69 byte

Lần thử đầu tiên, với số nguyên là đầu vào:

->i{(x=i.to_s.split'').inject(0){|s,a|s+a.to_i}*(x[-1]+x[0]).to_i==i}

Lần thử thứ hai, với chuỗi là đầu vào:

->i{(x=i.split('').map &:to_i).inject(0,&:+)*(x[-1]*10+x[0])==i.to_i}

.split('')có thể được thực hiện.chars
Conor O'Brien

2

Mẻ, 164 byte

@set/an=%1,s=0
:s
@set/as+=n%%10,n/=10
@if %n% gtr 0 goto s
@set/an=s,r=0
:r
@set/ar=r*10+n%%10,n/=10
@if %n% gtr 0 goto r
@set/an=%1-r*s
@if %n%==0 echo 1

In 1 thành công, không có đầu ra khi thất bại.


2

JavaScript (ES6), 72 byte

Đây là đệ trình ES6 hợp lệ. Thêm vào f=lúc bắt đầu và gọi như thế f(arg).

n=>(y=[...`${n}`].reduce((c,p)=>+c+ +p))*[...`${y}`].reverse().join``==n

Đoạn kiểm tra:

let f =

n=>(y=[...`${n}`].reduce((c,p)=>+c+ +p))*[...`${y}`].reverse().join``==n

console.log(1 + " -> " + f(1))
console.log(81 + " -> " + f(81))
console.log(1458 + " -> " + f(1458))
console.log(1729 + " -> " + f(1729))
console.log((randomNum = Math.floor(Math.random() * 10000) + 1) + " -> " + f(randomNum))


Như tôi đã học gần đây, ngay lập tức trả lời thử thách của bạn là khó chịu.
Xù xì

@Shaggy Nhưng hợp lệ.
Okx

3
Và tôi thường đánh giá thấp những người không quan tâm đến cộng đồng.
Rò rỉ Nun

1
@Okx, không theo những người ngay lập tức hạ bệ và mắng mỏ tôi vì đã làm như vậy. Chúng ta cần nhất quán về việc liệu thực hành này có được phép hay không.
Xù xì

3
Tôi nghĩ điều đó bởi vì nó mang lại cho poster thách thức một lợi thế về thời gian không công bằng vì có thể họ có thể tạo ra một thử thách, giải quyết nó và sau đó đăng nó.
hoàn toàn là

2

Kotlin, 111 108 byte

fun main(a:Array<String>)=print(a[0].sumBy{c->"$c".toInt()}.run{"${this*"$this".reversed().toInt()}"}==a[0])

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

Như là điển hình cho các giải pháp JVM được biên dịch tĩnh, rất nhiều byte bị mất chỉ khi khai báo hàm chính và gọi print (). Phần tử của hàm là 60ish byte, điều này không tệ chút nào cho một mục đích chung là ngôn ngữ được gõ tĩnh như Kotlin.

Kotlin, giải pháp nhàm chán, 69 byte

fun main(a:Array<String>)=print(a[0].toInt()in setOf(1,81,1458,1729))

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



1

Python 2 , 55 byte

def f(n):x=sum(map(int,`n`));return x*int(`x`[::-1])==n

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

Giải trình

def f(n):                           # define a function f that takes an argument n
    x = sum(                        # assign to x the sum of...
            map(int, `n`))          # ...the integer conversion of all elements in stringified n
    return x * int(                 # return True if x times the integer conversion of...
                   `x`[::-1])       # ...the stringified x reversed...
                              == n  # ...equals n

Một eval()giải pháp dài hơn 2 byte một chút ...

def f(n):x=eval('+'.join(`n`));return x*int(`x`[::-1])==n

Giải pháp thay thế (không hợp lệ?) , 42 29 byte

Giải pháp này kiểm tra sự bình đẳng đối với tất cả các con số.

lambda n:n in[1,81,1458,1729]

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


Giải pháp thay thế thay thế, cùng độ dài:[1,81,1458,1729].__contains__
Musicman523


1

NewStack , 16 byte

ḟᵢ¹f YΣ©Eᴙx| ∏=f

Sự phá vỡ:

Sử dụng 1729 làm ví dụ

ḟᵢ                 Define new function equal to input.               []
  ¹                Add 1 to stack.                                   [1]
   f               Multiply stack by the function.                   [1729]
     Y             Split the stack into digits.                      [1,7,2,9]
      Σ            Sum the stack.                                    [19]
       ©           Duplicate stack.                                  [19,19]
        E  |       Define new value for the first element            [19,19]
         ᴙx        Reverse first element.                            [91,19]
             ∏     Take the product.                                 [1729]
              =f   Remove from stack if not equal to the function.   [1729]

In không có gì nếu sai và đầu vào ban đầu nếu đúng.


Nhân số ngăn xếp theo hàm . Tôi đã không nhận được điều đó. Điều đó có nghĩa là đầu vào?
Arjun

Có và không, sau đó ¹, ngăn xếp bao gồm [1]. Và vì chúng tôi đã xác định fhoặc f(x)bằng với đầu vào của bạn, nhân mọi yếu tố trong ngăn xếp với chức năng fvề cơ bản là thay thế 1đầu vào của chúng tôi. (Bởi vì [1] * f(x)= [f])
Graviton

1

MATL , 11 byte

tV!UstVPU*=

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

t - lấy đầu vào và nhân đôi nó

V!U - chia nó thành các chữ số riêng lẻ

s - tổng các chữ số đó

t - nhân đôi số tiền đó

VP - biến nó thành một chuỗi, lật nó sang trái

U - biến nó trở lại thành một số

* - nhân hai giá trị cuối cùng (tổng số chữ số và phiên bản lật từ trái sang phải của nó)

= - kiểm tra xem giá trị này có bằng với đầu vào ban đầu không (chỉ là giá trị khác trong ngăn xếp)








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.