Kodu Değiştir, Sırayı Değiştir: Soyguncular


15

Bu bir mücadelesi. Polisler 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.

Polis kodu inşa edilir A üreten S 1 ve bir numara verir X de iyi olduğunu öne Levenshtein mesafe (karakter olarak) oluşturmak mümkün B üretir S 2 .

Soyguncuların Mücadelesi

Belirli bir polisin gönderimini kırmak için soyguncular , S 2 (n) üreten ve Y karakteri A'dan (ve ) uzak olan bir cevapla aynı dilde (ve versiyonda) bir C programı bulmalıdır . Soyguncular mutlaka aynı şeyi bulmak zorunda değildirY <= X , polisin (gizlice) ürettiği B kodunu . Soyguncuların gönderimleri, polisin gönderimi ile belirtilen 0-dizinine veya 1-dizinine uymalıdır.

Bunu yönetirseniz, polisin cevabına bağlantı vererek çözümle bir cevap gönderin ve polisin cevabına kendinize geri bağlantı veren bir yorum bırakın.

Her polis yanıtı sadece bir kez kırılabilir ve tabii ki kendi cevabınızı kırmanıza izin verilmez. Polisin cevabı, çatlamadan önce veya sonra geçersiz görünüyorsa, soyguncu puanına dahil edilmez.

Kazanma ve Puanlama

Soyguncular (X - Y)*5 + 5her çatlakları için puanlanır ve toplamda en yüksek puana sahip soyguncu kazanır.

Diğer Kurallar

  • Karma, şifreleme veya rasgele sayı üretimi için herhangi bir yerleşik kullanmamalısınız (rastgele sayı üretecini sabit bir değere tohumlasanız bile).
  • Programlara veya işlevlere izin verilir, ancak kod bir snippet olmamalı ve bir REPL ortamı almamalısınız.
  • Herhangi bir uygun formatta girdi alabilir ve çıktı verebilirsiniz . Her iki sekans için giriş / çıkış yöntemleri aynı olmalıdır.
  • Bu meydan okuma için Levenshtein mesafe için kesin hesap makinesi bu bir gezegen Calc üzerinde.
  • Bir CnR meydan okumasına ek olarak, bu golfüdür, bu nedenle her zamanki golf kuralları geçerlidir.

Yanıtlar:


7

Pyke, Levenshtein mesafesi 1, A036487 , A135628 - puan 5

Muddyfish tarafından bir giriş çatlamak

wX*e

Burada deneyin!

Orijinal kod, X*egirdiyi kareler, bunu girdiyle Xçarpar *ve ardından sonucu katlar e,.

İşin püf noktası 'X', tabanın 96 temsilindeki 56'dır w, bu nedenle wX56 verir, girdiyle sonra kat ve yarı ile çarpın ve gerektiğinde girişin 28 katını elde edersiniz.


Tam olarak ne vardı. Beklediğimden biraz daha uzun sürdü
Mavi

Onu görür görmez amaçlanan çözüm olduğunu biliyordum.
Jonathan Allan

4

Brain-Flak , 28 bayt, Mesafe 4, A002817 , A090809

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

Bu cevap, 35.000 olası program üreten bir kaba-zorlayıcı yardımıyla keşfedildi (bunların çoğu dengesiz ve dolayısıyla geçersiz beyin-flak kodu, ancak hatayı yuvarladım ve yine de cevabı buldum). Bu test edilen 20 bininci programın etrafındaydı ve bulmak yaklaşık bir saat sürdü (ancak bittiğinde ne kadar süredir kaldığımı tam olarak bilmiyorum).

Bu cevabı henüz yayınlamak istemedim, çünkü bu programın nasıl çalıştığını henüz tam olarak anlamadım. Ancak, cevap güvenli olmak üzeredir, bu yüzden süresinin dolmasını istemiyorum. Bu cevabı tam olarak anladıktan sonra daha fazla güncellemeyi umuyorum ve bu cevabı bulmak için kullandığım kodu gönderiyorum. Ancak şimdilik kısmi bir açıklama yapacağım.

#Push the sum of:
(

    #The (n-1)th triangular number, and the range [1, n] (The range doesn't count towards the sum I believe)
    ({(({})[()])}{})

    #Triangulate every number on the stack
    {{({}[()])}{}}

)

Bu mantıklı çünkü OEIS şunları söylüyor:

N> 0 için, bu dizinin terimleri a000124 ile bir (n) = toplam (i * A000124 (i), i = 0..n-1) ile ilişkilidir. [Bruno Berselli, 20 Aralık 2013]

Ve A000124 üçgen sayılar + 1'dir. Ancak, forumla'nın tam olarak ne olduğunu bilmiyorum, bu yüzden bunun nasıl çalıştığını tam olarak açıklayamıyorum.


3

Perl 6, 19 bayt, X = 1, A000045 → A000035

