Ist das eine Hardy-Ramanujan-Nummer-ish Harshad-Nummer?


16

Hintergrund

Die Nummer 1729 ist die Hardy-Ramanujan-Nummer. Eine erstaunliche Eigenschaft davon wurde von S. Ramanujan (der weithin als der größte indische Mathematiker 1 gilt ) entdeckt, als GH Hardy ihn in einem Krankenhaus besuchte. In Hardys eigenen Worten:

Ich erinnere mich, dass ich ihn einmal besucht habe, als er in Putney krank war. Ich war mit dem Taxi Nummer 1729 gefahren und bemerkte, dass die Nummer mir ziemlich langweilig erschien und ich hoffte, dass es kein ungünstiges Omen war. "Nein", antwortete er, "es ist eine sehr interessante Zahl; es ist die kleinste Zahl, die auf zwei verschiedene Arten als Summe von zwei Würfeln ausgedrückt werden kann."

Abgesehen davon hat es viele andere erstaunliche Eigenschaften. Eine solche Eigenschaft ist, dass es sich um eine Harshad-Zahl handelt, dh die Summe ihrer Ziffern (1 + 7 + 2 + 9 = 19) ist ein Faktor dafür. Auch das ist etwas Besonderes. Wie Masahiko Fujiwara gezeigt hat, ist 1729 eine positive ganze Zahl, die, wenn ihre Ziffern addiert werden, eine Summe ergibt, die bei Multiplikation mit ihrer Umkehrung die ursprüngliche Zahl ergibt:

1 + 7 + 2 + 9 = 19

19 × 91 = 1729

Eine positive ganze Zahl mit einer solchen Eigenschaft ist das, was ich für den Zweck dieses Beitrags als Hardy-Ramanujan- ish- Harshad-Zahl definiere . (Es könnte einen Fachbegriff dafür geben, aber ich konnte ihn nicht finden, es sei denn, er ist Mitglied von A110921. )


Die Aufgabe

Bei einer positiven Ganzzahl nals Eingabe wird ein Wahrheits- oder Falschwert ausgegeben, der davon abhängt, ob es sich bei der Eingabe num eine Hardy-Ramanujan- ish- Harshad-Zahl handelt. Ausgabe wahrheitsgetreu, wenn es ist. Andernfalls wird falsey ausgegeben.

Beachten Sie, dass nur vier Hardy-Ramanujan- ish Harshad Zahlen existieren ( 1, 81, 1458und 1729), und man kann mit ihnen Code, der prüft , ob die Gleichwertigkeit schreiben. Aber ich denke nicht, dass das Spaß machen wird.


Eingang

Ihr Programm sollte eine positive ganze Zahl haben (mit anderen Worten eine natürliche Zahl). Es kann in irgendeiner Weise verwendet werden, außer dass angenommen wird, dass es in einer Variablen vorhanden ist. Das Lesen aus einem modalen Fenster, einem Eingabefeld, einer Befehlszeile, einer Datei usw. ist zulässig. Eingaben als Funktionsargument sind ebenfalls zulässig.


Ausgabe

Ihr Programm sollte einen Wahrheitswert oder einen falschen Wert ausgeben. Sie müssen nicht konsistent sein. Ihr Programm kann auf irgendeine Weise ausgeben, außer die Ausgabe in eine Variable zu schreiben. Schreiben auf Bildschirm, Kommandozeile, Datei usw. ist erlaubt. Die Ausgabe mit Funktion returnist ebenfalls erlaubt.


Zusätzliche Regeln

  • Sie müssen kein eingebautes Programm verwenden, um die Aufgabe zu erledigen (ich frage mich, dass eine Sprache ein solches eingebautes Programm haben wird, aber dann Mathematica ... )

  • Es gelten Standard-Regelungslücken .


Testfälle

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

Gewinnkriterium

Das ist , also gewinnt der kürzeste Code in Bytes!


