<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl">
	<id>http://brain.fuw.edu.pl/edu/index.php?action=history&amp;feed=atom&amp;title=TI%2FSkrypty_z_zaj%C4%99%C4%87%2F9</id>
	<title>TI/Skrypty z zajęć/9 - Historia wersji</title>
	<link rel="self" type="application/atom+xml" href="http://brain.fuw.edu.pl/edu/index.php?action=history&amp;feed=atom&amp;title=TI%2FSkrypty_z_zaj%C4%99%C4%87%2F9"/>
	<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=TI/Skrypty_z_zaj%C4%99%C4%87/9&amp;action=history"/>
	<updated>2026-04-22T23:24:00Z</updated>
	<subtitle>Historia wersji tej strony wiki</subtitle>
	<generator>MediaWiki 1.34.1</generator>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=TI/Skrypty_z_zaj%C4%99%C4%87/9&amp;diff=8338&amp;oldid=prev</id>
		<title>Tgub: Utworzono nową stronę &quot;&lt;source lang=&quot;python&quot;&gt;  # -*- coding: utf-8 -*- &quot;&quot;&quot; Created on Wed Apr 29 11:31:12 2020  @author: Tomek &quot;&quot;&quot;  ''' W tym zadaniu napiszemy automat komórkowy, który będz...&quot;</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=TI/Skrypty_z_zaj%C4%99%C4%87/9&amp;diff=8338&amp;oldid=prev"/>
		<updated>2020-04-29T11:10:22Z</updated>

		<summary type="html">&lt;p&gt;Utworzono nową stronę &amp;quot;&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;  # -*- coding: utf-8 -*- &amp;quot;&amp;quot;&amp;quot; Created on Wed Apr 29 11:31:12 2020  @author: Tomek &amp;quot;&amp;quot;&amp;quot;  &amp;#039;&amp;#039;&amp;#039; W tym zadaniu napiszemy automat komórkowy, który będz...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nowa strona&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
Created on Wed Apr 29 11:31:12 2020&lt;br /&gt;
&lt;br /&gt;
@author: Tomek&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
W tym zadaniu napiszemy automat komórkowy, który będzie bardzo uproszczonym modelem sterty piachu. &lt;br /&gt;
Automat działa na prostokątnej tablicy (przyjmijmy 100 na 100). Początkowo, każda z komórek przyjmuje &lt;br /&gt;
losową wartość ze zbioru [0,1,2,3]. Dynamika modelu jest następująca:&lt;br /&gt;
1. Losowo wybieramy jedną komórkę w tablicy i zwiększamy przechowywaną tam liczbę o jeden.&lt;br /&gt;
2. Mówimy że układ jest niestabilny, gdy gdziekolwiek w tablicy znajduje się wartość 4.&lt;br /&gt;
3. Jeżeli układ jest niestabilny, losowo wybieramy jedną z komórek z wartością 4. &lt;br /&gt;
    Zmieniamy jej wartość na 0, natomiast wartości sąsiadujących komórek (czterech, lub mniej jeżeli jesteśmy przy brzegu) &lt;br /&gt;
    zwiększamy o jeden.&lt;br /&gt;
4. Powtarzamy punkt 3 aż do momentu gdy układ jest stabilny (nie jest niestabilny). &lt;br /&gt;
    Liczymy ile razy trzeba było powtórzyć punkt 3 aby dojść do punktu 4 i zapisujemy tę liczbę (N) w oddzielnej liście.&lt;br /&gt;
Powtarzamy punkty 1-4 tysiąc razy. Zadanie polega na wykreśleniu histogramu z tysiąca liczb N odpowiadających kolejnym powtórzeniom. &lt;br /&gt;
Wykonaj animację ostatnich stu powtórzeń punktów 1-4.&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
import matplotlib.animation as animation&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nx = 50+2&lt;br /&gt;
Ny = 50+2&lt;br /&gt;
&lt;br /&gt;
tab = np.random.randint(4, size = (Nx,Ny))&lt;br /&gt;
&lt;br /&gt;
def zerujBrzegi():&lt;br /&gt;
    global tab&lt;br /&gt;
    tab[0,:] = 0&lt;br /&gt;
    tab[-1,:] = 0&lt;br /&gt;
    tab[:,0] = 0&lt;br /&gt;
    tab[:,-1] = 0&lt;br /&gt;
zerujBrzegi()&lt;br /&gt;
Nki = []&lt;br /&gt;
klatki = []&lt;br /&gt;
&lt;br /&gt;
for i in range(1000):&lt;br /&gt;
    #punkt 1&lt;br /&gt;
    x = np.random.randint(1,Nx-1)&lt;br /&gt;
    y = np.random.randint(1,Ny-1)&lt;br /&gt;
    tab[x,y] +=1&lt;br /&gt;
    #punkt 3&lt;br /&gt;
    N = 0 #licznik powt&lt;br /&gt;
    while np.sum(tab&amp;gt;3):&lt;br /&gt;
        N += 1&lt;br /&gt;
        ktory = np.random.randint(np.sum(tab&amp;gt;3))&lt;br /&gt;
        punkty = np.nonzero(tab&amp;gt;3)&lt;br /&gt;
        x = punkty[0][ktory]&lt;br /&gt;
        y = punkty[1][ktory]&lt;br /&gt;
        tab[x,y] -= 4&lt;br /&gt;
        tab[x+1,y] += 1&lt;br /&gt;
        tab[x-1,y] += 1&lt;br /&gt;
        tab[x,y+1] += 1&lt;br /&gt;
        tab[x,y-1] += 1&lt;br /&gt;
        zerujBrzegi()&lt;br /&gt;
        if (i&amp;gt;900):&lt;br /&gt;
            klatki.append(np.copy(tab))&lt;br /&gt;
    Nki.append(N)&lt;br /&gt;
print(len(klatki))&lt;br /&gt;
&lt;br /&gt;
#print(Nki)&lt;br /&gt;
#py.hist(Nki)&lt;br /&gt;
&lt;br /&gt;
fig = plt.figure( figsize=(8,8) )&lt;br /&gt;
im = plt.imshow(tab, cmap=&amp;quot;Greys&amp;quot;)&lt;br /&gt;
def animuj(i):&lt;br /&gt;
    im.set_array(klatki[i])&lt;br /&gt;
    return [im] #magia tutaj!!!!&lt;br /&gt;
ani = animation.FuncAnimation(fig, animuj, frames = len(klatki), interval = 100)&lt;br /&gt;
plt.show()  &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tgub</name></author>
		
	</entry>
</feed>