이 강건한 Ramanujan 번호 숫자 Harshad 숫자입니까?


16

배경

1729는 Hardy-Ramanujan 번호입니다. GH Hardy가 병원에서 그를 방문했을 때 S. Ramanujan (가장 큰 인도 수학자 1 로 널리 알려진)에 의해 놀라운 재산이 발견되었습니다 . 하디 자신의 말로 :

퍼트 니에서 아플 때 그를 보러 간 적이 기억납니다. 나는 택시 1729 번을 타면서 그 숫자가 나에게는 다소 둔한 것처럼 보였으며 그것이 불리한 징조가 아니기를 바랐다. "아니오"라고 대답했다. "매우 흥미로운 숫자입니다. 두 개의 다른 방식으로 두 큐브의 합으로 표현할 수있는 가장 작은 숫자입니다."

그 외에도 많은 놀라운 특성이 있습니다. 그러한 속성 중 하나는 그것이 Harshad Number라는 것입니다. 즉 숫자의 합 (1 + 7 + 2 + 9 = 19)이 그 요인입니다. 그것도 특별한 것입니다. Masahiko Fujiwara가 보여 주듯이, 1729는 양의 정수이며, 숫자를 합하면 그 역수를 곱하면 원래 숫자를 산출하는 합을 생성합니다.

1 + 7 + 2 + 9 = 19

19 × 91 = 1729

이러한 특성을 갖는 양의 정수는 내가 하디 - Ramanujan-로 정의하는 것입니다 이 게시물의 목적을 위해, 샤드 번호. (기술 용어가있을 수는 있지만 A110921멤버가 아니면 찾을 수 없습니다 )


작업

양수 주어 n입력이 있는지 여부에 기초 truthy 또는 falsey 값 입력, 출력 등을 n하디 - Ramanujan-이다 샤드 번호. 사실이라면 출력하십시오. 그렇지 않으면 false를 출력하십시오.

주 네 개의 하디 - Ramanujan- 것을 흉내 샤드 번호가 존재 ( 1, 81, 14581729), 당신은 그들과 함께 동등성에 대한 어떤 검사 코드를 작성할 수 있습니다. 그러나 나는 그것이 재미있을 것이라고 생각하지 않습니다.


입력

프로그램은 양의 정수 (즉, 자연수)를 가져야합니다. 변수에 있다고 가정하는 것을 제외하고는 어떤 식 으로든 취할 수 있습니다. 모달 창, 입력 상자, 명령 행, 파일 등에서 읽을 수 있습니다. 함수 인수로 입력하는 것도 허용됩니다.


산출

프로그램은 진실하거나 거짓된 가치를 산출해야합니다. 일관성이 없어도됩니다. 출력에 변수를 쓰는 것을 제외하고 프로그램은 어떤 식 으로든 출력 할 수 있습니다. 화면에 쓰기, 명령 행, 파일 등이 허용됩니다. 기능을 이용한 출력 return도 가능합니다.


추가 규칙

  • 당신은 해야한다 사용하지 내장 된 작업을 수행하기 위해 (내가 어떤 언어가있을 것이다 궁금해 같은 내장,하지만 매스 매 티카 ... )

  • 표준 허점이 적용됩니다.


테스트 사례

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 12 월 스 리니 바사 라마누잔의 생일, 국립 수학의 날은 인도에서 관찰된다. 케임브리지에있는 그의 동료들은 그를 Jacobi, Euler, 심지어 Newton과 비교했습니다. 그는 대단한 것 외에도 순수 수학 에 대한 공식적인 교육을 거의받지 못했지만 여전히 수학적 분석 , 수 이론 , 무한 시리즈연속 분수에 중요한 기여를했습니다 . 불행하게도, 그는 32 세의 어린 나이에 수천 개의 수학적인 발견을하면서 죽었습니다. 또한 만들어진 영화 를 기반으로 한 그에게, 그의 전기 ,무한을 알고있는 사람 .


4
"하지만 그와 동등한 지 검사하는 코드를 작성해서는 안됩니다." 이것은 관찰 할 수 없는 프로그램 요구 사항 입니다.
Martin Ender 2016 년

@MartinEnder 그러나 숫자는 1729, 1458, 81 또는 1과 같습니다 . 나는 그것이 재미있을 것이라고 생각하지 않습니다.
Arjun

2
왜 다운 보트인가?
Arjun

