Znajdź program, który drukuje tę sekwencję całkowitą (wątek Rabusiów)


20

To wątek złodziei. Wątek gliniarzy idzie tutaj .

W wątku gliniarzy zadaniem było napisanie programu / funkcji, która przyjmuje dodatnią (lub nieujemną) liczbę całkowitą i zwraca / zwraca inną liczbę (niekoniecznie całkowitą). Zadaniem rabusiów jest rozszyfrowanie kodu, którego gliniarze użyli do wygenerowania tego wyniku.

Pęknięty kod nie musi być identyczny, o ile ma taką samą długość, a wszelkie ujawnione znaki znajdują się we właściwych pozycjach. Język musi być również taki sam (numery wersji mogą być różne). Dane wyjściowe muszą oczywiście być identyczne.

W rozwiązaniu rabusia nie można używać żadnych operacji.

Zwycięzcą wątku rabusiów zostanie użytkownik, który złamał najwięcej zgłoszeń do 7 maja 2016 r. W przypadku remisu wygra użytkownik, który złamał zgłoszenia o najdłuższym połączonym kodzie.

Zgłoszenie powinno być sformatowane w następujący sposób:

Język, znaki nn (w tym link do odpowiedzi), nazwa użytkownika Cop

Kod:

function a(n)
    if n<2 then
        return n
    else
        return a(n-1) + a(n-2)
    end
end

Wynik

a(0) returns 0
a(3) returns 2

Opcjonalne wyjaśnienia i komentarze.


Te zasady tutaj różnią się od thops gliniarzy, gdzie mówi: Jednak każdy proponowany kod źródłowy, który produkuje ten sam zestaw danych wyjściowych, również jest uznawany za ważny, o ile znajduje się również w OEIS.
flawr

Co się stanie, jeśli przykłady pasują do wielu serii OEIS? To właśnie stało się z Adnanem i mną
FliiFe

@FliiFe Zgodnie z obowiązującymi regułami, każdy kod, który pasuje do kodu policjanta i generuje sekwencję OEIS, której wartości pokrywają się z przykładami policjanta, jest poprawnym pęknięciem.
Mego

Czy to się skończyło? Czy jest zwycięzca?
Andrew Savinykh

Odpowiedzi:



5

Sześciokąt , 7 bajtów, Adnan , A005843

