Levenshtein mesafesi ve OEIS (Soyguncular)


11

Bu Soyguncu gönderi. Cop sonrası burada .


Göreviniz bir tamsayı girişi N almak ve OEIS A002942 dizisindeki N'inci rakamı çıkarmaktır .

Sıra, geriye doğru yazılan kare sayılardan oluşur:

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

Baştaki sıfırların kesildiğine dikkat edin ( 100 , 001 değil 1 olur ). Bunu bir dizgide birleştirmek (veya bir uzun sayı verir):

1496152639446181121441

Bu dize / sayıdaki N'inci basamağın çıktısını alırsınız . N'yi 0 dizinli veya 1 dizinli olarak almayı seçebilirsiniz (lütfen hangisini seçtiğinizi belirtin).

Test senaryoları (1 endeksli):

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

Kodunuz N = 2 ^ 15'e kadar olan sayılar için çalışmalıdır (diliniz varsayılan olarak 32 bit tamsayıları işleyemezse, bu durumda N daha düşük olabilir).


Soyguncular:

Polislerin gönderilerini kırmaya çalışmalısın.

Kodunuzun Polis postasıyla aynı dilde olması ve Levenshtein mesafesinin polis tarafından verilen mesafeye tam olarak eşit olması gerekir. Kodunuz orijinal çözümden daha uzun olamaz (ancak aynı boyutta olabilir).

Levenshtein mesafesini buradan kontrol edebilirsiniz !

Kazanan, en çok gönderiyi kıran hırsız olacak.


Bekleyin ... soyguncunun sonucunun orijinal programla aynı olması gerekmiyorsa ... Polis sadece bir program yazıp mesafe oluşturamaz mı?
Sihirli Ahtapot Urn

Polisler, gönderimi güvenli olarak işaretlemek ve kazanmaya uygun olmak için alternatif kodu sağlamalıdır. Polis karakolunda açıklığa kavuştum. :)
Stewie Griffin

Polis ve soyguncu mücadelesini hiç denemedim. Bütün bunlar benim için çok kafa karıştırıcı hah!
Sihirli Ahtapot Urn

Yanıtlar:



3

JavaScript, Arnauld

/*ZZ*/m=>[...Array(m+1).keys()].map(eval(atob("eD0+K1suLi4iIit4KnhdLnJldmVyc2VgYC5qb2luYGA="))).join``[m]

1
@ Tamam olabilir, Array(m+1)düzelttim sanırım.
Lynn

Öyle. FWIW, istenen çözümü yazıma ekledim.
Arnauld



2

6502 Makine Kodu (C64), Felix Palmen

Bunu tüm soru test senaryoları ve birkaç ekstra (biraz zaman alan 2 ^ 15 ... gibi) ile test ettim ve LD = 1 ile orijinalle aynı şekilde çalışıyor gibi görünüyor.

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

Çevrimiçi demo , kullanım: sys49152, n burada n, 0 dizinli giriştir.


Bu doğru çünkü farkında değildi bazı tamamen işe yaramaz kodu buldum ve değişiklik bu kodda: 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(...,...))

Çevrimiçi deneyin!

Lua'yý bilmiyorum, ama bu basit bir yerdi, bir alaný yeni satýr ile deđiţtirdi.


Hum, bu konuda düşünmüyordu, orijinal yerine ilgiliydi (0+)(%d+)$ile (0+)(%d+)o ^^ regex ilgiliydi yüzden
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

Çevrimiçi deneyin!

Not: Bu polis gönderimi hatalandı ve 5'ten daha düşük girişler için işe yaramadı. Ben o sırada doğru Levenshtein mesafesine sahip olan ve hatayı düzelten bu çözümü inşa ettim.


1

Perl 5, (-p) Xcali

Yorumdan sonra güncellendi, Levenshtein arasındaki mesafe

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

ve

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

55

Çevrimiçi deneyin


M5.010'un "ücretsiz" olduğu düşünüldüğünde, burada sayılması gerektiğini düşünmüyorum. Bayraklara -akarşı nasıl sayılacağından emin değilim -p. Her ikisinde de bulduğum iki çözüm aynı bayrakları kullandı. Bayrağın bir boşluk olmadan cepheye yapıştırılacağını düşünürdüm, ama diğerleri tarafından sallanmaya istekliyim.
Xcali

Cevabımı güncelledi
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);}

Çevrimiçi deneyin!

Değişiklik günlüğü

  • Değiştirilen .replaceAll()ile new Long().
  • Mükemmel kareler için test kaldırıldı. Şimdi doğrudan mükemmel kareler kullanıyor.
  • Tüm değişken adları büyük harf olarak güncellendi.
  • Eşitsizlikleri yeniden yazdı.
  • Ve son olarak doğru LD'ye ulaşmak için 21 baytlık bir lider yorumu ekledi.

1
Oh iyi. Bu benim aklımdakinden tamamen farklı, ama yine de 92 LD'ye sahip olman güzel. Aklımdaki çözüm: n->{String r="";for(int i=1;r.length()<=n+1;r+=new Long(new StringBuffer(i*i+++"").reverse()+""));return r.charAt(n);}( 118 bayt, diğer
yanıtıma göre

1

Oktav , Stewie Griffin

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

Çevrimiçi deneyin!

Aslında kendi Octave cevabımı deniyordum ve mevcut cevabı buldum. Benimki zaten çok daha kısaydı, bu yüzden sonunda bir yorum eklemek gerekli 63 mesafeye ulaşmak için yeterliydi.


Aferin :-) Ben bir döngü vardı input()ve onunla birlikte giden her şey ...
Stewie Griffin

1

PHP, Jo.

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

Çevrimiçi deneyin!

(Daha da büyük LD elde etmek için eşitsizliği değiştirmeyi planlıyordum ...)


0

6502 Makine Kodu (C64), Felix Palmen

Ayrıca "basit" bir çatlak olabilir, ancak orijinal olarak çalışıyor gibi görünüyor .
LD = 1'e sahip olmak onu kırmaya çalışmak için çok caziptir (üzgünüm 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

Çevrimiçi demo , kullanım: sys49152, n burada n, 0 dizinli giriştir.


Bunu kabul etmek zorunda olup olmadığımdan emin değilim. 6502 makine kodunda tanımlanmamış olan E9(çıkarma komutu) yerine geçer , ancak NMOS 6502 ve 6510 yongalarında da aynısını yapar. Bu program örneğin C64 DTV1'de çökebilir. Ama bulmak olası değildir gerçek o kadar, doğru çalışmaması C64 olabilir , geçerli bir çatlak düşünülebilir? Meta hakkında görüş isteyebilirim ....EB
Felix Palmen

Burada meta ile ilgilenmek istiyorum .
Felix Palmen

@FelixPalmen Bu cevabı yakında indireceğim.
Jo.

saklayın, meta hakkındaki yorumuma bakın. Topluluk, geçerli olduğu görüşünü açıkça ifade etti. Benim hatam sadece belgelenmiş 6502 kodunu gerektirmemek, ve bunu gelecek için aklıma getireceğim.
Felix Palmen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.