Bu Hardy-Ramanujan-Number-ish Harshad Sayısı mı?


16

Arka fon

1729 sayısı Hardy-Ramanujan sayısıdır. Şaşırtıcı bir özelliği, GH Hardy'nin bir hastanede onu ziyaret ettiği zaman S. Ramanujan (yaygın olarak en büyük Hintli matematikçi 1 olarak kabul edilir) tarafından keşfedildi . Hardy'nin kendi sözleriyle:

Bir keresinde Putney'de hastayken onu göreceğini hatırlıyorum. 1729 numaralı taksi ile basmıştım ve bu sayının bana oldukça sıkıcı geldiğini ve bunun olumsuz bir omen olmadığını umduğumu belirtmiştim. "Hayır," diye yanıtladı, "çok ilginç bir sayı; iki küpün toplamı olarak iki farklı şekilde ifade edilebilir en küçük sayı."

Bunun yanı sıra, birçok şaşırtıcı özelliği var. Böyle bir özellik bir Harshad Numarasıdır, yani basamaklarının toplamı (1 + 7 + 2 + 9 = 19) bir faktördür. Bu da özel bir tane. Masahiko Fujiwara'nın gösterdiği gibi, 1729, basamakları toplandığında, tersine çarpıldığında, orijinal sayıyı veren bir toplam üreten pozitif bir tamsayıdır:

1 + 7 + 2 + 9 = 19

19 × 91 = 1729

Bu tip özelliklere sahip olan bir pozitif tam sayı, Hardy-Ramanujan- olarak tanımlamak ne ISH Bu yazı amacıyla, Harshad Numarası. (Bunun için teknik bir terim olabilir, ancak A110921 üyesi olmadığı sürece bulamadım )


Görev

Pozitif bir tamsayı verilen ngiriş olup olmamasına bağlı olarak truthy veya Falsey değer girişi, çıkışı olarak nbir Hardy-Ramanujan- olan ISH Harshad sayısı. Eğer doğruysa çıktı alın. Aksi takdirde, falsey çıktı.

Not sadece dört Hardy-Ramanujan- o imsi Harshad Sayı mevcut ( 1, 81, 1458ve 1729) ve onlarla denklik için hangi kontroller kodu yazabilirsiniz. Ama bunun eğlenceli olacağını düşünmüyorum.


Giriş

Programınız pozitif bir tamsayı almalıdır (başka bir deyişle, doğal bir sayı). Bir değişken içinde var olduğunu varsaymak dışında herhangi bir şekilde alabilir. Modsal pencereden, giriş kutusundan, komut satırından, dosyadan vb. Okumaya izin verilir. Girdinin işlev argümanı olarak alınmasına da izin verilir.


Çıktı

Programınız doğruluk veya falsey değeri çıkarmalıdır. Tutarlı olmaları gerekmez. Programınız, çıktıyı bir değişkene yazmak dışında herhangi bir şekilde çıktı alabilir. Ekrana, komut satırına, dosyaya vb. Yazılabilir. Fonksiyon ile çıktı returnalınmasına da izin verilir.


Ek Kurallar

  • Sen gerekir kullanmayan yerleşik bir görevi başarmak için (Ben herhangi bir dil olacak acaba böyle yerleşik, ama sonra Mathematica ... )

  • Standart Loopholes uygulanır.


Test Durumları

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

Kazanan Ölçüt

Bu , bu yüzden bayt içindeki en kısa kod kazanır!


1 Her yıl 22 nd Aralık Srinivasa Ramanujan doğum günü, Ulusal Matematik Günü Hindistan'da görülmektedir. Cambridge'deki meslektaşları onu Jacobi, Euler ve hatta Newton ile karşılaştırdı. Çok büyük olmasının yanı sıra, Saf Matematik alanında neredeyse hiç resmi eğitimi yoktu , ancak yine de matematiksel analiz , sayı teorisi , sonsuz seriler ve devam eden kesirlere önemli katkılar yaptı . Ne yazık ki, 32 yaşında erken aklında binlerce matematik keşfi ile öldü. Biyografisine dayanan bir film de yapıldı ,Sonsuzluğu Tanıyan Adam .


4
"ancak bunlarla denkliği kontrol eden bir kod yazmamalısınız." Bu, gözlemlenemeyen bir program gereksinimidir .
Martin Ender

@MartinEnder Ama sonra sadece 1729, 1458, 81 veya 1 sayısı eşit olacak . Bunun eğlenceli olacağını düşünmüyorum.
Arjun

2
Neden inişler?
Arjun

Prova: n basamaklı bir sayının maksimum dijital toplamı 9n'dir. 9n'nin tersi en fazla 90n olacaktır. Dolayısıyla, ürün en fazla 810n ^ 2 olmalıdır, bu sayı n basamak içermelidir, bu nedenle en az 10 ^ (n-1) olmalıdır. N = 7 olduğunda, hemen hemen bitti, bu yüzden sadece 999999'a kadar kontrol etmek gerekiyor.
Leaky Nun

6
Bence onlarla denklik kontrolüne izin vermelisin. Bu tür cevaplar zaten aşağı oy alacak ve bazı durumlarda muhtemelen daha uzun olacaktır.
Okx

Yanıtlar:


12

Neim , 5 bayt

𝐬D𝐫𝕋𝔼

Açıklama:

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

Dene!


Diğer 4 bayt yazdırılamaz mı? 1 bayt sayıyorum
GamrCorps

