Há um vírus dentro de um destinatário de 5x5. Como sabemos como ele propaga sua contaminação, sua missão é produzir o último estágio da contaminação.
O destinatário
Será representado como uma matriz bidimensional de 5x5:
0 0 0 0 1
0 0 0 0 1
0 0 0 1 1
0 0 1 1 1
0 1 1 1 1
Onde 1
significa uma posição em que o vírus já está contaminado e 0
uma posição não contaminada.
Como o vírus se propaga
- Uma posição contaminada não pode estar limpa.
- Uma posição limpa será contaminada no estágio seguinte somente se pelo menos duas de suas posições adjacentes (células norte, leste, sul e oeste) estiverem contaminadas.
- O último estágio da contaminação ocorre quando não é possível contaminar mais células limpas.
Amostra
Usando como estágio 1 da contaminação o recipiente descrito acima, o estágio 2 será:
0 0 0 0 1
0 0 0 1 1
0 0 1 1 1
0 1 1 1 1
0 1 1 1 1
O estágio 3 da contaminação será:
0 0 0 1 1
0 0 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
O estágio 4 da contaminação será:
0 0 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
E o estágio 5 (neste exemplo, o último) será:
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
Desafio
Como entrada em um estágio da contaminação, você deve gerar o último estágio da contaminação.
Você tem permissão para escrever um programa completo ou uma função. Você pode usar a entrada como matriz / lista, como números separados ou mesmo como sequência. Escolhe a melhor maneira que se ajusta ao seu idioma.
A resposta mais curta em bytes vence!
Outros casos de teste
Input:
1 1 0 0 1
0 0 0 0 0
0 1 0 0 1
0 0 0 0 0
1 0 0 0 1
Output:
1 1 0 0 1
1 1 0 0 1
1 1 0 0 1
1 1 0 0 1
1 1 0 0 1
Input:
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
Output:
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
Input:
1 0 0 1 0
0 0 1 0 1
0 0 0 0 0
1 0 0 0 0
0 0 1 0 0
Output:
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
Input:
0 1 0 0 0
0 0 0 0 1
0 0 1 0 0
1 0 0 0 0
0 0 0 1 0
Output:
0 1 0 0 0
0 0 0 0 1
0 0 1 0 0
1 0 0 0 0
0 0 0 1 0
fonte
1 0 1
ocorrer na saída? O zero do centro não é adjacente a dois1
s?1 0 0 1 0 \ 0 0 1 0 1 \ 0 0 0 0 0 \ 1 0 0 0 0 \ 0 0 1 0 0
como um caso de teste?0 1 0 0 0 \ 0 0 0 0 1 \ 0 0 1 0 0 \ 1 0 0 0 0 \ 0 0 0 1 0
, que permanece inalterado.Respostas:
Já que isso é basicamente um autômato celular, eu te dou ...
Regra Golly Quicklife, 10 bytes
Insira a regra, cole a grade no Golly, padrão de execução. O padrão resultante é a saída.
Explicação:
Ou, se você insistir em uma regra completa do RuleLoader, 89 bytes:
Nome da regra é X, as mesmas etapas de antes.
fonte
B3/S23
que pode fazer qualquer coisa! ... Mas ele tem um formato de entrada estrito (como o programa inteiro está incluído na entrada (de que outra forma você faria isso?)). Mas por que estragar a diversão ??Python 2, 97 bytes
Experimente online . A entrada é tomada como uma cadeia de caracteres entre aspas, com cada linha delimitada por novas linhas. O
980
não é o ideal e pode ser substituído por um múltiplo menor de 35. Como não tem impacto na duração deste programa, deixei a determinação do limite superior seguro mais baixo como um exercício para o leitor.fonte
Javascript (ES6),
918987 bytesComo uma função que aceita entrada como uma matriz de números ou seqüências de caracteres.
-2 bytes de Neil (combinando atribuição de
y
com conversão de string)-2 bytes (removendo variável
j
)fonte
(y=...)+''==x
vez de(y=...),y+''==x
.MATL , 22 bytes
Isso funciona na versão atual (15.0.0) do idioma.
Experimente online !
O formato de entrada é: matriz 2D com linhas separadas por ponto e vírgula. Portanto, os quatro casos de teste têm as seguintes entradas:
Explicação
Isso executa repetidamente uma convolução 2D da matriz de entrada com a seguinte máscara, que define quais vizinhos contam como contaminantes:
Para obter um resultado do mesmo tamanho da matriz original, ele é preenchido primeiro com um quadro de zeros e, em seguida, apenas a parte "válida" da convolução é mantida (isto é, sem efeitos de borda).
Um limite de 2 é aplicado à saída da convolução e o resultado é ORed a nível dos elementos com a entrada original.
Isso deve ser feito um número suficiente de vezes para garantir que o estado final seja alcançado. Um critério simples que atende a isso é: itere quantas vezes o número de entradas na matriz de entrada (ou seja, 25 vezes nos casos de teste).
fonte
TI-BASIC, 151 bytes
Entrada como
[[1,0,0,1,1][1,0,0,0,0]...]
.fonte
Repeat
loop.Lua, 236 bytes
Aceita entrada na linha de comando e usa a manipulação de strings de Lua para obter a resposta.
Ungolfed:
fonte
APL,
767270 bytesO que isso faz é: expanda a matriz para 7x7 e centralize nosso argumento (ômega). A partir dessa matriz, gere 4 matrizes "filho", cada uma delas deslocada em uma direção diferente (para cima / baixo / esquerda / direita), adicione-as (para obter o número de vizinhos), solte o quadro (para retornar a uma Matriz 5x5). Ou essa nova matriz com a "antiga", para garantir que não deixamos cair nenhuma célula no processo (ou seja, no limite). Em seguida, use a
⍣≡
combinação para obter um valor de ponto fixo.exemplo (considerando que a função foi atribuída
contaminate
):fonte