Agora com BONUS para posicionamento em tempo de execução.
Escreva um programa para preencher uma caixa de texto com os identificadores usados no seu programa, mantendo-o pequeno. Com todos os identificadores que você usou (excluindo os que você criou) em seu programa, preencha uma caixa de 12x6 com o maior número possível. Você ganha pontos extras por identificadores que cruzam (estilo de palavras cruzadas), mas eles não podem se unir de ponta a ponta.
Resultado
Seu programa deve imprimir (para stdout) uma caixa de 12x6 caracteres com seus identificadores compactados e uma #
borda. A caixa deve ter colunas rotuladas com a letra AL e as linhas 1-6 (espaçadas como no exemplo abaixo). Em seguida, imprima uma linha para cada identificador usado. Cada linha terá a localização da primeira letra, o próprio identificador e a pontuação. A pontuação é igual ao número de letras no identificador com um possível '+ bônus' adicionado. O identificador recebe um bônus de 5 pontos por cada letra compartilhada com um identificador de cruzamento. A linha final informa 'TOTAL:' e a soma das pontuações do identificador. Um exemplo de saída para um possível programa Python seria assim:
ABCDEFGHIJKL
##############
1 # pinsert #
2 # o #
3 # print #
4 # not #
5 # #
6 #import #
##############
C1 pop 3+5
D1 insert 6
C3 print 5+10
E3 in 2+10
E4 not 3+5
A6 import 6
TOTAL: 55
Notas:
- Os identificadores podem ser desanexados (como
import
acima). - Você não pode participar
pop
e seprint
alinhar compoprint
. - A string
in
dentroinsert
não pode ser usada. As palavras de junção devem ser ortogonais. - Os identificadores podem ser colocados próximos um do outro (como
pop
einsert
acima).
Sua resposta deve incluir a saída do programa com o código-fonte e um título que consiste no nome do idioma e sua pontuação.
Ponto
Sua pontuação para o desafio será a pontuação do quebra-cabeça ao quadrado, dividida pelo tamanho do seu código-fonte (em bytes). Por exemplo: o quebra-cabeça acima com um programa de 300 bytes teria pontuação 55*55/300 = 10.08
. Maior pontuação ganha.
Regras
- Você pode usar qualquer identificador no seu programa que não seja definido por você. Palavras-chave, nomes de classes, nomes de métodos, nomes de bibliotecas e nomes de funções internas são exemplos de identificadores elegíveis.
- EDITADO: Você pode usar apenas bibliotecas padrão incluídas na versão mínima do idioma. Pacotes de idiomas estendidos e o uso de bibliotecas externas (agora) são proibidos. A enorme variedade de bibliotecas com extensas listas de identificadores desequilibraria esse desafio. Se você não tiver certeza de como isso funciona com o seu idioma, deixe uma pergunta nos comentários.
- Os identificadores devem consistir apenas em [a-zA-Z_] caracteres e ter pelo menos 2 caracteres.
- Você pode usar cada identificador apenas uma vez no quebra-cabeça.
- Identificadores só podem ser usados da esquerda para a direita ou para baixo.
Bônus dinâmico!
Se o seu código determinar onde colocar os identificadores em tempo de execução, o bônus de letras compartilhadas será 20 em vez de 5. Você pode listar quais identificadores serão usados, mas seu código deve decidir onde na caixa os colocará. Seu código também deve calcular e imprimir a lista de pontuação. Se seus canais dependerem da ordem da lista de identificadores, emparelhamentos codificados ou outros atalhos de canais não dinâmicos, você não estará qualificado para o bônus dinâmico.
No exemplo de saída acima, a pontuação do quebra-cabeça para um programa de posicionamento em tempo de execução se tornaria 145. Então, se o código tivesse 800 bytes, a pontuação seria 145*145/800 = 26.28
.
O Dynamic Bonus foi desenvolvido para recompensar algoritmos inteligentes em vez de seqüências estáticas de solução codificada e compensar o tamanho maior do código-fonte resultante.
EDITAR% S:
- As bibliotecas alteradas costumavam ser apenas as da versão mínima do idioma.
- Adicionada a opção de bônus dinâmico.
xyzw
/ rgba
/ stpq
:)