Це кандидат Кальвін Число?


27

Цей виклик є даниною нашому легендарному письменнику Challenge ™, хобі Кальвіна - тепер перейменованому на Helka Homba - в тому ж дусі, як Generate Dennis Numbers .

Калвін є досить вражаючим учасником PPCG, з 6-ою найбільшою репутацією і, мабуть, безперечно, найкращими навичками написання викликів у всіх нас. Однак, звичайно, для цього завдання ми зупинимося на його ідентифікаторі користувача.

26997 спочатку може виглядати не дуже цікаво. Насправді це мало цікаво кількома способами. Наприклад, ось діаграма 26997 mod <n>певних значень n:

n   |  26997 % n
----+-----------
3   |  0
4   |  1
5   |  2
6   |  3
7   |  5 :(
8   |  5
9   |  6
10  |  7

Однак 26997 - одне з небагатьох чисел, яке може бути представлене числом , де ціле число> 0.(n * 10)n - nn

Ось кілька перших чисел, які можна виразити таким чином, які ми звідси далі назвемо Кальвіновими числами :

9
398
26997
2559996
312499995
46655999994
8235429999993
1677721599999992
387420488999999991
99999999999999999990
28531167061099999999989
8916100448255999999999988
3028751065922529999999999987
1111200682555801599999999999986
437893890380859374999999999999985
184467440737095516159999999999999984
82724026188633676417699999999999999983
39346408075296537575423999999999999999982
19784196556603135891239789999999999999999981
10485759999999999999999999999999999999999999980

Ці кальвінові номери мають деякі цікаві властивості. Більше шаблонів з’являється, коли ми їх вирівнюємо правильно і виділяємо всі 9s:

скріншот

Ці питання, які нас цікавлять для цього виклику, це:

  • Незалежно від цього n, кожне число Кальвіна закінчується на .10n - n

    Так, Кельвін (1) кінці з 9, Кальвіна (2) закінчується 98, і зразок триває 997, 9996, 99995і т.д., при цьому кожний наступний Calvin Кількість відлік і додати додатковий 9до початку.

  • Для значень nде n % 10 == 0(тобто nділиться на 10), Кальвін (n) закінчується на .102n - n

    Тобто, візерунок поширюється на вдвічі більше цифр, ніж звичайний, з додатковою кількістю 9s на початку дорівнює n.

  • Коли nце сила 10( 10, 100, 1000і т.д.), шаблон простягається ще далі-кожна одна цифра є або 9чи 0.

    Ця закономірність така: дев'ять і нулі. Це простіше зрозуміти на графіку (у вашому рішенні все одно доведеться обробляти числа до 10000, тому це все, що вам потрібно):(n + 1) * 10n - nn

    n      |  Calvin(n)
    -------+-----------------------
    10     |  19 nines, 1 zero
    100    |  298 nines, 2 zeroes
    1000   |  3997 nines, 3 zeroes
    10000  |  49998 nines, 4 zeroes
    

    Кількість дев'яток навіть демонструє декілька властивостей самих Calvin Numbers , але це занадто багато деталей для цього завдання.

Виклик

Calvin Numbers стає занадто великим, занадто швидким, щоб "отримати n-те виклик Calvin Number, щоб здійснити мовами без довільних точних цілих чисел. Тому завдання полягає в тому, щоб визначити, чи відповідає число вказаним вище шаблонам, тобто чи число - це "номер кандидата Кальвіна" чи ні.

Ось критерії для кількості, яку слід вважати номером Кальвіна (далі - коротко CCN):

  • Він закінчується числом, яке підходить до шаблону для цілого числа .10n - nn

    Отже, щоб бути CCN, число повинно закінчуватися на 9, або 98, або 997, 9996, 99995 тощо.

  • Якщо остання цифра є 0, вона також повинна закінчуватися так само, як і в попередньому пункті.102n - nn

    Це означає, що 12312312399999999999999999999999999999999999980це не CCN, але 10485759999999999999999999999999999999999999980є (насправді це правильний).

  • Якщо значення nв попередніх двох кроках - потужність 10, все число повинно відповідати третьому шаблону, описаному вище.

Введення-виведення

Вхід буде надано у вигляді рядка, і він завжди буде представляти число, менше ніж Calvin(10000) + 10000(яке також можна виразити як ). (Для уточнення, найбільший можливий вхід - 50000 дев'ять, а найменший можливий вхід .)10500001

Вихід повинен бути правдоподібним, якщо вхід представляє число, яке є CCN, а помилкове значення - в іншому випадку. Для визначення цих термінів див. Мета .

Тестові справи

Вхідні дані, які повинні спричинити триєдне значення:

9
26997
99999999999999999990
437893890380859374999999999999985
10485759999999999999999999999999999999999999980
999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999900
259232147948794494594485446818048254863271026096382337884099237269509380022108148908589797968903058274437782549758243999867043174477180579595714249308002763427793979644775390624999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999850
1027092382693614216458468213549848274267264533712122209400214436472662418869004625362768700557725707157332451380426829473630485959339004149867738722096608953864534215649211386152032635755501464142277508289403434891444020975243742942368836579910208098242623061684967794815600266752580663281483595687307649904776800899000484103534573979334062832465904049046104660220505973505050538180250643437654409375728443182380726453925959886901573523090619465866810938078629561306599174923972607310649219442207992951278588892681161967770532314854195892941913447519131828356181219857012229150315613569162930098836696593474888020746503116685472977764615483225628639443918309216648893055765917642528801571387940219884056021782642758517893124803355573565644666880920219871370649806723296262307899148031362558110611562055614190049332906933360406981359187305353360484377948591528385990255894034369523166777375785900198782250651053530165824984161319460372145229568890321167955690544235365954748429659526071133879976348254667755220636244075595290123987745560038255541751251200827018722242010925729483977388235141539109139120069464709993781356334885359200734157439642935779132120725231008699003342908280056975158266782782304550273268246184659474285971272532354920744956064671379745219778013465792544241259691493098443741845166419905920702654683993902052727208789915748213660571390107102976665776293366616518962323688316843422737162297255648351087284877987537325761187239807598009767936409247247417410607537333841650998421607775989879490006136112078031237742552602618996017404602674987181629319060214150458746352191115606789019875790921190573561400752476956787515392210098071407806221412149732955903681690377998882038499470092453400748916257640501488510563314141992573250882286817352407459053866180642034662845694338400386823496563185664221362457851894843439705365082614359220653285052800751906334000698723288454227654466240011140570190301931122357632719033275258503935182047714841766010764632214069382579660602964184231995352310981811428980530707871661256260926759509418970021224649566130995825802676411575264295689037775857674060557127369881379685432291930869072749065675720647595081516460449973211035071920099349836074945813885239767788449030051892470053308048906746273036871919251738920141071153777908913021898541658119513188402271468288293408246833819954990709460114510017598873554406350044072275643892449218394225569069468466660333869360644718801813500285081977089623921689922204185138003164149106921903053243405307546841149889662566529697217181329051855403329741409045760789280950603184354320839342588593832348459938736210265795978675460906504449491132656307256451707333439200130425932724262464823848348296787445624028385464112471408499986690593095395244034885421580844176161027627954578726208600199909963055422192706751708210693468639072881081717288837393188012794669089175022406897622823484220002211676520484520241135615999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999028

Вхідні дані, які повинні спричинити помилкове значення:

1
26897
79999999999999999990
437893890380859374299999999999985
12312312399999999999999999999999999999999999980
999998999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999900
259232147948794494594485446818048254863271026096382337884099237269509380022108148908589797968903058274437782549758243999867043174477180579595714249308002763427793979644775390624999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999911111
1027092382693614216458468213549848274267264533712122209400214436472662418869004625362768700557725707157332451380426829473630485959339004149867738722096608953864534215649211386152032635755501464142277508289403434891444020975243742942368836579910208098242623061684967794815600266752580663281483595687307649904776800899000484103534573979334062832465904049046104660220505973505050538180250643437654409375728443182380726453925959886901573523090619465866810938078629561306599174923972607310649219442207992951278588892681161967770532314854195892941913447519131828356181219857012229150315613569162930098836696593474888020746503116685472977764615483225628639443918309216648893055765917642528801571387940219884056021782642758517893124803355573565644666880920219871370649806723296262307899148031362558110611562055614190049332906933360406981359187305353360484377948591528385990255894034369523166777375785900198782250651053530165824984161319460372145229568890321167955690544235365954748429659526071133879976348254667755220636244075595290123987745560038255541751251200827018722242010925729483977388235141539109139120069464709993781356334885359200734157439642935779132120725231008699003342908280056975158266782782304550273268246184659474285971272532354920744956064671379745219778013465792544241259691493098443741845166419905920702654683993902052727208789915748213660571390107102976665776293366616518962323688316843422737162297255648351087284877987537325761187239807598009767936409247247417410607537333841650998421607775989879490006136112078031237742552602618996017404602674987181629319060214150458746352191115606789019875790921190573561400752476956787515392210098071407806221412149732955903681690377998882038499470092453400748916257640501488510563314141992573250882286817352407459053866180642034662845694338400386823496563185664221362457851894843439705365082614359220653285052800751906334000698723288454227654466240011140570190301931122357632719033275258503935182047714841766010764632214069382579660602964184231995352310981811428980530707871661256260926759509418970021224649566130995825802676411575264295689037775857674060557127369881379685432291930869072749065675720647595081516460449973211035071920099349836074945813885239767788449030051892470053308048906746273036871919251738920141071153777908913021898541658119513188402271468288293408246833819954990709460114510017598873554406350044072275643892449218394225569069468466660333869360644718801813500285081977089623921689922204185138003164149106921903053243405307546841149889662566529697217181329051855403329741409045760789280950603184354320839342588593832348459938736210265795978675460906504449491132656307256451707333439200130425932724262464823848348296787445624028385464112471408499986690593095395244034885421580844176161027627954578726208600199909963055422192706751708210693468639072881081717288837393188012794669089175022406897622823484220002211676520484520241135615999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999027

Правила

  • Ви не можете в жодній точці вашої програми обробляти цілі числа, що перевищують 18446744073709551615( ), якщо у вашій мові є підтримка цілих чисел з довільною точністю (або типи чисел з достатньо високою точністю, щоб дозволяти зберігати числа, що перевищують це).264

    Це просто для запобігання рішень, які проходять через усі можливі цифри Calvin (або всі можливі значення ).10n - n

  • Це , тому найкоротший код у байтах виграє.


"Якщо значення n у попередніх двох кроках становить потужність 10, все число повинно відповідати третьому шаблону, описаному вище." На що позначається «третій зразок»?
feersum

@feersum Там є список із трьох речей - це останній.
Дверна ручка

Я не розумію, чому другий за останнім фальшивий тестовий випадок є хибним. Яке правило воно порушує?
Олексій Король

@AlexisKing Хороший улов; все, що закінчується, 9повинно бути правдою. Виправлено.
Дверна ручка

@Doorknob Навіть при такій зміні число все одно здається, що відповідає критеріям. Чи не повинно число, що закінчується в 845 році, мати 152 дев'ятки? Здається, їх більш ніж достатньо. Чи повинно було бути вдвічі менше?
Олексій Король

Відповіді:


8

Ракетка, 353

(require srfi/13)(let([s(~a(read))])(for/or([n(range 1 999)])(and(let*([y(string-length(~a n))])(string-suffix?(string-append(make-string(-(if(=(modulo n 10)0)(* 2 n)n)y)#\9)(~r #:min-width y #:pad-string"0"(-(expt 10 y)n)))s))(let([n(inexact->exact(/(log n)(log 10)))])(or(not(integer? n))(string-prefix?(make-string(-(*(+ 1 n)(expt 10 n))n)#\9)s))))))

Приймає число від stdin, виводить #tабо #f.

Безгольова версія:

(require srfi/13)

(define (calvin? str)
  (for/or ([n (in-range 1 10001)])
    (and (10^n-n$? n str)
         (or (not (integer? (/ (log n) (log 10))))
             (expt-of-ten-check? n str)))))

(define (10^n-n$? n str)
  (let* ([div-by-ten? (zero? (modulo n 10))]
         [digits (string-length (~a n))]
         [nines (- (if div-by-ten? (* 2 n) n) digits)]
         [suffix (string-append (make-string nines #\9)
                                (~r #:min-width digits #:pad-string "0" (- (expt 10 digits) n)))])
    (string-suffix? suffix str)))

(define (expt-of-ten-check? n str)
  (let* ([n (inexact->exact (/ (log n) (log 10)))]
         [nines (- (* (add1 n) (expt 10 n)) n)]
         [prefix (make-string nines #\9)])
    (string-prefix? prefix str)))

Я, як правило, не займаюсь кодом гольфу, і Ракетка, звичайно, не є найбільш підходящою мовою для цього, але ніхто ще не відповів, тому я подумав, що я б його зняв. ;)


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