นี่คือหมายเลข Harshad-Ramanujan-Number-ish ของ Hardy-Ramanujan หรือไม่


16

พื้นหลัง

หมายเลข 1729 คือหมายเลข Hardy-Ramanujan คุณสมบัติที่น่าทึ่งของมันถูกค้นพบโดย S. Ramanujan (ผู้ซึ่งได้รับการยอมรับอย่างกว้างขวางว่าเป็นนักคณิตศาสตร์อินเดียที่ยิ่งใหญ่ที่สุด1 ) เมื่อ GH Hardy ได้ไปเยี่ยมเขาที่โรงพยาบาล ในคำพูดของฮาร์ดี:

ฉันจำได้ว่าเคยไปพบเขาเมื่อเขาป่วยที่ Putney ฉันขี่รถแท็กซี่หมายเลข 1729 และตั้งข้อสังเกตว่าหมายเลขนั้นดูเหมือนจะค่อนข้างน่าเบื่อและฉันหวังว่ามันจะไม่ใช่ลางร้าย "ไม่" เขาตอบ "มันเป็นตัวเลขที่น่าสนใจมากมันเป็นจำนวนที่เล็กที่สุดที่สามารถแสดงออกได้ว่าเป็นผลรวมของสองลูกบาศก์ในสองวิธีที่ต่างกัน"

นอกจากนั้นยังมีคุณสมบัติที่น่าอัศจรรย์อื่น ๆ อีกมากมาย หนึ่งในคุณสมบัติดังกล่าวคือมันเป็นหมายเลข Harshad นั่นคือผลรวมของตัวเลข (1 + 7 + 2 + 9 = 19) เป็นปัจจัยของมัน นั่นก็พิเศษเช่นกัน ดังที่ Masahiko Fujiwara แสดงให้เห็นว่า 1729 เป็นจำนวนเต็มบวกซึ่งเมื่อรวมตัวเลขเข้าด้วยกันจะสร้างผลรวมซึ่งเมื่อคูณด้วยการกลับรายการจะได้จำนวนเดิม:

1 + 7 + 2 + 9 = 19

19 × 91 = 1729

จำนวนเต็มบวกที่มีคุณสมบัติเช่นนี้คือสิ่งที่ฉันนิยามว่า Hardy-Ramanujan- ish Harshad Number สำหรับจุดประสงค์ของโพสต์นี้ (อาจมีศัพท์เทคนิคสำหรับมัน แต่ฉันหามันไม่ได้เว้นแต่ว่าเป็นสมาชิกของ A110921 )


งาน

รับค่าจำนวนเต็มบวกnเป็นอินพุตเอาต์พุตเป็นค่าความจริงหรือความเท็จโดยขึ้นอยู่กับว่าอินพุตnเป็นหมายเลข Harshad -Ramanujan- ish ของ Hardy-Ramanujan เอาท์พุทจริงถ้ามันเป็น มิฉะนั้นผลลัพธ์ที่ผิดพลาด

โปรดทราบว่าเพียงสี่ Hardy-Ramanujan- ishเบอร์ Harshad อยู่ ( 1, 81, 1458และ1729) และคุณสามารถเขียนโค้ดซึ่งการตรวจสอบสำหรับความเท่าเทียมกับพวกเขา แต่ฉันไม่คิดว่ามันจะสนุก


อินพุต

โปรแกรมของคุณควรใช้จำนวนเต็มบวก (จำนวนปกติหรือกล่าวอีกนัยหนึ่ง) มันอาจจะใช้วิธีการใด ๆ ยกเว้นสมมติว่ามันจะมีอยู่ในตัวแปร อนุญาตให้อ่านจากหน้าต่างโมดัลกล่องอินพุตบรรทัดคำสั่งไฟล์ ฯลฯ ได้ อนุญาตให้ป้อนค่าเป็นอาร์กิวเมนต์ของฟังก์ชันได้เช่นกัน


เอาท์พุต

โปรแกรมของคุณควรส่งออกค่าจริงหรือเท็จ พวกเขาไม่จำเป็นต้องสอดคล้องกัน โปรแกรมของคุณอาจส่งออกในทางใด ๆ ยกเว้นการเขียนผลลัพธ์ไปยังตัวแปร อนุญาตให้เขียนไปยังหน้าจอบรรทัดคำสั่งไฟล์ ฯลฯ returnอนุญาตให้ใช้เอาต์พุตด้วยฟังก์ชันได้เช่นกัน


