ระยะทาง Levenshtein และ OEIS (โจร)


11

นี่คือการโพสต์โจร โพสต์ตำรวจอยู่ที่นี่


งานของคุณคือการใช้การป้อนข้อมูลจำนวนเต็มNและเอาท์พุทชับหลักในลำดับOEIS A002942

ลำดับประกอบด้วยตัวเลขสแควร์ที่เขียนย้อนหลัง:

1, 4, 9, 61, 52, 63, 94, 46, 18, 1, 121, 441, ...

โปรดทราบว่าเลขศูนย์นำหน้าจะถูกตัดออก ( 100กลายเป็น1ไม่ใช่001 ) การเชื่อมโยงสิ่งนี้เข้ากับสตริง (หรือตัวเลขยาวหนึ่งค่า):

1496152639446181121441

คุณจะส่งออกตัวเลขที่Nในสตริง / หมายเลขนี้ คุณสามารถเลือกที่จะใช้Nเป็นดัชนี 0 หรือดัชนี 1 ดัชนี (โปรดระบุว่าคุณเลือกแบบใด)

กรณีทดสอบ (1 ดัชนี):

N = 5,      ==> 1
N = 17,     ==> 1   <- Important test case! It's not zero.
N = 20,     ==> 4
N = 78,     ==> 0
N = 100,    ==> 4
N = 274164, ==> 1

รหัสของคุณควรใช้กับตัวเลขที่มีค่าสูงสุดN = 2 ^ 15 (ยกเว้นกรณีที่ภาษาของคุณไม่สามารถจัดการกับจำนวนเต็ม 32 บิตโดยค่าเริ่มต้นซึ่งในกรณีนี้Nจะต่ำกว่า)


โจร

คุณควรพยายามที่จะถอดรหัสโพสต์ของตำรวจ

รหัสของคุณจะต้องเป็นภาษาเดียวกับโพสต์ Cop และมีระยะทาง Levenshtein เท่ากับระยะทางที่ตำรวจกำหนด รหัสของคุณต้องไม่ยาวกว่าโซลูชันดั้งเดิม (แต่อาจมีขนาดเท่ากัน)

คุณสามารถตรวจสอบระยะทางของ Levenshtein ได้ที่นี่!

ผู้ชนะจะเป็นผู้ปล้นที่โพสต์มากที่สุด


เดี๋ยวก่อน ... ดังนั้นถ้าผลลัพธ์ของตัวโม่งนั้นไม่จำเป็นต้องเหมือนกันกับโปรแกรมดั้งเดิมที่ตั้งใจไว้ ... ตำรวจไม่สามารถเขียนโปรแกรมเดียวและสร้างระยะทาง ...
Magic Octopus Urn

ตำรวจต้องระบุรหัสทางเลือกเพื่อทำเครื่องหมายการส่งว่าปลอดภัยและมีสิทธิ์ได้รับชัยชนะ ฉันชี้แจงในโพสต์ตำรวจ :)
Stewie Griffin

ฉันไม่เคยลองใช้ความท้าทายของตำรวจและโจร ทั้งหมดนี้ทำให้ฉันสับสนมากฮ่าฮ่า!
Magic Octopus Urn

คำตอบ:






2

รหัสเครื่อง 6502 (C64), Felix Palmen

ฉันทดสอบกับกรณีทดสอบคำถามทั้งหมดและมีความพิเศษเล็กน้อย (เช่น 2 ^ 15 ... ที่ใช้เวลาสักครู่) และดูเหมือนว่าจะทำงานเหมือนกับต้นฉบับที่มี LD = 1

00 C0 20 FD AE A0 00 99 5B 00 C8 20 73 00 90 F7 99 5B 00 A2 0B CA 88 30 09 B9
5B 00 29 0F 95 5B 10 F3 A9 00 95 5B CA 10 F9 A9 01 A0 03 99 69 00 88 10 FA A0
20 A2 76 18 B5 E6 90 02 09 10 4A 95 E6 E8 10 F4 A2 03 76 69 CA 10 FB 88 F0 11
A2 09 B5 5C C9 08 30 04 E9 03 95 5C CA 10 F3 30 D6 A2 03 B5 69 95 57 CA 10 F9
A9 01 85 FB A2 03 A9 00 95 FB CA D0 FB A2 03 B5 FB 95 22 95 26 CA 10 F7 A9 00
A2 03 95 69 CA 10 FB A0 20 A2 02 46 25 76 22 CA 10 FB 90 0C A2 7C 18 B5 AA 75
ED 95 ED E8 10 F7 A2 7D 06 26 36 AA E8 10 FB 88 10 DD A0 0B A9 00 99 5A 00 88
D0 FA A0 20 A2 09 B5 5C C9 05 30 04 69 02 95 5C CA 10 F3 06 69 A2 FD 36 6D E8
D0 FB A2 09 B5 5C 2A C9 10 29 0F 95 5C CA 10 F4 88 D0 D7 E0 0A F0 05 E8 B5 5B
F0 F7 09 30 99 5B 00 C8 E8 E0 0B F0 04 B5 5B 90 F1 88 B9 5B 00 C9 30 F0 F8 A2
7C 18 B5 DB E9 00 95 DB E8 10 F7 90 14 88 30 05 B9 5B 00 D0 EA A2 7C F6 7F D0
03 E8 10 F9 4C 73 C0 B9 5B 00 4C D2 FF

