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.
fonte
xyzw
/rgba
/stpq
:)Respostas:
STATA, 387 ^ 2/677 = 221,2
Fiquei preguiçoso e só queria produzir algo que funcione antes de tentar obtê-lo com a pontuação ideal. Provavelmente vou atualizá-lo mais tarde, à medida que encaixo mais palavras, e estou aberto a sugestões de qualquer pessoa que use STATA (que não parece muito popular no CodeGolf). STATA é realmente bom em ter muitos comandos / parâmetros de duas letras. Além disso, geralmente a maioria pode ser reduzida para salvar os caracteres / ajustar-se melhor (ou seja, a exibição pode ser exibida, exibida, deslocada, deslocada, deslocada, deslocada ou di). Além disso, a captura significa que ela suprime as mensagens de saída e erro. Portanto, o loop while inteiro tem 0 saídas.
gera
fonte
Pitão, 134 2 /349 = 50,02
Se eu entendi as regras corretamente, este deve ser um envio válido.
Você pode realmente continuar aumentando sua pontuação adicionando mais identificadores: o tamanho do programa aumenta linearmente (aproximadamente duas vezes o comprimento do identificador), enquanto a pontuação aumenta aproximadamente pelo quadrado do comprimento do identificador. Em seguida, o desafio se torna mais como colocar a maioria das palavras-chave no quadrado, em vez de escrever um pequeno programa para fazê-lo.
fonte
stdout.write
queprint
, e não , e o que háformat(not False or iter([]))
no final? Você também pode facilmente adicionar como "é" ao lado do "sys" e um "para" abaixo "de" ...format
leitura paraiter([i for i in [not False is sys]])
Perl,
728 2 /639 = 829,4Oh bem, isso não é válido, perdi que eu tenho que ter os identificadores no meu código.
Isso requer um módulo de reflexão perl (
B::Keywords
). Pode ser instalado no ubuntu comsudo apt-get install libb-keywords-perl
. Com a semente fornecida no código acima, gera a resposta 728:Observe que versões diferentes do perl podem ter diferentes RNG e diferentes listas de palavras-chave, mas deve ser fácil encontrar uma semente com um resultado comparável.
fonte