กฎเพิ่มเติม

  • คุณต้องไม่ใช้บิวด์อินเพื่อทำงานให้สำเร็จ (ฉันสงสัยว่าภาษาใดจะมีบิวท์อินดังกล่าว แต่ก็ใช้Mathematica ... )

  • มาตรฐานช่องโหว่ใช้


กรณีทดสอบ

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

เกณฑ์การชนะ

นี่คือดังนั้นโค้ดที่สั้นที่สุดในหน่วยไบต์ชนะ!


1 ทุกปีในวันที่ 22 ครั้งที่ธันวาคมวันเกิดของ Srinivasa Ramanujan ที่วันคณิตศาสตร์แห่งชาติเป็นที่สังเกตในอินเดีย เพื่อนร่วมงานของเขาที่อยู่ในเคมบริดจ์เปรียบเทียบเขากับจาโคบีออยเลอร์และแม้แต่นิวตัน นอกจากนี้ยังเป็นที่ดีเพื่อให้เขามีการฝึกอบรมเกือบจะไม่มีอย่างเป็นทางการในคณิตศาสตร์บริสุทธิ์แต่ยังคงทำให้เขามีส่วนร่วมสำคัญในการวิเคราะห์ทางคณิตศาสตร์ , ทฤษฎีจำนวน , ชุดอนันต์และfractions ต่อเนื่อง น่าเสียดายที่เขาเสียชีวิตเมื่ออายุ 32 ปีโดยมีการค้นพบทางคณิตศาสตร์หลายพันรายการในใจของเขา หนังก็ทำกับเขาซึ่งอยู่บนพื้นฐานประวัติของเขา ,คนที่รู้ไม่มีที่สิ้นสุด


4
"แต่คุณต้องไม่เขียนโค้ดที่ตรวจสอบความเท่าเทียมกัน" นี่คือความต้องการของโปรแกรมที่ไม่ได้สังเกต
Martin Ender

@MartinEnder แต่แล้วมันจะเป็นเพียงไม่จำนวนเท่ากับ 1729 1458, 81 หรือ 1 ฉันไม่คิดว่ามันจะสนุกหรอก
Arjun

2
ทำไมต้องลงคะแนน?
Arjun

พิสูจน์: ผลรวมดิจิตอลสูงสุดของตัวเลขที่มีตัวเลข n คือ 9n การย้อนกลับของ 9n จะเท่ากับ 90n มากที่สุด ดังนั้นผลิตภัณฑ์จะมีอย่างมาก 810n ^ 2 ซึ่งจะต้องมีตัวเลข n ดังนั้นจึงต้องมีอย่างน้อย 10 ^ (n-1) เมื่อ n = 7 มันเสร็จสิ้นแล้วอย่างใดอย่างหนึ่งจึงต้องตรวจสอบจนถึง 999999
Nun

6
ฉันคิดว่าคุณควรอนุญาตให้ตรวจสอบความเท่าเทียมกันกับพวกเขา คำตอบประเภทนั้นจะได้รับการลงคะแนนต่อไปและอาจจะนานกว่าในบางกรณี
Okx

คำตอบ:


12

Neim , 5 ไบต์

𝐬D𝐫𝕋𝔼

คำอธิบาย:

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

ลองมัน!


อีก 4 ไบต์ไม่สามารถพิมพ์ได้หรือไม่ ฉันนับ 1 ไบต์
GamrCorps

1
@GamrCorps ดูเหมือนว่าเบราว์เซอร์ของคุณไม่รองรับ นี่คือรูปภาพ: puu.sh/wpETt/9f92af18e0.png
Okx

