Era isso que eu pensava que essa pergunta seria antes de ler completamente.
Um grupo de jogadores de código entra na The Nineteenth Bite Pizzeria e pede uma pizza. Ele vem em uma forma irregular, feita de quadrados unitários. Sua tarefa é ajudá-los a cortá-lo em fatias idênticas. Ou seja, as fatias devem ter exatamente a mesma forma e tamanho; eles podem ser girados, mas não invertidos / espelhados. Por exemplo, se são peças de Tetris, devem ser do mesmo tipo, você não pode usar tanto uma peça L quanto uma peça J.
Entrada
Você receberá o número de pessoas no grupo na primeira linha (sempre um número inteiro de 2 a 10, inclusive), seguido por uma matriz retangular de caracteres '' (espaço) e '#', representando a pizza. Todos os caracteres '#' são conectados pelas bordas. É garantido que o número de caracteres '#' seja um múltiplo do número de pessoas.
Resultado
Você deve imprimir a mesma matriz, com cada caractere '#' substituído por um dígito de 0 a n-1 (n sendo o número de pessoas). Cada dígito deve marcar uma fatia. A forma da fatia deve ser conectada pelas bordas quadradas. A numeração da fatia não precisa estar em nenhuma ordem específica. Se houver várias maneiras de cortar a pizza, qualquer uma delas é aceitável.
Se não for possível cortar a pizza conforme necessário, imprima a sequência "Sem pizza para você!" em vez de.
Pontuação
Isso é código de golfe. Sua pontuação será o número de bytes no programa. Os caracteres serão contados através da codificação UTF-8. Menor pontuação ganha.
Exemplos
Entrada:
3
#
###
####
#
Resultado:
0
100
1122
2
Entrada:
4
###
# #
###
Resultado:
001
2 1
233
Entrada:
2
# #
######
Resultado:
No pizza for you!
Entrada:
5
#
####
#####
#####
#####
####
#
Resultado:
0
1000
21110
32221
43332
4443
4
Entrada:
4
#
####
######
#####
####
Resultado:
0
1000
111203
12233
2233
Exigências
- Você deve escrever um programa completo que leia da entrada padrão e grave na saída padrão.
- O programa deve ser executável no Linux usando software disponível gratuitamente.
- Seu programa deve concluir cada um dos exemplos acima em menos de 1 minuto em um computador moderno.
- Sem brechas padrão.
fonte
Respostas:
Código PHP,
1808971 bytesImplementação rápida e suja em PHP. Primeira força bruta em todas as formas possíveis de fatias, depois força bruta em todas as posições e orientações das fatias.
Uso:
cat pizza.txt | php pizza.php
Editar: reduziu o tamanho do código em mais de 45% ao retroceder o algoritmo usando recursão em vez de loops aninhados. No entanto, isso consome memória (e pizzas ;-)). As pizzas maiores que 8x8 provavelmente ficarão sem memória. A variante de loop aninhado pode lidar facilmente com qualquer tamanho, mas é duas vezes o tamanho do código.
Código documentado e não-jogado
Abaixo está o código original documentado. Para manter minha sanidade mental, trabalhei com o código fonte completo e escrevi um script minificador simples para remover instruções como
assert()
eerror_reporting()
remover colchetes desnecessários, renomear variáveis, funções e constantes para gerar o código golfado acima.fonte
define('_',98)
, isso não entra em conflitofunction _
? Eu não sei php, então eu não posso dizer ...