ตัวแปลงหมายเลขฐานอาคารของศาสตราจารย์


12

อาจารย์คณิตศาสตร์บ้าคลั่งต้องการเข้ารหัสงานวิจัยทั้งหมดของพวกเขาโดยใช้ระบบที่แน่ใจว่าจะทำให้สุนัขจิ้งจอกเป็นคู่แข่งที่ยิ่งใหญ่ที่สุด!

ด้วยเหตุนี้อาจารย์ได้ตัดสินใจที่จะเปลี่ยนฐานไม่ใช่แค่จำนวนที่พวกเขากำลังเขียน แต่ทุกหลักเดียวในจำนวนนั้นตามที่สถานที่ที่ตัวเลขพบตัวเองใน (นับจากทางด้านขวาเริ่มต้นด้วย 1) ตัวอย่างเช่น:

ตัวเลข 0 มีหนึ่งหลักดังนั้นจึงแสดงในฐาน 1: 0

หมายเลข 1 จะมีตัวเลขหนึ่งตัวในฐานสิบ แต่ในระบบของอาจารย์ของเรานั้นไม่ถูกต้อง สถานที่แรกถูกสงวนไว้สำหรับฐาน 1 หลักเท่านั้น! ซึ่งหมายความว่าจะต้องชนกับสถานที่ที่สองซึ่งอนุญาตให้ฐาน 2 ได้: 10

หมายเลข 2 ต้องการฐานอย่างน้อย 3 ที่จะเขียน: 100

แต่ตอนนี้สามารถเขียนหมายเลข 3 ได้โดยเปลี่ยนตัวเลขในตำแหน่งที่สอง: 110

และ 4 เป็นดังนี้: 200

นี่คือตัวอย่างเพิ่มเติมที่จะช่วยให้คุณได้รับแนวคิด:

5: 210

6: 1000

7: 1010

8: 1100

9: 1110

10: 1200

11: 1210

12: 2000

13: 2010

14: 2100

15: 2110

16: 2200

17: 2210

18: 3000

การใช้ระบบนี้บันทึกของอาจารย์จะไม่สมเหตุสมผลกับใครนอกจากพวกเขาและในที่สุดพวกเขาก็สามารถครอบครองโลกได้ !!!! นอนหลับสบายในเวลากลางคืน

แน่นอนว่าวิธีการเข้ารหัสจะต้องไม่ชัดเจนเท่าที่จะเป็นไปได้


งานของคุณคือการเขียนตัวอย่างโค้ด 10 อันแต่ละอันแทนหนึ่งใน 10 หลักฐาน

0 1 2 3 4 5 6 7 8 9

ซึ่งเมื่อรวมกันในคำสั่งของจำนวนที่จะแปลงจะสร้างจำนวนที่เขียนในระบบเลขลำดับศาสตราจารย์ (วิธีการส่งออกอาจเป็นทางเลือกของคุณ แต่จะต้องเป็นตัวเลขที่มนุษย์สามารถอ่านได้โดยใช้ตัวเลข 0-9 เท่านั้น)

ตัวอย่างเช่นถ้าตัวอย่างของฉัน:

0 = MONKEY 1 = EXAMPLE, 2 = CODE, 3 = GOLF และ 9 = TEST

แล้วก็

19 = EXAMPLETEST -> 3010

20 = CODEMONKEY -> 3100

21 = CODEEXAMPLE -> 3110

22 = CODECODE -> 3200

23 = CODEGOLF -> 3210

ไม่จำเป็นต้องพิจารณาหมายเลขอินพุตที่มีตัวเลขมากกว่า 10 หลักหรือตัวเลขติดลบถึงแม้ว่าคุณต้องการเขียนรหัสสำหรับตัวเลขเพิ่มเติมคุณจะได้รับความรุ่งโรจน์เพิ่มเติม นี่คือรหัสกอล์ฟคำตอบที่สั้นที่สุด (โดยใช้ผลรวมไบต์ของตัวอย่างทั้งหมด) ชนะและช่องโหว่มาตรฐานไม่ได้รับอนุญาต

ภาคผนวก: ก่อนที่ใครจะเริ่มต้นว่า 0 เป็นตัวแทนที่ถูกต้องของ 0 ในฐาน 1 ฉันอยากจะเตือนคุณว่าศาสตราจารย์คนนี้เป็นคนบ้า อยู่กับมัน


1
หมายเหตุ: ระบบของอาจารย์ที่เป็นที่รู้จักกันเป็นระบบเลขปัจจัย
ETHproductions

นอกจากนี้ยังเป็นOEIS A124252
user41805

@ETHproductions ฉันไม่เคยกล่าวว่าการเข้ารหัสศาสตราจารย์เป็นดี
Joe Bloggs

@KritixiLithos ขอบคุณสำหรับสิ่งนั้น! ฉันกำลังมองหาสิ่งนั้นเพื่อใช้เป็นการยืนยัน
Joe Bloggs

4
ยินดีต้อนรับสู่ PPCG โดยวิธี :-)
ETHproductions

คำตอบ:


1

