Golfscript - 26 ไบต์
{:i.)+.,{;10*i%.}%i>|,}:f;
แก้ไข: อัปเดตเป็นเอาท์พุท1
หากทศนิยมยุติลงแทนที่จะเป็นความยาวของการแทนทศนิยม
รุ่นที่ค่อนข้างมีประสิทธิภาพ ค่า67890ทำงานในเวลาประมาณ 10 วินาทีและ99991ประมาณ 20 วินาที มันช้ากว่าเมื่อก่อนเล็กน้อย (เร็วประมาณครึ่งหนึ่ง) เนื่องจากช่วงที่ทำซ้ำได้รับการเพิ่มขึ้นเป็นสองเท่าในช่วงครึ่งแรกซึ่งจะถูกละเว้น
ทางเลือกรวมถึง 26 ไบต์
{:i.)+.n*{*i%.}%i>)^^,}:f;
อันนี้ทำงานโดยการวนซ้ำสตริง"\n"*(2*i+1)
ซึ่งi
เป็นค่าที่ส่งผ่านไปยังฟังก์ชั่น ค่าที่ส่งผ่านไปยังบล็อกแต่ละครั้งเป็นค่าลำดับของ"\n"
ซึ่งเป็น10
)^^
เป็นบิตของการทำงานรอบ เมื่อคุณปลดอักขระออกจากสตริงผลลัพธ์จะเป็นค่าเลขลำดับของอักขระที่ถูกลบดังที่กล่าวไว้ข้างต้น อย่างไรก็ตามการต่อท้ายค่านั้นต่อท้ายจะผนวกการแสดงสตริงของตัวเลขนั้นมากกว่าตัวอักษร - พฤติกรรมที่ไม่สมมาตรอย่างเป็นธรรมและในความคิดของฉันมีข้อบกพร่องในการออกแบบ หากคุณต้องการทำเช่นนั้นจริงการสร้างสตริงก่อนจะเสียค่าใช้จ่ายเพียงหนึ่งไบต์
สำเนาพิเศษของค่าสุดท้ายนั้นมีอยู่แล้วในสแต็กดังนั้นฉันจึงลบค่าสุดท้ายอีกครั้ง)
xor กับสตริงแล้ว xor อีกครั้งเพื่อให้ตัวละครที่ถูกเพิ่มหรือลบโดย xor ตัวแรกถูกกู้คืน หากint op string
ได้รับการรักษาเป็นตัวอักษรมากกว่าการแสดงสตริงของมันจะถูกแทนที่ด้วย)^^
|
โปรดทราบว่าในขณะที่สตริง (ซึ่งใน Golfscript ถูกเก็บไว้เป็นอาร์เรย์ของ int) จะแสดงค่าของตัวละครแต่ละตัว mod 256ค่าของตัวละครแต่ละตัวอาจอยู่นอกช่วงนี้ เมื่อทำการทดสอบความเป็นเอกลักษณ์ (ผ่านการตั้งค่าการทำงาน) หรือการมีอยู่ (ผ่าน?
) มันเป็นค่าจริงที่ถูกเปรียบเทียบมากกว่าค่าการแสดงผล
ไฟล์ปะสำหรับล่าม Golfscript ปัจจุบัน :
61c61
< to_gs
---
> Gstring.new([self])
ดังกล่าวข้างต้นจะส่งผลกระทบต่อพฤติกรรมของstring op int
(และในทางกลับกัน) ซึ่งเป็นหนึ่งในop
ทุกสิ่งทุกอย่างยังคงได้รับผลกระทบรวมทั้งลักษณะการทำงานของ
+-|&^
Gint`
โซลูชัน24 ไบต์ต่อไปนี้จะใช้งานได้:
{:i.)+.n*{*i%.}%i>|,}:f;
และสิ่งนี้ยังช่วยแก้ไขปัญหาที่น่าเกลียดอื่น ๆ อีกมากมาย
Python - 48 ไบต์
f=lambda n:len(set(10**-~i%n for i in range(n)))
ไม่ใช่ทางออกที่มีประสิทธิภาพมากที่สุด แต่ที่เหมาะสมสำหรับค่าที่น้อยกว่า100000
FWIW องค์ประกอบหลักเป็นเหมือนการแก้ปัญหาของฉันสำหรับการสร้างจำนวนวัฏจักรในทศนิยม
รุ่นเดียวกันที่มีประสิทธิภาพมากขึ้นของรหัสเดียวกัน ( 70 ไบต์ ):
def f(n):
a=[];i=10%n
while i not in a:a+=i,;i=i*10%n
return len(a)
ค่า99991ใช้เวลาน้อยกว่าหนึ่งวินาที