Utracony sens po tłumaczeniu


15

To jeśli nie znasz formatu, kliknij znacznik, aby przejść do wiki. Dla tego pytania nie będzie wątku złodziei.

Gliny

Twoim zadaniem jako Cops jest wybranie dwóch sekwencji z Online Encyclopedia of Integer Sequences i napisanie programu, który przyjmuje n-ty element jednej sekwencji jako dane wejściowe i wysyła n-ty element drugiej sekwencji. Następnie udzielisz odpowiedzi zawierającej kod i pomijając wybrane sekwencje. Rabusie spróbują znaleźć sekwencje, które wybrałeś, a jeśli uda się znaleźć sekwencje, które masz na myśli, lub inne sekwencje, dla których twój program musisz oznaczyć jako Pęknięty . Jeśli złodziej poinformuje cię crack, który Twoim zdaniem jest nieważny, możesz przedstawić dowód, że nie jest to crack. W przeciwnym razie musisz to zaznaczyć.

Zgodnie ze zwykłymi odpowiedziami, które nie były łamane przez 7 dni, można je oznaczyć jako bezpieczne. Policjant może oznaczyć swoją odpowiedź jako bezpieczną, ujawniając sekwencje, które mieli na myśli. Gdy będzie to bezpieczne, odpowiedź nie będzie już mogła zostać złamana.

Celem jest zminimalizowanie liczby bajtów twojego programu, pozostając bez krakowania.

Przykład

Poniższy kod w języku Python tłumaczy n-ty element A000290 (liczby kwadratowe) na A000217 (liczby trójkątne):

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

Postanowienia i wymagania

  • Jeśli wybierzesz sekwencję, dla której nie udowodniono, że jest skończona, musisz wypisać wszystkie warunki, które mogą istnieć, nie tylko te wymienione na stronie OEIS

  • Jako wyjątek od poprzednich języków reguł bez liczb całkowitych o nieskończonej precyzji, nie muszą one wypisywać ani wprowadzać liczb poza swoim zakresem.

  • Nie można udowodnić, że rozmiar sekwencji wejściowej jest mniejszy niż sekwencja wyjściowa.

  • Twoja sekwencja wejściowa nie może zawierać żadnych powtarzalnych elementów (w przeciwnym razie zadanie jest prawie niemożliwe)

  • OEIS zawiera indeks na swojej stronie (pierwszy numer po nagłówku „PRZESUNIĘCIE”) domyślnie jest to twoje przesunięcie dla n (n równa się indeksowi dla pierwszego elementu w sekwencji), jeśli wybierzesz inny indeks, który musisz podać w Twoja odpowiedź.

  • Jeśli wybierzesz przesunięcie inne niż wymienione w OEIS, nadal musisz odwzorować wszystkie elementy w sekwencji wejściowej na odpowiedni element w sekwencji wyjściowej.

  • Jeśli twój program odbiera dane wejściowe, które nie znajdują się w sekwencji wejściowej, może zrobić, co zechce (zachowanie niezdefiniowane). Jednak prawdopodobnie leży w najlepszym interesie użytkownika, aby nadal wypisywać liczbę całkowitą.

  • Celowe utrudnianie uruchamiania kodu jest niesportowe, ponieważ powoduje, że jego wykonanie jest czasochłonne, lub wybór niewolnego języka . Chociaż będę egzekwować to drugie, nie mogę obiektywnie egzekwować tego pierwszego. Jednak błagam cię, dla zabawy, abyś nie próbował tego pierwszego, ponieważ sprawia to wyzwanie szczególnie trudnym dla osób ze słabszymi komputerami.

Rabusie

Twoim zadaniem jako Złodziei jest wybranie nieskradzionych, niebezpiecznych odpowiedzi i znalezienie sekwencji między nimi. Jeśli znajdziesz rozwiązanie, które działa (niekoniecznie rozwiązanie zamierzone przez gliniarzy), skomentuj sekwencje odpowiedniej odpowiedzi.

