Codifique palavras em seqüências inteiras

15

Introdução

Pareidolia : do grego antigo; παρα ( para , "simultâneo, ao lado") + εἴδωλον ( eídōlon , "imagem"). A tendência de interpretar um estímulo vago como algo conhecido pelo observador, como interpretar marcas em Marte como canais, ver formas nas nuvens ou ouvir mensagens ocultas na música. Fonte: Wikcionário .

Por exemplo:

insira a descrição da imagem aqui

Paralogia : do grego antigo; παρα ( para , “em simultâneo, ao lado de”) + λόγος ( lógos “discurso, discurso, palavra, ...”). A tendência de perceber palavras em seqüências arbitrárias de caracteres, como em programas de código de golfe. Fonte: sim, eu inventei isso (na verdade, a palavra significa outra coisa , como apontado por @Martin).

Por exemplo:

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

Desafio

Escreva um programa que use um número inteiro positivo como entrada, produza um número inteiro como saída e inclua uma palavra em inglês como parte do código. O relacionamento de entrada e saída deve corresponder a uma sequência inteira que pode ser encontrada no OEIS .

Regras

  • Apenas palavras desta lista são permitidas. Isso é admitidamente arbitrário, mas é essencial que todos concordemos com quais palavras são aceitas; e, nesse sentido, esta lista é provavelmente tão boa quanto qualquer outra.
  • As palavras precisam ser formadas concatenando pelo menos dois nomes ou instruções de função. Se o seu idioma, por exemplo, tem uma função chamada, correlationele não pode ser usado como está. A concatenação deve ser rigorosa: nenhum outro símbolo deve aparecer entre as partes da palavra. Por exemplo, bro~kennão contaria como uma palavra.
  • O caso não é importante: ambos valide vaLiDsão aceitáveis.
  • Palavras dentro de strings não contam. As letras que compõem a palavra precisam ser funções ou declarações no idioma de escolha, ou seja, algo que é realmente executado . Por exemplo, o código a seguir não seria permitido:, 'deoxyribonucleic'~1onde '...'é uma string, ~descarta o conteúdo anterior e 1apenas imprime o número 1.
  • Toda letra da palavra deve ser necessária . Isso significa que a remoção de uma única letra da palavra deve alterar a relação entrada-saída. Isso inclui a saída de uma sequência diferente ou a saída de qualquer outra coisa, ou a produção de nenhuma saída ou a ocorrência de um erro.
  • Qualquer número inteiro positivo deve ser aceitável como entrada e produzir uma saída, exceto para restrições de tipo de dados ou memória.
  • As saídas correspondentes a entradas 1, 2, 3, ... deve corresponder a uma sequência em que aparecem OEIS . Nenhuma outra saída deve ser produzida; apenas um número inteiro, possivelmente com espaço em branco à direita ou à esquerda.
  • Entrada e saída podem ser argumentos de função ou stdin / stdout.

Ponto

A pontuação é calculada como o comprimento total do código menos o dobro da palavra mais longa, em caracteres. Ou equivalente, número de caracteres que não estão na palavra mais longa menos o comprimento da palavra mais longa.

Menor pontuação ganha.

Exemplos

Considere uma linguagem postfix imaginária que possua estas funções c:: insira um número; At: quadrado de computação; $: adicione 1.

cAtseria um programa válido (seus corresponde saída para a seqüência 1, 4, 9, ..., que é A000290 ), e teria pontuação -3.

cAt$também seria válido (seqüência 2, 5, 10, ..., que é A002522 ), com pontuação de -2.

c$At não seria válido, porque a única palavra aqui é "At" e é produzida por uma única função ou instrução.

Luis Mendo
fonte
Eu acho que este deve ser um concurso de popularidade.
MCMastery 31/01
5
@MCMastery Isso não seria um bom concurso de popularidade. (A maioria dos desafios não.)
Alex A.
Isto é essencialmente limitado a idiomas de golfe.
Ericw31415

Respostas:

11

CJam, -20

COUNTErREVOLUTIONARIES],

Emite o enésimo elemento na sequência 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

