Palabras de código en secuencias enteras


15

Introducción

Pareidolia : del griego antiguo; παρα ( para , "concurrente, junto") + εἴδωλον ( eídōlon , "imagen"). La tendencia a interpretar un estímulo vago como algo conocido por el observador, como interpretar las marcas en Marte como canales, ver formas en las nubes o escuchar mensajes ocultos en la música. Fuente: Wiktionary .

Por ejemplo:

ingrese la descripción de la imagen aquí

Paralogia : del griego antiguo; παρα ( para , "concurrente, junto") + λόγος ( lógos , "discurso, oración, palabra, ..."). La tendencia a percibir palabras en secuencias arbitrarias de caracteres, como en los programas de golf de código. Fuente: sí, lo inventé (en realidad la palabra significa algo más , como lo señaló @ Martin).

Por ejemplo:

    df4$/H)hEy_^p2\
    jtK2$)look|x1$

Desafío

Escriba un programa que tome un número entero positivo como entrada, produzca un número entero como salida e incluya una palabra en inglés como parte del código. La relación entrada-salida debe corresponder a una secuencia de enteros que se puede encontrar en OEIS .

Reglas

  • Solo se permiten palabras de esta lista . Esto es ciertamente arbitrario, pero es esencial que todos estemos de acuerdo en qué palabras se aceptan; y en ese sentido, esta lista es probablemente tan buena como cualquier otra.
  • Las palabras deben formarse concatenando al menos dos nombres de funciones o declaraciones. Si su idioma, por ejemplo, tiene una función llamada correlation, no se puede usar como está. La concatenación debe ser estricta: no deben aparecer otros símbolos entre las partes de la palabra. Por ejemplo, bro~kenno contaría como una palabra.
  • El caso no es importante: ambos validy vaLiDson aceptables.
  • Las palabras dentro de las cadenas no cuentan. Las letras que componen la palabra deben ser funciones o declaraciones en el idioma de elección, es decir, algo que realmente se ejecuta . Por ejemplo, no se permitiría el siguiente código:, 'deoxyribonucleic'~1donde '...'es una cadena, ~descarta el contenido anterior y 1solo imprime el número 1.
  • Cada letra de la palabra debería ser necesaria . Esto significa que eliminar una sola letra de la palabra debería cambiar la relación entrada-salida. Eso incluye generar una secuencia diferente, o emitir cualquier otra cosa, o no producir ninguna salida, o causar un error.
  • Cualquier número entero positivo debe ser aceptable como entrada, y debe producir una salida, excepto por el tipo de datos o las restricciones de memoria.
  • Las salidas correspondientes a los insumos 1, 2, 3, ... deben corresponder a una secuencia que aparece en OEIS . No se debe producir ninguna otra salida; solo un número entero, posiblemente con espacios en blanco al final o al final.
  • La entrada y la salida pueden ser argumentos de función o stdin / stdout.

Puntuación

La puntuación se calcula como la longitud total del código menos el doble de la longitud de la palabra más larga, en caracteres. O, de manera equivalente, el número de caracteres que no están en la palabra más larga menos la longitud de la palabra más larga.

La puntuación más baja gana.

Ejemplos

Considere un lenguaje postfix imaginario que tenga estas funciones c:: ingrese un número; At: calcular cuadrado; $: agregar 1.

cAtsería un programa válido (sus corresponde a la secuencia de salida 1, 4, 9, ..., que es A000290 ), y tendría puntuación de -3.

cAt$también sería válido (secuencia 2, 5, 10, ..., que es A002522 ), la puntuación de -2.

c$At no sería válido, porque la única palabra aquí es "At" y es producida por una sola función o declaración.


Creo que esto debería ser un concurso de popularidad.
MCMastery

55
@MCMastery Esto no sería un buen concurso de popularidad. (La mayoría de los desafíos no lo harían)
Alex A.

Sin embargo, esto se limita esencialmente a los idiomas de golf.
ericw31415

Respuestas:


11

CJam, -20

COUNTErREVOLUTIONARIES],

Emite el enésimo elemento en la secuencia A010861 .

COUNTE                      e# push values of six preinitialized variables
      r                     e# read a token of input
       REVOLUTIONARIES      e# push values of 15 other preinitialized variables
                      ]     e# wrap whole stack in array
                       ,    e# get length

Eliminar un carácter de la palabra da como resultado una secuencia completamente diferente A010860 . Hay una relación bastante interesante entre las dos secuencias: en cada índice n, ¡ A010860(n)es coprime para A010861(n)! Debe haber alguna razón matemática profunda detrás de esto.

Pruébalo aquí .


1
He descubierto otra curiosa relación matemática: si restas la secuencia A010860 de la secuencia A010861, ¡el resultado siempre es igual a 1 en cada índice! Fascinante ...
Pomo de la puerta

Será difícil de superar :-)
Luis Mendo