Rabusie nie powinni się zbytnio przejmować weryfikacją, czy dwie konkretne sekwencje są rozwiązaniem, należy opublikować rozwiązanie, jeśli pasuje do wszystkich wpisów w OEIS. Jeśli nie jest to kolejność, o której gliniarz miał na myśli, może on przedstawić dowód, że jest niepoprawny, lub oznaczyć go jako pęknięty, jeśli nie może go znaleźć.


3
Jak złodziej może mieć pewność, że jego odpowiedź jest odpowiednia dla wszystkich danych wejściowych? Czy muszą to udowodnić matematycznie?
Leo

1
@Leo Złodziej powinien opublikować rozwiązanie, jeśli pasuje do wszystkich wpisów w OEIS. Jeśli nie jest to kolejność, o której myśli policjant , mogą przedstawić dowód, że jest niepoprawny lub oznaczyć go jako pęknięty, jeśli nie może go znaleźć. Zaktualizuję wątek rabusia.
Post Rock Garf Hunter

2
Trudno jest wytyczyć granicę między powszechnymi założeniami a niesprawdzonymi pomysłami. W celu zachowania przejrzystości powiedziałbym, że musisz być w stanie udowodnić, że twoja odpowiedź działa.
Dennis

1
Mam wrażenie, że niektóre naprawdę fajne rozwiązania można złamać w głupi sposób, takie jak oeis.org/A000004 -> oeis.org/A000012
Wolfram

2
@Dennis Myślę, że to dobry punkt. Jest to jednak kłopotliwe, że ludzie nie mają możliwości otrzymania przedstawiciela za znalezienie pęknięć, ponieważ wydaje się, że jest to dość trudne w przypadku tego wyzwania.
0

Odpowiedzi:


6

Galaretka , 14 bajtów (Pęknięty przez @Wolfram)

+66%444µ111<µ¡

Wypróbuj online!

To, co to robi, powinno być dość oczywiste. W rzeczywistości, z korzyścią dla użytkowników innych niż Jelly, wyjaśnię nawet:

Wyjaśnienie

+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 

Pytanie brzmi: dlaczego to robi?

Pęknięcie

Omawiane sekwencje to A201647 i A201647 . Są skończone i różnią się tylko dwoma ostatnimi elementami:

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

Tak więc, jeśli sygnał wejściowy jest niski, pozostawiam go bez zmian i po prostu dopasowuję funkcję do transformacji dwóch ostatnich.


@WheatWizard: Jeśli uważasz, że możesz uzyskać z tego przewagę, skorzystaj z niej. Ale musisz być szybki, jakby ktoś inny przetestował go z włączoną pamięcią podręczną, w końcu skazi pamięć podręczną dla wszystkich po niej.

@WheatWizard wyłącza wyjściową pamięć podręczną , aby uzyskać nowy wynik z serwera, ale ten nowy wynik będzie nadal buforowany.
Dennis

1
@WheatWizard Lub dodaj przerywacz pamięci podręcznej podczas testowania: losowo wybrany ciąg jako część komentarza lub nieużywane pole wejściowe.
Dennis

+1 ta odpowiedź jest naprawdę prosta, ale wciąż stanowi wyzwanie dla rabusiów
Kritixi Lithos


3

Galaretka , 7 bajtów (Pęknięty przez @JonathanAllan)

ÆFḅÆdÆẸ

Wypróbuj online!

Co to robi

Æ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
Mogą istnieć inne prawidłowe mapowania, ale myślę, że miałeś na myśli liczby pierwsze - A000040 do 2 ^ (2p + 1), p liczba pierwsza - A100626 .
Jonathan Allan

@JonathanAllan Doszedłem również do A000040 -> A100626, choć
bijesz

Widzimy też, że będzie trzymać: gdy wejście jest bardzo dogodną p, ÆFrentowności (p,1)i Ædwydajności 2, więc dostaje nam 2p+1, co oznacza, ÆẸprzyniesie pierwszy Prime 2, podniesiony do potęgi tego wyniku 2^(2p+1).
Jonathan Allan

@JonathanAllan Tak, właśnie o to mi chodziło.
Dennis

2

Python 3, 256 bajtów ( Cracked! )

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)

Wypróbuj online!