การสาธิตออนไลน์การใช้งาน: sys49152, n โดยที่ n คืออินพุต 0 ที่จัดทำดัชนี


สิ่งนี้ถูกต้องเพราะคุณพบรหัสที่ไร้ประโยชน์อย่างที่สุดที่ฉันไม่รู้และการเปลี่ยนแปลงอยู่ในรหัสนี้ : o
Felix Palmen

1

Lua , Katenkyo

i=1s=""while(#s<...+0)do s=s..((i*i)..""):reverse():gsub("(0+)(%d+)$","%2")i=i+1 end
print(s:sub(...,...))

ลองออนไลน์!

ฉันไม่รู้จัก Lua แต่นี่เป็นเรื่องง่ายเพียงแค่แทนที่ช่องว่างด้วยบรรทัดใหม่


Hum, ไม่ได้คิดเกี่ยวกับสิ่งนั้น, ต้นฉบับเป็นเรื่องเกี่ยวกับการแทนที่(0+)(%d+)$ด้วย(0+)(%d+), ดังนั้นจึงเป็นเรื่องเกี่ยวกับ regex ^^ '
Katenkyo

1

Python 3 , HyperNeutrino

lambda o:"".join(str(p*p+2*p+1)[::~0].lstrip("0")for p in range(o+1))[o]

ลองออนไลน์!


Ninja'd ใน 9 วินาที: P
Uriel

น่าสนใจใช่ไม่ใช่คนที่ฉันมี แต่เป็นคนดี :)
HyperNeutrino

คุณสามารถทำได้''แทน""
Uriel

@Uriel ใช่ฉันรู้ทางเลือกมากมาย
Mr. Xcoder


1

Python 2 , dylnan

d=lambda y:y if y%10>0 else d(y/10)
lambda n:''.join([str(d(x*x))[::-1]for x in range(1,n+1)])[n-1]#fix

ลองออนไลน์!

หมายเหตุ: การส่งตำรวจนี้บั๊กและไม่ทำงานสำหรับอินพุตที่ต่ำกว่า 5 ในขณะที่ฉันอยู่ที่นั่นฉันสร้างโซลูชันนี้ซึ่งมีระยะทางที่ถูกต้องของ Levenshtein และแก้ไขข้อผิดพลาด


1

Perl 5, (-p) Xcali

อัปเดตหลังจากแสดงความคิดเห็น Levenshtein ระยะห่างระหว่าง

a$j.=int reverse$_**2for 1..$_;$_--;say$j=~s/.{$_}(.).*/$1/r

และ

p$_=substr w.(join"",map{whyddwzz;0|reverse$_**2}1..$_),$_,1

คือ 55

ลองออนไลน์


เนื่องจาก M5.010 นั้นเป็น "ฟรี" ฉันไม่คิดว่าควรนับที่นี่ ฉันไม่แน่ใจจริงๆว่าจะนับธง-aกับ-pอย่างไร วิธีแก้ปัญหาสองข้อที่ฉันเกิดขึ้นเมื่อทั้งคู่ใช้แฟล็กเดียวกัน ฉันคิดว่าธงจะถูกยึดติดไว้ด้านหน้าโดยไม่มีช่องว่าง แต่ฉันก็ยินดีที่คนอื่น ๆ
Xcali

อัปเดตคำตอบของฉัน
Nahuel Fouilleul

1

Java 8, Kevin Cruijssen

/*!FooBarFooBarFoo!*/N->{String R="",T=R;for(int I=1,J;N+2>R.length();I++){for(T="",J=(I*I+"").length();0<J;T+=(I*I+"").charAt(--J));R+=new Long(T)+"";}return R.charAt(N);}

ลองออนไลน์!

เปลี่ยนบันทึก

  • แทนที่ด้วย.replaceAll()new Long()
  • ลบการทดสอบสำหรับสี่เหลี่ยมที่สมบูรณ์แบบ ตอนนี้ใช้สี่เหลี่ยมที่สมบูรณ์แบบโดยตรง
  • อัปเดตชื่อตัวแปรทั้งหมดเป็นตัวพิมพ์ใหญ่
  • เขียนใหม่ความไม่เท่าเทียมกัน
  • และในที่สุดก็เพิ่มความคิดเห็นนำ 21- ไบต์เพื่อเข้าถึง LD ที่ถูกต้อง

