O Wireworld é um autômato celular projetado para se parecer com elétrons que fluem através de fios. Sua mecânica simples permite a construção de circuitos digitais. Ele até permitiu a construção de um computador inteiro .
Sua missão é criar a menor implementação do Wireworld no seu idioma preferido.
Cada célula na grade possui um dos quatro estados. Os quatro estados são "em branco", "cobre", "cabeça de elétron" ou "cauda de elétron".
- Uma célula em branco sempre permanecerá uma célula em branco
- Uma cabeça de elétron sempre se tornará uma cauda de elétrons
- Uma cauda de elétron sempre se tornará cobre
- Uma célula de cobre se tornará uma cabeça de elétrons se exatamente um ou dois de seus oito vizinhos forem cabeças de elétrons, caso contrário, permanecerá cobre
Esta competição terá um estilo semelhante ao da competição Shortest Game of Life , mas com algumas alterações.
- A grade deve ter pelo menos 40 por 40 células
- As bordas da grade NÃO devem ser dobradas (não um toro). Trate as células fora do campo como sendo constantemente "em branco".
- Deve ser possível que os usuários insiram sua própria configuração inicial.
- Olhar fixamente para telas em branco não é divertido. O programa deve exibir visualmente a simulação enquanto está em execução.
Isso é código de golfe, o menor número de bytes vence.
fonte
ALPACA, 82 caracteres
ALPACA é uma linguagem projetada especificamente para autômatos celulares.
o não é nada; c é condutor; e é elétron; t é cauda eletrônica.
fonte
GolfScript (
125 120 105100 caracteres)Observe que estou contando o
\033
caractere como um cada, porque eles podem ser substituídos por umESC
caractere literal . Isso usa códigos de controle ANSI, portanto, depende de um tty compatível. Observe também que os quadros são impressos começando com a grade de entrada.Há alguma sobreposição com Gerar uma grade de somas , que também usa o bairro de Moore.
Codificação: espaço em branco =>
; cabeça de elétrons =>
i
; cauda eletrônica =>`
; cobre =>X
.A pausa entre as iterações é o tempo necessário para calcular 46656 46656 . Mudar
6.?.?
para outra expressão permite controlar a velocidade; o próximo mais lento para a mesma contagem de caracteres é7.?.?
, que é muito mais lento (a saída é 22 vezes maior e não é um cálculo de complexidade linear).Para um caso de teste, eu tenho usado
do desafio Rosetta Code Wireworld .
fonte
Python
371341 caracteresSim, não é tão curto, mas tem uma interface interativa!
Instruções:
Clique com o botão esquerdo do mouse para colocar o fio
Clique com o botão direito do mouse para limpar
Clique com o botão do meio do mouse para colocar a cabeça do elétron
Clique fora dos eixos para pisar no autômato
fonte
(x>0)&(x<3)
->(0<x<3)
. :)Python (
243214)Tentou fazer um cruzamento entre usabilidade e personagens. A grade é 40x40. A entrada é fornecida no stdin. Uma cabeça de elétrons é
h
, uma cauda de elétronst
, um cobrec
, qualquer outra coisa está em branco.O loop while (linha 3) não compactado (não funcionará se inserido no código):
fonte
g[e]='h'if(t=='c')&...else't'if i=='h'else'c'if i=='t'else i
. Não tenho certeza se isso funciona exatamente como é, mas algo nesse sentido deve funcionarC,
355347300294 caracteresEdit: percebi que não preciso
feof()
Editar: salvou 47 caracteres! Removeu o sono, se livrou de quase todos os aparelhos, combinou muitas operações.
Edit: Último hoje, desde que eu quebrei 300 caracteres. Mudou
printf
paraputs
, encontrou uma otimização bonitinha com a primeira comparação.C não se presta bem a esse tipo de problema, mas ei, jogar golfe é divertido. Essa é uma implementação de força bruta, mas eu queria ver até onde eu poderia melhorar.
Entrada é um arquivo de texto chamado
i
. Ele contém uma representação do estado inicial, com espaço*
para cobre,+
para cabeça-
de elétrons, cauda de elétrons, espaços para células vazias. Estou usando o portão XOR da página wiki para teste.fonte
cond?43:42
ser escrito42+(cond)
? E tenho certeza quer=s[j][i++];*p=r==43?45:r;if(r==45)*p=42;
pode ser reduzido parar=s[j][i++];*p=r==43?45:r==45?42:r;
se nãor=s[j][i++]-43;*p=!r?45:r==2?42:r;
Python,
234218 caracteresVocê insere o quadro como três listas de números complexos que representam as coordenadas das células de cobre (que devem incluir as listas de cara e coroa), cara e coroa. Aqui está um exemplo:
Observe que temos
eval
a entrada, para que você possa usar expressões arbitrariamente complexas para listas de números complexos.fonte
QBasic, 309 bytes
Aviso: a versão golfed não é fácil de usar: possui um método de entrada estranho, é executado como um loop infinito e não possui nenhum atraso (portanto, é executado muito rápido em alguns sistemas). Somente execute-o se você souber finalizar um programa no seu ambiente QBasic. A versão ungolfed é recomendada (veja abaixo).
Para executar, especifique no prompt de entrada a largura
w
e a altura da sua configuraçãoh
. 1 Em seguida, digitew*h
os códigos de um dígito para as células (movendo-se da esquerda para a direita e depois de cima para baixo), com0
= vazio6
= fio7
= cabeça de sinal1
= cauda do sinalDepois de inserir todas as células, a simulação começará (e continuará para sempre, até você finalizar o programa).
Ungolfed
Uma versão mais amigável. Para modificar o layout, modifique o
DATA
instruções no final.O código tira proveito da
POINT
função, que lê o valor da cor de um pixel na tela. Isso significa que não precisamos armazenar as células separadamente como uma matriz. Para garantir que todas as células sejam atualizadas simultaneamente, realizamos as atualizações em uma segunda "página". Podemos alternar a página ativa usando uma versão daSCREEN
declaração e copiar o conteúdo de uma página para outra usando aPCOPY
declaração.1 Os valores máximos de largura e altura dependem de qual modo de tela é usado. Em
SCREEN 9
, a largura pode ser de até 638 e a altura de 348.SCREEN 7
possui uma resolução menor (tamanho máximo de configuração 318 por 198), mas os pixels são maiores e, portanto, mais fáceis de ver (no DOS QBasic ou no emulador DOSBox - infelizmente, o QB64 apenas abre uma janela menor).Exemplo de execução
Versão não destruída em archive.org , com modo de tela 7:
fonte