Çeviri kayboldu


15

Bu bir biçimine aşina değilseniz, wiki'ye gitmek için etiketi tıklayın. Bu soru için bir soyguncu konusu olmayacak.

Polisler

Polis olarak göreviniz , Tamsayı Dizilerinin Çevrimiçi Ansiklopedisinden iki dizi seçmek ve bir dizinin n. Öğesini girdi olarak alan ve ikinci dizinin n. Öğesini çıkaran bir program yazmaktır. Daha sonra kodu içeren ve seçilen sekansları atlayan bir cevap verirsiniz. Soyguncular, seçtiğiniz sekansları bulmaya çalışır ve eğer aklınızdaki sekansları veya programınız için cevabınızı Çatlak olarak işaretlemeniz gereken diğer sekansları bulmayı başarırsa . Bir hırsız size geçerli olmadığına inandığınız bir çatlak bildirirse, çatlak olmadığına dair bir kanıt sunabilirsiniz. Aksi takdirde işaretlemelisiniz.

Her zamanki gibi 7 gün boyunca kırılmamış olan cevaplar güvenli olarak işaretlenmeye uygundur. Bir Polis, aklındaki dizileri ortaya çıkararak cevaplarını güvenli olarak işaretleyebilir. Güvenli bir kez cevap artık kırılamaz.

Amaç, programa bağlı kalmadan bayt sayısını en aza indirmektir.

Misal

Aşağıdaki Python kodu A000290'ın nth elemanını (kare sayılar) A000217'ye (üçgen sayılar) çevirir :

lambda x:sum(range(0,int(x**.5+1)))

Koşullar ve Gereklilikler

  • Sonlu olduğu kanıtlanmamış bir dizi seçerseniz, yalnızca OEIS sayfasında listelenenlerin değil, olabilecek tüm terimlerin çıktısını almalısınız

  • Sonsuz kesinlik tamsayıları olmayan önceki kural dillerinin bir istisnası olarak, sayıları aralıklarının dışına çıkarmak veya girmek zorunda değildir.

  • Giriş dizinizin boyutunun, çıkış dizisinden daha küçük olduğu kanıtlanmamış olmalıdır.

  • Giriş dizininizde yinelenen öğeler olmamalıdır (aksi takdirde görev hemen hemen imkansızdır)

  • OEIS, sayfalarında bir dizin içerir ("OFFSET" başlığından sonraki ilk sayı), varsayılan olarak bu, n (ofsetteki ilk öğenin dizinine eşittir) için ötelemenizdir. senin cevabın.

  • OEIS'de listelenenden farklı bir ofset seçerseniz, yine de giriş dizinizdeki tüm öğeleri çıkış dizinizdeki karşılık gelen öğeyle eşlemelisiniz.

  • Programınız giriş sırasında olmayan bir girdi alırsa, istediği her şeyi yapabilir (tanımlanmamış davranış). Ancak yine de bir tamsayı çıkarması sizin yararınıza olacaktır.

  • Kodunuzu yürütmeyi zorlaştırarak, yürütmeyi zaman alıcı hale getirerek veya özgür olmayan dil seçimi yoluyla kasıtlı olarak çalıştırmak zor değildir . İkincisini zorlayacağım halde, ilkini nesnel olarak uygulayamam. Bununla birlikte, eğlence uğruna, daha zayıf bilgisayarları olanlar için zorluğu özellikle zorlaştırdığı için eskisini denememeniz için size yalvarıyorum.

soyguncuları

Soyguncular olarak göreviniz, çatlamayan, güvensiz cevapları seçmek ve aralarındaki dizileri bulmaktır. Bir çözüm bulursanız, çalışan bir çözüm bulursanız (mutlaka Polislerin tasarladığı çözüm değil), sıraları uygun cevapta yorumlayın.

Soyguncular, iki özel dizinin bir çözüm olduğunu doğrulamak konusunda çok endişelenmemeli, OEIS'teki tüm girişlerle eşleşiyorsa bir çözüm yayınlamalıdır. Bu bir polisin aklındaki sıra değilse, polis yanlış olduğunu kanıtlayabilir veya bulamazsa çatlamış olarak işaretleyebilir.


3
Bir hırsız, cevabının tüm girdiler için doğru olduğundan nasıl emin olabilir? Matematiksel olarak kanıtlamaları gerekiyor mu?
Leo

1
@Leo Soyguncu OEIS'teki tüm girişlerle eşleşiyorsa bir çözüm yayınlamalıdır. O bir polis akılda vardı sırası değilse onlar bu olduğuna delil sunabilir yanlış veya birini bulamazsa kırık olarak işaretleyin. Soyguncunun iş parçacığını güncelleyeceğim.
Post Rock Garf Hunter

2
Ortak varsayımlar ve kanıtlanmamış fikirler arasındaki çizgiyi çizmek zor. Açıklık adına, cevabınızın işe yaradığını kanıtlamak zorunda olduğunuzu söyleyebilirim .
Dennis

1
Bazı gerçekten güzel çözümlerin oeis.org/A000004 -> oeis.org/A000012
Wolfram