1
ดี. มันแตกต่างอย่างสิ้นเชิงกับที่ฉันนึกไว้ แต่ก็ดีที่คุณจะได้ถึง 92 LD วิธีแก้ปัญหาที่ฉันมีอยู่ในใจคือ: n->{String r="";for(int i=1;r.length()<=n+1;r+=new Long(new StringBuffer(i*i+++"").reverse()+""));return r.charAt(n);}( 118 bytes, 92 LDเทียบกับคำตอบอื่น ๆ ของฉัน)
Kevin Cruijssen

1

อ็อกเทฟสตีวีกริฟฟิน

@(n)regexprep(fliplr(num2str((1:n)'.^2))'(:)',' +0*','')(n)%abcdefghijk

ลองออนไลน์!

จริง ๆ แล้วฉันก็พยายามตอบ Octave ของฉันและพบคำตอบที่มีอยู่ ฉันสั้นลงอย่างมากแล้วดังนั้นการเพิ่มความคิดเห็นในตอนท้ายก็เพียงพอที่จะไปถึงระยะทางที่ต้องการได้ 63


ทำได้ดีมาก :-) ฉันมีวงวนinput()และทุกอย่างที่เกิดขึ้นกับมัน ...
Stewie Griffin


0

รหัสเครื่อง 6502 (C64), Felix Palmen

อาจเป็นรอยแตก "แบบง่าย" แต่ดูเหมือนจะทำงานเหมือนต้นฉบับ
การมี LD = 1 นั้นเป็นเรื่องที่น่าดึงดูดใจที่พยายามจะแตกมัน (ขออภัยเฟลิกซ์) :)

00 C0 20 FD AE A0 00 99 5B 00 C8 20 73 00 90 F7 99 5B 00 A2 0B CA 98 88 30 09
B9 5B 00 29 0F 95 5B 10 F2 95 5B CA 10 FB A0 20 A2 76 18 B5 E6 90 02 09 10 4A
95 E6 E8 10 F4 A2 03 76 69 CA 10 FB 88 F0 11 A2 09 B5 5C C9 08 30 04 EB 03 95
5C CA 10 F3 30 D6 A2 03 B5 69 95 57 CA 10 F9 A9 01 85 FB A2 03 A9 00 95 FB CA
D0 FB A2 03 B5 FB 95 22 95 26 CA 10 F7 A9 00 A2 03 95 69 CA 10 FB A0 20 A2 02
46 25 76 22 CA 10 FB 90 0C A2 7C 18 B5 AA 75 ED 95 ED E8 10 F7 A2 7D 06 26 36
AA E8 10 FB 88 10 DD A2 0B A9 00 95 5A CA D0 FB A0 20 A2 09 B5 5C C9 05 30 04
69 02 95 5C CA 10 F3 06 69 A2 FD 36 6D E8 D0 FB A2 09 B5 5C 2A C9 10 29 0F 95
5C CA 10 F4 88 D0 D7 E8 B5 5B F0 FB 09 30 99 5B 00 C8 E8 E0 0B F0 04 B5 5B 90
F1 88 B9 5B 00 C9 30 F0 F8 A2 7C 18 B5 DB E9 00 95 DB E8 10 F7 90 14 88 30 05
B9 5B 00 D0 EA A2 7C F6 7F D0 03 E8 10 F9 4C 68 C0 B9 5B 00 4C D2 FF

การสาธิตออนไลน์การใช้งาน: sys49152, n โดยที่ n คืออินพุต 0 ที่จัดทำดัชนี


ฉันไม่แน่ใจว่าฉันต้องยอมรับสิ่งนี้หรือไม่ มันจะแทนที่E9(คำสั่งลบ) EBซึ่งไม่ได้กำหนดไว้ในรหัสเครื่อง 6502 แต่เกิดขึ้นกับ NMOS 6502 และ 6510 ในชิปเดียวกัน โปรแกรมนี้จะมีปัญหาเช่นใน C64 DTV1 แต่ไม่น่าจะพบC64 ของจริงที่ทำงานไม่ถูกต้องดังนั้นจึงอาจถือได้ว่าเป็นรอยแตกที่ถูกต้อง ผมอาจจะขอความคิดเห็นเกี่ยวกับเมตา ....
เฟลิกซ์ Palmen

ฉันจะสนใจในการป้อนข้อมูลที่นี่เกี่ยวกับเมตา
เฟลิกซ์ Palmen

@ FelixPalmen ฉันจะตอบคำถามนี้ในไม่ช้า
โจ

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