Czy jest to liczba Harshada Hardy-Ramanujana-Number-ish?

16

tło

Liczba 1729 to liczba Hardy-Ramanujana. Niesamowitą właściwość odkrył S. Ramanujan (powszechnie uważany za największego indyjskiego matematyka 1 ), kiedy GH Hardy złożył mu wizytę w szpitalu. Słowami Hardy'ego:

Pamiętam, jak kiedyś go widziałem, kiedy był chory w Putney. Jechałem taksówką numer 1729 i zauważyłem, że numer ten wydaje mi się raczej nudny i mam nadzieję, że nie był to niekorzystny znak. „Nie” - odpowiedział - „jest to bardzo interesująca liczba; jest to najmniejsza liczba wyrażalna jako suma dwóch kostek na dwa różne sposoby”.

Poza tym ma wiele innych niesamowitych właściwości. Jedną z takich właściwości jest to, że jest to liczba Harshada, tj. Suma jej cyfr (1 + 7 + 2 + 9 = 19) jest jej czynnikiem. To także wyjątkowe. Jak pokazał Masahiko Fujiwara, 1729 jest dodatnią liczbą całkowitą, która po zsumowaniu cyfr daje sumę, która pomnożona przez odwrócenie daje pierwotną liczbę:

1 + 7 + 2 + 9 = 19

19 × 91 = 1729

Pozytywnym całkowitą o takiej własności jest to, co określam jako Hardy'ego-Ramanujan- ISH Harshad numer, na potrzeby tego postu. (Może to być termin techniczny, ale nie mogłem go znaleźć, chyba że jest członkiem A110921 )


Zadanie

Biorąc dodatnia njako wejście wyjściu truthy lub falsey wartość na podstawie, czy wejście njest hardy-Ramanujan- ISH Harshad Number. Wyjście prawda, jeśli tak jest. W przeciwnym razie wyjście falsey.

Należy pamiętać, że tylko cztery Hardy'ego-Ramanujan- ISH Harshad Liczby istnieje ( 1, 81, 1458i 1729), i można napisać kod, który sprawdza równoważności z nich. Ale nie sądzę, że będzie fajnie.


Wejście

Twój program powinien przyjmować dodatnią liczbę całkowitą (innymi słowy liczbę naturalną). Może to przyjmować w jakikolwiek sposób, z wyjątkiem zakładania, że ​​jest obecny w zmiennej. Odczytywanie z okna modalnego, pola wprowadzania, wiersza poleceń, pliku itp. Jest dozwolone. Przyjmowanie danych wejściowych jako argumentu funkcji jest również dozwolone.


Wynik

Twój program powinien wypisywać prawdziwą lub falsey wartość. Nie muszą być spójne. Twój program może generować dane w jakikolwiek sposób poza zapisywaniem danych wyjściowych w zmiennej. Dozwolone jest zapisywanie na ekranie, wierszu poleceń, pliku itp. Wyjście z funkcją returnjest również dozwolone.


Dodatkowe zasady

  • Państwo musi nie używać wbudowanego do wykonania zadania (zastanawiam każdy język będzie mieć taki wbudowany, ale potem Mathematica ... )

  • Obowiązują standardowe luki .


Przypadki testowe

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

Zwycięskie kryterium

To jest , więc wygrywa najkrótszy kod w bajtach!


1 Każdego roku, w dniu 22 -go grudnia, urodziny Srinivasa Ramanujan, Narodowy Dzień Matematyka obserwuje się w Indiach. Jego koledzy z Cambridge porównali go do Jacobiego, Eulera, a nawet Newtona. Poza tym, że jest tak świetny, prawie nie miał formalnego wykształcenia w czystej matematyce , ale nadal wniósł istotny wkład w analizę matematyczną , teorię liczb , nieskończone szeregi i ciągłe ułamki . Niestety zmarł w wieku 32 lat, mając na myśli tysiące odkryć matematycznych. Nakręcony został także na nim film oparty na jego biografii ,Człowiek, który wiedział nieskończoność .

