Encuentra el programa que imprime esta secuencia de enteros (hilo de ladrones)


20

Este es el hilo de los ladrones. El hilo de la policía va aquí .

En el hilo de la policía, la tarea consistía en escribir un programa / función que tomara un número entero positivo (o no negativo) y generara / devuelve otro número (no necesariamente entero). La tarea de los ladrones es descifrar el código que los policías usaron para producir esta salida.

El código descifrado no tiene que ser idéntico, siempre que tenga la misma longitud y los caracteres revelados estén en las posiciones correctas. El idioma también debe ser el mismo (los números de versión pueden ser diferentes). La salida, por supuesto, debe ser idéntica.

No-ops se pueden utilizar en la solución de ladrón.

El ganador del hilo de ladrones será el usuario que haya descifrado la mayor cantidad de envíos antes del 7 de mayo de 2016. Si hay un empate, el usuario que haya descifrado los envíos con el código combinado más largo ganará.

La presentación debe tener el siguiente formato:

Idioma, nn caracteres (incluido el enlace para responder), nombre de usuario del policía

Código:

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

Salida

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

Explicación opcional y comentarios.


Estas reglas aquí son diferentes de las policías en las que dice: Sin embargo, cualquier código fuente propuesto que produzca el mismo conjunto de resultados también cuenta como válido, siempre que también se encuentre en OEIS.
flawr

¿Qué sucede si los ejemplos coinciden con múltiples series OEIS? Esto acaba de pasar con Adnan y conmigo
FliiFe

@FliiFe Según las reglas actuales, cualquier código que coincida con el código del policía y genere una secuencia OEIS cuyos valores coincidan con los ejemplos del policía es un crack válido.
Mego

¿Ha terminado esto? ¿Hay un ganador?
Andrew Savinykh

Respuestas:



5

Hexagonía , 7 bytes, Adnan , A005843

?{2'*!@

o

 ? {
2 ' *
 ! @

Pruébalo en línea!

Simplemente duplica la entrada (y supone una entrada positiva). El código se ejecuta (por una vez) simplemente en orden de lectura. El código usa tres bordes de memoria A , B , C con el puntero de memoria comenzando como se muestra:

ingrese la descripción de la imagen aquí

?    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.

¡Exactamente lo mismo que tenía! :)
Leaky Nun

@KennyLau Creo que la solución es única para intercambiar los roles de By C.
Martin Ender

4

J, 7 bytes, Cᴏɴᴏʀ O'Bʀɪᴇɴ

Código

2+*:@p:

Salida

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

Prueba con J.js .

Cómo funciona

Secuencia A061725 se define como a (n): = p n ² + 2 , donde p n es el (n + 1) ésimo número primo.

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.

¡Buen trabajo! Entiendes el código más que yo XD
Conor O'Brien


4

JavaScript, 10 bytes , usuario81655 , A033999

Creo que lo tengo. Si.Este fue realmente difícil. Me gusta la presentación porque se basa en gran medida en las precedentes.


Es la secuencia A033999. :

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

Fuente

t=>~t.z**t

Explicación

Si divide este código de acuerdo con las precedentes del operador de JavaScript, obtendrá:

  1. .(precedencia 18 ) se evalúa primero y t.zregresará undefined.
  2. ~(precedencia 15 ) intenta lanzar undefined, lo que resulta en 0, y regresa -1después de bit a bit no.
  3. **(precedencia 14 ) regresará -1 ^ t, donde tsea impar o par , resultando en -1o 1.

Manifestación

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

Probar antes de comprar


Otorgaré una recompensa de 100 repeticiones por esta genial presentación de policía.


1
Tienes razón, felicidades! :)
user81655

Me considero muy versado en javascript, pero no tengo idea de cómo funciona.
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴ He agregado una explicación. Ojalá lo explique lo suficientemente bien.
insertusernamehere

Es por eso que la fuerza bruta no lo encontró. Utilicé un transpiler con una prioridad de operación incorrecta> _ <
Conor O'Brien

3

Elemento , 7 bytes , PhiNotPi , A000042

_'[,1`}

Notas: Fui engañado por el }por mucho tiempo. Entonces también coincide[ .

Pruébalo en línea!


Cómo funciona:

_'[,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());
      }  }

¡Agradable! Estaba intentando esto, pero no pude encontrar la manera ,de dejar de romper cosas.
Financia la demanda de Mónica el

Mi truco fue hacer ,$para producir un 1, lo que me dio una excusa para poner el ,operador realmente confuso en mi programa.
PhiNotPi