증명 : n 자리 숫자의 최대 디지털 합은 9n입니다. 9n의 반대는 최대 90n입니다. 따라서 곱은 810n ^ 2 이하 여야하며 n 자릿수가 있어야하므로 10 ^ (n-1) 이상이어야합니다. n = 7 일 때는 거의 완료되었으므로 999999까지만 확인하면됩니다.
Leaky Nun

6
나는 당신이 그들과 동등한 것을 확인하는 것을 허용해야한다고 생각합니다. 이러한 종류의 답변은 어쨌든 다운 보트가 될 수 있으며 경우에 따라 더 길어질 수 있습니다.
Okx

답변:


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 18:39에

1
@GamrCorps 브라우저가 지원하지 않는 것 같습니다. 여기 이미지가 있습니다 : puu.sh/wpETt/9f92af18e0.png
Okx

1
어떤 인코딩에서 5 바이트가 좋습니까? :-) 여기서 5 개의 문자 중 𝐬 (U + 1D42C MATHEMATICAL BOLD SMALL S) , 𝐫 (U + 1D42B MATHEMATICAL BOLD SMALL R) , 𝕋 (U + 1D54B MATHEMATICAL DOUBLE-STRUCK CAPITAL T)𝔼 (U + 1D53C MATHEMATICAL DOUBLE-STRUCK CAPITAL E)는 각각 UTF-8 (UTF-16 및 분명히 UTF-32)에서 4 바이트를 차지합니다. 따라서 이것은 실제로 17 바이트이지만 ASCII + 해당 문자에 최적화 된 사용자 정의 인코딩을 정의 할 수 있다고 생각합니다.
ShreevatsaR

3
@ShreevatsaR Neim은 자체 코드 페이지
The_Lone_Devil 2016 년

@The_Lone_Devil 아, 감사합니다!
ShreevatsaR 2016 년

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 어셈블리, 55 35 33 31 바이트 :

반환 값이 EAX이고 스택에서 매개 변수가 푸시되는 거의 모든 ABI가있는 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

자바 스크립트 ES6, 59 57 바이트

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

온라인으로 사용해보십시오!

기본적으로 숫자 배열로 분할되고 기본적으로 숫자 +를 합하기 위해 해당 표현식 과 결합 하고 회피합니다. string*string문자열을 int로 자동 변환합니다. 입력을 문자열로받습니다


2

수학, 42 바이트

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

2

루비, 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
코너 오브라이언

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

자바 스크립트 (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
그리고 나는 보통 지역 사회에 관심이없는 사람들을 공감합니다.
Leaky Nun

1
@Okx, 즉시 다운 보트하고 저를 격노 한 사람들에 따르면 아닙니다. 우리는이 관행이 허용되는지에 대해 일관성을 유지해야합니다.
얽히고 설킨

3
챌린지 포스터가 챌린지를 구성하고 해결 한 다음 게시 할 수 있기 때문에 불공정 한 시간 이점을 제공하기 때문이라고 생각합니다.
완전히 인간적인

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과 같은 범용 정적 유형 언어에는 전혀 나쁘지 않습니다.

코 틀린, 지루한 솔루션, 69 바이트

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

온라인으로 사용해보십시오!



1

파이썬 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]

거짓이면 아무것도 인쇄하지 않고 참이면 원래 입력을 인쇄합니다.


스택에 함수를 곱하십시오 . 나는 그것을 얻지 못했습니다. 그게 입력을 의미합니까?
Arjun

예, 아니오, ¹스택은로 구성됩니다 [1]. 그리고 우리는 입력을 정의 f하거나 f(x)같기 때문에 스택의 모든 요소에 함수를 곱하면 f본질적으로 1입력을 입력 으로 대체합니다 . (Because [1] * f(x)= [f])
Graviton 2016 년

1

MATL , 11 바이트

tV!UstVPU*=

온라인으로 사용해보십시오!

t -입력하고 복제

V!U -개별 숫자로 나눕니다.

s -그 숫자를 합산

t -그 합계를 복제

VP -끈으로 바꾸고 왼쪽에서 오른쪽으로 뒤집습니다

U -다시 숫자로 바꾸세요

* -마지막 두 값을 곱합니다 (숫자 합계 및 왼쪽에서 오른쪽으로 뒤집힌 버전)

= -이것이 원래 입력과 같은지 확인하십시오 (스택의 유일한 다른 값)








당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.