Jarak Levenshtein & OEIS (Perampok)

11

Ini adalah pos Perampok. The Cop posting di sini .


Tugas Anda adalah mengambil input bilangan bulat N dan menghasilkan digit ke- N dalam urutan OEIS A002942 .

Urutan terdiri dari angka kuadrat yang ditulis mundur:

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

Perhatikan bahwa nol di awal dipangkas jauh ( 100 menjadi 1 , bukan 001 ). Menggabungkan ini menjadi string (atau satu nomor panjang memberi):

1496152639446181121441

Anda harus menampilkan digit ke- N dalam string / angka ini. Anda dapat memilih untuk mengambil N sebagai diindeks 0 atau 1 diindeks (sebutkan yang mana yang Anda pilih).

Kasus uji (1-diindeks):

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

Kode Anda harus bekerja untuk angka hingga N = 2 ^ 15 (kecuali bahasa Anda tidak dapat menangani bilangan bulat 32 bit secara default, dalam hal ini N dapat lebih rendah).


Perampok:

Anda harus mencoba untuk memecahkan posting Polisi.

Kode Anda harus dalam bahasa yang sama dengan pos Cop, dan memiliki jarak Levenshtein persis sama dengan jarak yang diberikan oleh polisi. Kode Anda tidak boleh lebih lama dari solusi asli (tetapi bisa dengan ukuran yang sama).

Anda dapat memeriksa jarak Levenshtein di sini!

Pemenang akan menjadi perampok yang memecahkan sebagian besar pos.

Stewie Griffin
sumber
Tunggu ... jadi jika hasil perampok tidak harus sama dengan program yang dimaksudkan asli ... Tidak bisakah polisi hanya menulis satu program dan membuat jarak ...?
Magic Gurita Guci
Nah, polisi harus memberikan kode alternatif untuk menandai pengajuan sebagai aman dan memenuhi syarat untuk menang. Saya sudah klarifikasi di pos polisi. :)
Stewie Griffin
Saya tidak pernah mencoba tantangan polisi dan perampok. Semua ini sangat membingungkan bagiku hah!
Magic Gurita Guci

Jawaban:

3

JavaScript, Arnauld

/*ZZ*/m=>[...Array(m+1).keys()].map(eval(atob("eD0+K1suLi4iIit4KnhdLnJldmVyc2VgYC5qb2luYGA="))).join``[m]
Lynn
sumber
1
@Arnauld OK, saya pikir sudah Array(m+1)memperbaikinya.
Lynn
Itu benar. FWIW, saya telah menambahkan solusi yang dimaksud ke posting saya.
Arnauld
2

6502 Kode Mesin (C64), Felix Palmen

Saya menguji ini dengan semua kasus uji pertanyaan dan beberapa tambahan (seperti 2 ^ 15 ... yang butuh beberapa saat), dan tampaknya berfungsi sama seperti aslinya dengan 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

Demo online , penggunaan: sys49152, n di mana n adalah input 0-diindeks.

Jo.
sumber
Ini benar karena Anda menemukan beberapa kode yang sama sekali tidak berguna yang tidak saya sadari dan perubahan ada dalam kode ini : 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(...,...))

Cobalah online!

Saya tidak tahu Lua, tapi ini sederhana, hanya mengganti ruang dengan baris baru.

Erik the Outgolfer
sumber
Hum, tidak memikirkan itu, aslinya adalah tentang mengganti (0+)(%d+)$dengan (0+)(%d+), jadi itu tentang regex ^^ '
Katenkyo
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

Cobalah online!

Catatan: pengiriman polisi ini disadap dan tidak bekerja untuk input yang lebih rendah dari 5. Ketika saya berada di sana saya membangun solusi ini yang memiliki jarak Levenshtein yang benar DAN memperbaiki bug.

Leo
sumber
1

Perl 5, (-p) Xcali

Diperbarui setelah komentar, Levenshtein Jarak antara

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

dan

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

adalah 55

Cobalah online

Nahuel Fouilleul
sumber
Mengingat bahwa M5.010 adalah "gratis", saya tidak berpikir itu harus dihitung di sini. Saya tidak begitu yakin bagaimana cara menghitung flag -aversus -p. Dua solusi yang saya buat dengan keduanya menggunakan flag yang sama. Saya akan berpikir bendera hanya akan ditempelkan ke depan tanpa spasi, tapi saya bersedia diayun oleh orang lain tentang itu.
Xcali
memperbarui jawaban saya
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);}

Cobalah online!

Ubah log

  • Diganti .replaceAll()dengan new Long().
  • Menghapus tes untuk kuadrat sempurna. Sekarang menggunakan kotak yang sempurna secara langsung.
  • Diperbarui semua nama variabel menjadi huruf besar.
  • Menulis ulang ketidaksetaraan.
  • Dan akhirnya menambahkan komentar terkemuka 21-byte untuk mencapai LD yang benar.
Arnauld
sumber
1
Oh bagus. Itu benar-benar berbeda dari yang ada dalam pikiran saya, tetapi tetap baik bahwa Anda mendapatkan 92 LD. Solusi yang saya pikirkan adalah: n->{String r="";for(int i=1;r.length()<=n+1;r+=new Long(new StringBuffer(i*i+++"").reverse()+""));return r.charAt(n);}( 118 byte, 92 LD dibandingkan dengan jawaban saya yang lain.)
Kevin Cruijssen
1

Oktaf , Stewie Griffin

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

Cobalah online!

Saya sebenarnya mencoba jawaban oktaf saya sendiri dan melihat yang ada. Milik saya sudah jauh lebih singkat sehingga menambahkan komentar di bagian akhir sudah cukup untuk mencapai jarak 63 yang diperlukan.

Tom Carpenter
sumber
Bagus sekali :-) Saya punya satu lingkaran dengan input()dan semua yang menyertainya ...
Stewie Griffin
1

PHP, Jo.

<?for($j++;strlen($p)<$argv[1];$j++)$p.=(int)strrev($j**2);echo($p[$argv[1]+2-3]);

Cobalah online!

(Saya berencana untuk mengganti ketidaksetaraan untuk mendapatkan LD yang lebih besar ...)

Colera Su
sumber
0

6502 Kode Mesin (C64), Felix Palmen

Mungkin juga celah "sederhana", tetapi tampaknya berfungsi seperti aslinya.
Memiliki LD = 1 sangat menggoda untuk mencoba memecahkannya (maaf, Felix). :)

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

Demo online , penggunaan: sys49152, n di mana n adalah input 0-diindeks.

Jo.
sumber
Saya tidak yakin apakah saya harus menerima ini. Ini menggantikan E9(perintah pengurangan) EByang tidak ditentukan dalam kode mesin 6502, tetapi kebetulan melakukan hal yang sama pada chip NMOS 6502 dan 6510. Program ini misalnya akan crash pada C64 DTV1. Tetapi tidak mungkin untuk menemukan C64 nyata yang tidak menjalankannya dengan benar, sehingga bisa dianggap sebagai celah yang valid? Saya mungkin meminta pendapat tentang meta ....
Felix Palmen
Saya akan tertarik pada input di sini pada meta .
Felix Palmen
@ Feliksmen Saya akan segera menjawabnya.
Jo.
simpan, lihat juga komentar saya di meta. Komunitas dengan jelas menyatakan pendapat bahwa itu valid. Ini salah saya untuk tidak hanya membutuhkan kode 6502 yang terdokumentasi, dan saya akan mengingatnya untuk masa depan.
Felix Palmen