Seguindo o conselho da Sra. Pac-Man, que está preocupada com o excesso de peso, o Pac-Man decidiu acompanhar sua ingestão diária de Pac-Dot. Ajude-o a contar o número de Pac-Dots em um determinado caminho no labirinto!
O labirinto
Para ajudá-lo a criar sua própria codificação do labirinto, você pode obter alguns dados brutos aqui .
A jornada de Pac-Man
No contexto desse desafio, as seguintes regras se aplicam:
- Primeiro, as boas notícias: os fantasmas não estão lá.
- Pac-Man sempre começa sua corrida na posição indicada na foto acima, indo para o leste. Não há Pac-Dot na posição inicial.
- Enquanto ele segue um caminho reto, ele continua avançando para os próximos quadrados.
- Quando ele encontra um giro de 90 ° sem nenhum outro caminho disponível (quadrados laranja no mapa), ele automaticamente e sistematicamente faz o giro.
- Quando ele encontra uma junção onde vários caminhos estão disponíveis (quadrados verdes no mapa), ele pode continuar na mesma direção - se aplicável - ou escolher outra direção (incluindo fazer uma inversão de marcha).
- Quando Pac-Man passa por uma das saídas no meio esquerdo ou no meio direito do labirinto, ele imediatamente reaparece no lado oposto.
- Pac-Man come todos os Pac-Dots no caminho que está seguindo. Depois que um Pac-Dot é comido, ele é removido do labirinto.
O desafio
Entrada
Você receberá uma sequência descrevendo o comportamento do Pac-Man nos cruzamentos que ele alcançará. Essa sequência será composta pelos seguintes caracteres:
L
: faça uma volta de 90 ° para a esquerdaR
: faça uma volta de 90 ° para a direitaF
: avançar (sem mudança de direção)B
: retroceda (faça uma inversão de marcha)
Quando todos os personagens foram processados, Pac-Man para no próximo cruzamento que ele encontra.
Saída
Você precisa imprimir ou imprimir o número de pontos-Pac consumidos ao longo do caminho de entrada.
Regras
- Você pode escrever um programa completo ou uma função.
- Você pode receber entradas em maiúsculas ou minúsculas, como uma sequência de caracteres ou uma matriz de caracteres. Você também pode usar outros caracteres (mas apenas um caractere por direção) ou números inteiros
[0 .. 9]
. Se você fizer isso, especifique-o claramente na sua resposta. - Você pode assumir que a entrada é sempre válida. (O jsFiddle abaixo detectará erros, mas você não deveria.)
- Isso é código-golfe, então o código mais curto em bytes vence.
- As brechas padrão são proibidas.
Sugestão
Pode não ser necessário nem ideal armazenar a forma exata do labirinto.
Casos de teste e demonstração
Os seguintes casos de teste - ou qualquer outra entrada - podem ser testados neste jsFiddle .
1. Input : ""
Output : 1
Comment: Pac-Man just advances to the first junction, eats the Pac-Dot on it and stops.
2. Input : "L"
Output : 7
3. Input : "FFR"
Output : 13
4. Input : "LFLR"
Output : 17
Comment: Pac-Man will exit on the middle right side and re-appear on the left side.
5. Input : "BBBB"
Output : 2
6. Input : "BRRFFFL"
Output : 15
7. Input : "LFFRLFFFFRF"
Output : 50
8. Input : "BRFRLRFRLFR"
Output : 54
Comment: Pac-Man will exit on the middle left side and re-appear on the right side.
9. Input : "FFLRLFFLLLLFFBFLFLRRRLRRFRFLRLFFFLFLLLLFRRFBRLLLFBLFFLBFRLLR"
Output : 244
Comment: All cleared!
fonte
Respostas:
Pitão,
356345 + 1 = 346 bytesO código contém alguns imprimíveis, então aqui está o
xxd
hexdump reversível .Requer o
-M
sinalizador para desativar a memorização. Infelizmente, isso não pode ser feito em nenhum executor online que eu conheça.Aqui está uma versão ASCII para impressão
legível:Explicação
Como ainda há muito trabalho em andamento, não postarei uma explicação completa ainda.
Basicamente, o programa representa o quadro como um gráfico (um tanto estranho) usando cinco tabelas de pesquisa: 2 para conectividade, 1 para direções de junção e 2 para contagem de pontos. Isso foi construído por um script Python de 200 linhas em que passei muitas horas. Em seguida, o programa apenas percorre a entrada e conta os pontos, atualizando as tabelas de pontos para zero à medida que os pontos são coletados.
FAÇAM:
fonte
k, 264 bytes
Despejo hexagonal:
Os dados binários no final codificam duas matrizes:
a
consiste em pares de bytes, cada um representando (direção de 64 *) + junctionIdb
é o número de pontos de Pacman entre cada par de junções ema
O programa lê seu próprio arquivo de origem (
p.k
) e decodifica os dados.A entrada vem do stdin e usa 0x00,0x01,0x02,0x03 (também conhecido como NUL, SOH, STX, ETX - os quatro primeiros códigos ASCII) em vez de FLBR.
Eu uso minha própria implementação do k, que é limitada, inchada, travada e lenta em comparação com a coisa real . Eu testei com o seguinte programa:
fonte