Kodu Değiştir, Dizini Değiştir: Polisler


27

Bu bir mücadelesi. Soyguncular iplik için buraya gidin .

Bu zorluk iki içerir OEIS polisler tarafından seçilen dizileri - S 1 , S 2 - ve bu diziler golfed ve Karartılmış ne kadar iyi.

Polislerin Mücadelesi

Bir polis olarak zorluk, özgürce kullanılabilir bir dil ve iki OEIS dizisi seçmektir. Daha sonra, yazma kodu bir girdi alır o dilde , n ve üretir S 1 (n). Bu kod, X karakterinden Levenshtein mesafesi ile ( X'ten fazla olamaz 0.5 * (length A)) değiştirilir ve aynı dilde B koduna çevrilirse , S 2 (n) üretmesi gerekir . Aslında bu B kodunu yazmalısınız , ancak zorluğunuz güvende olana kadar açıklamayın (aşağıya bakınız).

Polislerin gönderimleri dil adı, tam kod içermelidir A , bayt-sayımını A , X, onların gizli almak için kaç değişiklik değerini B kodu ve seçilen S 1 ve S 2 sıra numaralarını. Her dizinin 0 veya 1 dizinli olup olmadığını seçebilirsiniz, ancak lütfen gönderiminizde belirtin.

Belirli bir gönderimi kırmak için, soyguncular aynı dilde (ve versiyonda) C 2 (n) üreten ve Y karakterinin A ( dan ) ' dan uzaklaştığı bir program C ile gelmelidir . Soyguncular mutlaka polisin (gizlice) ürettiği aynı B kodunu bulmaya ihtiyaç duymazlar .Y <= X

Kazanma ve Puanlama

Polis yanıtınız 7 gün içinde (168 saat) kırılmadıysa , cevabınızın güvenli olduğu kabul edilen kendi B çözümünüzü açığa çıkarabilirsiniz . Çözümünüzü açığa vurmazsanız, 7 gün geçse bile, yine de hırsızlar tarafından kırılabilir. Cevabınız çatlarsa, lütfen cevabın başlığında ve ilgili hırsızın cevabına bir bağlantı ekleyin.

Polisler, en kısa A ile gönderilmemiş gönderimleri yaparak kazanırlar . Bağlanırsa, en küçük X tie-breaker olarak kullanılacaktır. Hala bağlıysa, önceki sunum kazanacak.

Ek Kurallar

  • Karma, sayı veya rasgele sayı üretimi için herhangi bir yerleşik kullanmayın (rastgele sayı üretecini sabit bir değere yerleştirseniz bile).
  • Programlara veya işlevlere izin verilir, ancak kod pasajlı olmamalı ve bir REPL ortamı varsaymamalısınız.
  • Herhangi bir uygun formatta girdi alabilir ve çıktı verebilirsiniz . Giriş / çıkış yöntemleri her iki sekans için aynı olmalıdır.
  • Bu meydan okuma için Levenshtein mesafe için kesin hesap makinesi bu bir gezegen Calc üzerinde.
  • Bir CnR mücadelesi olmasının yanı sıra, bu normal golf kuralları geçerlidir.

Ayrıca, bu sorudaki bir şeyi değiştirirseniz, soyguncuyu değiştirdiğinizden emin olun.
mbomb007

Bir polis, diziyi oluşturan gerçek koda göre gerçekten büyük bir işlevi / değişkeni adlandırırsa ne olur? Bu durumda herhangi bir diziyi oluşturmak mümkün olacak, lev mesafesi daha az olacak(0.5*len(A))
hashcode55

@ hashcode55 İki şey - 1) polislerin ipliğini kazanması için iyi bir aday olmayacak. 2) eğer böylesine muazzamsa, soyguncuların kırması için de iyi bir yer sağlar.
AdmBorkBork

1
Bu kod- golf'dür , bu nedenle her zamanki golf kuralları geçerlidir ” Bu, A kodunun mümkün olduğu kadar golf oynaması gerektiği anlamına mı geliyor , yoksa B koduna daha benzer hale getirmek için bilerek ayrıntılı / garip bir şekilde yazılabilir mi?
smls

Yanıtlar:


10

Brain-Flak , 28 bayt, 4 Mesafe, A002817 , A090809 Kırık