Ah, mayúscula ... Gran idea :)
Martin Ender

10

CJam, -5

limpet;

A010051 : imprime 0para números compuestos y 1para números primos.

Me llevó una eternidad encontrar algo que anotara algunos puntos y se rompería al eliminar cualquier letra. Eliminar cualquier cosa, excepto marroja un error, y eliminar mconvierte el programa en la función de identidad.

li  e# Read input and convert to integer.
mp  e# Check for primality.
et  e# Get current datetime as a list.
;   e# Discard the datetime again.

Pruébalo en línea.


Hermosa elección de secuencia! :-)
Luis Mendo

8

05AB1E , -4 -11

Código, imprime A010869 (constante 30):

ASYNcHRonouSlyI)g

Código anterior:

DoGS

Explicación:

D     # Duplicate top of the stack
 o    # Pop a, push 2**a
  G   # For N in range(1, 2**a):
   S  # Push all chars seperate from the top of the stack

Imprime la secuencia A010879 .


¡Esa es la secuencia más interesante hasta ahora!
Luis Mendo

2
Tachado -4 sigue siendo regular -4; (
ETHproductions

6

MATL , −6

INhale

Pruébalo en línea!

Produce secuencia 1, 2, 3, ... ( A000027 )

La eliminación de cualquier letra cambia la salida, o deja el programa esperando una segunda entrada que no existe, o produce un error.

Explicación

El programa simplemente inhala un número y, después de tocar un poco, lo exhala sin cambios.

I    % produces number 3
N    % number of elements in stack: produces number 1
h    % concatenates horizontally into array [3, 1]
a    % true if any element is nonzero. So it gives true (or equivalently 1)
l    % produces number 1
e    % triggers implicit input and reshapes into a 1x1 array. So it leaves input unchanged

5

Pyth, 1

*QhSatan0000
   Satan

¿Explicación?

       n00   - 0 != 0 (0) 
      a   0  - abs(^-0) (0, Required so it doesn't print out a random 0)
     t       - ^-1 (-1, required or will output 0 all the time)
    a      0 - abs(^-0) (1, Required so counts in right direction, would also print out a random 0)
   S         - 1-indexed range ([1], required so next command works properly)
  h          - Get the head (if `S` missed, will out 2)
*Q           - Multiply by Q

1, 2, 3, 4, 5 ...

Secuencia A000027

¿Mensajes subliminales? Nunca.

Pruébalo aquí.


4

Japt, -6

NuLLIFIED)r^

Salidas A004453 : nimsum de N y 12 (N XOR 12). ¡Pruébalo en línea!

Nota: la secuencia OEIS está indexada en 0, por lo que una entrada de 0 dará como resultado el primer elemento.

Cómo funciona

        // Implicit: N = array of inputs
Nu      // Push the following things to N:
LLIF    // 100, 100, 64, 15,
IED     // 64 again, 14, and 13.
)r^     // Reduce by XORing (using ^ between each pair)
        // The reduction goes as follows: U, U^100, U, U^64, U^79, U^15, U^1, U^12.

¡Agradable! Alguna explicación, cuando puedes?
Luis Mendo

@LuisMendo Claro, listo. Es increíblemente simple, pero aún no he encontrado nada más complejo.
ETHproductions

@LuisMendo actualizado. Este es un poco más interesante.
ETHproductions

¡En efecto! ¿Pero aparentemente eliminar el Yproduce la misma salida? (a menos que esté haciendo algo mal)
Luis Mendo

@Luis ¿Es esto mejor?
ETHproductions

3

Headsecks , puntuación −4

exit

Esto se asigna al programa Brainfuck ,+-., que lee un solo personaje y lo imprime, calculando A000030 . Eliminar cualquier personaje obviamente lo romperá.

También hay marshal( ,-<>+-.), que es efectivo ,-., pero que no corresponde a ninguna secuencia OEIS.


2

Código máquina x86, puntaje -4

Hexdump del código:

53 51 55 41 53 68 69 65 73 74 51 58 83 c4 14 c3

O, en la página de códigos 437 :

SQUAShiestQXâ─¶├

Código de montaje:

push ebx
push ecx
push ebp
inc ecx
push ebx
push 0x74736569
push ecx
pop eax
add esp, 0x14
ret

Una función que agrega 1 a su argumento .

Eliminarlo lo Aconvierte en una función de identidad. Eliminar cualquier otro byte desordena la pila, causando un bloqueo o un mal comportamiento de la función de llamada.

Estoy bastante seguro de que es posible mejorar la puntuación, pero puede depender de la interpretación de los requisitos. Por ejemplo, usar la palabra SQUEAMIShnessda un programa, que aumenta y luego disminuye el ebpregistro. ¿Eliminar alguno de estos causa un bloqueo? Un programa de prueba más simple no usa el ebpregistro, así que tal vez no lo hace ... Para evitar esta duda, usé una palabra más corta.



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.