ภาษา J มีไวยากรณ์โง่มากสำหรับการระบุค่าคงที่ ฉันต้องการที่จะมุ่งเน้นไปที่คุณสมบัติที่ยอดเยี่ยมโดยเฉพาะอย่างยิ่ง: ความสามารถในการเขียนบนฐานโดยพลการ
ถ้าคุณเขียนXbY
สำหรับX
จำนวนใด ๆ และY
สตริงของ Alphanumerics ใด ๆ แล้วเจจะแปลY
เป็นฐานX
จำนวนที่0
ผ่าน9
มีความหมายปกติของพวกเขาและa
ผ่านz
ตัวแทนที่ 10 ถึง 35
และเมื่อฉันพูดX
หมายเลขใด ๆ ฉันหมายถึงหมายเลขใด ๆ สำหรับจุดประสงค์ของคำถามนี้ฉันจะบังคับX
ให้เป็นจำนวนเต็มบวก แต่ใน J คุณสามารถใช้อะไรก็ได้: จำนวนลบ, เศษส่วน, จำนวนเชิงซ้อนหรืออะไรก็ตาม
สิ่งที่แปลกก็คือว่าคุณสามารถใช้ตัวเลข 0-35เป็นฐานสิ่งที่คุณตัวเลขเพราะเก็บของสัญลักษณ์ที่ใช้งานได้ประกอบด้วยเพียง 0-9 และ az
ปัญหา
ฉันต้องการโปรแกรมที่ช่วยฉันเกี่ยวกับมายากลเลขกอล์ฟเช่น2,933,774,030,998โดยใช้วิธีนี้ โอเคอาจจะไม่ใหญ่ขนาดนั้นฉันจะไปง่ายสำหรับคุณ ดังนั้น...
งานของคุณคือการเขียนโปรแกรมหรือฟังก์ชั่นซึ่งจะใช้เวลา (โดยปกติขนาดใหญ่) เลขทศนิยม
N
ระหว่าง 1 และ 4294967295 (= 2 32 -1) เป็น input และผล / ผลตอบแทนที่เป็นตัวแทนที่สั้นที่สุดของรูปแบบXbY
ที่X
เป็นจำนวนเต็มบวกY
เป็น สตริงประกอบด้วย Alphanumerics (0-9 และ az, กรณีตาย) และY
ตีความในฐานเท่าเทียมกันX
N
หากความยาวของการแทนค่าการแทนค่าทุกครั้ง
XbY
มีค่ามากกว่าหรือเท่ากับจำนวนหลักของN
เอาต์พุตก็จะN
แทน ในความสัมพันธ์อื่น ๆ ทั้งหมดคุณสามารถส่งออกชุดย่อยที่ไม่มีข้อยกเว้นใด ๆ ของการรับรองที่สั้นที่สุด
นี่คือรหัสกอล์ฟดังนั้นจึงสั้นกว่าดีกว่า
กรณีทดสอบ
Input | Acceptable outputs (case-insensitive)
------------+-------------------------------------------------------
5 | 5
|
10000000 | 79bkmom 82bibhi 85bgo75 99bauua 577buld
| 620bq9k 999baka
|
10000030 | 85bgo7z
|
10000031 | 10000031
|
12345678 | 76bs9va 79bp3cw 82bmw54 86bjzky 641buui
|
34307000 | 99bzzzz
|
34307001 | 34307001
|
1557626714 | 84bvo07e 87brgzpt 99bglush 420blaze
|
1892332260 | 35bzzzzzz 36bvan8x0 37brapre5 38bnxkbfe 40bij7rqk
| 41bgdrm7f 42bek5su0 45bablf30 49b6ycriz 56b3onmfs
| 57b38f9gx 62b244244 69b1expkf 71b13xbj3
|
2147483647 | 36bzik0zj 38br3y91l 39bnvabca 42bgi5of1 48b8kq3qv
(= 2^31-1) | 53b578t6k 63b2akka1 1022b2cof 1023b2661 10922bio7
| 16382b8wv 16383b8g7 32764b2gv 32765b2ch 32766b287
| 32767b241
|
2147483648 | 512bg000 8192bw00
|
4294967295 | 45bnchvmu 60b5vo6sf 71b2r1708 84b12mxf3 112brx8iv
(= 2^32-1) | 126bh5aa3 254b18owf 255b14640 1023b4cc3 13107bpa0
| 16383bgwf 21844b9of 21845b960 32765b4oz 32766b4gf
| 32767b483 65530b1cz 65531b1ao 65532b18f 65533b168
| 65534b143 65535b120
หากคุณไม่แน่ใจเกี่ยวกับว่าเป็นตัวแทนบางส่วนจะเท่ากับจำนวนบางอย่างที่คุณสามารถใช้ล่าม J ใดอย่างหนึ่งในลองออนไลน์ เพียงพิมพ์stdout 0":87brgzpt
และ J จะพ่นออก1557626714
ไป โปรดทราบว่า J ยอมรับเฉพาะตัวพิมพ์เล็กเท่านั้นแม้ว่าปัญหานี้จะไม่ตรงตามตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก
บางทฤษฎีอาจเป็นประโยชน์
- สำหรับทั้งหมดที่
N
น้อยกว่า 10,000,000 การแทนค่าทศนิยมจะสั้นเหมือนกันและด้วยเหตุนี้จึงเป็นเอาต์พุตที่ยอมรับได้เท่านั้น หากต้องการบันทึกสิ่งใดก็ตามคุณจะต้องมีตัวเลขอย่างน้อยสี่หลักในฐานใหม่และยิ่งถ้าฐานมากกว่า 99 N
มันพอเพียงในการตรวจสอบฐานถึงเพดานของรากที่สองของ สำหรับท่านใดที่มีขนาดใหญ่ฐานB ,N
จะอยู่ที่ส่วนใหญ่ตัวเลขสองหลักในฐานBจึงเป็นครั้งแรกที่คุณจะได้รับสิ่งที่มีหลักแรกที่ถูกต้องที่ประมาณB ≈N
/ 35 แต่ด้วยขนาดนั้นคุณจะต้องมีขนาดใหญ่เท่ากับการแทนค่าทศนิยมอย่างน้อยเสมอดังนั้นจึงไม่มีประโยชน์ในการลอง ที่ในใจ ceil (sqrt (จำนวนมากที่สุดฉันจะขอให้คุณแก้ปัญหานี้)) = 65536- หากคุณมีการแสดงใด ๆ ในฐานที่น้อยกว่า 36 การแสดงพื้นฐาน 36 นั้นจะต้องสั้นที่สุด ดังนั้นคุณไม่ต้องกังวลเกี่ยวกับการแก้ปัญหาระยะสั้นโดยไม่ตั้งใจในฐานที่น้อยกว่า 36 ตัวอย่างเช่นการแทน
35bzzzzzz
ค่า 1,892,332,260 ใช้ตัวเลขที่ผิดปกติสำหรับฐานนั้น แต่36bvan8x0
มีความยาวเท่ากัน