Mathematica (สภาพแวดล้อม REPL), 858 ไบต์ทั้งหมด

นี่คือข้อมูลโค้ด 86 ไบต์สำหรับตัวเลข 9:

1;ValueQ@a||(a=0;b=3);a=10a+9;b++;FromDigits[a~IntegerDigits~MixedRadix@Range[b,1,-1]]

ข้อมูลโค้ดสำหรับตัวเลข 1 ถึง 8 จะเหมือนกันยกเว้นว่าจะถูกแทนที่ด้วย 9 ตัวเลขที่เหมาะสม ข้อมูลโค้ดสำหรับตัวเลข 0 นั้นเหมือนกันยกเว้นว่า+9จะถูกลบทิ้ง

a~IntegerDigits~MixedRadix@Range[b,1,-1]คำนวณรายการของเลขแฟคทอเรียล - หมายเลข - ระบบของaตราบใดbที่มีขนาดใหญ่กว่าจำนวนหลักอย่างน้อย FromDigitsแปลงรายการตัวเลขให้เป็นจำนวนเต็มฐาน 10 ตามปกติเพื่อวัตถุประสงค์ในการส่งออก (หากองค์ประกอบใด ๆ ของรายการเกิน 9 สิ่งที่ตลกจะเกิดขึ้น)

ในสภาพแวดล้อม REPL ของ Mathematica การคำนวณสามารถถูกยกเลิกด้วยเครื่องหมายอัฒภาคเพื่อยับยั้งเอาต์พุต ดังนั้นจะแสดงเฉพาะผลลัพธ์สุดท้ายในห่วงโซ่ที่คั่นด้วยเครื่องหมายอัฒภาค เรากำหนดจำนวนเต็มซ้ำที่aกำหนดโดยตัวอย่างและยังผูกพันbกับจำนวนหลักระบบแฟกทอเรียลที่จำเป็น คำสั่งจะValueQ@a||(a=0;b=3)เริ่มต้นตัวแปรเหล่านี้หากไม่ได้กำหนดค่าเริ่มต้นไว้ (เช่นในตัวอย่างแรก) และปล่อยให้อยู่คนเดียว จากนั้นa=10a+9;b++ดำเนินการสอบถามซ้ำ ในที่สุดการเริ่มต้น1;สำหรับการติดตัวอย่างข้อมูลเข้าด้วยกัน: มันคูณการคำนวณระดับกลางด้วย 1 (ซึ่งเราไม่เคยเห็นมาก่อน)


ฉันเพลิดเพลินไปกับการใช้เครื่องหมายอัฒภาค
Joe Bloggs

0

Goruby, 790 810 980

นี่คือความพยายามครั้งที่สองโดยอาศัยข้อเท็จจริงที่ว่าโดยทั่วไปแล้วเชลล์การพิมพ์การคืนค่าขนส่ง ("\ r") โดยไม่ต้องขึ้นบรรทัดใหม่ ("\ n") จะเขียนทับบรรทัดที่พิมพ์ก่อนหน้านี้ในท้ายที่สุด (นั่นคือผลลัพธ์สุดท้าย) จะปรากฏขึ้น

ruby name_of_file.rbนี้จะต้องทำงานในเปลือกเช่น

มันทำงานได้ในจำนวนบวกของความยาวไม่ จำกัด

รหัสคือสำเนาของตัวอย่างด้านล่างสิบชุดโดยที่X(ที่ด้านบน) ถูกแทนที่ด้วยตัวเลขตั้งแต่ 0-9 หนึ่งชุดต่อหนึ่งตัวอย่าง

->*t{n,d,o="X#{t}".toi,0,''
dw{n,r=n.dm d+=1;o.pr r.ts;n>0}
$>.fu
pr"\r",o
o}

นั่นคือตัวอย่างข้อมูลที่แสดง (ตัวอย่าง) 8 จะมีลักษณะดังนี้:

->*t{n,d,o="8#{t}".toi,0,''
dw{n,r=n.dm d+=1;o.pr r.ts;n>0}
$>.fu
pr"\r",o
o}

ความท้าทายระบุว่าตัวอย่างข้อมูลจำเป็นต้อง "รวมกัน" เพื่อสร้างแทนตัวเลขหลายหลักดังนั้นหากต้องการต่อท้ายตัวเลขให้เป็นตัวเลขเพียงแค่วางลงในวงเล็บเหลี่ยมที่จุดสิ้นสุดของตัวเลข ดังนั้นจำนวน 103 (เป็นทศนิยม) จะเป็น:

->*t{n,d,o="1#{t}".toi,0,''
dw{n,r=n.dm d+=1;o.pr r.ts;n>0}
$>.fu
pr"\r",o
o}[->*t{n,d,o="0#{t}".toi,0,''
dw{n,r=n.dm d+=1;o.pr r.ts;n>0}
$>.fu
pr"\r",o
o}[->*t{n,d,o="8#{t}".toi,0,''
dw{n,r=n.dm d+=1;o.pr r.ts;n>0}
$>.fu
pr"\r",o
o}[]]]

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