Przepraszam, jeśli ten kod wygląda przerażająco, myślę, że to mój pierwszy golf Python. Rzutowanie w Pythonie ułatwia kodowanie.


Zakładam, że ta funkcja to q?
Post Rock Garf Hunter

Również zmienna kwydaje się być nieużywana, więc możesz zapisać niektóre bajty, usuwając ją.
Post Rock Garf Hunter


@WheatWizard tak, dziękuję i tak.
betseg

2

Przetwarzanie , 184 bajty, BEZPIECZNIE!

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

Funkcja, która przyjmuje int i zwraca int. Tak długo, jak liczba wejściowa znajduje się w intzakresie, program powinien działać poprawnie.

To nie jest powolne, po prostu nieczytelne. Powodzenia!


Dziwi mnie, że to zgłoszenie trwało tak długo. No cóż, przynajmniej to pierwsze bezpieczne przesłanie :)

A000578 do A000290

Innymi słowy: kostki do kwadratów.

Wyjaśnienie

Podczas odpowiadania bez dołączonych ciągów (lub liczb) odkryłem listę stałych przetwarzania, które reprezentują liczby całkowite. Na przykład CORNERma wartość 0. Pełna lista znajduje się tutaj . Aby znaleźć wartość stałej, możesz po prostuprint zrobić.

Korzystając z tego, postanowiłem zamienić niektóre liczby na kombinacje tych stałych, aby je zaciemnić. Oto, co otrzymujesz, zastępując stałe ich odpowiednimi wartościami int.

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

Nawet teraz pełny, przejrzysty kod nie jest ujawniany. Kolory pozostają. W Przetwarzaniu zmienne kolorów mają wartości int, na przykład biały ( #ffffff) jest -1, #fffffejest -2, #fffffdjest -3i tak dalej. Można to znaleźć, printwprowadzając kolor. Uprośćmy więc kolory.

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

Jesteśmy w połowie drogi :) Aby zrozumieć wartości, musimy uprościć wyrażenia liczbowe.

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

O wiele jaśniej! Teraz uprośćmy logarytm.

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

Prawie koniec! Teraz musimy (int)sqrt(red(color(-65536))/16))rozgryźć to kęs. color(-65536)jest czerwony, więc rgb(255, 0, 0). Teraz red()funkcja zwraca wartość argumentu czerwonego w argumencie (który jest kolorem). Ile jest czerwieni w kolorze czerwonym? Odpowiedź jest 255. Z tym otrzymujemy

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

Podstawienie tego w programie powoduje:

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

Tak, gotowe!

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
}

Podsumowując, zwraca kwadrat (zrobiony przez dwukrotne pomnożenie w pętli for) pierwiastka z liczby wejściowej.


0

Mathematica (lub cokolwiek innego) -  pęknięty!

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 ]

Wiem, że Mathematica jest niewolnym oprogramowaniem, ale ta funkcja jest trywialna do przeniesienia na dowolny ulubiony język, w którym chcesz ją uruchomić. Dosłownie oblicza wartość podanego wielomianu stopnia 9 obliczoną na wejściowej liczbie całkowitej, a następnie przyjmuje iloraz liczby całkowitej tej wartości i 42-cyfrowej liczby w ostatnim wierszu. Na przykład f[100]ocenia na -3024847237.


2
A003173 do A165892 . Nie jest to jednak problem programistyczny;)
Leo

2
W każdym razie, ponieważ matematyka nie jest darmowa, napisałem to, aby przekształcić ją w funkcję pytona
Leo

@Leo: Świetna robota! W tej funkcji jest też pisanka; znalazłeś to? : D
Greg Martin

Uhhh ... Nie :(
Leo

Aby odwzorować jeden zestaw dziewięciu elementów na inny zestaw dziewięciu elementów, potrzebowałbym tylko wielomianu stopnia 8. Można wyciągnąć (prawidłowy) wniosek, że istnieje jeszcze jedna wartość wejściowa, którą zamapowałem na określoną wartość wyjściową. Daj mi znać, jeśli (kiedy) go znajdziesz :)
Greg Martin
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.