Estuve atrapado en el }por demasiado tiempo :(
Leaky Nun


3

MATL , 9 bytes, vaso de precipitados , A022844

Código (con un espacio en blanco al final):

3x2xYP*k 

Pruébalo en línea!

Encontré las siguientes tres coincidencias con un script que escribí:

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.",

Traté de hacer el primero, que básicamente se hace con 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 bytes , Daniel M. , A000073

Código:

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

Si extrañas personajes no revelados, se reemplazan con espacios.


1
Muy diferente del código original, pero aún así, ¡felicidades!
Daniel M.


3

05AB1E , 4 bytes, Paul Picard , A001317

Código:

$Fx^

Pruébalo en línea!

Explicación:

$      # 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

La secuencia básicamente es un triángulo binario de Sierpinski:

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

Y se traduce en la fórmula a (n) = a (n - 1) XOR (2 × a (n - 1))

Por suerte, me acordé de este :)


1
Y es exactamente el mismo, de hecho: D
Paul Picard



2

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

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

Salida

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

Explicación

Ignoré por completo los comandos preespecificados, excepto el ) porque no tenía suficiente espacio.

Los comandos realmente útiles están aquí:

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

Estirado en línea recta:

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

Con explicación:

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

La formula es a(n) = n(3n+1)/2.


+1 para </div>, una etiqueta de cierre HTML que de alguna manera apareció en el código Reng.
user48538

@ zyabin101 ¿Lugar equivocado?
Leaky Nun

No Simplemente me gusta encontrar secretos ocultos en el código. :-PAG
user48538

Bueno, esto está en el código del policía, así que ...
Leaky Nun

2

05AB1E, 3 bytes , Adnan , A000292

LLO

Salida

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

Cómo funciona

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

El equivalente matemático es sum(sum(n)), donde sumestá summation.


Buen trabajo, esa fue exactamente la misma solución :)
Adnan

2

Jolf, 11 bytes, QPaysTaxes , A000005

aσ0xxdxxxxx

Suficientemente simple: aescribe el σ0(número de divisores de) x, luego coloca cosas inútiles al final.

Pruébalo en línea! El botón del conjunto de pruebas está un poco roto, pero aún muestra los resultados adecuados.

(¡Podrías haberlo reducido a dos bytes! Lo σ0hubiera hecho muy bien).


1
¡Guauu! Le Builtins Minúsculas! +1
Adnan

1
Esto no se parece en nada a lo que tenía, pero seguro que funciona. La mía fue tan larga porque no mencionaste encontrar divisores en los documentos.
Financia la demanda de Mónica el

@QPaysTaxes Supongo que necesito actualizar los documentos: P Pero en serio, solo Ctrl + F el código fuente;)
Conor O'Brien

Puse mi código original en mi pregunta si quieres verlo. En retrospectiva, debería haber mostrado diferentes personajes: P
Financia la demanda de Mónica el

2

Python 2, 87 bytes , Sp3000 , A083054

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

No es tan difícil, en realidad. Solo busqué secuencias que cumplieran con las restricciones hasta que encontré una que pudiera generarse en el espacio dado.



2

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

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

Estoy seguro de que el código real genera una secuencia más complicada que esta, pero con solo las dos salidas, esta secuencia OEIS es simple y coincide con ellas.

Sin todos los caracteres ignorados, el algoritmo es justo x=>x?Math.pow(10,x-1):0.


2

05AB1E , 5 bytes, Luis Mendo , A051696

Código:

Ðms!¿

Explicación:

Ð      # 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.

Entonces, básicamente esto calcula mcd (n !, n n ) , que es A051696 .

Pruébalo en línea! .









1

Pyth , 70 bytes, FliiFe , A070650

Código (con la versión ofuscada a continuación):

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)

Esto básicamente hace:

=^Q6%Q27

Calcula a (n) = n 6 % 27 , que es A070650 . Explicación:

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

Pruébalo aquí


Vaya, esa no es la indicada.
Actualicé

De las reglas, esto es válido. ¡Felicidades!
FliiFe

Supongo que puedo decirte la secuencia ahora, es A007770 (índice 0)
FliiFe

@FliiFe Oh, nunca lo habría adivinado: p
Adnan

En realidad, si conoces la secuencia, es fácilmente detectable, pero si no lo sabes, se vuelve realmente difícil
FliiFe

1

Python, 108, 97 CAD , 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

Código ofuscado:

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

Salidas:

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

Exactamente lo que tenía. Esperaba que fuera fácil, sinceramente.
CAD97
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.