1
@GamrCorps Tarayıcınız tarafından desteklenmiyor gibi görünüyor. İşte bir resim: puu.sh/wpETt/9f92af18e0.png
Okx

1
Güzel, ama hangi kodlamada 5 bayt? :-) Buradaki 5 karakterden, 𝐬 (U + 1D42C MATEMATİKSEL ÇİFT KÜÇÜK SABİT S) , 𝐫 (U + 1D42B MATEMATİKSEL KALIN KÜÇÜK R) , 𝕋 (U + 1D54B MATEMATİKSEL ÇİFT-SERMAYE T) ve 𝔼 (U + 1D53C MATEMATİKSEL) ÇİFT KATLI SERMAYE E) UTF-8'de (ayrıca UTF-16'da ve (açıkça) UTF-32'de) 4 bayt alır. Yani bu aslında 17 bayt, sanırım biri ASCII + bu karakterler için optimize edilmiş özel bir kodlama tanımlayabilirsiniz.
ShreevatsaR

3
@ShreevatsaR Neim kendi kod sayfasını
The_Lone_Devil

@The_Lone_Devil Ah bunu açıklar, teşekkürler!
ShreevatsaR

15

ArnoldC, 888 Bayt

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

Biliyorum, sadece eşitliği kontrol ediyorum, ama bu programın eğlenceli kısmı olmamalı.

Okumanın tadını çıkarın. :)

Daha kolay okunabilirlik için bazı yeni satırlar eklendi:

Çevrimiçi deneyin


6
Seni sevdim. Bu yüzden seni en son öldüreceğim.
David Conrad

12

x86 Meclisi, 55 35 33 31 bayt:

Dönüş değerinin EAX'ta olduğu ve parametrelerin yığına aktarıldığı bir ABI olduğunu varsayarsak ... neredeyse hepsi.

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 bayt

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

Çevrimiçi deneyin!

Temel olarak rakam dizisine ayrılır +ve temel olarak rakamları toplamak için bu ifadeyle birleşir ve bu ifadeyi değiştirir. string*stringdizeleri otomatik olarak girişe dönüştürür. Girişi dize olarak alır


2

Mathematica, 42 bayt

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

2

Ruby, 69 Bayt

İlk olarak giriş olarak tamsayı ile deneyin:

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

İkinci deneme, giriş olarak dize ile:

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

.split('')yapılabilir.chars
Conor O'Brien

2

Toplu, 164 bayt

@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

Başarı durumunda 1 yazdırır, hata durumunda çıkış olmaz.


2

JavaScript (ES6), 72 bayt

Bu geçerli ES6 gönderisidir. f=Başlangıçta ekleyin ve beğen f(arg).

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

Test Parçacığı:

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


Son zamanlarda öğrendiğim gibi, hemen kendi meydan okumalarınıza cevap vermek hoşnut değil.
Shaggy

@Shaggy Ama geçerli.
Okx

3
Ve genellikle topluluğa önem vermeyenleri küçümsüyorum.
Sızdıran Rahibe

1
@Okx, bunu yaptığım için beni hemen reddeden ve azarlayan insanlara göre değil. Bu uygulamaya izin verilip verilmeyeceği konusunda tutarlı olmalıyız.
Shaggy

3
Bence bu meydan okuma posterine haksız bir zaman avantajı sağladığı için bir meydan okuma oluşturabilir, çözebilir ve sonra gönderebilirler.
totallyhuman

2

Kotlin, 111 108 bayt

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

Çevrimiçi deneyin!

Statik olarak derlenmiş JVM çözümleri için tipik olduğu gibi, sadece ana işlev bildiriminde ve print () çağrısında çok bayt kaybedilir. Fonksiyonun eti, Kotlin gibi genel amaçlı statik olarak yazılmış bir dil için hiç de kötü olmayan 60ish bayttır.

Kotlin, sıkıcı çözüm, 69 bayt

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

Çevrimiçi deneyin!



1

Python 2 , 55 bayt

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

Çevrimiçi deneyin!

açıklama

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

Bir eval()çözüm biraz 2 byte uzun ...

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

Alternatif (geçersiz?) Çözüm, 42 29 bayt

Bu çözüm tüm sayılara eşit olup olmadığını kontrol eder.

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

Çevrimiçi deneyin!


Alternatif alternatif çözüm, aynı uzunluk:[1,81,1458,1729].__contains__
musicman523


1

NewStack , 16 bayt

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

Arıza:

Örnek olarak 1729'u kullanma

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

Yanlışsa hiçbir şey ve doğru ise orijinal girişi yazdırır.


Yığını işlevle çarpın . Ben anlamadım. Bu girdi anlamına mı geliyor?
Arjun

Evet ve hayır, sonra ¹yığın oluşur [1]. Ve girdinizi tanımladığımız fveya f(x)eşitlediğimiz için, yığındaki her öğeyi işlevle çarpmak f, temel olarak ile girişimizi değiştirmektir 1. (Çünkü [1] * f(x)= [f])
Graviton

1

MATL , 11 bayt

tV!UstVPU*=

Çevrimiçi deneyin!

t - girişi alın ve çoğaltın

V!U - tek tek rakamlara bölün

s - bu rakamları topla

t - toplamı kopyala

VP - bunu bir dizeye dönüştürün, sola sağa çevirin

U - bunu bir sayıya dönüştür

* - son iki değeri çarp (rakam-toplamı ve soldan sağa çevrilmiş sürümü)

= - bunun orijinal girişe eşit olup olmadığını kontrol edin (yığındaki diğer tek değerdir)








Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.