Đây có phải là ứng cử viên Calvin Number?


27

Thử thách này là một sự tôn vinh dành cho Nhà văn Thử thách Huyền thoại ™ của chúng tôi, Sở thích của Calvin - giờ được đổi tên thành Helka Homba -, với tinh thần tương tự như Tạo số Dennis .

Calvin là một người đóng góp khá ấn tượng cho PPCG, với danh tiếng cao thứ 6 nói chung và có lẽ không thể chối cãi là kỹ năng viết thử thách tốt nhất trong số chúng ta. Tuy nhiên, tất nhiên, đối với thử thách này, chúng tôi sẽ tập trung vào ID người dùng của anh ấy.

26997 ban đầu có thể trông không thú vị lắm. Trên thực tế, nó gần như thú vị theo một số cách. Ví dụ: đây là biểu đồ 26997 mod <n>cho các giá trị nhất định của n:

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

Tuy nhiên, 26997 là một trong số ít các số có thể được đại diện bởi , trong đó(n * 10)n - nn số nguyên> 0.

Dưới đây là một vài số đầu tiên có thể được biểu thị theo cách này, từ đó chúng ta sẽ gọi Calvin Numbers :

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

Những số Calvin có một số tính chất thú vị. Nhiều mẫu xuất hiện hơn khi chúng ta căn chỉnh chúng và tô sáng tất cả các 9s:

ảnh chụp màn hình