1
ดี แต่ 5 ไบต์ในการเข้ารหัสอะไร :-) จาก 5 ตัวอักษรที่นี่𝐬 (U + 1D42C MATHEMATICAL BOLD SMALL S) , 𝐫 (U + 1D42B MATHEMATICAL BOLD ขนาดเล็ก R) , 𝕋 (U + 1D54B MATHEMATICAL DOUBLE-STRUCK CAPTAL )และ𝔼 (U + 1D53C MATHICAL เงินทุนซ้อนสองครั้ง E)ใช้เวลา 4 ไบต์ใน UTF-8 (เช่นใน UTF-16 และใน UTF-32 (ชัด) UTF-32 ดังนั้นนี่คือ 17 ไบต์ แต่ฉันคิดว่าใครสามารถกำหนดการเข้ารหัสแบบกำหนดเองที่เหมาะสำหรับ ASCII + ตัวละครเหล่านั้น
ShreevatsaR

3
@ShreevatsaR Neim ดูเหมือนว่าจะใช้หน้ารหัส
The_Lone_Devil

@The_Lone_Devil Ah ที่จะอธิบายได้ขอบคุณ!
ShreevatsaR

15

ArnoldC, 888 ไบต์

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

ฉันรู้ว่าฉันแค่ตรวจสอบความเท่าเทียมกัน แต่นั่นไม่ใช่ส่วนที่สนุกของโปรแกรม

สนุกกับการอ่านมัน :)

เพิ่มบรรทัดใหม่ที่นั่นเพื่อให้อ่านง่ายขึ้น:

ลองออนไลน์


6
ฉันชอบคุณ. นั่นเป็นเหตุผลที่ฉันจะฆ่าคุณครั้งสุดท้าย
David Conrad

12

x86 สภา55 35 33 31 ไบต์:

ถือว่า ABI โดยที่ค่าส่งคืนอยู่ใน EAX และพารามิเตอร์ถูกส่งไปบนสแต็ก ... เกือบทั้งหมด

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 ไบต์

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

ลองออนไลน์!

โดยทั่วไปจะแบ่งออกเป็นอาเรย์หลักและรวมกับ+และ evals นิพจน์นั้นเพื่อรวมหลัก string*stringจะแปลงสตริงให้เป็น ints โดยอัตโนมัติ รับอินพุตเป็นสตริง



2

Ruby, 69 ไบต์

ลองครั้งแรกด้วยจำนวนเต็มเป็นอินพุต:

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

ลองครั้งที่สองโดยใช้สตริงเป็นอินพุต:

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

.split('')สามารถทำ.chars
Conor O'Brien

2

แบตช์ 164 ไบต์

@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

พิมพ์ 1 เมื่อสำเร็จไม่ส่งสัญญาณเมื่อเกิดความล้มเหลว


2

JavaScript (ES6), 72 ไบต์

นี่คือการส่ง ES6 ที่ถูกต้อง เพิ่มที่เริ่มต้นและเรียกเช่นf=f(arg)

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

ตัวอย่างการทดสอบ:

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


As I learned recently, immediately answering your own challenge is frowned upon.
Shaggy

@Shaggy But valid.
Okx

3
And I usually downvote those who do not care about the community.
Leaky Nun

1
@Okx, not according to the people who immediately downvoted and berated me for doing so. We need to be consistent as to whether or not this practice is allowed.
Shaggy

3
I think it because it gives the challenge poster an unfair time advantage as it's possible they can make up a challenge, solve it and then post it.
totallyhuman

2

Kotlin, 111 108 bytes

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

Try it online!

As is typical for statically compiled JVM solutions, a lot of bytes are lost on just the main function declaration and calling print(). The meat of the function is 60ish bytes, which is not bad at all for a general purpose statically typed language like Kotlin.

Kotlin, boring solution, 69 bytes

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

Try it online!



1

Python 2, 55 bytes

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

Try it online!

Explanation

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

An eval() solution is a bit 2 bytes longer...

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

Alternate (invalid?) solution, 42 29 bytes

This solution checks for equality against all of the numbers.

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

Try it online!


Alternate alternate solution, same length: [1,81,1458,1729].__contains__
musicman523


1

NewStack, 16 bytes

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

The breakdown:

Using 1729 as example

ḟᵢ                 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]

Prints nothing if false, and the original input if true.


Multiply the stack by the function. I didn't get that. Does that mean the input?
Arjun

Yes and no, after ¹, the stack consists of [1]. And since we defined f or f(x) to equal your input, multiplying every element in the stack by the function f is essentially replacing the 1 with our input. (Because [1] * f(x) = [f])
Graviton

1

MATL, 11 bytes

tV!UstVPU*=

Try it online!

t - take input and duplicate it

V!U - split it into individual digits

s - sum those digits

t - duplicate that sum

VP - turn that into a string, flip it left to right

U - turn that back into a number

* - multiply the last two values (the digit-sum and its left-to-right flipped version)

= - check if this is equal to the original input (which is the only other value in stack)








โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.