O desafio
Você deve escrever um programa completo que use sete números de STDIN e imprima o histórico bidimensional do autômato celular (CA) em STDOUT. Isso é código de golfe.
Formatação da entrada A entrada será sete números inteiros / seqüências de caracteres separados por vírgulas. O primeiro número é o número da regra de acordo com o código Wolfram (o nome padrão para cada regra). O segundo é a configuração inicial inicial. O terceiro e o quarto descrevem qual padrão e quantas vezes ele deve ser anexado à esquerda da configuração inicial. como preenchimento. O quinto e o sexto fazem o mesmo para o lado direito. O último número é o número de gerações para executar a simulação.
Então, um exemplo de entrada é 90,11,0,4,0,4,5
. Isso deve informar ao seu programa que você está executando a regra 90 . Também deve dizer ao programa que deseja que a configuração inicial seja 11
com a corda 0
anexada 4 vezes para ambas as extremidades, de modo que o padrão de partida real é 0000110000
. Ele também informa ao seu programa para executar esta simulação por 5 gerações.
Saída Seu programa deve imprimir toda a matriz de células a cada geração (separadas por novas linhas), para que a saída seja o diagrama de espaço-tempo da CA. Para cada geração, o estado de cada célula é determinado pelo seu estado e pelos estados das células imediatamente à esquerda e à direita, de acordo com a regra fornecida como entrada. A simulação deve envolver as bordas. A primeira coisa impressa deve ser a matriz inicial como gen. 0
A entrada 90,11,0,4,0,4,5
deve resultar na seguinte saída o mais exatamente possível.
0000110000
0001111000
0011001100
0111111110
1100000011
0110000110
Observe que o estado inicial não está incluído nas cinco gerações. Observe também que a simulação envolve as bordas.
Mais exemplos
entrada:
184,1100,01,2,01,1,4
resultado:
0101110001
1011101000
0111010100
0110101010
0101010101
entrada:
0,1011,1,0,0,1,2
resultado:
10110
00000
00000
Mais informações sobre como a 1D CA funciona e como elas são numeradas
fonte
Respostas:
Golfscript,
77 7370 caracteresGraças a @Howard, que apontou como salvar 4 caracteres.
fonte
48-
->1&
e acho que também mais três. Você pode omitir)
antes do bloco (não aumentar o contador) e, portanto, também salvar os dois últimos pops.APL (153 caracteres)
E de forma menos legível e ligeiramente mais curta:
Exemplo:
Tenho certeza de que há espaço para melhorias (eu até encontrei algumas mudanças enquanto escrevia este post!), Mas algumas delas podem envolver mudanças fundamentais, e eu não aguento mais encarar a APL. A variante do APL usada aqui é o Dyalog APL .
fonte
Ruby,
165159 caracteresEdit: Encontrei alguns lugares para pequenas melhorias.
Exemplo de execução:
fonte
C,
303 305 301 294292305 Edit: oops. Esqueceu que
calloc()
leva dois argumentos. Estava explodindo em entradas maiores.301 Editar: Ah HA! Usei o meu
calloc()
boo-boo para economizar mais 2 bytes, aumentando o tamanho do bloco da memória solicitada.294 Editar: Quebrou 300! Eliminou um dos se
strcat()
ajustou alguns loops. É preciso usar a máxima mastigação, o que é tão divertido de se dizer quanto usar.292 Edit: Não precisava da
+2
alocação de memória.Eu usei a resposta do luser droog como a idéia base, mas mudei o algoritmo de empacotamento, bem como muitos ajustes e fatoração de constantes.
fonte
C,A,
! :)brk()
? então emp=s+C+1;
algum lugar.+++
!%[01]
para%s
! -9 (... muitos anos depois)C (
487484418 com espaços removidos)* Caiu 66 com a ajuda de JoeFish *
datilografado
fonte
int
variáveis globais e removendo o#include
:r,A,B,C,n,i,j; main(){char *s...
for
loops:for(;A--;)strcat(s,a);
A
eC
mais tarde para que você não tem que declarari
ouB
em tudo.p=malloc((C=strlen(s))+1); --C; strcpy(p,s); for(A=0;A<n;A++){
Desculpe, eu vou parar agora :)--C;
:p=malloc((C=strlen(s)-1)+2);
. Eu acho que o código do golfe é mais divertido do que sugeri-lo!#include
desdescanf
é variadic. Mas provavelmente está tudo bem, pois é chamado apenas uma vez. ... Minha máquina antiga morreu ontem e ainda estou instalando o Cygwin. Incorporarei essas alterações assim que possível. Obrigado!