Você deve escrever um programa ou função que produza ou devolve o máximo possível do capítulo I do pequeno príncipe . Seu programa ou função deve ser um bloco de código M-por-N contendo apenas caracteres ascii imprimíveis (ponto de código de 32 a 126) e novas linhas no final de cada linha.
Você só pode usar no máximo 26 caracteres de sua escolha entre os 96 caracteres ASCII imprimíveis (e as novas linhas no final das linhas).
Em cada linha e coluna, cada caractere deve ser distinto, semelhante a um quebra-cabeça sudoku, ou seja, não pode haver uma letra em uma linha ou coluna duas vezes.
Um exemplo de código correto com M = 4
, N = 3
e alphabet = {a,b,c,d,/,*}
:
abcd
bcd*
*/ac
Detalhes do código
- Você pode escolher a forma do seu bloco de código (ie
M
eN
). - O bloco deve ser preenchido com caracteres inteiramente, ou seja, cada linha deve ter o mesmo comprimento.
- Uma nova linha à direita no final da última linha é opcional.
- Conforme escrito acima em cada linha e coluna, cada caractere deve ser distinto.
Detalhes da saída
- Você deve produzir ou retornar um prefixo do Capítulo I de O Pequeno Príncipe sem nenhuma saída adicional.
- Se você alcançar uma nova linha no texto, poderá representá-la como qualquer variante comum (\ r, \ n, \ r \ n), mas use apenas uma delas e conte-a como 1 byte para a pontuação.
- Uma nova linha extra à direita é opcional.
Sua pontuação é o tamanho do texto de saída, excluindo uma nova linha adicional, se presente. Maior pontuação é melhor.
Resposta de exemplo
##Python3, score = 6
alphabet = `print('O\ce w)#X` (alphabet element count = 16)
print('O\
nce w')#X
Você pode verificar a validade do seu código com este programa Python 3 (ideone) ou este programa CJam (online) fornecido pelo @ MartinBüttner.
Respostas:
CJam, 47
Experimente online
Alfabeto:
"'*-/2INOSacdehilmnorswxy
Explicação:
fonte
Pip , pontuação = 38
Alfabeto:
"'015:IMORXacdehilnorswxy
(Eu certamente odiaria tentar isso em uma linguagem de programação real .)
Explicação:
fonte
Python 3, pontuação = 11
Esse é um problema muito difícil para o Python, pois as restrições na repetição de caracteres em uma linha ou coluna tornam quase impossível tornar mais de uma string literal. As várias maneiras de unir cadeias de caracteres são, portanto, bastante inúteis, pois você não pode começar com as cadeias de nenhuma maneira útil. Aqui está minha melhor tentativa:
Observe que há um espaço no final da primeira linha. O alias
x
parachr
é necessário para evitar que o mesmo caractere termine em mais de uma coluna. Os caracteres de comentário no final podem ser quase qualquer coisa.O alfabeto tem 21 caracteres imprimíveis, além de nova linha (observe o espaço no início):
A saída é:
fonte
CJam, score = 21
Alfabeto:
-;INOSacehinoswxy
Apenas para fazer a bola rolar; isso provavelmente pode ser derrotado facilmente.
fonte
CJam, score = 15
Eu tenho essa idéia há algum tempo, mas não tive tempo de sentar e mexer nas coisas até obter a exclusividade da coluna necessária, então aqui está uma versão do bebê por enquanto:
Alfabeto (26):
" #)*+,0123456789:;=>Ibcef
Experimente online .
Explicação
A idéia básica é usar a codificação base para que possamos imprimir mais de 26 tipos de caracteres. O código principal é
Note que nós tratamos o primeiro
"O"
para"Once"
separadamente porque incluí-lo em nossa string levaria muito do nosso alfabeto. Se quiséssemos, poderíamos tentar estender nossa string de indexação, mas como não ocorreram mais caracteres maiúsculos por um tempo,"I"
eu não me importei muito com isso.Precisamos então construir o grande número na segunda linha de alguma forma. A abordagem adotada foi a de multiplicar repetidamente por alguma potência, adicionar uma constante e repetir, para que no código acima
85032995607801617394
seja substituído poronde
)
é incremento e#
é exponenciação no CJam.O restante (a parte mais irritante) está preenchendo cada linha para atender aos critérios da coluna. Para fazer isso, despejamos chars em strings e os usamos
;
. Infelizmente, embora gostássemos muito de usare#
comentários para facilitar as coisas, o fato da#
exponenciação proíbe isso, portanto isso é feito apenas na última linha.Estou bastante certo de que esse método pode ser estendido até a vírgula na primeira frase, mas, infelizmente, embaralhar as coisas para atender aos critérios da coluna está se mostrando difícil, então talvez eu precise de outro método para gerar o número inteiro codificado em base.
fonte
Python 2, pontuação = 13 (inválido)
Python não é a melhor linguagem para isso .... Após uma inspeção mais aprofundada, existem dois
n
s na minha primeira linha. Não existe remédio que valha a pena e vou parar de desperdiçar meu tempo com o Python. Atualmente, estou trabalhando para criar uma solução em outro idioma, mas ainda não vou compartilhar qual.Alfabeto (22):
"#(),0167IOcehinprtw
Resultado:
Once when I w
fonte
n
s. Esse problema é quase impossível no Python, pois você só pode usar uma barra invertida de continuação de linha uma vez (já que a barra invertida precisa estar na última coluna) e nenhuma linha pode ter dois do mesmo tipo de aspas.