?{2'*!@

lub

 ? {
2 ' *
 ! @

Wypróbuj online!

Po prostu podwaja wejście (i zakłada wejście dodatnie). Kod jest (raz) po prostu wykonywany w kolejności odczytu. Kod używa trzech krawędzi pamięci A , B , C ze wskaźnikiem pamięci rozpoczynającym się, jak pokazano:

wprowadź opis zdjęcia tutaj

?    Read integer from STDIN into edge A.
{    Move memory pointer forwards to edge B.
2    Set edge B to 2.
'    Move memory pointers backwards to edge C.
*    Multiply edges A and B and store result in C.
!    Print result to STDOUT.
@    Terminate program.

Dokładnie to samo z tym, co miałem! :)
Leaky Nun

@KennyLau Myślę, że rozwiązanie jest unikalne, nawet do zamiany ról Bi C.
Martin Ender,

4

J, 7 bajtów, Cᴏɴᴏʀ O'Bʀɪᴇɴ

Kod

2+*:@p:

Wynik

   f =: 2+*:@p:
   f 0
6
   f 2
27

Spróbuj z J.js .

Jak to działa

Sekwencja A061725 jest zdefiniowana jako a (n) = p n ² + 2 , gdzie P n Jest to (n + 1) p liczbą pierwszą.

2+*:@p:  Monadic verb. Argument: n

    @    Atop; combine the verbs to the right and to the left, applying one after
         the other.
     p:  Compute the (n+1)th prime number.
  *:     Square it.
2+       Add 2 to the result.

Dobra robota! Kod rozumiesz lepiej niż ja XD
Conor O'Brien


4

JavaScript, 10 bajtów , użytkownik 81655 , A033999

Chyba mam to. Tak. Ten był naprawdę trudny. Podoba mi się to zgłoszenie, ponieważ w dużej mierze opiera się na priorytetach.


Jest to sekwencja A033999 :

a (n) = (-1) ^ n.

Źródło

t=>~t.z**t

Wyjaśnienie

Jeśli podzielisz ten kod zgodnie z pierwszeństwem operatora JavaScript , otrzymasz:

  1. .(priorytet 18 ) jest oceniany jako pierwszy i t.zpowróci undefined.
  2. ~(priorytet 15 ) próbuje rzutować undefined, co powoduje 0, i zwraca -1po bitowym nie.
  3. **(priorytet 14 ) powróci -1 ^ t, gdzie tjest nieparzysty lub parzysty , co powoduje, że -1lub 1.

Próbny

console.log(
    (t=>~t.z**t)(0),
    (t=>~t.z**t)(1),
);

Wypróbuj przed zakupem


Przyznam nagrodę w wysokości 100 powtórzeń za to fajne zgłoszenie gliny.


1
Masz rację, gratulacje! :)
user81655 14.04.16

Uważam się za dobrze zorientowanego w javascript, ale nie mam pojęcia, jak to działa.
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴ Dodałem wyjaśnienie. Mam nadzieję, że wystarczająco dobrze to wyjaśnia.
inserttusernamehere

Właśnie dlatego brutalna siła go nie znalazła. Użyłem transpilera z niewłaściwym pierwszeństwem operacji> _ <
Conor O'Brien

3

Element , 7 bajtów , PhiNotPi , A000042

_'[,1`}

Uwagi: Byłem wprowadzony w błąd przez }bardzo długo. Więc pasuje również [.

Wypróbuj online!


Jak to działa:

_'[,1`}
_        main_stack.push(input());
 '       control_stack.push(main_stack.pop());
  [      Object temp = control_stack.pop();
         for(int i=0;i<temp;i++){
   ,         Object a = main_stack.pop(); //is actually zero
             main_stack.push(a.toChars()[0]);
             main_stack.push(a);
    1        main_stack.push(1);
     `       System.out.println(main_stack.pop());
      }  }

Ładny! Próbowałem tego, ale nie mogłem wymyślić, jak to zrobić, ,aby przestać niszczyć rzeczy.
Pozew Fund Moniki z

Moją sztuczką było zrobienie ,$1, co dało mi pretekst do umieszczenia naprawdę mylącego ,operatora w moim programie.
PhiNotPi

Utknąłem u }dla tooooo długo :(
Dziurawy Nun


3

MATL , 9 bajtów, zlewka , A022844

Kod (z białym znakiem na końcu):

3x2xYP*k 

Wypróbuj online!

Znaleziono trzy pasujące skrypty, które napisałem:

Found match: A022844
info: "name": "Floor(n*Pi).",

Found match: A073934
info: "name": "Sum of terms in n-th row of triangle in A073932.",

Found match: A120068
info: "name": "Numbers n such that n-th prime + 1 is squarefree.",

Próbowałem zrobić pierwszy, który jest w zasadzie zrobiony z YP*k:

3x2x       # Push 3, delete it, push 2 and delete that too
    YP     # Push pi
      *    # Multiply by implicit input
       k   # Floor function


3

Java, 479 bajtów , Daniel M. , A000073

Kod:

import java.util.*;
public class A{

    public static int i=0;
    public boolean b;

    static A a = new A();

    public static void main(String[] args){
        int input = Integer.parseInt(args[0]);

        LinkedList<Integer> l = new LinkedList<>();
        l.add(1);
        l.add(0);
        l.add(0);

        for(int ix = 0; ix<=input; ix++)if(ix>2){
            l.add(0,l//d
            .get(1)+l.peekFirst()+     l.get(2));
        }

        System.out.println(input<2?0:l.pop()
              +(A.i        +(/*( 5*/ 0 )));
    }
}

Jeśli przegapisz nieujawnione postacie, zostaną one zastąpione spacjami.


1
Bardzo różni się od oryginalnego kodu, ale wciąż gratulacje!
Daniel M.


3

05AB1E , 4 bajty, Paul Picard , A001317

Kod:

$Fx^

Wypróbuj online!

Wyjaśnienie:

$      # Pushes 1 and input
 F     # Pops x, creates a for-loop in range(0, x)
  x    # Pops x, pushes x and 2x
   ^   # Bitwise XOR on the last two elements
       # Implicit, ends the for-loop
       # Implicit, nothing has printed so the last element is printed automatically

Sekwencja jest w zasadzie dwójkowym trójkątem Sierpińskiego:

f(0)=      1                    =1
f(1)=     1 1                   =3
f(2)=    1 0 1                  =5
f(3)=   1 1 1 1                 =15
f(4)=  1 0 0 0 1                =17

I tłumaczy się na wzór a (n) = a (n - 1) XOR (2 × a (n - 1))

Na szczęście pamiętam ten :)


1
I rzeczywiście jest dokładnie taki sam: D
Paul Picard



2

Reng v3.3 , 36 bajtów , Cᴏɴᴏʀ O'Bʀɪᴇɴ , A005449

iv:#+##->>)2%æ~¡#~
#>:3*1+*^##</div>

Wynik

a(1) = 2
a(3) = 15

Wyjaśnienie

Całkowicie zignorowałem wcześniej określone polecenia, z wyjątkiem tego, )że nie miałem wystarczająco dużo miejsca.

Naprawdę przydatne polecenia są tutaj:

iv      >>)2%æ~
 >:3*1+*^

Rozciągnięty do linii prostej:

i:3*1+*)2%æ~

Z wyjaśnieniem:

i:3*1+*)2%æ~ stack
i            [1]      takes input
 :           [1,1]    duplicates
  3          [1,1,3]  pushes 3
   *         [1,3]    multiplies
    1        [1,3,1]  pushes 1
     +       [1,4]    adds
      *      [4]      multiplies
       )     [4]      shifts (does nothing)
        2    [4,2]    pushes 2
         %   [2]      divides
          æ  []       prints
           ~ []       halts

Wzór jest następujący a(n) = n(3n+1)/2.


+1 za </div>, tag zamykający HTML, który jakoś pojawił się w kodzie Reng.
user48538 17.04.2016

@ zyabin101 Niewłaściwe miejsce?
Leaky Nun

Nie. Lubię znaleźć ukryte tajemnice w kodzie. :-P
user48538 17.04.2016

Cóż, to jest w kodzie gliniarza, więc ...
Leaky Nun

2

05AB1E, 3 bajty , Adnan , A000292

LLO

Wynik

a(9) = 165
a(10) = 220

Jak to działa

LLO Stack
L   [1,2,3,4,5,6,7,8,9]                         range
 L  [1,1,2,1,2,3,1,2,3,4,...,1,2,3,4,5,6,7,8,9] range of range
  O sum all of them

Odpowiednikiem matematycznym jest sum(sum(n))gdzie sumjest summation.


Dobra robota, to było dokładnie to samo rozwiązanie :)
Adnan,

2

Jolf, 11 bajtów, QPaysTaxes , A000005

aσ0xxdxxxxx

Dość proste: anapisz σ0(liczbę dzielników) x, a następnie umieść niepotrzebne rzeczy na końcu.

Wypróbuj online! Przycisk zestawu testów jest trochę zepsuty, ale nadal pokazuje prawidłowe wyniki.

(Mogłeś grać w golfa do dwóch bajtów! Po prostu dobrze σ0by to zrobił.)


1
Łał! Le builtins malutkie! +1
Adnan

1
Nie ma to jak to, co miałem, ale na pewno działa. Mój był tak długi, ponieważ nie wspomniałeś o znalezieniu dzielników w dokumentacji.
Pozew Fund Moniki w dniu

@QPaysTaxes Chyba muszę zaktualizować dokumenty: P A tak na poważnie, po prostu Ctrl + F kod źródłowy;)
Conor O'Brien

W moim pytaniu umieszczam mój oryginalny kod, jeśli chcesz go zobaczyć. Z perspektywy czasu powinienem był pokazać inne postacie: P
pozew fundacji Moniki

2

Python 2, 87 bajtów , Sp3000 , A083054

n=input()
_=int(3**.5*n)-3*int(n/3**.5)########################################
print _

Właściwie to nie takie trudne. Po prostu szukałem sekwencji spełniających ograniczenia, dopóki nie znalazłem takiej, którą można wygenerować w danym obszarze.



2

JavaScript (ES6), 119 bajtów, Cᴏɴᴏʀ O'Bʀɪᴇɴ , A178501

x=>(n="=>[[["|x|"##r(###f#n###;##")|n?Math.pow("#<1##].c####t.##pl##[####nc#"|10,"y([###(###(#]###)"|x-1|``):0|`#h####`

Jestem pewien, że rzeczywisty kod generuje trudniejszą sekwencję niż ta, ale tylko z dwoma wyjściami ta sekwencja OEIS jest prosta i pasuje do nich.

Bez wszystkich ignorowanych znaków algorytm jest po prostu x=>x?Math.pow(10,x-1):0.


2

05AB1E , 5 bajtów, Luis Mendo , A051696

Kod:

Ðms!¿

Wyjaśnienie:

Ð      # Triplicate input.
 m     # Power function, which calculates input ** input.
  s    # Swap two top elements of the stack.
   !   # Calculate the factorial of input.
    ¿  # Compute the greatest common divisor of the top two elements.

Więc w zasadzie oblicza to gcd (n !, n n ) , czyli A051696 .

Wypróbuj online! .









1

Pyth , 70 bajtów, FliiFe , A070650

Kod (z zaciemnioną wersją poniżej):

DhbI|qb"#"qb"#"R!1Iqb"#";=^Q6+""s ]%Q27  ;.qlY+Q1Ih+""Z##;.q)=Z+Z1;@YQ
DhbI|qb"#"qb"#"R!1Iqb"#"#####+""s####2###;##lY+Q1Ih+""Z#####)=Z+Z1;@YQ (obfuscated)

Zasadniczo robi to:

=^Q6%Q27

Oblicza a (n) = n 6 % 27 , czyli A070650 . Wyjaśnienie:

=^Q6       # Assign Q to Q ** 6
    %Q27   # Compute Q % 27
           # Implicit output

Wypróbuj tutaj


Ups, to nie to. Zaktualizowałem swoją odpowiedź inną
FliiFe

Zgodnie z zasadami jest to poprawne. Gratulacje !
FliiFe 10.04.16

Chyba mogę ci teraz powiedzieć sekwencję, to A007770 (indeksowane 0)
FliiFe 10.04.16

@FliiFe Och, nigdy bym nie zgadł, że: p
Adnan

Właściwie, jeśli znasz sekwencję, jest łatwa do nakrapiania, ale jeśli nie, staje się naprawdę trudna
FliiFe 10.04.2016

1

Python, 108, CAD97 , A005132

def a(n):
 if n == 0: return 0
 f=a(n-1)-n
 return f if f>0 and not f in(a(i)for i in range(n))else a(n-1)+n

Zaciemniony kod:

def a(n):
 ###n####0######n#0
 f=a#######
 return f #f#####a###### f ####a(##f###i#i###a####n##else a#######

Wyjścia:

>>> a(0)
0
>>> a(4)
2
>>> a(16)
8
>>> a(20)
42

Dokładnie to, co miałem. Spodziewałem się, że będzie to łatwe, szczerze mówiąc.
97 CAD
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.