2
@Dennis Sanırım bu iyi bir nokta. İnsanların bu meydan okuma için oldukça zor olduğu anlaşılan çatlakları bulmak için temsilci almanın bir yolu olmamasına rağmen bir serseri.
0

Yanıtlar:


6

Jöle , 14 bayt (@Wolfram tarafından kırıldı)

+66%444µ111<µ¡

Çevrimiçi deneyin!

Bunun ne yaptığı oldukça açık olmalıdır. Aslında, Jelly olmayan kullanıcıların yararı için bir açıklama bile yapacağım:

açıklama

+66%444µ111<µ¡
       µ    µ¡  Run the transformation
+66%444           "add 66, then modulo 444"
        111<    once if 111 is less than the input, zero times otherwise 

Soru şu ki, bunu neden yapıyor?

çatlak

Söz konusu diziler A201647 ve A201647 idi . Sonludurlar ve sadece son 2 elementte farklılık gösterirler:

  • 3, 5, 7, 9, 11, 15, 21, 165, 693
  • 3, 5, 7, 9, 11, 15, 21, 231, 315

Böylece, eğer giriş düşükse, onu aynı bırakıyorum ve sadece son ikisinin dönüşümüne bir fonksiyon yerleştiriyorum.


@WheatWizard: Bundan fayda sağlayabileceğinizi düşünüyorsanız, bunun için gidin. Ancak hızlı olmalısınız, sanki bir başkası önbellek etkinken test ediyor gibi, önbelleği onlardan sonra herkes için kirletecek.

@WeatWizard çıkış önbelleğini devre dışı bırak , sunucudan yeni bir sonuç almanızı sağlar, ancak bu yeni sonuç yine de önbelleğe alınır.
Dennis

1
@WheatWizard Ya da test ederken bir önbellek kesici ekleyin: bir yorumun veya kullanılmayan bir giriş alanının parçası olarak rastgele seçilen bir dize.
Dennis

+1 bu cevap doğada gerçekten basit, ama yine de soyguncular için bir meydan okuma
Kritixi Lithos


3

Jöle , 7 bayt (@JonathanAllan tarafından kırıldı)

ÆFḅÆdÆẸ

Çevrimiçi deneyin!

Bu ne yapar

ÆFḅÆdÆẸ  Main link. Argument: n

ÆF       Factor n into prime-exponent pairs.
   Æd    Compute σ, the number of divisors of n.
  ḅ      Convert each pair from base σ to integer.
     ÆẸ  Yield the integer whose prime signature (infinite sequence of all prime
         exponents, including zeroes, in order) is equal to the result.

3
Başka geçerli eşlemeler de olabilir, ancak aklınızda olduğunu düşündüğüm asallar - A000040 - 2 ^ (2p + 1), p asal - A100626 .
Jonathan Allan

@JonathanAllan A000040 -> A100626'ya da geldim, yavaş parmaklarımı
yendin

Ayrıca tutacağını da görebiliriz: girdi bir asal olduğunda p, ÆFverim (p,1)ve Ædverim 2, bu yüzden bizi alır 2p+1, bu da ÆẸilk prime getirecek 2, bu sonucun gücüne yükselecektir 2^(2p+1).
Jonathan Allan

@JonathanAllan Evet, bunun için gidiyordum.
Dennis

2

Python 3, 256 bayt ( Çatlak! )

from math import*
def p(i,m):
 r=0;d=floor(log(i))
 for y in range(d):r+=(pow(16,d-y-1)%(8*y+m))/(8*y+m)
 o=-1;y=d
 while r!=o:o=r;r+=pow(16,d-y-1)/(8*y+m);y+=1
 return r
def q(n):r=4*p(n,1)-2*p(n,4)-p(n,5)-p(n,6);return floor((1-(-r%1)if r<0 else r%1)*16)

Çevrimiçi deneyin!

Bu kod korkunç görünüyorsa üzgünüm, bu benim ilk Python golf olduğunu düşünüyorum. Python'daki döküm kodlamayı kolaylaştırır.


Söz konusu işlevin olduğunu varsayıyorum q?
Post Rock Garf Hunter

Ayrıca değişken kkullanılmamış gibi görünüyor, böylece bazı baytları kaldırarak kaydedebilirsiniz.
Rock Garf Hunter Post


@WheatWizard evet, teşekkürler ve evet.
17'de

2

İşleme , 184 bayt, GÜVENLİ!