1 Jedes Jahr am 22. nd Dezember Geburtstag von Srinivasa Ramanujan, Nationalen Tag der Mathematik ist in Indien beobachtet. Seine Kollegen in Cambridge verglichen ihn mit Jacobi, Euler und sogar Newton. Abgesehen davon, dass er so großartig war, hatte er fast keine formale Ausbildung in reiner Mathematik , aber dennoch leistete er wichtige Beiträge zur mathematischen Analyse , zur Zahlentheorie , zu unendlichen Reihen und zu weiteren Brüchen . Leider starb er im frühen Alter von 32 Jahren mit Tausenden mathematischen Entdeckungen im Kopf. Es wurde auch ein Film über ihn gedreht, der auf seiner Biografie beruhte .Der Mann, der die Unendlichkeit wusste .


4
"Aber Sie dürfen keinen Code schreiben, der die Gleichwertigkeit mit ihnen überprüft." Dies ist eine nicht beobachtbare Programmanforderung .
Martin Ender

@MartinEnder Aber dann wird es eben so sein, dass die Zahl gleich 1729, 1458, 81 oder 1 ist . Ich denke nicht, dass das Spaß machen wird.
Arjun

2
Warum die Abstimmungen?
Arjun

Beweis: Die maximale digitale Summe einer Zahl mit n Ziffern beträgt 9n. Die Umkehrung von 9n wäre höchstens 90n. Das Produkt wäre also höchstens 810n ^ 2, was n Ziffern haben muss, also mindestens 10 ^ (n-1). Wenn n = 7, ist es ziemlich erledigt, so dass man nur bis 999999 prüfen muss.
Undichte Nonne

6
Ich denke, Sie sollten nur zulassen, dass die Gleichwertigkeit mit ihnen überprüft wird. Diese Art von Antworten würde ohnehin Ablehnung erhalten und wird in einigen Fällen wahrscheinlich länger dauern.
Okx

Antworten:


12

Neim , 5 Bytes

𝐬D𝐫𝕋𝔼

Erläuterung:

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

Versuch es!


Sind die anderen 4 Bytes nicht druckbar? Ich zähle 1 Byte
GamrCorps

1
@GamrCorps Es scheint, dass sie von Ihrem Browser nicht unterstützt werden. Hier ist ein Bild: puu.sh/wpETt/9f92af18e0.png
Okx

1
Schön, aber 5 Bytes in welcher Codierung? :-) Von den hier angegebenen 5 Zeichen sind 𝐬 (U + 1D42C MATHEMATISCH FETT KLEIN S) , 𝐫 (U + 1D42B MATHEMATISCH FETT KLEIN R) , 𝕋 (U + 1D54B MATHEMATISCH DOPPELTES KAPITAL T) und 𝔼 (U + 1D53C MATHEMATISCH DOUBLE-STRUCK CAPITAL E) belegen jeweils 4 Bytes in UTF-8 (auch in UTF-16 und (offensichtlich) in UTF-32). Das sind also tatsächlich 17 Bytes, obwohl man eine benutzerdefinierte Codierung definieren könnte, die für ASCII + diese Zeichen optimiert ist.
ShreevatsaR

3
@ ShreevatsaR Neim scheint seine eigene Codepage zu verwenden
The_Lone_Devil

@The_Lone_Devil Ah, das würde es erklären, danke!
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

Ich weiß, ich überprüfe nur die Gleichheit, aber das sollte nicht der spaßige Teil des Programms sein.

Viel Spaß beim Lesen. :)

Es wurden einige neue Zeilen hinzugefügt, um die Lesbarkeit zu verbessern:

Probieren Sie es online aus


6
Ich mag dich. Deshalb werde ich dich zuletzt töten.
David Conrad

12

x86-Assembly, 55 35 33 31 Byte:

Nimmt ein ABI an, bei dem der Rückgabewert in EAX ist und Parameter auf dem Stack abgelegt werden ... also fast alle.

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 Bytes

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

Probieren Sie es online!

