Це номер Харсада-Харді-Рамануджана з номером Харді?


16

Фон

Число 1729 - це число Харді-Рамануджана. Дивовижну властивість його виявив С. Рамануджан (якого широко вважають найбільшим індійським математиком 1 ), коли Г.Г. Харді відвідав його в лікарні. Словами Харді:

Я пам’ятаю, як одного разу їздив до нього, коли він хворів на Путні. Я їхав у таксі № 1729 і зауважив, що номер здався мені досить нудним, і я сподівався, що це не є несприятливою ознакою. "Ні, - відповів він, - це дуже цікаве число; це найменше число, яке виражається як сума двох кубів двома різними способами".

Крім того, він має багато інших дивовижних властивостей. Однією з таких властивостей є те, що це число Харшада, тобто сума його цифр (1 + 7 + 2 + 9 = 19) є його чинником. Це теж особливий. Як показав Масахіко Фуджівара, 1729 рік - це додатне ціле число, яке, коли його цифри додаються разом, дає суму, яка при множенні на перевернення дає вихідне число:

1 + 7 + 2 + 9 = 19

19 × 91 = 1729

Позитивне ціле число , яке має таку властивість є те , що я визначаю як Харді-Ramanujan- ISH Харшад номер, з метою цього поста. (Можливо, для цього є технічний термін, але я не зміг його знайти, якщо він не є членом A110921 )


Завдання

З огляду на позитивне ціле число в nякості введення, виведення значення truthy або falsey в залежності від того вхідного nє Харді-Ramanujan- ISH Харшад номер. Виведіть правду, якщо вона є. В іншому випадку виведіть фальси.

Зверніть увагу , що тільки чотири Харді-Ramanujan- ISH існує число Харшад ( 1, 81, 1458і 1729), і ви можете написати код , який перевіряє еквівалентність з ними. Але я не думаю, що це буде весело.


Вхідні дані

Ваша програма повинна приймати натуральне число (натуральним числом, іншими словами). Він може прийняти його будь-яким способом, крім припущення, що він присутній у змінній. Читання з модального вікна, вікна введення, командного рядка, файлу тощо дозволяється. Дозволено також приймати введення як аргумент функції.


Вихідні дані

Ваша програма повинна виводити значення truthy або falsey. Вони не повинні бути послідовними. Ваша програма може виводити будь-яким способом, крім запису виводу в змінну. Допускається запис на екран, командний рядок, файл тощо. 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
"але ви не повинні писати код, який перевіряє їх еквівалентність." Це непомітна вимога програми .
Мартін Ендер

@MartinEnder Але тоді це просто буде чи є рівним 1729, 1458, 81 або 1 . Я не думаю, що це буде весело.
Арджун

2
Чому голоси?
Арджун

Доведення: максимальна цифрова сума числа з п цифрами - 9n. Реверс 9n був би не більше 90n. Отже, добуток мав би бути не більше 810n ^ 2, який повинен мати n цифр, тому він повинен бути принаймні 10 ^ (n-1). Коли n = 7, це майже все зроблено, тому потрібно лише перевірити до 999999 р.
Leaky Nun

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 Здається, їх браузер не підтримує. Ось зображення: puu.sh/wpETt/9f92af18e0.png
Okx

1
Приємно, але 5 байт в якому кодуванні? :-) З 5 символів тут 𝐬 (U + 1D42C MATHEMATICAL BOLD SMALL S) , 𝐫 (U + 1D42B MATHEMATICAL BOLD SMALL R) , 𝕋 (U + 1D54B MATEMEMICAL DUBLE-STRUCK CAPITAL T) і 𝔼 (U + 1D53C MATHEMATICAL ДВОЙНО-СТРУКОВИЙ КАПІТАЛ E) кожен займає 4 байти в UTF-8 (також в UTF-16 і (очевидно) UTF-32). Отже, це насправді 17 байт, хоча, мабуть, можна визначити спеціальне кодування, оптимізоване для ASCII + цих символів.
ShreevatsaR

3
@ShreevatsaR Neim, схоже, використовує власну кодову сторінку
The_Lone_Devil

@The_Lone_Devil Ах, що б це пояснило, дякую!
ShreevatsaR

15

АрнольдС, 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 байт:

Припускає 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автоматично перетворить рядки в ints. Вводиться як рядок



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
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=на початку та викликайте, як 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
@Oxx, не за словами людей, які негайно викликали на мене та знущалися за це. Ми повинні бути послідовними щодо того, дозволяється чи ні ця практика.
Кудлатий

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 (). М'ясо функції - 60 байт, що зовсім не погано для загальномовної статично набраної мови, як Котлін.

Котлін, нудне рішення, 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__
Чергове


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]

Друкує нічого, якщо невірно, а оригінальний ввід, якщо істинний.


Помножте стек на функцію . Я цього не зрозумів. Це означає вхід?
Арджун

Так і ні, після ¹, стек складається з [1]. А оскільки ми визначили fабо f(x)дорівнюємо вашому входу, множення кожного елемента в стеку на функцію fпо суті замінює на 1наш вхід. (Тому що [1] * f(x)= [f])
Гравітон

1

MATL , 11 байт

tV!UstVPU*=

Спробуйте в Інтернеті!

t - приймати введення та дублювати його

V!U - розділити його на окремі цифри

s - підсумовуйте ці цифри

t - дублювати цю суму

VP - перетворіть це на рядок, переверніть його вліво-вправо

U - перетворити це назад у число

* - помножте два останні значення (цифра-сума та її перевернута версія зліва направо)

= - перевірте, чи це дорівнює початковому вводу (що є єдиним іншим значенням у стеку)








Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.