นี่คือผู้สมัครหมายเลข Calvin หรือไม่


27

ความท้าทายนี้เป็นเครื่องบรรณาการให้ตำนานของเราท้าทายนักเขียน™เป็น ของเคลวินอดิเรก - ตอนนี้เปลี่ยนชื่อเป็นHelka Homba - ในจิตวิญญาณเดียวกับที่ สร้างตัวเลขเดนนิส

คาลวินเป็นผู้สนับสนุน PPCG ที่น่าประทับใจโดยมีชื่อเสียงเป็นอันดับที่ 6 โดยรวมและอาจเป็นทักษะการเขียนที่ท้าทายที่สุดจากเราทุกคน อย่างไรก็ตามสำหรับความท้าทายนี้เราจะมุ่งเน้นไปที่ ID ผู้ใช้ของเขา

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

เบอร์คาลวินเหล่านี้มีคุณสมบัติที่น่าสนใจ รูปแบบอื่น ๆ เกิดขึ้นเมื่อเราจัดแนวขวาและเน้นสีทั้งหมด9:

ภาพหน้าจอ

สิ่งที่เราสนใจสำหรับความท้าทายนี้คือ:

  • โดยไม่คำนึงถึงnทุกจำนวน Calvinจบลงด้วย 10n - n

    ดังนั้นคาลวิน (1) ปลายกับ9คาลวิน (2) สิ้นสุดลงด้วย98และรูปแบบยังคง997, 9996, 99995ฯลฯ กับแต่ละเนื่องCalvin จำนวนการนับลงและเพิ่มพิเศษ9ที่จุดเริ่มต้น

  • สำหรับค่าnที่n % 10 == 0(เช่นnเป็น divisble 10), คาลวิน (n) สิ้นสุดลงด้วย102n - n

    นั่นคือรูปแบบขยายสำหรับสองเท่าของตัวเลขจำนวนมากตามปกติที่มีจำนวนที่เพิ่มขึ้นของ9s nที่จุดเริ่มต้นเท่ากับ

  • เมื่อnเป็นอำนาจของ10( 10, 100, 1000ฯลฯ ) รูปแบบการขยายยิ่งขึ้นทุกหลักเดียวเป็นทั้งหรือ90

    รูปแบบนี้มีดังต่อไปนี้: เก้าและ ศูนย์ สิ่งนี้ง่ายต่อการเข้าใจในแผนภูมิ (โซลูชันของคุณจะต้องจัดการตัวเลขได้สูงสุด 10,000 ต่อไปดังนั้นนี่คือทั้งหมดที่คุณต้องการ):(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ใหญ่เกินไปเร็วเกินไปสำหรับ "รับความท้าทายหมายเลข Calvin ลำดับที่จะเป็นไปได้ในภาษาที่ไม่มีจำนวนเต็มความแม่นยำโดยพลการดังนั้นความท้าทายคือการพิจารณาว่าตัวเลขเหมาะกับรูปแบบข้างต้น - นั่นคือไม่ว่าจะเป็น ตัวเลขคือ "หมายเลขคาลวินของผู้สมัคร" หรือไม่

ต่อไปนี้เป็นเกณฑ์สำหรับจำนวนที่จะพิจารณาว่าเป็นหมายเลขผู้สมัครคาลวิน (ต่อจากนี้จะเรียกว่า CCN สำหรับฉบับย่อ):

  • มันจบลงด้วยจำนวนที่เหมาะกับรูปแบบที่ สำหรับจำนวนเต็ม10n - nn

    ดังนั้นในการเป็น CCN ตัวเลขต้องลงท้ายด้วย 9 หรือ 98 หรือ 997, 9996, 99995 เป็นต้น

  • หากตัวเลขสุดท้ายเป็นตัวเลข0ก็จะต้องลงท้ายด้วย เช่นเดียวกันกับในประเด็นก่อนหน้า102n - nn

    ซึ่งหมายความว่า12312312399999999999999999999999999999999999980ไม่ใช่ CCN แต่10485759999999999999999999999999999999999999980เป็น (มันถูกต้องจริงๆ)

  • หากค่าของnในสองขั้นตอนก่อนหน้านี้เป็นกำลัง 10 จำนวนทั้งหมดจะต้องตรงกับรูปแบบที่สามที่อธิบายไว้ข้างต้น

อินพุต / เอาต์พุต

อินพุตจะถูกจัดเตรียมเป็นสตริงและจะแสดงตัวเลขที่น้อยกว่าเสมอCalvin(10000) + 10000(ซึ่งสามารถแสดงเป็น ) ได้ (ในการชี้แจงให้ชัดเจนอินพุตที่เป็นไปได้ที่ยิ่งใหญ่ที่สุดคือ 5,500 nines และอินพุตที่เป็นไปได้น้อยที่สุด)10500001

เอาต์พุตควรเป็นค่าจริงหากอินพุตแสดงถึงตัวเลขซึ่งเป็น CCN และค่าเท็จเป็นอย่างอื่น สำหรับนิยามของคำเหล่านี้ให้ดูเมตา

กรณีทดสอบ

อินพุตที่ควรส่งผลให้เกิดค่าจริง:

9
26997
99999999999999999990
437893890380859374999999999999985
10485759999999999999999999999999999999999999980
999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999900
259232147948794494594485446818048254863271026096382337884099237269509380022108148908589797968903058274437782549758243999867043174477180579595714249308002763427793979644775390624999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999850
1027092382693614216458468213549848274267264533712122209400214436472662418869004625362768700557725707157332451380426829473630485959339004149867738722096608953864534215649211386152032635755501464142277508289403434891444020975243742942368836579910208098242623061684967794815600266752580663281483595687307649904776800899000484103534573979334062832465904049046104660220505973505050538180250643437654409375728443182380726453925959886901573523090619465866810938078629561306599174923972607310649219442207992951278588892681161967770532314854195892941913447519131828356181219857012229150315613569162930098836696593474888020746503116685472977764615483225628639443918309216648893055765917642528801571387940219884056021782642758517893124803355573565644666880920219871370649806723296262307899148031362558110611562055614190049332906933360406981359187305353360484377948591528385990255894034369523166777375785900198782250651053530165824984161319460372145229568890321167955690544235365954748429659526071133879976348254667755220636244075595290123987745560038255541751251200827018722242010925729483977388235141539109139120069464709993781356334885359200734157439642935779132120725231008699003342908280056975158266782782304550273268246184659474285971272532354920744956064671379745219778013465792544241259691493098443741845166419905920702654683993902052727208789915748213660571390107102976665776293366616518962323688316843422737162297255648351087284877987537325761187239807598009767936409247247417410607537333841650998421607775989879490006136112078031237742552602618996017404602674987181629319060214150458746352191115606789019875790921190573561400752476956787515392210098071407806221412149732955903681690377998882038499470092453400748916257640501488510563314141992573250882286817352407459053866180642034662845694338400386823496563185664221362457851894843439705365082614359220653285052800751906334000698723288454227654466240011140570190301931122357632719033275258503935182047714841766010764632214069382579660602964184231995352310981811428980530707871661256260926759509418970021224649566130995825802676411575264295689037775857674060557127369881379685432291930869072749065675720647595081516460449973211035071920099349836074945813885239767788449030051892470053308048906746273036871919251738920141071153777908913021898541658119513188402271468288293408246833819954990709460114510017598873554406350044072275643892449218394225569069468466660333869360644718801813500285081977089623921689922204185138003164149106921903053243405307546841149889662566529697217181329051855403329741409045760789280950603184354320839342588593832348459938736210265795978675460906504449491132656307256451707333439200130425932724262464823848348296787445624028385464112471408499986690593095395244034885421580844176161027627954578726208600199909963055422192706751708210693468639072881081717288837393188012794669089175022406897622823484220002211676520484520241135615999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999028

อินพุตที่ควรส่งผลให้ค่าเท็จ:

1
26897
79999999999999999990
437893890380859374299999999999985
12312312399999999999999999999999999999999999980
999998999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999900
259232147948794494594485446818048254863271026096382337884099237269509380022108148908589797968903058274437782549758243999867043174477180579595714249308002763427793979644775390624999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999911111
1027092382693614216458468213549848274267264533712122209400214436472662418869004625362768700557725707157332451380426829473630485959339004149867738722096608953864534215649211386152032635755501464142277508289403434891444020975243742942368836579910208098242623061684967794815600266752580663281483595687307649904776800899000484103534573979334062832465904049046104660220505973505050538180250643437654409375728443182380726453925959886901573523090619465866810938078629561306599174923972607310649219442207992951278588892681161967770532314854195892941913447519131828356181219857012229150315613569162930098836696593474888020746503116685472977764615483225628639443918309216648893055765917642528801571387940219884056021782642758517893124803355573565644666880920219871370649806723296262307899148031362558110611562055614190049332906933360406981359187305353360484377948591528385990255894034369523166777375785900198782250651053530165824984161319460372145229568890321167955690544235365954748429659526071133879976348254667755220636244075595290123987745560038255541751251200827018722242010925729483977388235141539109139120069464709993781356334885359200734157439642935779132120725231008699003342908280056975158266782782304550273268246184659474285971272532354920744956064671379745219778013465792544241259691493098443741845166419905920702654683993902052727208789915748213660571390107102976665776293366616518962323688316843422737162297255648351087284877987537325761187239807598009767936409247247417410607537333841650998421607775989879490006136112078031237742552602618996017404602674987181629319060214150458746352191115606789019875790921190573561400752476956787515392210098071407806221412149732955903681690377998882038499470092453400748916257640501488510563314141992573250882286817352407459053866180642034662845694338400386823496563185664221362457851894843439705365082614359220653285052800751906334000698723288454227654466240011140570190301931122357632719033275258503935182047714841766010764632214069382579660602964184231995352310981811428980530707871661256260926759509418970021224649566130995825802676411575264295689037775857674060557127369881379685432291930869072749065675720647595081516460449973211035071920099349836074945813885239767788449030051892470053308048906746273036871919251738920141071153777908913021898541658119513188402271468288293408246833819954990709460114510017598873554406350044072275643892449218394225569069468466660333869360644718801813500285081977089623921689922204185138003164149106921903053243405307546841149889662566529697217181329051855403329741409045760789280950603184354320839342588593832348459938736210265795978675460906504449491132656307256451707333439200130425932724262464823848348296787445624028385464112471408499986690593095395244034885421580844176161027627954578726208600199909963055422192706751708210693468639072881081717288837393188012794669089175022406897622823484220002211676520484520241135615999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999027

กฎระเบียบ

  • คุณอาจไม่สามารถจัดการกับจำนวนเต็มที่มีขนาดใหญ่กว่า 18446744073709551615( ) ได้ทุกโปรแกรมในภาษาของคุณหากภาษาของคุณรองรับจำนวนเต็มที่มีความแม่นยำตามอำเภอใจ (หรือประเภทตัวเลขที่มีความแม่นยำสูงเพียงพอ264

    นี่เป็นเพียงการป้องกันวิธีแก้ไขปัญหาที่วนรอบคาลวินทุกหมายเลข (หรือค่าที่เป็นไปได้ทั้งหมด)10n - n

  • นี่คือดังนั้นโค้ดที่สั้นที่สุดเป็นไบต์จะเป็นผู้ชนะ


"ถ้าค่าของ n ในสองขั้นตอนก่อนหน้านี้คือกำลัง 10 จำนวนทั้งหมดต้องพอดีกับรูปแบบที่สามที่อธิบายไว้ข้างต้น" 'รูปแบบที่สาม' หมายถึงอะไร?
feersum

@feersum มีรายการสัญลักษณ์สามสิ่ง - เป็นรายการสุดท้าย
Doorknob

ฉันไม่เข้าใจว่าทำไมกรณีทดสอบเท็จเป็นครั้งที่สองถึงเป็นเท็จ มันละเมิดกฎอะไร
Alexis King

@AlexisKing จับดี; สิ่งใดก็ตามที่ลงท้ายด้วย9ควรเป็นความจริง คงที่
ลูกบิดประตู

@Doorknob แม้ว่าจะมีการเปลี่ยนแปลงก็ตาม แต่จำนวนก็ยังคงพอดีกับเกณฑ์ ตัวเลขที่ลงท้ายด้วย 845 ไม่ควรมี 152 ไหม ดูเหมือนว่าจะมีมากเกินพอ ควรจะมีจำนวนครึ่งหนึ่งหรือไม่?
Alexis King

คำตอบ:


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, outputs #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)))

ปกติฉันไม่เล่นกอล์ฟและแร็กเก็ตไม่ใช่ภาษาที่เหมาะสมที่สุดสำหรับมัน แต่ไม่มีใครตอบเลยดังนั้นฉันจึงคิดว่าฉันจะยิงมัน ;)


พวกเขาอาจรอให้ฉันตอบ แต่เมื่อโพสต์ประวัติของฉันมันอาจจะดีที่สุดที่คุณไม่ได้รอ;)
งานอดิเรกของ Calvin
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.