これはハーディ・ラマヌジャン番号のようなハーシャッド番号ですか?


16

バックグラウンド

番号1729は、ハーディラマヌジャンの番号です。この驚くべき特性は、GHハーディが病院で彼を訪問したときに、S。ラマヌジャン(インドの最も偉大な数学者1として広く知られています)によって発見されました。ハーディ自身の言葉で:

彼がパトニーで病気だったときに彼に会いに行ったことがあるのを覚えています。私はタクシー番号1729に乗っていましたが、番号は私にはむしろ退屈な番号のように見え、好ましくない前兆ではないことを願っていました。「いいえ」と彼は答えました。「非常に興味深い数字です。2つの異なる方法で2つのキューブの合計として表現できる最小の数字です。」

それに加えて、それは他の多くの驚くべき特性を持っています。そのような特性の1つは、それがハーシャッド数であるということです。つまり、その桁の合計(1 + 7 + 2 + 9 = 19)がその要因です。それも特別なものです。藤原正彦が示したように、1729は正の整数であり、その数字が加算されると、その反転を乗算すると元の数が得られる合計を生成します。

1 + 7 + 2 + 9 = 19

19×91 = 1729

このような性質を有する正の整数は、私はハーディ-Ramanujan-として定義するものであるっぽいこの記事の目的のために、Harshad番号。(技術用語があるかもしれませんが、A110921メンバーでない限り、私はそれを見つけることができませんでした


タスク

正の整数を与えられたn入力かどうかに基づいて、入力、出力truthy又はfalsey値としてnハーディ- Ramanujan-あるっぽい Harshad数。もしそうであれば、真実を出力します。それ以外の場合は、falseyを出力します。

注のみ4ハーディ- Ramanujan-ことっぽいハーシャッド数が存在する(1811458および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にND 12月、シュリニヴァーサ・ラマヌジャンの誕生日、国立数学デーは、インドで観察されます。彼の同僚であるケンブリッジの人々は、彼をヤコビ、オイラー、さらにはニュートンと比較しました。彼は非常に偉大であることに加えて、純粋数学の正式なトレーニングがほとんどありませんでしたが、それでも数学的分析数論無限級数連続分数に重要な貢献をしました。残念ながら、彼は数千の数学的発見を心に抱いて32歳で亡くなりました。彼の伝記に基づいた映画も彼に作られました、無限を知った男


4
「しかし、それらとの等価性をチェックするコードを書いてはいけません。」これは、観察不可能なプログラム要件です
マーティンエンダー

@MartinEnderしかし、その場合、番号は 1729、1458、81 または1になります。それが楽しいとは思わない。
アルジュン

2
なぜダウン投票なのですか?
アルジュン

証明:n桁の数値の最大デジタル合計は9nです。9nの逆は最大で90nです。したがって、積は最大で810n ^ 2になり、n桁でなければならないため、少なくとも10 ^(n-1)でなければなりません。N = 7、それはほとんど行われています場合には、その1までしか999999チェックしなければならない
漏れ修道女

6
それらとの等価性のチェックだけを許可する必要があると思います。とにかく、これらの種類の回答は、投票権を取ります。
Okx

回答:


12

ニーム、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お使いのブラウザではサポートされていないようです。画像は次のとおり
wpETt

1
いいですが、どのエンコードで5バイトですか?:-) 5文字のうち、𝐬(U + 1D42C数学ボールドスモールS)(U + 1D42B数学ボールドスモールR)𝕋(U + 1D54B数学ダブルストレスキャピタルT)および𝔼(U + 1D53C数学) DOUBLE-STRUCK CAPITAL E)はそれぞれ、UTF-8(UTF-16および(明らかに)UTF-32)で4バイトを占有します。したがって、これは実際には17バイトですが、ASCII +それらの文字に最適化されたカスタムエンコーディングを定義できると思います。
シュ

3
@ShreevatsaR NEIMは、独自に使用すると思われるコードページを
The_Lone_Devil

@The_Lone_Devilああ、説明してくれてありがとう!
シュ

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
私はあなたが好き。だから私は最後にあなたを殺すつもりです。
デビッドコンラッド

12

x86アセンブリ、55 35 33 31バイト:

戻り値がEAXにあり、パラメーターがスタックにプッシュされるABIを想定しています...そのため、それらのほとんどすべて。

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

オンラインでお試しください!

基本的に数字配列に分割され、+その式と結合して評価し、基本的に数字を合計します。string*string文字列を自動的にintに変換します。入力を文字列として受け取ります



2

ルビー、69バイト

入力として整数で最初に試してください:

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

文字列を入力として、2回目の試行:

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

.split('')作ることができます.chars
コナーオブライエン

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


私が最近学んだように、あなた自身の挑戦にすぐに答えることは眉をひそめます。
シャギー

@Shaggyしかし有効。
Okx

3
そして、私は通常、コミュニティを気にしない人に投票します。
リーキー修道女

1
@Okx、そうすることですぐに私を落胆させ、非難した人々によると。この慣行が許可されているかどうかについて一貫性を保つ必要があります。
シャギー

3
チャレンジを作成し、解決してから投稿できるので、チャレンジポスターに不公平な時間的優位性を与えるからだと思います。
完全に人間

2

Kotlin、111の 108バイト

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

オンラインでお試しください!

静的にコンパイルされたJVMソリューションで一般的なように、メイン関数の宣言とprint()の呼び出しだけで多くのバイトが失われます。この関数の中身は60バイトです。これは、Kotlinのような汎用の静的型付け言語にとってまったく悪くありません。

Kotlin、退屈なソリューション、69バイト

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

オンラインでお試しください!



1

Python 2、55バイト

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

オンラインでお試しください!

説明

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()解決策はあるビット 2バイト長...

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

代替(無効?)ソリューション、42 29バイト

このソリューションは、すべての数値に対して等しいかどうかをチェックします。

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

オンラインでお試しください!


別の代替ソリューション、同じ長さ:[1,81,1458,1729].__contains__
musicman523


1

NewStack、16バイト

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

内訳:

例として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]

falseの場合は何も印刷せず、trueの場合は元の入力を印刷します。


スタックに関数を掛けます。わかりませんでした。それは入力を意味しますか?
アルジュン

はい、いいえ、¹スタックはで構成され[1]ます。また、入力を定義したff(x)、または入力に等しくするため、スタック内のすべての要素に関数を掛けることfは、本質的に1入力を置き換えます。(なぜなら[1] * f(x)= [f]
グラビトン

1

MATL、11バイト

tV!UstVPU*=

オンラインでお試しください!

t -入力して複製する

V!U -個々の数字に分割します

s -それらの数字を合計する

t -その合計を複製する

VP -それを文字列に変え、左から右にひっくり返す

U -それを数字に戻す

* -最後の2つの値(数字の合計とその左右反転バージョン)を乗算します

= -これが元の入力(スタック内の唯一の他の値)と等しいかどうかを確認します








弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.