Apakah ini Nomor Harshad Hardy-Ramanujan-Number-ish?


16

Latar Belakang

Nomor 1729 adalah nomor Hardy-Ramanujan. Properti luar biasa ditemukan oleh S. Ramanujan (yang secara luas dianggap sebagai ahli matematika India terbesar 1 ), ketika GH Hardy mengunjungi dia di rumah sakit. Dengan kata-kata Hardy sendiri:

Saya ingat pernah melihatnya ketika dia sakit di Putney. Saya telah naik taksi nomor 1729 dan mengatakan bahwa jumlah itu bagi saya agak membosankan, dan saya berharap itu bukan pertanda buruk. "Tidak," jawabnya, "ini adalah angka yang sangat menarik; ini adalah angka terkecil yang dapat diekspresikan sebagai jumlah dari dua kubus dengan dua cara yang berbeda."

Selain itu, ia memiliki banyak properti luar biasa lainnya. Salah satu properti tersebut adalah bahwa itu adalah Nomor Harshad, yaitu jumlah digitnya (1 + 7 + 2 + 9 = 19) adalah faktornya. Itu juga, yang spesial. Seperti yang ditunjukkan Masahiko Fujiwara, 1729 adalah bilangan bulat positif yang, ketika digit-digitnya ditambahkan bersama, menghasilkan jumlah yang, ketika dikalikan dengan pembalikannya, menghasilkan angka asli:

1 + 7 + 2 + 9 = 19

19 × 91 = 1729

Bilangan bulat positif yang memiliki properti seperti itu adalah apa yang saya definisikan sebagai Nomor Harshad Hardy-Ramanujan- ish , untuk keperluan posting ini. (Mungkin ada istilah teknis untuk itu, tapi saya tidak bisa menemukannya, kecuali kalau itu anggota A110921 )


Tugas

Diberikan bilangan bulat positif n sebagai input, output truthy atau falsey nilai berdasarkan apakah input nadalah Hardy-Ramanujan- ish Harshad Nomor. Keluarkan kebenaran, jika ya. Jika tidak, output falsey.

Perhatikan bahwa hanya ada empat Harshad Nomor Hardy-Ramanujan- ish yang ada ( 1,81 , 1458dan 1729), dan Anda dapat menulis kode yang memeriksa kesetaraan dengan mereka. Tapi saya tidak berpikir itu akan menyenangkan.


Memasukkan

Program Anda harus mengambil bilangan bulat positif (angka alami, dengan kata lain). Ini bisa mengambilnya dengan cara apa pun kecuali menganggapnya ada dalam variabel. Membaca dari jendela modal, kotak input, baris perintah, file dll diperbolehkan. Mengambil input sebagai argumen fungsi juga diperbolehkan.


Keluaran

Program Anda harus menampilkan nilai yang benar atau salah. Mereka tidak perlu konsisten. Program Anda dapat menampilkan dengan cara apa pun kecuali menulis output ke variabel. Menulis ke layar, baris perintah, file dll. Diperbolehkan. Keluaran dengan fungsi returnjuga diizinkan.


Aturan tambahan

  • Anda tidak boleh menggunakan built-in untuk menyelesaikan tugas (saya ingin tahu bahasa apa pun akan memiliki built-in, tapi kemudian Mathematica ... )

  • Berlaku celah standar .


Uji Kasus

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

Kriteria Kemenangan

Ini adalah , jadi kode terpendek dalam byte menang!


1 Setiap tahun, pada 22 nd Desember, hari ulang tahun Srinivasa Ramanujan, Matematika Hari Nasional diamati di India. Rekan-rekannya, orang-orang di Cambridge, membandingkannya dengan Jacobi, Euler, dan bahkan Newton. Selain hebat, ia hampir tidak memiliki pelatihan formal dalam Matematika Murni , tetapi tetap, ia membuat kontribusi penting untuk analisis matematika , teori bilangan , seri tak terbatas , dan pecahan lanjutan . Sayangnya, ia meninggal pada usia awal 32 dengan ribuan penemuan matematika di benaknya. Sebuah film juga dibuat tentang dia, yang didasarkan pada biografinya ,Pria yang Tahu Infinity .


4
"tapi kamu tidak boleh menulis kode yang memeriksa kesetaraan dengan mereka." Ini adalah persyaratan program yang tidak dapat diobservasi .
Martin Ender

@ MartinEnder Tapi kemudian hanya akan melakukan angka sama dengan 1729, 1458, 81 atau 1 . Saya tidak berpikir itu akan menyenangkan.
Arjun

2
Mengapa downvotes?
Arjun

Bukti: jumlah digital maksimum angka dengan n digit adalah 9n. Kebalikan dari 9n akan menjadi paling banyak 90n. Jadi, produk paling banyak 810n ^ 2, yang harus memiliki n digit, jadi minimal harus 10 ^ (n-1). Ketika n = 7, itu cukup banyak dilakukan, jadi orang hanya perlu memeriksa sampai 999999.
Leaky Nun

6
Saya pikir Anda harus membiarkan memeriksa kesetaraan dengan mereka. Bagaimanapun jawaban semacam itu akan mendapatkan suara turun, dan mungkin akan lebih lama dalam beberapa kasus.
Okx

Jawaban:


12

Neim , 5 byte

𝐬D𝐫𝕋𝔼

Penjelasan:

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

Cobalah!


Apakah 4 byte lainnya tidak dapat dicetak? Saya menghitung 1 byte
GamrCorps