Arjun
źródło
4
„ale nie wolno pisać kodu, który sprawdza ich równoważność”. Jest to nieobserwowalny wymóg programu .
Martin Ender
@MartinEnder Ale wtedy będzie to tylko liczba równa 1729, 1458, 81 lub 1 . Nie sądzę, żeby to było zabawne.
Arjun,
2
Dlaczego opinie negatywne?
Arjun,
Dowód: maksymalna cyfrowa suma liczby z cyframi n wynosi 9n. Odwrotność 9n wynosiłaby najwyżej 90n. Tak więc iloczyn wyniesie co najwyżej 810n ^ 2, który musi mieć n cyfr, więc musi wynosić co najmniej 10 ^ (n-1). Gdy n = 7, jest prawie ukończone, więc trzeba tylko sprawdzić do 999999.
Leaky Nun
6
Myślę, że powinieneś pozwolić na sprawdzenie ich równoważności. Tego rodzaju odpowiedzi i tak byłyby negatywne i prawdopodobnie będą dłuższe w niektórych przypadkach.
Okx,

Odpowiedzi:

12

Neim , 5 bajtów

𝐬D𝐫𝕋𝔼

Wyjaśnienie:

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

Spróbuj!

Okx
źródło
Czy pozostałych 4 bajtów nie można wydrukować? Liczę 1 bajt
GamrCorps,
1
@GamrCorps Wygląda na to, że nie są obsługiwane przez Twoją przeglądarkę. Oto zdjęcie: puu.sh/wpETt/9f92af18e0.png
Okx,
1
Ładne, ale 5 bajtów w jakim kodowaniu? :-) Z 5 znaków tutaj, 𝐬 (U + 1D42C MATHEMATICAL BOLD SMALL S) , 𝐫 (U + 1D42B MATHEMATICAL BOLD SMALL R) , 𝕋 (U + 1D54B MATHEMATICAL DOUBLE-STRUCK TITIT T) i 𝔼 (U + 1D53C MATHEMATICAL KAPITAŁ DWUSTRONNY E) każdy zajmuje 4 bajty w UTF-8 (także w UTF-16 i (oczywiście) UTF-32). To w rzeczywistości 17 bajtów, choć chyba można zdefiniować niestandardowe kodowanie zoptymalizowane dla ASCII + te znaki.
ShreevatsaR
3
@ShreevatsaR Neim wydaje się używać własnej strony kodowej
The_Lone_Devil
@The_Lone_Devil Ah, to by wyjaśniało, dzięki!
ShreevatsaR
15

ArnoldC, 888 bajtów

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

Wiem, po prostu sprawdzam równość, ale to nie powinna być fajna część programu.

Miłej lektury. :)

Dodano kilka nowych linii dla łatwiejszej czytelności:

Wypróbuj online

Domii
źródło
6
Lubię cię. Właśnie dlatego zabiję cię ostatnio.
David Conrad,
12

Montaż x86, 55 35 33 31 bajtów:

Zakłada ABI, w którym wartość zwracana jest w EAX, a parametry są wypychane na stos ... więc prawie wszystkie z nich.

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
Govind Parmar
źródło
4

JavaScript ES6, 59 57 bajtów

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

Wypróbuj online!

Zasadniczo dzieli się na tablicę cyfr, łączy +i sprawdza to wyrażenie, aby w zasadzie sumować cyfry. string*stringautomatycznie zamieni ciągi znaków na ints. Pobiera dane wejściowe jako ciąg

Downgoat
źródło
2

Mathematica, 42 bajty