+Teilt sich im Wesentlichen in ein Ziffernarray und verbindet sich mit diesem Ausdruck und wertet ihn aus, um die Ziffern im Wesentlichen zu summieren. string*stringwandelt automatisch Zeichenketten in Ints um. Übernimmt die Eingabe als Zeichenfolge


2

Mathematica, 42 Bytes

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

2

Rubin, 69 Bytes

Versuchen Sie zuerst, mit Integer als Eingabe:

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

Zweiter Versuch, mit String als Eingabe:

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

.split('')kann gemacht werden.chars
Conor O'Brien

2

Batch, 164 Bytes

@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

Druckt 1 bei Erfolg, keine Ausgabe bei Fehler.


2

JavaScript (ES6), 72 Byte

Dies ist eine gültige ES6-Vorlage. Addiere f=zu Beginn und rufe like auf f(arg).

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

Testschnipsel:

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


Wie ich kürzlich erfahren habe, ist es verpönt, sofort auf die eigene Herausforderung zu antworten.
Shaggy

@ Shaggy Aber gültig.
Okx

3
Und normalerweise stelle ich diejenigen in Abrede, denen die Community egal ist.
Undichte Nonne

1
@Okx, nicht nach den Leuten, die mich sofort dafür herabgestimmt und beschimpft haben. Wir müssen konsequent sein, ob diese Praxis erlaubt ist oder nicht.
Shaggy

3
Ich denke es, weil es dem Herausforderungsposter einen unfairen Zeitvorteil gibt, da es möglich ist, dass sie eine Herausforderung erfinden, sie lösen und sie dann veröffentlichen können.
Totalhuman

2

Kotlin, 111 108 Bytes

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

Probieren Sie es online!

Wie es für statisch kompilierte JVM-Lösungen typisch ist, gehen viele Bytes nur bei der Deklaration der Hauptfunktion und dem Aufruf von print () verloren. Das Fleisch der Funktion ist 60ish Bytes, was für eine statisch typisierte Allzwecksprache wie Kotlin überhaupt nicht schlecht ist.

Kotlin, langweilige Lösung, 69 Bytes

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

Probieren Sie es online!



1

Python 2 , 55 Bytes

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

Probieren Sie es online!

Erläuterung

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

Eine eval()Lösung ist etwas 2 Bytes länger ...

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

Alternative (ungültige?) Lösung, 42 29 Bytes

Diese Lösung prüft die Gleichheit mit allen Zahlen.

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

Probieren Sie es online!


Alternative alternative Lösung, gleiche Länge:[1,81,1458,1729].__contains__
musicman523


1

NewStack , 16 Bytes

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

Die Panne:

Am Beispiel von 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]

Gibt bei false nichts und bei true die ursprüngliche Eingabe aus.


Multiplizieren Sie den Stapel mit der Funktion . Das habe ich nicht verstanden. Bedeutet das die Eingabe?
Arjun

Ja und nein, danach ¹besteht der Stack aus [1]. Und da wir Ihre Eingabe definiert foder f(x)gleichgesetzt haben, ersetzt das Multiplizieren jedes Elements im Stapel mit der Funktion fim Wesentlichen das 1durch unsere Eingabe. (Weil [1] * f(x)= [f])
Graviton

1

MATL , 11 Bytes

tV!UstVPU*=

Probieren Sie es online!

t - Eingaben nehmen und duplizieren

V!U - Teilen Sie es in einzelne Ziffern auf

s - Summiere diese Ziffern

t - Duplizieren Sie diese Summe

VP - Machen Sie daraus eine Schnur, drehen Sie sie von links nach rechts

U - Machen Sie daraus eine Zahl

* - Multipliziere die letzten beiden Werte (die Ziffernsumme und ihre von links nach rechts gespiegelte Version)

= - Überprüfen Sie, ob dies mit der ursprünglichen Eingabe übereinstimmt (die der einzige andere Wert im Stapel ist).








Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.