Bu cevap 1 indeksleme kullanıyor

(({({}[()])}{}){({}[()])}{})

Çevrimiçi deneyin

İlgilenen herkes için bu programdan Levenshtein uzaklığı 4 ile 4 ve daha az mesafe ile 27707 geçerli 27475 geçerli Brain-Flak programları vardır. Bu nedenle, bir kaba kuvvet çözümü, tüketici sınıfı bir bilgisayarda mümkün olacaktır.


Eğer varsa Muhtemelen okumak için daha kısa ve daha hızlı olurdu X = 4yerine Levenshtein distance of 4.
mbomb007

1
@ mbomb007 Zorluklar kargaşayı önlemeye çalıştığım şeyler için bir sürü harf değişkeni kullandığında kişisel olarak biraz kafam karıştı. Bunu şimdi kısalttım, umarım herhangi bir karışıklığa neden olmadan.
Buğday Sihirbazı

omuz silkme . Herkes soruyu okuduysa, anlamaları gerekir. XGerçekten de bilmeleri gereken tek değişken.
mbomb007

@ mbomb007 Her ne kadar, soru da bir bayt sayımı ister.
DLosc


6

7 , 33 karakter, 13 bayt, X = 10, A000124A000142 , Güvenli

171720514057071616777023671335133

Çevrimiçi deneyin!

Levenshtein mesafesi karakter cinsinden ölçülür, bu yüzden programı yukarıda içerdiği karakter cinsinden yazdım (ve dili çevrimiçi de dahil olmak üzere çevrimiçi deneyin! ASCII'de kodlanmış programları çalıştırmaktan mutludur) Ancak, program 7'nin alt byte şifrelemesi kullanılarak diskte depolanır, yani programın kendisi aslında şu hexdump'tır (yani 13 byte uzunluğunda):

00000000: 3cf4 2982 f1ce 3bfe 13dc b74b 7f         <.)...;....K.

(Levenshtein mesafesi karakter cinsinden ölçüldüğü için, buraya 10 byte eklemeniz / silmeniz / değiştirmeniz gerekmez , bu nedenle orijinal ASCII ile çalışmak muhtemelen en iyisidir.)

Yazılı olarak program A000124'ü uygular (üçgen sayılar + 1); Herhangi bir çatlak A000142'yi (hizipler) uygulamalıdır. Her iki program da stdin'den (ondalık tamsayılar olarak) girdi alır, çıktılarını stdout'a yazar ve dizinin ilk elemanı (ve ikinci öğe olarak 2 girişi vb.) Olarak 1 girişini ele alır.

Umarım çok yüksek X değeri, insanları bu programı kaba kabadayı durduracak, bu sefer (ki bu 7’de polis ve soyguncular girişlerinde her zaman bir risktir).

Çözüm

177172051772664057074056167770236713351353

Çevrimiçi deneyin!

Orijinalden farklılıklar:

17 172051 405707 1 61677702367133513 3
17 7 172051 77266 405707 405 61677702367133513 5 3

Bu çalışmaların nasıl yapıldığına dair açıklamalar hazırlamıyorum, bu yüzden açıklama yapmak biraz zaman alacak, çünkü neredeyse sıfırdan anlamaya çalışacağım. Umarım sonunda bir açıklama olacaktır.




3

Perl 6 , 13 bayt, X = 1, A161680A000217

Kasa!

{[+] [,] ^$_}
  • S 1 = A161680 = 0 0 1 3 6 10 15 21...= Sıfır ve ardından üçgen sayılar.
  • S 2 = A000217 = 0 1 3 6 10 15 21 28 ...= Üçgen sayılar.
  • Sıfır endekslendi.

Çevrimiçi deneyin!

