Eu queria enganar um amigo, dando-lhe uma solução que quase funcionou, mas ficou cada vez mais desleixada.
Crie um programa que, quando executado, produzirá o programa, mas com um caractere desativado. Um caractere pode ser adicionado, removido ou ambos (um caractere é alterado). Mas apenas um personagem.
Sua pontuação será (length of your program) / floor(sqrt(number of times the program almost quines))
(Onde / 0
fica o infinito)
number of times the program almost quines
é quantas vezes seu programa é executado enquanto altera apenas um caractere no stdout. Seu programa pode não aceitar entrada. Também pode não imprimir um programa que já foi impresso.
Você também não pode adicionar um caractere que você adicionou anteriormente anteriormente ou remover um caractere do mesmo índice. Por exemplo, se você adicionou 1
antes e adicionou 1
novamente, é aí que as number of times the program almost quines
paradas. Se você remover o primeiro caractere, não poderá remover o primeiro caractere novamente. Se você alterou o terceiro caractere para a 2
, não poderá adicionar 2
ou remover o terceiro caractere.
Respostas:
CJam, 0.000884
Aqui, denota o caractere não imprimível com o ponto de código 128. Experimente online.
Idéia
Essa abordagem anexa todos os caracteres UCS (especificação original) com pontos de código entre U + 4000000 e U + 7FFFFFFF na cadeia inicialmente vazia que segue o bloco de código.
Escolhemos UTF-8 , que codifica cada um desses caracteres usando uma sequência de 6 bytes da seguinte maneira:
Assim, podemos codificar o enésimo caractere nesse intervalo, computando seus 6 dígitos menos significativos na base 64 e adicionando 252 aos mais significativos e 128 aos demais.
Pontuação
Existem
2 ** 31 = 2,147,483,648
6 bytes de caracteres UTF-8 e o comprimento do código original é 39, portanto a pontuação é39 / floor(2 ** 15.5) = 39 / 46340 = 0.0008416055243849806
.Como funciona
fonte
CJam, 46 bytes, 65504 add, 65505 del, Pontuação 0.127424
Teste aqui.
A forma básica é uma solução CJam generalizada padrão. Para "quase quine", há um comentário
e#
no final do bloco do quine, onde posso adicionar caracteres livremente sem afetar o código. Observe que o comentário contém inicialmente um único espaço.O programa continua adicionando caracteres à frente do comentário, iniciando
!
e depois na ordem do valor ASCII. Os códigos de caracteres do CJam são agrupados após 2 16, portanto, em algum momento, isso adicionará um byte nulo. Quando isso acontece, o programa começa a remover bytes do final do comentário (de modo que a posição do caractere removido seja sempre diferente) até o comentário ficar vazio.fonte
CJam, 19 bytes, 65536 add, 0 del, Pontuação 0.074219
Mais simples é melhor.
fonte