Unverified Commit 93548bf1 authored by Merwane Bouri's avatar Merwane Bouri
Browse files
parents 16baf339 3749517c
Pipeline #79370 canceled with stage
......@@ -115,13 +115,20 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimum">
<number>1</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="simSpeedSpinbox"/>
<widget class="QSpinBox" name="simSpeedSpinbox">
<property name="minimum">
<number>1</number>
</property>
</widget>
</item>
</layout>
</item>
......
......@@ -34,6 +34,8 @@ private slots:
void loadStateID(unsigned int); // La fonction idPath permet de parcourir la liste des états et d'avoir un affiche du nom et de la couleur sur l'interface
void pickColor();
void on_state_label_textEdited(const QString &arg1);
private:
Ui::ColorLabel *ui;
Alphabet a;
......
......@@ -16,6 +16,7 @@ Cette classe représente le widget utilisé pour l'affichage et l'interaction av
#include <QFrame>
#include <QGraphicsView>
#include <QLabel>
#include <QGraphicsRectItem>
......@@ -156,6 +157,7 @@ private:
void select_all();
void click_on(Coord coord);
void update_current_mouse_pos(Coord coord);
const QPixmap &grid_pixmap() const;
......@@ -173,7 +175,9 @@ private:
History m_undo_history;
QImage m_grid_image;
QPixmap m_grid_pixmap;
QLabel* m_mouse_pos_label;
Grid m_grid;
Coord m_last_mouse_pos;
bool m_in_toggle_mode;
std::vector<std::pair<unsigned, unsigned>> m_toggle_states;
std::vector<QGraphicsRectItem*> m_selection_rects;
......
......@@ -59,8 +59,6 @@ private slots:
//! \brief Créer une nouvelle grille ayant des états aléatoire
void on_randomPatternButton_clicked();
void on_nbrStatesComboBox_currentTextChanged(const QString &arg1);
//! \brief Applique l'état sélectionné aux cellules sélectionnées de la GridView
void on_drawCellButton_clicked();
......@@ -113,16 +111,28 @@ private:
//! \brief Charge la grille depuis une image.
void load_from_image();
//! \brief Charge un nouvel alphabet et met à jour l'UI.
void ui_update_alphabet(const Alphabet& alph);
//! \brief Essaie de charger l'état de l'application si il a été sauvegardé.
//! \returns True si le chargement a été réussi, false sinon.
bool try_load_saved_state();
//! \brief Sauvegarde la configuration actuelle.
void save_grid_configuration();
//! \brief Charge une configuration liée au modèle donné.
void load_grid_configuration();
void load_grid_configuration(const QJsonObject &configuration);
//! \brief Retourne le modèle par défaut à charger
QJsonObject default_model() const;
//! \brief Retourne la configuration par défaut à charger
QJsonObject default_configuration() const;
protected:
void closeEvent(QCloseEvent* e) override;
private:
Ui::MainWindow *ui;
Simulation simulation;
......
......@@ -16,22 +16,24 @@ class NeighborhoodDialog : public QDialog
Coord currentPoint;
public:
explicit NeighborhoodDialog(QWidget *parent = nullptr);
explicit NeighborhoodDialog(Neighborhood& n, QWidget *parent = nullptr);
~NeighborhoodDialog();
//! \brief Retourne le voisinage
Neighborhood* getVoisinage() const;
GridView& getGridView() const ;
void ResizeCreateGrid(int x, int y, Neighborhood& n);
public slots:
Neighborhood& getNeighborhood() const;
Neighborhood* getNeighborhood() const;
protected:
void done(int r);
private slots:
void on_validateGridDim_2_clicked();
void on_heightSpinBox_2_valueChanged(int arg1);
void on_widthSpinBox_2_valueChanged(int arg1);
private:
Ui::NeighborhoodDialog *ui;
};
......
......@@ -17,7 +17,8 @@ Contient la classe de la règle de Moore (semblable à VonNeumann avec les diago
//! \brief Voisinage de Moore.
class mooreNeighborhoodRule : public NeighborhoodRule
{
NeighborhoodFormat format;
mutable NeighborhoodFormat format;
mutable int current_format_radius;
public:
mooreNeighborhoodRule(int _radius = 1);
......@@ -29,6 +30,9 @@ public:
//! \return Retourne les formats de voisinage possible dans un std::vector.
std::vector<NeighborhoodFormat> getFormats() const;
private:
void update_format() const;
private:
//! \brief Rayon du voisinage (en nombre de cellule)
DEFINE_CONFIGURABLE_PROPERTY(IntegerProperty, radius, "Radius", 1);
......
......@@ -17,7 +17,8 @@ Contient la classe de la règle de Von Neumann.
//! \brief Voisinage de Von Neumann.
class vonNeumannNeighborhoodRule : public NeighborhoodRule
{
NeighborhoodFormat format;
mutable NeighborhoodFormat format;
mutable int current_format_radius;
public:
vonNeumannNeighborhoodRule(int _radius = 1);
......@@ -29,6 +30,9 @@ public:
//! \return Retourne les formats de voisinage possible dans un std::vector.
std::vector<NeighborhoodFormat> getFormats() const;
private:
void update_format() const;
private:
//! \brief Rayon du voisinage (en nombre de cellule)
DEFINE_CONFIGURABLE_PROPERTY(IntegerProperty, radius, "Radius", 1);
......
......@@ -46,10 +46,10 @@ public:
//! \return Retourne les formats de voisinage possible dans un std::vector.
virtual std::vector<NeighborhoodFormat> getFormats() const = 0;
//! \brief Fait avancer l'état de la règle de voisinage d'une génération
// Fait avancer l'état de la règle de voisinage d'une génération. Cette fonction est utilisée pour les voisinages tels que celui de Margolus, qui dépendent de la parité de la génération actuelle.
// \remark L'implémentation par défaut ne fait rien.
virtual void step() {}
//! \brief Change le numéro de génération de la règle de voisinage d'une génération
//! Fait avancer ou reculer l'état de la règle de voisinage d'une génération. Cette fonction est utilisée pour les voisinages tels que celui de Margolus, qui dépendent de la parité de la génération actuelle.
//! \remark L'implémentation par défaut ne fait rien.
virtual void update_generation(unsigned gen) {}
};
#endif // NEIGHBORHOODRULE_HPP
......@@ -16,6 +16,7 @@ Fichier contenant diverses classes filles de PropertyVisitor permettant l'affich
#include <QVariant>
#include "property.hpp"
#include "neighborhoodDialog.hpp"
//! \brief Exception lancée lors d'une erreur liée aux visiteurs de propriétés.
class PropertyVisitorException : public std::exception
......@@ -51,6 +52,7 @@ private:
QWidget* current_widget();
void push_array_widget(const Property& prop);
QWidget *pop_widget();
NeighborhoodDialog* neighborhoodDialog;
private:
void visit(StringProperty& str);
......
......@@ -6,7 +6,7 @@
\brief Structure
Fichier contenant la classe Structure, représentant un ensemble de cellules constituant une structure.
**/
**/
#ifndef STRUCTURE_HPP
#define STRUCTURE_HPP
......@@ -18,13 +18,13 @@ Fichier contenant la classe Structure, représentant un ensemble de cellules con
#include "coord.hpp"
/**
/**
\class Structure
\brief Représente une structure
Cette classe permet de représenter un ensemble de cellules constituant une structure, comme un oscillateur ou un glider.
**/
class Structure
Cette classe permet de représenter un ensemble de cellules constituant une structure, comme un oscillateur ou un glider.
**/
class Structure
{
public:
//! Titre de la structure
......@@ -40,7 +40,10 @@ public:
public:
//! \brief Constructeur par défaut, représente une structure vide.
Structure() = default;
Structure()
{
top_left = {0, 0};
}
//! \brief Constructeur acceptant deux itérateurs en argument, pointant vers des std::pair de coordonées et de valeur d'état. Appelle 'load<It>(begin, end)'.
//! \pre It doit pointer vers un std::pair<Coord, int>.
......@@ -56,12 +59,13 @@ public:
void load(It begin, It end)
{
static_assert (std::is_same<typename std::remove_reference<decltype(*begin)>::type, std::pair<Coord, unsigned>>::value ||
std::is_same<typename std::remove_reference<decltype(*begin)>::type, std::pair<const Coord, unsigned>>::value,
"Iterator value type must be std::pair<Coord, unsigned>");
std::is_same<typename std::remove_reference<decltype(*begin)>::type, std::pair<const Coord, unsigned>>::value,
"Iterator value type must be std::pair<Coord, unsigned>");
int min_x, min_y, max_x, max_y;
min_x = min_y = std::numeric_limits<int>::max();
max_x = max_y = std::numeric_limits<int>::min();
bool empty = true;
// Première passe pour calculer les positions minimales et maximales
for (auto it = begin; it != end; ++it)
{
......@@ -69,13 +73,20 @@ public:
if (it->second == 0)
continue;
empty = false;
if (it->first.x > max_x) max_x = it->first.x;
if (it->first.x < min_x) min_x = it->first.x;
if (it->first.y > max_y) max_y = it->first.y;
if (it->first.y < min_y) min_y = it->first.y;
}
top_left.x = min_x; top_left.y = min_y;
if (empty)
top_left = {0, 0};
else
{
top_left.x = min_x; top_left.y = min_y;
}
m_width = max_x - min_x + 1;
m_height = max_y - min_y + 1;
......
{
"alphabet": [
{
"color": [
255,
255,
0
],
"name": "0"
},
{
"color": [
255,
215,
135
],
"name": "1"
},
{
"color": [
255,
170,
0
],
"name": "2"
},
{
"color": [
255,
0,
0
],
"name": "3"
}
],
"author": "JM",
"date": "dim. juin 6 2021",
"desc": "Automate cellulaire de Griffeath.",
"neighborhood_data": {
"radius": 1
},
"neighborhood_name": "Moore",
"title": "griffeath",
"transition_data": {
"rule_string": "i, (i+1)%4:[3..*] -> (i+1)%4"
},
"transition_name": "Totalistic rulestring"
}
{
"alphabet": [
{
"color": [
255,
255,
255
],
"name": "Dead"
},
{
"color": [
0,
0,
255
],
"name": "Alive"
}
],
"author": "JM",
"date": "jeu. juin 3 2021",
"desc": "Langston's Loops.\n!!CORRIGER L'ALPHABET!!",
"neighborhood_data": {
"radius": 1
},
"neighborhood_name": "Von Neumann",
"title": "langston_loops",
"transition_data": {
"rule_string": "rotate4\n0,0,0,0,0->0\n0,0,0,0,1->2\n0,0,0,0,2->0\n0,0,0,0,3->0\n0,0,0,0,5->0\n0,0,0,0,6->3\n0,0,0,0,7->1\n0,0,0,1,1->2\n0,0,0,1,2->2\n0,0,0,1,3->2\n0,0,0,2,1->2\n0,0,0,2,2->0\n0,0,0,2,3->0\n0,0,0,2,6->2\n0,0,0,2,7->2\n0,0,0,3,2->0\n0,0,0,5,2->5\n0,0,0,6,2->2\n0,0,0,7,2->2\n0,0,1,0,2->2\n0,0,1,1,2->0\n0,0,2,0,2->0\n0,0,2,0,3->0\n0,0,2,0,5->0\n0,0,2,1,2->5\n0,0,2,2,2->0\n0,0,2,3,2->2\n0,0,5,2,2->2\n0,1,2,3,2->1\n0,1,2,4,2->1\n0,1,2,5,2->5\n0,1,2,6,2->1\n0,1,2,7,2->1\n0,1,2,7,5->1\n0,1,4,2,2->1\n0,1,4,3,2->1\n0,1,4,4,2->1\n0,1,4,7,2->1\n0,1,6,2,5->1\n0,1,7,2,2->1\n0,1,7,2,5->5\n0,1,7,5,2->1\n0,1,7,6,2->1\n0,1,7,7,2->1\n0,2,5,2,7->1\n1,0,0,0,1->1\n1,0,0,0,6->1\n1,0,0,0,7->7\n1,0,0,1,1->1\n1,0,0,1,2->1\n1,0,0,2,1->1\n1,0,0,2,4->4\n1,0,0,2,7->7\n1,0,0,5,1->1\n1,0,1,0,1->1\n1,0,1,1,1->1\n1,0,1,2,4->4\n1,0,1,2,7->7\n1,0,2,0,2->6\n1,0,2,1,2->1\n1,0,2,2,1->1\n1,0,2,2,4->4\n1,0,2,2,6->3\n1,0,2,2,7->7\n1,0,2,3,2->7\n1,0,2,4,2->4\n1,0,2,6,2->6\n1,0,2,6,4->4\n1,0,2,6,7->7\n1,0,2,7,1->0\n1,0,2,7,2->7\n1,0,5,4,2->7\n1,1,1,1,2->1\n1,1,1,2,2->1\n1,1,1,2,4->4\n1,1,1,2,5->1\n1,1,1,2,6->1\n1,1,1,2,7->7\n1,1,1,5,2->2\n1,1,2,1,2->1\n1,1,2,2,2->1\n1,1,2,2,4->4\n1,1,2,2,5->1\n1,1,2,2,7->7\n1,1,2,3,2->1\n1,1,2,4,2->4\n1,1,2,6,2->1\n1,1,2,7,2->7\n1,1,3,2,2->1\n1,2,2,2,4->4\n1,2,2,2,7->7\n1,2,2,4,3->4\n1,2,2,5,4->7\n1,2,3,2,4->4\n1,2,3,2,7->7\n1,2,4,2,5->5\n1,2,4,2,6->7\n1,2,5,2,7->5\n2,0,0,0,1->2\n2,0,0,0,2->2\n2,0,0,0,4->2\n2,0,0,0,7->1\n2,0,0,1,2->2\n2,0,0,1,5->2\n2,0,0,2,1->2\n2,0,0,2,2->2\n2,0,0,2,3->2\n2,0,0,2,4->2\n2,0,0,2,5->0\n2,0,0,2,6->2\n2,0,0,2,7->2\n2,0,0,3,2->6\n2,0,0,4,2->3\n2,0,0,5,1->7\n2,0,0,5,2->2\n2,0,0,5,7->5\n2,0,0,7,2->2\n2,0,1,0,2->2\n2,0,1,1,2->2\n2,0,1,2,2->2\n2,0,1,4,2->2\n2,0,1,7,2->2\n2,0,2,0,2->2\n2,0,2,0,3->2\n2,0,2,0,5->2\n2,0,2,0,7->3\n2,0,2,1,2->2\n2,0,2,1,5->2\n2,0,2,2,1->2\n2,0,2,2,2->2\n2,0,2,2,7->2\n2,0,2,3,2->1\n2,0,2,4,2->2\n2,0,2,4,5->2\n2,0,2,5,2->0\n2,0,2,5,5->2\n2,0,2,6,2->2\n2,0,2,7,2->2\n2,0,3,1,2->2\n2,0,3,2,1->6\n2,0,3,2,2->6\n2,0,3,4,2->2\n2,0,4,2,2->2\n2,0,5,1,2->2\n2,0,5,2,1->2\n2,0,5,2,2->2\n2,0,5,5,2->1\n2,0,5,7,2->5\n2,0,6,2,2->2\n2,0,6,7,2->2\n2,0,7,1,2->2\n2,0,7,2,2->2\n2,0,7,4,2->2\n2,0,7,7,2->2\n2,1,1,2,2->2\n2,1,1,2,6->1\n2,1,2,2,2->2\n2,1,2,2,4->2\n2,1,2,2,6->2\n2,1,2,2,7->2\n2,1,4,2,2->2\n2,1,5,2,2->2\n2,1,6,2,2->2\n2,1,7,2,2->2\n2,2,2,2,7->2\n2,2,2,4,4->2\n2,2,2,4,6->2\n2,2,2,7,6->2\n2,2,2,7,7->2\n3,0,0,0,1->3\n3,0,0,0,2->2\n3,0,0,0,4->1\n3,0,0,0,7->6\n3,0,0,1,2->3\n3,0,0,4,2->1\n3,0,0,6,2->2\n3,0,1,0,2->1\n3,0,1,2,2->0\n3,0,2,5,1->1\n4,0,1,1,2->0\n4,0,1,2,2->0\n4,0,1,2,5->0\n4,0,2,1,2->0\n4,0,2,2,2->1\n4,0,2,3,2->6\n4,0,2,5,2->0\n4,0,3,2,2->1\n5,0,0,0,2->2\n5,0,0,2,1->5\n5,0,0,2,2->5\n5,0,0,2,3->2\n5,0,0,2,7->2\n5,0,0,5,2->0\n5,0,2,0,2->2\n5,0,2,1,2->2\n5,0,2,1,5->2\n5,0,2,2,2->0\n5,0,2,2,4->4\n5,0,2,7,2->2\n5,1,2,1,2->2\n5,1,2,2,2->0\n5,1,2,4,2->2\n5,1,2,7,2->2\n6,0,0,0,1->1\n6,0,0,0,2->1\n6,0,2,1,2->0\n6,1,2,1,2->5\n6,1,2,1,3->1\n6,1,2,2,2->5\n7,0,0,0,7->7\n7,0,1,1,2->0\n7,0,1,2,2->0\n7,0,1,2,5->0\n7,0,2,1,2->0\n7,0,2,2,2->1\n7,0,2,2,5->1\n7,0,2,3,2->1\n7,0,2,5,2->5\n7,0,2,7,2->0"
},
"transition_name": "Non isotropic rulestring"
}
{
"alphabet": [
{
"color": [
0,
0,
0
],
"name": "Background"
},
{
"color": [
0,
0,
255
],
"name": "Core"
},
{
"color": [
255,
0,
0
],
"name": "Sheath"
},
{
"color": [
0,
170,
0
],
"name": "Green"
},
{
"color": [
255,
255,
0
],
"name": "Yellow"
},
{
"color": [
255,
85,
255
],
"name": "Pink"
},
{
"color": [
255,
255,
255
],
"name": "White"
},
{
"color": [
0,
255,
255
],
"name": "Cyan"
}
],
"author": "JM",
"date": "dim. juin 6 2021",
"desc": "",
"neighborhood_data": {
"radius": 1
},
"neighborhood_name": "Von Neumann",
"title": "langton",
"transition_data": {
"rule_string": "rotate4\n0,0,0,0,0->0\n0,0,1,0,0->2\n0,0,2,0,0->0\n0,0,3,0,0->0\n0,0,5,0,0->0\n0,0,6,0,0->3\n0,0,7,0,0->1\n0,0,1,0,1->2\n0,0,2,0,1->2\n0,0,3,0,1->2\n0,0,1,0,2->2\n0,0,2,0,2->0\n0,0,3,0,2->0\n0,0,6,0,2->2\n0,0,7,0,2->2\n0,0,2,0,3->0\n0,0,2,0,5->5\n0,0,2,0,6->2\n0,0,2,0,7->2\n0,0,2,1,0->2\n0,0,2,1,1->0\n0,0,2,2,0->0\n0,0,3,2,0->0\n0,0,5,2,0->0\n0,0,2,2,1->5\n0,0,2,2,2->0\n0,0,2,2,3->2\n0,0,2,5,2->2\n0,1,2,2,3->1\n0,1,2,2,4->1\n0,1,2,2,5->5\n0,1,2,2,6->1\n0,1,2,2,7->1\n0,1,5,2,7->1\n0,1,2,4,2->1\n0,1,2,4,3->1\n0,1,2,4,4->1\n0,1,2,4,7->1\n0,1,5,6,2->1\n0,1,2,7,2->1\n0,1,5,7,2->5\n0,1,2,7,5->1\n0,1,2,7,6->1\n0,1,2,7,7->1\n0,2,7,5,2->1\n1,0,1,0,0->1\n1,0,6,0,0->1\n1,0,7,0,0->7\n1,0,1,0,1->1\n1,0,2,0,1->1\n1,0,1,0,2->1\n1,0,4,0,2->4\n1,0,7,0,2->7\n1,0,1,0,5->1\n1,0,1,1,0->1\n1,0,1,1,1->1\n1,0,4,1,2->4\n1,0,7,1,2->7\n1,0,2,2,0->6\n1,0,2,2,1->1\n1,0,1,2,2->1\n1,0,4,2,2->4\n1,0,6,2,2->3\n1,0,7,2,2->7\n1,0,2,2,3->7\n1,0,2,2,4->4\n1,0,2,2,6->6\n1,0,4,2,6->4\n1,0,7,2,6->7\n1,0,1,2,7->0\n1,0,2,2,7->7\n1,0,2,5,4->7\n1,1,2,1,1->1\n1,1,2,1,2->1\n1,1,4,1,2->4\n1,1,5,1,2->1\n1,1,6,1,2->1\n1,1,7,1,2->7\n1,1,2,1,5->2\n1,1,2,2,1->1\n1,1,2,2,2->1\n1,1,4,2,2->4\n1,1,5,2,2->1\n1,1,7,2,2->7\n1,1,2,2,3->1\n1,1,2,2,4->4\n1,1,2,2,6->1\n1,1,2,2,7->7\n1,1,2,3,2->1\n1,2,4,2,2->4\n1,2,7,2,2->7\n1,2,3,2,4->4\n1,2,4,2,5->7\n1,2,4,3,2->4\n1,2,7,3,2->7\n1,2,5,4,2->5\n1,2,6,4,2->7\n1,2,7,5,2->5\n2,0,1,0,0->2\n2,0,2,0,0->2\n2,0,4,0,0->2\n2,0,7,0,0->1\n2,0,2,0,1->2\n2,0,5,0,1->2\n2,0,1,0,2->2\n2,0,2,0,2->2\n2,0,3,0,2->2\n2,0,4,0,2->2\n2,0,5,0,2->0\n2,0,6,0,2->2\n2,0,7,0,2->2\n2,0,2,0,3->6\n2,0,2,0,4->3\n2,0,1,0,5->7\n2,0,2,0,5->2\n2,0,7,0,5->5\n2,0,2,0,7->2\n2,0,2,1,0->2\n2,0,2,1,1->2\n2,0,2,1,2->2\n2,0,2,1,4->2\n2,0,2,1,7->2\n2,0,2,2,0->2\n2,0,3,2,0->2\n2,0,5,2,0->2\n2,0,7,2,0->3\n2,0,2,2,1->2\n2,0,5,2,1->2\n2,0,1,2,2->2\n2,0,2,2,2->2\n2,0,7,2,2->2\n2,0,2,2,3->1\n2,0,2,2,4->2\n2,0,5,2,4->2\n2,0,2,2,5->0\n2,0,5,2,5->2\n2,0,2,2,6->2\n2,0,2,2,7->2\n2,0,2,3,1->2\n2,0,1,3,2->6\n2,0,2,3,2->6\n2,0,2,3,4->2\n2,0,2,4,2->2\n2,0,2,5,1->2\n2,0,1,5,2->2\n2,0,2,5,2->2\n2,0,2,5,5->1\n2,0,2,5,7->5\n2,0,2,6,2->2\n2,0,2,6,7->2\n2,0,2,7,1->2\n2,0,2,7,2->2\n2,0,2,7,4->2\n2,0,2,7,7->2\n2,1,2,1,2->2\n2,1,6,1,2->1\n2,1,2,2,2->2\n2,1,4,2,2->2\n2,1,6,2,2->2\n2,1,7,2,2->2\n2,1,2,4,2->2\n2,1,2,5,2->2\n2,1,2,6,2->2\n2,1,2,7,2->2\n2,2,7,2,2->2\n2,2,4,2,4->2\n2,2,6,2,4->2\n2,2,6,2,7->2\n2,2,7,2,7->2\n3,0,1,0,0->3\n3,0,2,0,0->2\n3,0,4,0,0->1\n3,0,7,0,0->6\n3,0,2,0,1->3\n3,0,2,0,4->1\n3,0,2,0,6->2\n3,0,2,1,0->1\n3,0,2,1,2->0\n3,0,1,2,5->1\n4,0,2,1,1->0\n4,0,2,1,2->0\n4,0,5,1,2->0\n4,0,2,2,1->0\n4,0,2,2,2->1\n4,0,2,2,3->6\n4,0,2,2,5->0\n4,0,2,3,2->1\n5,0,2,0,0->2\n5,0,1,0,2->5\n5,0,2,0,2->5\n5,0,3,0,2->2\n5,0,7,0,2->2\n5,0,2,0,5->0\n5,0,2,2,0->2\n5,0,2,2,1->2\n5,0,5,2,1->2\n5,0,2,2,2->0\n5,0,4,2,2->4\n5,0,2,2,7->2\n5,1,2,2,1->2\n5,1,2,2,2->0\n5,1,2,2,4->2\n5,1,2,2,7->2\n6,0,1,0,0->1\n6,0,2,0,0->1\n6,0,2,2,1->0\n6,1,2,2,1->5\n6,1,3,2,1->1\n6,1,2,2,2->5\n7,0,7,0,0->7\n7,0,2,1,1->0\n7,0,2,1,2->0\n7,0,5,1,2->0\n7,0,2,2,1->0\n7,0,2,2,2->1\n7,0,5,2,2->1\n7,0,2,2,3->1\n7,0,2,2,5->5\n7,0,2,2,7->0"
},
"transition_name": "Non isotropic rulestring"
}
{
"author": "JM",
"cells": [
{
"state": 2,
"x": 1,
"y": 0
},
{
"state": 2,
"x": 2,
"y": 0
},
{
"state": 2,
"x": 3,
"y": 0
},
{
"state": 2,
"x": 4,
"y": 0
},
{
"state": 2,
"x": 5,
"y": 0
},
{
"state": 2,
"x": 6,
"y": 0
},
{
"state": 2,
"x": 7,
"y": 0
},
{
"state": 2,
"x": 8,
"y": 0
},
{
"state": 2,
"x": 0,
"y": 1
},
{
"state": 1,
"x": 1,
"y": 1
},
{
"state": 7,
"x": 2,
"y": 1
},
{
"state": 1,
"x": 4,
"y": 1
},
{
"state": 4,
"x": 5,
"y": 1
},
{
"state": 1,
"x": 7,
"y": 1
},
{
"state": 4,
"x": 8,
"y": 1
},
{
"state": 2,
"x": 9,
"y": 1
},
{
"state": 2,
"x": 0,
"y": 2
},
{
"state": 2,
"x": 2,
"y": 2
},
{
"state": 2,
"x": 3,
"y": 2
},
{
"state": 2,
"x": 4,
"y": 2
},
{
"state": 2,
"x": 5,
"y": 2
},
{
"state": 2,
"x": 6,
"y": 2
},
{
"state": 2,
"x": 7,
"y": 2
},
{
"state": 2,
"x": 9,
"y": 2
},
{
"state": 2,
"x": 0,
"y": 3
},
{
"state": 7,
"x": 1,
"y": 3
},
{
"state": 2,
"x": 2,
"y": 3
},
{
"state": 2,
"x": 7,
"y": 3
},
{
"state": 1,
"x": 8,
"y": 3
},
{
"state": 2,
"x": 9,
"y": 3
},
{