O desafio
Um simples desafio "espião contra espião".
Escreva um programa com as seguintes especificações:
- O programa pode ser escrito em qualquer idioma, mas não deve exceder 512 caracteres (conforme representado em um bloco de código neste site).
- O programa deve aceitar 5 números inteiros de 32 bits assinados como entradas. Pode assumir a forma de uma função que aceita 5 argumentos, uma função que aceita uma única matriz de 5 elementos ou um programa completo que lê 5 números inteiros de qualquer entrada padrão.
- O programa deve gerar um número inteiro de 32 bits assinado.
- O programa deve retornar 1 se e somente se as cinco entradas, interpretadas como uma sequência, corresponderem a uma sequência aritmética específica da escolha do programador, chamada de "chave". A função deve retornar 0 para todas as outras entradas.
Uma sequência aritmética tem a propriedade de que cada elemento sucessivo é igual ao seu predecessor mais alguma constante fixa a
.
Por exemplo, 25 30 35 40 45
é uma sequência aritmética, pois cada elemento da sequência é igual ao seu antecessor mais 5. Da mesma forma, 17 10 3 -4 -11
é uma sequência aritmética, pois cada elemento é igual ao seu antecessor mais -7.
As sequências 1 2 4 8 16
e 3 9 15 6 12
não são sequências aritméticas.
Uma chave pode ser qualquer sequência aritmética de sua escolha, com a única restrição de que sequências que envolvem estouro de número inteiro não sejam permitidas. Ou seja, a sequência deve aumentar estritamente, diminuir estritamente ou ter todos os elementos iguais.
Como exemplo, suponha que você escolha a chave 98021 93880 89739 85598 81457
. Seu programa deve retornar 1 se as entradas (em sequência) corresponderem a esses cinco números e 0, caso contrário.
Observe que os meios para proteger a chave devem ter seu próprio design inovador. Além disso, soluções probabilísticas que podem retornar falsos positivos com qualquer probabilidade diferente de zero não são permitidas. Em particular, não use hashes criptográficos padrão, incluindo funções de biblioteca para hashes criptográficos padrão.
A pontuação
Os envios mais curtos e sem quebra por contagem de caracteres serão declarados vencedores.
Se houver alguma confusão, não hesite em perguntar ou comentar.
O Contra-Desafio
Todos os leitores, incluindo aqueles que enviaram seus próprios programas, são incentivados a "quebrar" as inscrições. Um envio é quebrado quando sua chave é postada na seção de comentários associados. Se um envio persistir por 72 horas sem ser modificado ou quebrado, será considerado "seguro" e qualquer sucesso subsequente no cracking será ignorado por causa do concurso.
Consulte "Isenção de responsabilidade" abaixo para obter detalhes sobre a política atualizada de pontuação de cracking.
Os envios rachados são eliminados da disputa (desde que não sejam "seguros"). Eles não devem ser editados. Se um leitor deseja enviar um novo programa, ele deve fazê-lo em uma resposta separada.
Os crackers com maior pontuação serão declarados vencedores, juntamente com os desenvolvedores dos programas vencedores.
Por favor, não decifre sua própria submissão.
Boa sorte. :)
Entre os melhores
Penúltima classificação (pendente de segurança da inscrição de Dennis 'CJam 49).
Cacifos seguros
- CJam 49, Dennis
- CJam 62, Dennis a salvo
- CJam 91, Dennis a salvo
- Python 156, Maarten Baert em segurança
- Perl 256, seguro chilemagic
- Java 468, Geobits seguro
Bolachas Imparáveis
- Peter Taylor [Ruby 130, Java 342, Mathematica 146 *, Mathematica 72 *, CJam 37]
- Dennis [Pyth 13, Python 86 *, Lua 105 *, GolfScript 116, C 239 *]
- Martin Büttner [Javascript 125, Python 128 *, Ruby 175 *, Ruby 249 *]
- Tyilo [C 459, Javascript 958 *]
- freddieknets [Mathematica 67 *]
- Ilmari Karonen [Python27 182 *]
- nitroso [C 212 *]
* envio não conforme
Isenção de responsabilidade (atualizado às 23h15 EST, 26 de agosto)
Com os problemas de pontuação finalmente atingindo a massa crítica (dado que dois terços dos envios rachados ainda não são compatíveis), classifiquei os principais crackers em termos de número de envios rachados (primário) e número total de caracteres em envios rachados compatíveis (secundário).
Como antes, os envios exatos ruíram, a duração dos envios e seu status de conformidade / não conformidade são todos marcados para que os leitores possam inferir suas próprias classificações se considerarem injustas as novas classificações oficiais.
Peço desculpas por alterar as regras tão tarde no jogo.