int x(int y){int b=TRIANGLES-MITER;for(int i=OVERLAY/BURN;i>#fffffe;b*=(int)pow(y,(MOVE-HAND+0.)/(int)sqrt(red(color(-1<<16))/(int)log(color(0)*color(-1)))),i-=QUAD/DARKEST);return b;}

Bir int alan ve bir int döndüren bir işlev. Giriş numarası intmenzil içinde olduğu sürece , program iyi çalışmalıdır.

Bu yavaş değil, sadece okunamıyor. İyi şanslar!


Bu teslimin bu kadar uzun sürdüğüne şaşırdım. Oh, en azından ilk güvenli gönderim :)

A000578 - A000290

Başka bir deyişle: küpler karelere.

açıklama

Cevap verirken ekli Hiçbir dizeleri (veya numaraları) , ben int'leri temsil İşleme sabitleri bir listesini keşfetti. Örneğin CORNER, bir değeri vardır 0. Tam liste burada bulunabilir . Bir sabitin değerini bulmak için,print .

Bunu kullanarak, belirli sayıları bu sabitlerin kombinasyonları ile değiştirmeye karar verdim. Yani, sabitleri ilgili int değerleriyle değiştirdiğinizde elde edeceğiniz şey budur.

int x(int y){int b=9-8;for(int i=512/8192;i>#fffffe;b*=(int)pow(y,(13-12+0.)/(int)sqrt(red(color(-1<<16))/(int)log(color(0)*color(-1)))),i-=16/16);return b;}

Şimdi bile, tam açık kod ortaya çıkmıyor. Renkler kaldı. İşleme'de renk değişkenlerinin int değerleri vardır, örneğin white ( #ffffff) is -1, #fffffeis -2, #fffffdis -3vb. Bu printrenk girilerek bulunabilir . Öyleyse renkleri basitleştirelim.

int x(int y){int b=9-8;for(int i=512/8192;i>-2;b*=(int)pow(y,(13-12+0.)/(int)sqrt(red(color(-1<<16))/(int)log(-16777216*-1))),i-=16/16);return b;}

Yaklaşık yarıdayız :) Değerleri anlamak için sayısal ifadeleri basitleştirmeliyiz.

int x(int y){int b=1;for(int i=0;i>-2;b*=(int)pow(y,(1.)/(int)sqrt(red(color(-65536))/(int)log(16777216))),i-=1);return b;}

Çok daha net! Şimdi logaritmayı basitleştirelim.

int x(int y){int b=1;for(int i=0;i>-2;b*=(int)pow(y,(1.)/(int)sqrt(red(color(-65536))/(int)16.6...)),i-=1);return b;}


int x(int y){int b=1;for(int i=0;i>-2;b*=(int)pow(y,(1.)/(int)sqrt(red(color(-65536))/16)),i-=1);return b;}

Neredeyse bitti! Şimdi bu (int)sqrt(red(color(-65536))/16))ağız dolusunu bulmalıyız . color(-65536)kırmızı, yani rgb(255, 0, 0). Şimdi red()işlev, bağımsız değişkendeki (bir renk olan) kırmızı bileşenin değerini döndürür. Peki kırmızıda ne kadar kırmızı var? Cevap 255. Bununla birlikte

(int)sqrt(255/16))
(int)sqrt(15)
(int)3.8...
3

Bunu programda değiştirmek aşağıdakilerle sonuçlanır:

int x(int y){int b=1;for(int i=0;i>-2;b*=(int)pow(y,(1.)/3),i-=1);return b;}

Yay, bitti!

int x(int y){                        // y is the cube
  int b=1;                           // variable that holds the final result
  for(int i=0;                       // for-loop that
          i>-2;                      // loops twice
          b*=(int)pow(y,(1.)/3),     // multiply b by the cube root of y
          i-=1);                     // decrement the looping variable
  return b;                          // finally return b
}

Özetlemek gerekirse, bu, giriş numarasının küp kökünün karesini (for-döngüsünde iki kez çarparak yapılır) döndürür.


0

Mathematica (ya da her neyse) -  Çatlak!

f[x_] := Quotient[ 366403414911466530559405368378193383110620062 - 
    755296348522256690003418238667147075159564695 x + 
    525778437135781349270885523650096958873079916 x^2 - 
    156594194215500250033652167655133583167162556 x^3 + 
    20861131421245483787723229627506507062999392 x^4 - 
    1181515772235154077024719095229309394979146 x^5 + 
    29382627265060088525632055454760915985604 x^6 - 
    308672970015057482559939241399297150364 x^7 + 
    1087516675449597417990589334580403666 x^8 - 
    312989984559486345089577524231879 x^9, 
  265451130886621254401938908479744271974400 ]

Mathematica'nın özgür olmayan bir yazılım olduğunu biliyorum, ancak bu işlev çalıştırmak istediğiniz herhangi bir favori dile bağlantı vermek için önemsizdir. Giriş tamsayısında değerlendirilen verilen derece-9 polinomunun değerini tam olarak hesaplar, sonra tamsayı bölümünü alır değeri ve son satırdaki 42 basamaklı sayı. Örneğin, olarak f[100]değerlendirir -3024847237.


2
A003173 ila A165892 . Aslında bir programlama problemi değil;)
Leo

2
Mathematica özgür olmadığı için neyse, ben yazdım bu bir piton fonksiyonu haline getirmek için
Leo

@Leo: Harika iş çıkardın! İşlevde bir Paskalya yumurtası da var; buldun mu? : D
Greg Martin

Uhhh ... Hayır :(
Aslan

Bir dokuz elemanlı seti başka bir dokuz elemanlı setle eşlemek için, sadece 8 derecelik bir polinoma ihtiyacım olur. Belirli bir çıkış değerine eşlediğim bir giriş değeri daha olduğunu (doğru) sonucuna varabilirsiniz. Bulduğunuzda bana bildirin :)
Greg Martin
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.