Những điều chúng tôi quan tâm cho thử thách này là:

  • Bất kể n, mọi số Calvin đều kết thúc bằng 10n - n .

    Vì vậy, Calvin (1) kết thúc với 9, Calvin (2) đầu với 98, và mô hình tiếp tục 997, 9996, 99995vv, với mỗi liên tiếp Số Calvin đếm ngược và bổ sung thêm 9để bắt đầu.

  • Đối với các giá trị trong nđó n % 10 == 0(tức nlà chia hết cho 10), Calvin (n) kết thúc bằng .102n - n

    Đó là, mẫu mở rộng gấp đôi số chữ số so với bình thường, với số 9s thêm vào đầu bằngn .

  • Khi nlà một sức mạnh của 10( 10, 100, 1000, vv), mô hình mở rộng hơn nữa-tất cả các chữ số duy nhất là hoặc là một 9hoặc một0 .

    Mẫu này là như sau: số không và số không. Điều này dễ hiểu hơn trong biểu đồ (giải pháp của bạn sẽ chỉ phải xử lý số lượng lên tới 10000, vì vậy đây là tất cả những gì bạn cần):(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
    

    Số lượng dây thậm chí thể hiện một số tính chất của Calvin Numbers , nhưng đó là quá nhiều chi tiết cho thách thức này.

Thử thách

Số Calvin trở nên quá lớn, quá nhanh, để "lấy số Calvin thứ n thách thức trở nên khả thi trong các ngôn ngữ mà không cần các số nguyên chính xác tùy ý. Do đó, thách thức là xác định xem một số có phù hợp với các mẫu trên hay không một số có phải là "Số Calvin ứng cử viên" hay không.

Dưới đây là các tiêu chí để một số được coi là ứng cử viên Số Calvin (sau đây gọi tắt là CCN):

  • Nó kết thúc bằng một số phù hợp với mẫu cho một số nguyên10n - nn .

    Vì vậy, để trở thành CCN, một số phải kết thúc bằng 9, hoặc 98 hoặc 997, 9996, 99995, v.v.

  • Nếu chữ số cuối cùng là 0, nó cũng phải kết thúc bằng , cho cùng102n - nn như ở điểm trước.

    Điều này có nghĩa là đó 12312312399999999999999999999999999999999999980không phải là CCN, nhưng 10485759999999999999999999999999999999999999980thực tế (đó là chính xác).

  • Nếu giá trị của nhai bước trước là lũy thừa 10, toàn bộ số phải phù hợp với mẫu thứ ba được mô tả ở trên.

Đầu ra đầu vào

Đầu vào sẽ được cung cấp dưới dạng một chuỗi và nó sẽ luôn đại diện cho một số nhỏ hơn Calvin(10000) + 10000(cũng có thể được biểu thị dưới dạng ). (Để làm rõ, đầu vào lớn nhất có thể là 50000 nines và đầu vào ít nhất có thể là .)10500001

Đầu ra phải là một giá trị trung thực nếu đầu vào đại diện cho một số là CCN và nếu không thì giá trị giả. Đối với các định nghĩa của các điều khoản này, xem meta .

Các trường hợp thử nghiệm

Các đầu vào sẽ dẫn đến một giá trị trung thực:

9
26997
99999999999999999990
437893890380859374999999999999985
10485759999999999999999999999999999999999999980
999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999900
259232147948794494594485446818048254863271026096382337884099237269509380022108148908589797968903058274437782549758243999867043174477180579595714249308002763427793979644775390624999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999850
1027092382693614216458468213549848274267264533712122209400214436472662418869004625362768700557725707157332451380426829473630485959339004149867738722096608953864534215649211386152032635755501464142277508289403434891444020975243742942368836579910208098242623061684967794815600266752580663281483595687307649904776800899000484103534573979334062832465904049046104660220505973505050538180250643437654409375728443182380726453925959886901573523090619465866810938078629561306599174923972607310649219442207992951278588892681161967770532314854195892941913447519131828356181219857012229150315613569162930098836696593474888020746503116685472977764615483225628639443918309216648893055765917642528801571387940219884056021782642758517893124803355573565644666880920219871370649806723296262307899148031362558110611562055614190049332906933360406981359187305353360484377948591528385990255894034369523166777375785900198782250651053530165824984161319460372145229568890321167955690544235365954748429659526071133879976348254667755220636244075595290123987745560038255541751251200827018722242010925729483977388235141539109139120069464709993781356334885359200734157439642935779132120725231008699003342908280056975158266782782304550273268246184659474285971272532354920744956064671379745219778013465792544241259691493098443741845166419905920702654683993902052727208789915748213660571390107102976665776293366616518962323688316843422737162297255648351087284877987537325761187239807598009767936409247247417410607537333841650998421607775989879490006136112078031237742552602618996017404602674987181629319060214150458746352191115606789019875790921190573561400752476956787515392210098071407806221412149732955903681690377998882038499470092453400748916257640501488510563314141992573250882286817352407459053866180642034662845694338400386823496563185664221362457851894843439705365082614359220653285052800751906334000698723288454227654466240011140570190301931122357632719033275258503935182047714841766010764632214069382579660602964184231995352310981811428980530707871661256260926759509418970021224649566130995825802676411575264295689037775857674060557127369881379685432291930869072749065675720647595081516460449973211035071920099349836074945813885239767788449030051892470053308048906746273036871919251738920141071153777908913021898541658119513188402271468288293408246833819954990709460114510017598873554406350044072275643892449218394225569069468466660333869360644718801813500285081977089623921689922204185138003164149106921903053243405307546841149889662566529697217181329051855403329741409045760789280950603184354320839342588593832348459938736210265795978675460906504449491132656307256451707333439200130425932724262464823848348296787445624028385464112471408499986690593095395244034885421580844176161027627954578726208600199909963055422192706751708210693468639072881081717288837393188012794669089175022406897622823484220002211676520484520241135615999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999028

Các đầu vào sẽ dẫn đến một giá trị sai lệch:

1
26897
79999999999999999990
437893890380859374299999999999985
12312312399999999999999999999999999999999999980
999998999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999900
259232147948794494594485446818048254863271026096382337884099237269509380022108148908589797968903058274437782549758243999867043174477180579595714249308002763427793979644775390624999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999911111
1027092382693614216458468213549848274267264533712122209400214436472662418869004625362768700557725707157332451380426829473630485959339004149867738722096608953864534215649211386152032635755501464142277508289403434891444020975243742942368836579910208098242623061684967794815600266752580663281483595687307649904776800899000484103534573979334062832465904049046104660220505973505050538180250643437654409375728443182380726453925959886901573523090619465866810938078629561306599174923972607310649219442207992951278588892681161967770532314854195892941913447519131828356181219857012229150315613569162930098836696593474888020746503116685472977764615483225628639443918309216648893055765917642528801571387940219884056021782642758517893124803355573565644666880920219871370649806723296262307899148031362558110611562055614190049332906933360406981359187305353360484377948591528385990255894034369523166777375785900198782250651053530165824984161319460372145229568890321167955690544235365954748429659526071133879976348254667755220636244075595290123987745560038255541751251200827018722242010925729483977388235141539109139120069464709993781356334885359200734157439642935779132120725231008699003342908280056975158266782782304550273268246184659474285971272532354920744956064671379745219778013465792544241259691493098443741845166419905920702654683993902052727208789915748213660571390107102976665776293366616518962323688316843422737162297255648351087284877987537325761187239807598009767936409247247417410607537333841650998421607775989879490006136112078031237742552602618996017404602674987181629319060214150458746352191115606789019875790921190573561400752476956787515392210098071407806221412149732955903681690377998882038499470092453400748916257640501488510563314141992573250882286817352407459053866180642034662845694338400386823496563185664221362457851894843439705365082614359220653285052800751906334000698723288454227654466240011140570190301931122357632719033275258503935182047714841766010764632214069382579660602964184231995352310981811428980530707871661256260926759509418970021224649566130995825802676411575264295689037775857674060557127369881379685432291930869072749065675720647595081516460449973211035071920099349836074945813885239767788449030051892470053308048906746273036871919251738920141071153777908913021898541658119513188402271468288293408246833819954990709460114510017598873554406350044072275643892449218394225569069468466660333869360644718801813500285081977089623921689922204185138003164149106921903053243405307546841149889662566529697217181329051855403329741409045760789280950603184354320839342588593832348459938736210265795978675460906504449491132656307256451707333439200130425932724262464823848348296787445624028385464112471408499986690593095395244034885421580844176161027627954578726208600199909963055422192706751708210693468639072881081717288837393188012794669089175022406897622823484220002211676520484520241135615999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999027

Quy tắc

  • Bạn có thể không , tại bất kỳ điểm nào trong chương trình của bạn, xử lý số nguyên lớn hơn 18446744073709551615(264 ), nếu ngôn ngữ của bạn có hỗ trợ cho số nguyên tùy ý chính xác (hoặc các loại số với độ chính xác cao, đủ để cho phép lưu trữ số lượng lớn hơn này).

    Điều này chỉ đơn giản là để ngăn các giải pháp lặp qua tất cả các Số Calvin có thể (hoặc tất cả các giá trị có thể có ).10n - n

  • Đây là , vì vậy mã ngắn nhất tính bằng byte sẽ giành chiến thắng.


"Nếu giá trị của n trong hai bước trước là lũy thừa 10, thì toàn bộ số phải phù hợp với mẫu thứ ba được mô tả ở trên." "Mẫu thứ ba" đề cập đến điều gì?
frageum

@feersum Có một danh sách gạch đầu dòng gồm ba thứ. Đây là thứ cuối cùng.
Doorknob

Tôi không hiểu tại sao trường hợp thử nghiệm giả thứ hai đến cuối cùng là giả. Nó vi phạm quy tắc gì?
Alexis King

@AlexisKing Bắt tốt; bất cứ điều gì kết thúc trong 9nên được trung thực. Đã sửa.
Doorknob

@Doorknob Ngay cả với sự thay đổi đó, con số dường như vẫn phù hợp với tiêu chí. Không phải một số kết thúc vào năm 845 có 152 số không? Nó dường như có quá nhiều. Đã có một nửa số lượng?
Alexis King

Câu trả lời:


8

Vợt, 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))))))

Chấp nhận một số từ stdin, đầu ra #thoặc #f.

Phiên bản bị đánh cắp:

(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)))

Tôi thường không chơi golf, và vợt chắc chắn không phải là ngôn ngữ phù hợp nhất với nó, nhưng chưa có ai trả lời, vì vậy tôi nghĩ rằng tôi sẽ cho nó một cú đánh. ;)


Họ có thể đã đợi tôi trả lời, nhưng với lịch sử bài đăng của tôi, có lẽ tốt nhất là bạn không chờ đợi xung quanh;)
Sở thích của Calvin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.