这是Hardy-Ramanujan-Number-ish Harshad号码吗?


16

背景

1729是哈迪-拉曼纽(Hardy-Ramanujan)数字。当S. Ramanujan(被广泛认为是印度最伟大的数学家1)在GH Hardy在医院探望他时,发现了它的惊人特性。用哈代自己的话说:

我记得他在普特尼生病时曾经去看他。我曾骑过1729号出租车,并说这个电话对我来说似乎是个呆板的,我希望这不是一个不利的预兆。他回答说:“不,这是一个非常有趣的数字;它是最小的数字,可以用两种不同的方式表示为两个立方体的和。”

除此之外,它还有许多其他令人惊奇的特性。一个这样的属性是它是一个Harshad数,即其数字的总和(1 + 7 + 2 + 9 = 19)是其中的一个因素。那也很特别。正如藤原昌彦(Mahahiko Fujiwara)所显示的,1729是一个正整数,当将其数字相加时,会产生一个总和,再乘以其反转,便得出原始数字:

1 + 7 + 2 + 9 = 19

19×91 = 1729

具有这种性质的正整数,是我定义为哈迪- Ramanujan- ISH哈沙德数,这个职位的目的。(可能会有一个技术术语,但是除非它是A110921成员,否则我找不到它)


任务

给定一个正整数n作为输入,输出基于所述输入是否truthy或falsey值n是一个哈迪- Ramanujan- ISH哈沙德数。如果是,请输出真实值。否则,输出falsey。

请注意,只有四个哈迪- Ramanujan- ISH哈沙德数存在(18114581729),你可以写代码检查与他们对等。但是我认为那不会很有趣。


输入值

您的程序应采用正整数(换句话说,是自然数)。除了假定它存在于变量中之外,它可以采用任何方式使用。允许从模态窗口,输入框,命令行,文件等读取。也可以将输入作为函数参数。


输出量

您的程序应输出一个真或假值。它们不必保持一致。您的程序可以以任何方式输出,除非将输出写入变量。允许写入屏幕,命令行,文件等。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 月,斯里尼瓦沙拉马努金的生日,全国数学日在印度观察到。他的同事(在剑桥的同事)将他与雅各比,欧拉,甚至牛顿相提并论。除了表现出色外,他几乎没有接受过纯数学方面的正规培训,但他仍然对数学分析数论无穷级数连续分数做出了重要贡献。不幸的是,他在32岁时就去世了,脑海中浮现出数以千计的数学发现。根据他的传记,他还拍了一部电影无限的人


4
“但您一定不能编写检查与它们是否等效的代码。” 这是不可观察的程序要求
Martin Ender

@MartinEnder但是它等于 1729、1458、81 或1。我认为那不会很有趣。
Arjun

2
为什么要下票?
Arjun 2015年

证明:n位数字的最大数字总和为9n。9n的倒数最多为90n。因此,乘积最多为810n ^ 2,它必须具有n位数字,因此它必须至少为10 ^(n-1)。当n = 7,它几乎完成的,因此人们只要检查999999直到
漏尼姑

6
我认为您应该只允许检查它们的等效性。无论如何,这类答案都会被否决,在某些情况下可能会更长。
Okx

Answers:


12

Neim,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,2015年

1
@GamrCorps您的浏览器似乎不支持它们。这是一张图片:puu.sh/wpETt/9f92af18e0.png
Okx

1
不错,但是用什么编码的5个字节?:-)在这5个字符中,𝐬(U + 1D42C数学粗体小S)𝐫(U + 1D42B数学粗体R)R (U + 1D54B数学双重大写T)𝔼(U + 1D53C MATHEMATICAL DOUBLE-STRUCK CAPITAL E)各自在UTF-8(以及UTF-16和(显然)UTF-32)中占用4个字节。所以实际上是17个字节,尽管我猜可以定义一种针对ASCII +这些字符进行了优化的自定义编码。
ShreevatsaR

3
@ShreevatsaR Neim似乎使用了自己的代码页
The_Lone_Devil

@The_Lone_Devil嗯,可以解释一下,谢谢!
ShreevatsaR

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
我喜欢你。这就是为什么我要最后杀了你。
David Conrad

12

x86 Assembly,55 35 33 31字节:

假设一个ABI的返回值以EAX表示,并且参数被压入堆栈...所以几乎所有这些参数。

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会自动将字符串转换为整数。将输入作为字符串


2

Mathematica,42个字节

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

2

Ruby,69字节

首先尝试使用整数作为输入:

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

第二次尝试,使用字符串作为输入:

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

.split('')可以制成.chars
Conor O'Brien

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=在开始处添加并调用like 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))


正如我最近所了解到的那样,立即回答您自己的挑战已成问题。
毛茸茸的

@粗野但有效。
Okx

3
我通常会对那些不关心社区的人投反对票。
Leaky Nun

1
@Okx,不是根据立即投票并谴责我这样做的人说的。关于是否允许这种做法,我们需要保持一致。
毛茸茸的

3
我认为这是因为它给挑战发帖人带来了不公平的时间优势,因为他们有可能组成挑战,解决挑战然后发布。
totallyhuman

2

科特林,111 108个字节

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

在线尝试!

与静态编译的JVM解决方案一样,仅在主函数声明和调用print()上丢失了许多字节。该函数的内容为60ish字节,对于像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,则不输出原始输入。


将堆栈乘以该函数。我没听懂 这意味着输入吗?
Arjun

是和否,之后¹,堆栈由组成[1]。并且由于我们定义ff(x)等于您的输入,因此将堆栈中的每个元素乘以函数f实际上就是1用我们的输入替换。(因为[1] * f(x)= [f]
Graviton

1

MATL,11个字节

tV!UstVPU*=

在线尝试!

t -输入并复制

V!U -将其拆分为单个数字

s -将这些数字相加

t -复制那笔款项

VP -把它变成一个字符串,从左到右翻转

U -把它变成数字

* -将最后两个值(数字总和及其从左向右翻转的形式)相乘

= -检查这是否等于原始输入(这是堆栈中唯一的其他值)








By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.