{(0,1,*+<*...*)[$_]}

+>yerine +<de çalışır.

Çevrimiçi deneyin!

Nasıl çalışır

infix ... basit özyinelemeli diziler için oldukça kullanışlıdır. (0,1,*+*...*)İçin bir kısaltmadır orijinal kod parçası,

(0, 1, -> $x, $y { $x + $y } ... *)

0 ve 1 ile başlayan bir sıra belirtir , ardından dizinin önceki iki öğesinin toplamını hesaplayarak öğeler ekler.

Buna karşılık, eşlik dizisini oluşturmak için (0,1,*+<*...*)sol bit kaydırma ( +>, sağ bit kaydırma da işe yarar) kullanır. Kayabilir 1 sola sıfır birimleri olan 1 ve kaymayı 0 sola bir birim olan 0 , biz olanlar ve sıfır istenen alternatif modellerini olsun.


2

Perl 6 , 10 bayt, mesafe 1 - puan 5

Smls ile bir girişin çatlaması

*[0]o 1***

Oluyor:

*[0]o 1*+*

Çevrimiçi Deneyin!


Aferin! Bu çözümü düşünmedim, benimki biraz daha zor ve aslında *[0]o orada olmasını gerektiriyordu . Sanırım bu benim "hile" dayalı başka bir meydan okuma ile gelebilir anlamına gelir ... :)
smls

Perl'i gerçekten bilmiyorum, sadece gördüm ***ve ikili çarpma işlemini açığa çıkarabileceğini düşündüm *, önceki argümanlarla kodun gerçekten ne yaptığını gerçekten bilmiyorum. Bazı açıklamalarda düzenleme yapmaktan çekinmeyin!
Jonathan Allan

2
1***1 ** *"x'in gücüne 1" yapan bir lambda olarak ayrıştırılır . "1 ile çarpılan (x sayıya dönüştürüldü)" şeklinde bir lambda 1*+*olarak ayrıştırılır 1 * (+*).
smls





1

JavaScript (ES6), Mesafe 1, Advancid

Orijinal:

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

crack:

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

Çevrimiçi deneyin!

veya

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

Çevrimiçi deneyin!

Her nasılsa TIO ve repl.it arasında farklı davranmayı başardım (kesinlikle 2 * 1 ^ ... repl.it'e göre 0'a eşit olacağına dair hiçbir ipucu yok)


Ben kadar salağım, ben 2 İşte B fonksiyonudur bir 0 olarak değiştirilmesiyle ilgili düşünmüyordu: as=function(){ return 2*2**((1^1)*-1*~arguments[0]/11-(4-(as+[]).length%89))-(as+[]).length%7}.


1

Java, Mesafe 4, Peech , A094683 , A000290

Orijinal:

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;}

crack:

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%1==(int)Math.log10(Math.E)/Math.log((double)'H'-'@')?(int)n*n:k;}
                                                                                                                                                          ^                                                         ^^^

n * n döndürür


1

Javascript, Advancid , 2 mesafesi, A059841 ve A000004

Kodu sadece TIO bağlantısının arkasında bırakarak siteyi bozuyor gibi görünüyor.

Olan @nderscore sayesinde, kod bir ilk kod çözmek için kullanılır

!! [] + [] yerine !! [] + [] + [] kullanmak gibi gereksiz kodlar vardı.

! + [] - (! + []) (+ 1-1) ilavesi başlangıçta şifre çözmeyi engelledi.

Çevrimiçi Deneyin


1

Pyke, Levenshtein mesafesi 2, A008788, A007526

'SS^

Burada deneyin!

Nasıl çalışır

Bu, karışık taban dönüşümü yapar.

'Sn girişini tutar ve uygular, yığın üzerine [1, ..., n] . Bir sonraki nS girişini alır ve aynı diziyi bir kez daha iter. 'bir sonraki komutun yığındaki önceki üstüne uygulanmasına neden olduğu görülüyor; Detaylar biraz bulanık.

Son olarak, ^karma temel dönüşüm uygular, böylece [1, ..., n] [1, ..., n] f
a (n) hesaplar : = [1] n + n + (n) (n-1) .. . + [n!] 1 , buradaki parantezler yer değerini ve sağındaki rakamı rakamı gösterir.

Şimdi, bir (n) = (1 + (1) (n-1) + (n-1) (n-2) (n-3) + ... + (n-1)!) N = n ( [A007526] 'da a (n)' yi tanımlayan aynı özyinelemeli formül olan bir (n) + 1) . Boş bir toplam sıfır olduğu için a (0) = 0 ve temel durum da eşleşir.


Bu kadar az denemeyle nasıl başardınız? Düşünce süreçlerinle ilgileniyorum
Blue

Karışık taban dönüşümü oldukça yaygın bir golf hilesi. İlk kez kullanmıyorum.
Dennis
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.