1
@GamrCorps Sepertinya tidak didukung oleh peramban Anda. Ini adalah gambar: puu.sh/wpETt/9f92af18e0.png
Okx

1
Bagus, tapi 5 byte dalam pengkodean apa? :-) Dari 5 karakter di sini, 𝐬 (U + 1D42C MATHEMATICAL BOLD SMALL S) , 𝐫 (U + 1D42B MATHEMATICAL BOLD KECIL R) , 𝕋 (U + 1D54B MATEMATIKA GANDA-STRUKT KAPAL-MODAL T) dan 𝔼 (U + 1D53C MATEMATIKA T) MODAL GANDA-STRUCK E) masing-masing mengambil 4 byte di UTF-8 (juga di UTF-16 dan di (jelas) UTF-32). Jadi ini sebenarnya 17 byte, meskipun saya kira kita bisa mendefinisikan pengkodean kustom dioptimalkan untuk ASCII + karakter tersebut.
ShreevatsaR

3
@ShreevatsaR Neim tampaknya menggunakan halaman kode sendiri
The_Lone_Devil

@The_Lone_Devil Ah itu akan menjelaskannya, terima kasih!
ShreevatsaR

15

ArnoldC, 888 Bytes

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

Saya tahu, saya hanya memeriksa kesetaraan, tetapi itu seharusnya tidak menjadi bagian yang menyenangkan dari program ini.

Selamat membaca. :)

Menambahkan beberapa baris baru di sana agar lebih mudah dibaca:

Cobalah online


6
Aku suka kamu. Itu sebabnya aku akan membunuhmu terakhir.
David Conrad

12

Majelis x86, 55 35 33 31 byte:

Mengasumsikan ABI di mana nilai kembali dalam EAX dan parameter didorong pada tumpukan ... sehingga hampir semuanya.

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

Cobalah online!

Pada dasarnya terbagi menjadi array digit, dan bergabung dengan +dan mengevaluasi ekspresi itu pada dasarnya menjumlahkan digit. string*stringakan secara otomatis mengubah string menjadi int. Mengambil input sebagai string


2

Mathematica, 42 byte

(s=Tr@IntegerDigits@#)IntegerReverse@s==#&

2

Ruby, 69 Bytes

Coba pertama, dengan integer sebagai input:

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

Percobaan kedua, dengan string sebagai input:

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

.split('')dapat dibuat.chars
Conor O'Brien

2

Batch, 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

Mencetak 1 pada kesuksesan, tidak ada output pada kegagalan.


2

JavaScript (ES6), 72 byte

Ini adalah pengajuan ES6 yang valid. Tambahkan f=di awal dan aktifkan like f(arg).

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

Cuplikan Tes:

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


Seperti yang saya pelajari baru-baru ini, segera menjawab tantangan Anda sendiri disukai.
Shaggy

@ Shaggy Tapi valid.
Okx

3
Dan saya biasanya menurunkan suara mereka yang tidak peduli dengan komunitas.
Leaky Nun

1
@Okx, tidak sesuai dengan orang-orang yang segera menurunkan dan memaki saya karena melakukannya. Kita harus konsisten apakah praktik ini diizinkan atau tidak.
Shaggy

3
Saya pikir itu karena memberi poster tantangan keuntungan waktu yang tidak adil karena mungkin mereka dapat membuat tantangan, menyelesaikannya dan kemudian mempostingnya.
totallyhuman

2

Kotlin, 111 108 byte

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

Cobalah online!

Seperti tipikal untuk solusi JVM yang dikompilasi secara statis, banyak byte yang hilang hanya pada deklarasi fungsi utama dan memanggil print (). Daging fungsi adalah 60ish byte, yang tidak buruk sama sekali untuk tujuan umum bahasa yang diketik secara statis seperti Kotlin.

Kotlin, solusi membosankan, 69 byte

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

Cobalah online!



1

Python 2 , 55 byte

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

Cobalah online!

Penjelasan

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

Sebuah eval()solusi adalah sedikit 2 byte lagi ...

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

Solusi alternatif (tidak valid?) , 42 29 byte

Solusi ini memeriksa kesetaraan terhadap semua angka.

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

Cobalah online!


Alternatif solusi alternatif, panjang yang sama:[1,81,1458,1729].__contains__
musicman523


1

NewStack , 16 byte

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

Rinciannya:

Menggunakan 1729 sebagai contoh

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

Mencetak apa pun jika salah, dan input asli jika benar.


Lipat gandakan susunan dengan fungsi . Saya tidak mengerti. Apakah itu berarti input?
Arjun

Ya dan tidak, setelah ¹itu tumpukan terdiri dari [1]. Dan karena kami mendefinisikan fatau f(x)menyamakan input Anda, mengalikan setiap elemen dalam stack dengan fungsi fpada dasarnya menggantikan 1dengan input kami. (Karena [1] * f(x)= [f])
Graviton

1

MATL , 11 byte

tV!UstVPU*=

Cobalah online!

t - mengambil input dan menduplikatnya

V!U - membaginya menjadi digit individu

s - jumlahkan angka-angka itu

t - Gandakan jumlah itu

VP - ubah itu menjadi string, balikkan dari kiri ke kanan

U - ubah itu kembali menjadi angka

* - kalikan dua nilai terakhir (digit-jumlah dan versi membalik kiri-ke-kanannya)

= - periksa apakah ini sama dengan input asli (yang merupakan satu-satunya nilai lain dalam tumpukan)








Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.