(TIO'da çalışan Perl 6 sürümüyle çalışmak üzere onaylandı.)

Çözüm

{[+] [\,] ^$_}

Orijinal nasıl çalışır:

{           }  # A lambda.
          $_   # Lambda argument.                     e.g. 4
         ^     # Range from 0 to n-1.                 e.g. 0, 1, 2, 3
     [,]       # Reduce with comma operator.          e.g. 0, 1, 2, 3
 [+]           # Reduce with addition operator.       e.g. 6

Çözüm nasıl çalışıyor:

{            } # A lambda.
           $_  # Lambda argument.                     e.g. 4
          ^    # Range from 0 to n-1.                 e.g. 0, 1, 2, 3
     [\,]      # Triangle reduce with comma operator. e.g. (0), (0,1), (0,1,2), (0,1,2,3)
 [+]           # Reduce with addition operator.       e.g. 10

Ayrıca, toplama gibi sayısal işleçlerin bir listeye öğe sayısı olarak davrandığını, yani örnekte toplamın olduğu gerçeğini açıklar 1 + 2 + 3 + 4 = 10.

Ve evet, orjinalinde "virgül operatörü ile küçült" no-op, kod-golf kurallarına uymak gibi bir şey değil; ne olduğunu... :)


Eğer zamanım ya da eğilimim varsa (ve perl bilgisine sahip olsaydım), bu kaba davranmak için yalvarıyor.
Rohan Jhunjhunwala

Bu güvenli olarak işaretlenecek kadar uzun süre hayatta kalmıştır
fəˈnɛtɪk






1

Javascript, 15704 bayt, 2, A059841 ve A000004 arasındaki mesafe - kırık

Bu çözüm son derece uzun, bu yüzden tam kodu bu github özünde bulabilirsiniz.

Orijinal cevap (bu) 1 indekslenmiştir. (Bunun çok uzun sürdüğünü biliyorum, sadece eğlence için.)


Kırık . Ayrıca, kesinlikle işe yaramaz kod eklemek! + [] - (! + []) Gerçekten kuralların
özünde değildir

Sadece bildiğiniz gibi, bu cevap bu zorluğun OP'si için bazı sorunlara yol açıyor. Görünüşe göre kabataslak JavaScript gibi göründüğü için sayfanın tamamı engelleniyor . Kodu harici bir bağlantıya koyabilir misin? (Gist, pastedump, vb.)
DJMcMayhem

Aslında, onu kendime özledim. Kodu başka bir yerde bulundurmayı tercih ederseniz, sınırlarımı aştığımda tekrar düzenlemekten çekinmeyin.
DJMcMayhem

Sanırım! + [] - (! + []) Bunu yapıp dönüşümü tersine çeviremezsiniz. Ancak diğer çöplerin bazıları daha uzun sürüyor. Eşdeğer kod yalnızca 15640 bayttır.
f Febnɛtɪk


0

Javascript, 30 bayt, 4 Mesafe, A000290 , A000079 , - Çatlak!

f=x=>{return x?2*x-1+f(x-1):0}

0 tabanlı endeksleme

@Kritixi Lithos'un çözümü benimkinden farklıydı

f=x=>{return x?f(x-1)+f(x-1):1}

Çevrimiçi deneyin


1
Bu x**2ve değil2**x
Kritixi Lithos 13:17

Bence A000290 , A000079 değil.
betseg

@KritixiLithos her ikisi de olması gerekiyordu. Diğer ucunu değiştirdiğimde üstteki yanlış sekans bağlantısını değiştirdim.
f Febnɛtɪk


0

Javascript (ES6), mesafe 1, A000079 ve A000004'tür - çatlak

as=function(){ return 2*2**((11)*-1*~arguments[0]/11-(4-(as+[]).length%89))-(as+[]).length%7}

Orijinal cevap (bu) 0 tabanlıdır. Şimdi kırıldı, işte orijinal B işlevi:

as=function(){ return 2*2**((1^1)*-1*~arguments[0]/11-(4-(as+[]).length%89))-(as+[]).length%7}

1
İki farklı ortam arasında tutarsız davranmasını sağlamak için crack codegolf.stackexchange.com/a/109976/64505 adresime ulaşabildim.
f Febnɛtɪk


0

Java 7, 4'ün Levenshtein mesafesi, A094683 , A000290 , Kırık

int x{double r=1;for(int i=0;i<42;i++)r=r/2+n/r/2;int k=(int)((int)n*(float)n/Math.pow(n,(Math.sin(n)*Math.sin(n)+Math.cos(n)*Math.cos(n))/2));return n%4%2==(int)Math.log10(Math.E)/Math.log((double)'H'-'@')?(int)r:k;}

0 endeksli.
Burada dene!


@LliwTelracs, negatif olmayan ilk 15 için, güncellenen cevabımı gördü.
17:17

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.