(s=Tr@IntegerDigits@#)IntegerReverse@s==#&
J42161217
źródło
2

Ruby, 69 bajtów

Pierwsza próba, z liczbą całkowitą jako wejściem:

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

Druga próba, z ciągiem wejściowym:

->i{(x=i.split('').map &:to_i).inject(0,&:+)*(x[-1]*10+x[0])==i.to_i}
reitermarkus
źródło
.split('')można zrobić.chars
Conor O'Brien
2

Partia, 164 bajty

@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

Drukuje 1 w przypadku powodzenia, brak wyjścia w przypadku awarii.

Neil
źródło
2

JavaScript (ES6), 72 bajty

To jest poprawne przesłanie ES6. Dodaj f=na początku i wywołaj jak f(arg).

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

Fragment testowy:

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

Arjun
źródło
Jak się ostatnio dowiedziałem, odraza od natychmiastowego odpowiadania na własne wyzwanie.
Shaggy
@Shaggy Ale ważne.
Okx,
3
I zwykle głosuję za tymi, którzy nie dbają o społeczność.
Leaky Nun
1
@Okx, nie według ludzi, którzy natychmiast zlekceważyli mnie i zganili za to. Musimy być konsekwentni, czy taka praktyka jest dozwolona.
Shaggy
3
Myślę, że to dlatego, że daje plakatowi wyzwanie niesprawiedliwą przewagę czasową, ponieważ jest możliwe, że mogą wymyślić wyzwanie, rozwiązać je, a następnie opublikować.
całkowicie ludzki,
2

Kotlin, 111 108 bajtów

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

Wypróbuj online!

Jak to jest typowe dla statycznie skompilowanych rozwiązań JVM, wiele bajtów jest traconych na samej deklaracji funkcji głównej i wywołaniu print (). Mięsem tej funkcji jest 60 bajtów, co wcale nie jest złe w przypadku ogólnego języka o typie statycznym, takiego jak Kotlin.

Kotlin, nudne rozwiązanie, 69 bajtów

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

Wypróbuj online!

Matej
źródło
1

05AB1E , 5 bajtów

SOÂ*Q

Wypróbuj online!

Erik the Outgolfer
źródło
Oczywiście rozwidlony. DSODR*Qbyło to, co miałem przed spojrzeniem.
Magic Octopus Urn
@carusocomputing Nie wiesz, dlaczego potrzebujesz tego pierwszego D.
Erik the Outgolfer
1

Python 2 , 55 bajtów

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

Wypróbuj online!

Wyjaśnienie

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

eval()Rozwiązanie jest nieco 2 bajty dłużej ...

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

Alternatywny (nieprawidłowy?) Rozwiązanie, 42 29 bajtów

To rozwiązanie sprawdza równość wszystkich liczb.

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

Wypróbuj online!

całkowicie ludzki
źródło
Alternatywne alternatywne rozwiązanie, tej samej długości:[1,81,1458,1729].__contains__
musicman523
1

Cheddar , 60 bajtów

(n,g=x->x?g(x/10|0)+x%10:0)->n==g(n)*number::("%d"%g(n)).rev

Wypróbuj online!

Leaky Nun
źródło
1

NewStack , 16 bajtów

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

Podział:

Jako przykład podano 1729

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

Nie drukuje nic, jeśli jest fałszywe, a oryginalne wejście, jeśli jest prawdziwe.

Grawiton
źródło
Pomnóż stos przez funkcję . Nie rozumiem Czy to oznacza wkład?
Arjun
Tak i nie, potem ¹stos składa się z [1]. A ponieważ zdefiniowaliśmy flub f(x)zrównaliśmy Twój wkład, pomnożenie każdego elementu na stosie przez funkcję fzasadniczo zastępuje 1nasz wkład. (Ponieważ [1] * f(x)= [f])
Graviton
1

MATL , 11 bajtów

tV!UstVPU*=

Wypróbuj online!

t - weź dane wejściowe i skopiuj je

V!U - podziel go na poszczególne cyfry

s - zsumuj te cyfry

t - zduplikuj tę sumę

VP - zmień to w sznurek, obróć go od lewej do prawej

U - zamień to z powrotem na liczbę

* - pomnóż dwie ostatnie wartości (suma cyfr i jej odwrócona wersja od lewej do prawej)

= - sprawdź, czy jest to równe oryginalnej wartości wejściowej (która jest jedyną inną wartością na stosie)

sundar - Przywróć Monikę
źródło
0

Galaretka , 8 bajtów

DS×ṚḌ$$=

Wypróbuj online!

Leaky Nun
źródło
DS×Ṛ$Ḍ=zapisuje bajt.
Dennis
@Dennis czyli ... wat witchkraft.
Leaky Nun
Po prostu dystrybucja. (1000a + 100b + 10c + d) y = 1000ay + 100by + 10cy + dy
Dennis