A remoção de um caractere da palavra resulta em uma sequência completamente diferente A010860 . Existe uma relação bastante interessante entre as duas seqüências: em todo índice n, A010860(n)é coprime para A010861(n)! Deve haver alguma razão matemática profunda por trás disso.

Experimente aqui .

lirtosiast
fonte
1
Eu descobri outra relação matemática curiosa: se você subtrair a sequência A010860 da sequência A010861, o resultado sempre será igual a 1 em cada índice! Fascinating ...
Maçaneta da porta
Essa é vai ser difícil de bater :-)
Luis Mendo
Oh, maiúsculas .. Grande ideia :)
Martin Ender
10

CJam, -5

limpet;

A010051 : imprime 0para números compostos e 1para números primos.

Levei uma eternidade para encontrar algo que tivesse alguns pontos e que quebraria com a remoção de qualquer carta. A remoção de qualquer coisa, exceto mgera um erro, e a remoção mtransforma o programa na função de identidade.

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.

Experimente online.

Martin Ender
fonte
Bela escolha de sequência! :-)
Luis Mendo 31/01
8

05AB1E , -4 -11

Código, imprime A010869 (constante 30):

ASYNcHRonouSlyI)g

Código anterior:

DoGS

Explicação:

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 a sequência A010879 .

Adnan
fonte
Essa é a sequência mais interessante até agora!
Luis Mendo 30/01
2
Riscado
6

MATL , -6

INhale

Experimente online!

Produz seqüência 1, 2, 3, ... ( A000027 )

A remoção de qualquer letra altera a saída ou deixa o programa esperando uma segunda entrada que não existe ou produz um erro.

Explicação

O programa simplesmente inala um número e, depois de algumas brincadeiras, o expira inalterado.

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
Luis Mendo
fonte
5

Pitão, 1

*QhSatan0000
   Satan

Explicação?

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

Sequência A000027

Mensagens subliminares? Nunca.

Experimente aqui.

Azul
fonte
4

Japt, -6

NuLLIFIED)r^

Saídas A004453 : nimsum de N e 12 (N XOR 12). Teste online!

Nota: a sequência OEIS é indexada em 0, portanto, uma entrada de 0 resultará no primeiro item.

Como 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.
ETHproductions
fonte
Agradável! Alguma explicação, quando você pode?
Luis Mendo
@LuisMendo Claro, pronto. É incrivelmente simples, mas ainda não encontrei nada mais complexo.
ETHproductions
@LuisMendo Atualizado. Este é um pouco mais interessante.
ETHproductions
De fato! Mas, aparentemente, remover o Yproduz a mesma saída? (a menos que eu estou fazendo algo errado)
Luis Mendo
@Luis Isso é melhor?
ETHproductions
3

Headsecks , score -4

exit

Isso é mapeado para o programa Brainfuck ,+-., que lê um único caractere e o imprime, calculando A000030 . Remover qualquer personagem obviamente o quebrará.

Há também marshal( ,-<>+-.), que é efetivamente ,-., mas isso não corresponde a nenhuma sequência OEIS.

Lynn
fonte
2

código de máquina x86, pontuação -4

Hexdump do código:

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

Ou, na página de código 437 :

SQUAShiestQXâ─¶├

Código de montagem:

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

Uma função que adiciona 1 ao seu argumento .

A remoção o Atransforma em uma função de identidade. A remoção de qualquer outro byte atrapalha a pilha, causando uma falha ou mau comportamento da função de chamada.

Tenho certeza de que é possível melhorar a pontuação, mas isso pode depender da interpretação dos requisitos. Por exemplo, o uso da palavra SQUEAMIShnessfornece um programa que aumenta e diminui o ebpregistro. A remoção de qualquer um desses causa uma falha? Um programa de teste mais simples não usa o ebpregistro, então talvez não ... Para evitar essa dúvida, usei uma palavra mais curta.

anatolyg
fonte
1

Ruby, pontuação 3

puts gets.partition''

Isso calcula a sequência de identidade A000027 . A saída é cercada por algum espaço em branco; Espero que esteja tudo bem.

Lynn
fonte
Sim, o espaço em branco é bom
Luis Mendo
1

Matemática ++, pontuação -2

?*sine

Implementa o A000004 .

SuperJedi224
fonte