Skip to content

Latest commit

History

8 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Turing

This is a quick implementation of a Turing machine in Python, Tkinter. It also exploits sub-modules of Tkinter. I wrote this code in order to work on finding Turing machines efficiently and test them. There are a lot of changes to be made to the code to make it much more efficient, plus new features to be added.

Implementation

This program uses a serie of inputs set to 0, 1 or empty. The states define, for each value, what it has to be changed to, the direction to go in and the next state. At the start, every input is set to empty and the firstly created and used state is 'init'. Empty can be represented with red, 0 with yellow and 1 with red. Note empty is displayed with a 'o'. Empty isn't always defined for Turing machines.

Usage

Upon executing the main file, two windows pop out, one is the set of inputs, the other one contains the entries for the states.

Inputs

The inputs window has a row of 20 squares (size is customizable in the program) that each can take the three previous colors. It swaps between these colors on click. After starting, they are replaced with text boxes.

States

The states window first contains a frame labeled 'init' which defines the initial state. A state is defined in three rows, one for every slot possible. For each possibility, you have an other color case for what it will be replaced with, an arrow to indicate the direction the cursor will go in and an entry to specify the next state's name. There is a menu with four options: 'start' starts the simulation; 'add state' creates a window asking for a new state name then adds it in the window; 'import' executes functions defined in external files for the simulation; 'export' writes your functions in a new file. Be careful of the state's name and make sure to fill the entry with one valid state name. They are executed upon starting the simulation (see the code explanation below). Imports may get overwritten.State names are verified at creation, ensuring they are written with ASCII characters. By default, three states are defined: 'init', the first to be executed; 'true', which concludes the program; 'undef', putting the program in an infinite loop.

Importing and exporting sets of states

The states window has a menu with two options: 'import' and 'export'.

Import

'import' lets you browse a Python file that gets executed instantly (for now). This file is expected to contain function definitions with tests for each symbol possible, a modification of the cursor. Then, it must return the new row, new cursor and next function. Functions imported may cause errors, notably if they get overwritten. For example, the init function will be overwritten. Editing imported states is an upcoming feature.

Export

'export' creates a new file where the function of every state defined in the states window is written.

Default examples

Soon!

Code explained

Machine creation

Soon!

Function generation

For each state, a function is called, named 'State.genFunc'. It generates a multiple-line string that writes a function definition. The function is named after the state's name. It takes for parameters the current row and the position of the cursor. It tests what the slot corresponds to, modifies the cursor accordingly, then returns the new list, the new position of the cursor and the next function. The generated string is executed directly. The author has to be careful not to specify a wrong name for the states or an inexistant next state.

Execution

After the 'start' button is pressed, three variables become primordial: 'func', 'slots' and 'cursor'. These are modified every new iteration: the current function is called and replaced with its own returned values, alongside the row and the cursor. A new row is created, displaying the new state.

About

Quick Turing machine simulator.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - Effece/Turing-Machine: Quick Turing machine simulator. · GitHub
Skip to content

Latest commit

History

8 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Turing

This is a quick implementation of a Turing machine in Python, Tkinter. It also exploits sub-modules of Tkinter. I wrote this code in order to work on finding Turing machines efficiently and test them. There are a lot of changes to be made to the code to make it much more efficient, plus new features to be added.

Implementation

This program uses a serie of inputs set to 0, 1 or empty. The states define, for each value, what it has to be changed to, the direction to go in and the next state. At the start, every input is set to empty and the firstly created and used state is 'init'. Empty can be represented with red, 0 with yellow and 1 with red. Note empty is displayed with a 'o'. Empty isn't always defined for Turing machines.

Usage

Upon executing the main file, two windows pop out, one is the set of inputs, the other one contains the entries for the states.

Inputs

The inputs window has a row of 20 squares (size is customizable in the program) that each can take the three previous colors. It swaps between these colors on click. After starting, they are replaced with text boxes.

States

The states window first contains a frame labeled 'init' which defines the initial state. A state is defined in three rows, one for every slot possible. For each possibility, you have an other color case for what it will be replaced with, an arrow to indicate the direction the cursor will go in and an entry to specify the next state's name. There is a menu with four options: 'start' starts the simulation; 'add state' creates a window asking for a new state name then adds it in the window; 'import' executes functions defined in external files for the simulation; 'export' writes your functions in a new file. Be careful of the state's name and make sure to fill the entry with one valid state name. They are executed upon starting the simulation (see the code explanation below). Imports may get overwritten.State names are verified at creation, ensuring they are written with ASCII characters. By default, three states are defined: 'init', the first to be executed; 'true', which concludes the program; 'undef', putting the program in an infinite loop.

Importing and exporting sets of states

The states window has a menu with two options: 'import' and 'export'.

Import

'import' lets you browse a Python file that gets executed instantly (for now). This file is expected to contain function definitions with tests for each symbol possible, a modification of the cursor. Then, it must return the new row, new cursor and next function. Functions imported may cause errors, notably if they get overwritten. For example, the init function will be overwritten. Editing imported states is an upcoming feature.

Export

'export' creates a new file where the function of every state defined in the states window is written.

Default examples

Soon!

Code explained

Machine creation

Soon!

Function generation

For each state, a function is called, named 'State.genFunc'. It generates a multiple-line string that writes a function definition. The function is named after the state's name. It takes for parameters the current row and the position of the cursor. It tests what the slot corresponds to, modifies the cursor accordingly, then returns the new list, the new position of the cursor and the next function. The generated string is executed directly. The author has to be careful not to specify a wrong name for the states or an inexistant next state.

Execution

After the 'start' button is pressed, three variables become primordial: 'func', 'slots' and 'cursor'. These are modified every new iteration: the current function is called and replaced with its own returned values, alongside the row and the cursor. A new row is created, displaying the new state.

About

Quick Turing machine simulator.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - Effece/Turing-Machine: Quick Turing machine simulator. · GitHub
Skip to content

Latest commit

History

8 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Turing

This is a quick implementation of a Turing machine in Python, Tkinter. It also exploits sub-modules of Tkinter. I wrote this code in order to work on finding Turing machines efficiently and test them. There are a lot of changes to be made to the code to make it much more efficient, plus new features to be added.

Implementation

This program uses a serie of inputs set to 0, 1 or empty. The states define, for each value, what it has to be changed to, the direction to go in and the next state. At the start, every input is set to empty and the firstly created and used state is 'init'. Empty can be represented with red, 0 with yellow and 1 with red. Note empty is displayed with a 'o'. Empty isn't always defined for Turing machines.

Usage

Upon executing the main file, two windows pop out, one is the set of inputs, the other one contains the entries for the states.

Inputs

The inputs window has a row of 20 squares (size is customizable in the program) that each can take the three previous colors. It swaps between these colors on click. After starting, they are replaced with text boxes.

States

The states window first contains a frame labeled 'init' which defines the initial state. A state is defined in three rows, one for every slot possible. For each possibility, you have an other color case for what it will be replaced with, an arrow to indicate the direction the cursor will go in and an entry to specify the next state's name. There is a menu with four options: 'start' starts the simulation; 'add state' creates a window asking for a new state name then adds it in the window; 'import' executes functions defined in external files for the simulation; 'export' writes your functions in a new file. Be careful of the state's name and make sure to fill the entry with one valid state name. They are executed upon starting the simulation (see the code explanation below). Imports may get overwritten.State names are verified at creation, ensuring they are written with ASCII characters. By default, three states are defined: 'init', the first to be executed; 'true', which concludes the program; 'undef', putting the program in an infinite loop.

Importing and exporting sets of states

The states window has a menu with two options: 'import' and 'export'.

Import

'import' lets you browse a Python file that gets executed instantly (for now). This file is expected to contain function definitions with tests for each symbol possible, a modification of the cursor. Then, it must return the new row, new cursor and next function. Functions imported may cause errors, notably if they get overwritten. For example, the init function will be overwritten. Editing imported states is an upcoming feature.

Export

'export' creates a new file where the function of every state defined in the states window is written.

Default examples

Soon!

Code explained

Machine creation

Soon!

Function generation

For each state, a function is called, named 'State.genFunc'. It generates a multiple-line string that writes a function definition. The function is named after the state's name. It takes for parameters the current row and the position of the cursor. It tests what the slot corresponds to, modifies the cursor accordingly, then returns the new list, the new position of the cursor and the next function. The generated string is executed directly. The author has to be careful not to specify a wrong name for the states or an inexistant next state.

Execution

After the 'start' button is pressed, three variables become primordial: 'func', 'slots' and 'cursor'. These are modified every new iteration: the current function is called and replaced with its own returned values, alongside the row and the cursor. A new row is created, displaying the new state.

About

Quick Turing machine simulator.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - Effece/Turing-Machine: Quick Turing machine simulator. · GitHub
Skip to content

Latest commit

History

8 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Turing

This is a quick implementation of a Turing machine in Python, Tkinter. It also exploits sub-modules of Tkinter. I wrote this code in order to work on finding Turing machines efficiently and test them. There are a lot of changes to be made to the code to make it much more efficient, plus new features to be added.

Implementation

This program uses a serie of inputs set to 0, 1 or empty. The states define, for each value, what it has to be changed to, the direction to go in and the next state. At the start, every input is set to empty and the firstly created and used state is 'init'. Empty can be represented with red, 0 with yellow and 1 with red. Note empty is displayed with a 'o'. Empty isn't always defined for Turing machines.

Usage

Upon executing the main file, two windows pop out, one is the set of inputs, the other one contains the entries for the states.

Inputs

The inputs window has a row of 20 squares (size is customizable in the program) that each can take the three previous colors. It swaps between these colors on click. After starting, they are replaced with text boxes.

States

The states window first contains a frame labeled 'init' which defines the initial state. A state is defined in three rows, one for every slot possible. For each possibility, you have an other color case for what it will be replaced with, an arrow to indicate the direction the cursor will go in and an entry to specify the next state's name. There is a menu with four options: 'start' starts the simulation; 'add state' creates a window asking for a new state name then adds it in the window; 'import' executes functions defined in external files for the simulation; 'export' writes your functions in a new file. Be careful of the state's name and make sure to fill the entry with one valid state name. They are executed upon starting the simulation (see the code explanation below). Imports may get overwritten.State names are verified at creation, ensuring they are written with ASCII characters. By default, three states are defined: 'init', the first to be executed; 'true', which concludes the program; 'undef', putting the program in an infinite loop.

Importing and exporting sets of states

The states window has a menu with two options: 'import' and 'export'.

Import

'import' lets you browse a Python file that gets executed instantly (for now). This file is expected to contain function definitions with tests for each symbol possible, a modification of the cursor. Then, it must return the new row, new cursor and next function. Functions imported may cause errors, notably if they get overwritten. For example, the init function will be overwritten. Editing imported states is an upcoming feature.

Export

'export' creates a new file where the function of every state defined in the states window is written.

Default examples

Soon!

Code explained

Machine creation

Soon!

Function generation

For each state, a function is called, named 'State.genFunc'. It generates a multiple-line string that writes a function definition. The function is named after the state's name. It takes for parameters the current row and the position of the cursor. It tests what the slot corresponds to, modifies the cursor accordingly, then returns the new list, the new position of the cursor and the next function. The generated string is executed directly. The author has to be careful not to specify a wrong name for the states or an inexistant next state.

Execution

After the 'start' button is pressed, three variables become primordial: 'func', 'slots' and 'cursor'. These are modified every new iteration: the current function is called and replaced with its own returned values, alongside the row and the cursor. A new row is created, displaying the new state.

About

Quick Turing machine simulator.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - Effece/Turing-Machine: Quick Turing machine simulator. · GitHub
Skip to content

Latest commit

History

8 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Turing

This is a quick implementation of a Turing machine in Python, Tkinter. It also exploits sub-modules of Tkinter. I wrote this code in order to work on finding Turing machines efficiently and test them. There are a lot of changes to be made to the code to make it much more efficient, plus new features to be added.

Implementation

This program uses a serie of inputs set to 0, 1 or empty. The states define, for each value, what it has to be changed to, the direction to go in and the next state. At the start, every input is set to empty and the firstly created and used state is 'init'. Empty can be represented with red, 0 with yellow and 1 with red. Note empty is displayed with a 'o'. Empty isn't always defined for Turing machines.

Usage

Upon executing the main file, two windows pop out, one is the set of inputs, the other one contains the entries for the states.

Inputs

The inputs window has a row of 20 squares (size is customizable in the program) that each can take the three previous colors. It swaps between these colors on click. After starting, they are replaced with text boxes.

States

The states window first contains a frame labeled 'init' which defines the initial state. A state is defined in three rows, one for every slot possible. For each possibility, you have an other color case for what it will be replaced with, an arrow to indicate the direction the cursor will go in and an entry to specify the next state's name. There is a menu with four options: 'start' starts the simulation; 'add state' creates a window asking for a new state name then adds it in the window; 'import' executes functions defined in external files for the simulation; 'export' writes your functions in a new file. Be careful of the state's name and make sure to fill the entry with one valid state name. They are executed upon starting the simulation (see the code explanation below). Imports may get overwritten.State names are verified at creation, ensuring they are written with ASCII characters. By default, three states are defined: 'init', the first to be executed; 'true', which concludes the program; 'undef', putting the program in an infinite loop.

Importing and exporting sets of states

The states window has a menu with two options: 'import' and 'export'.

Import

'import' lets you browse a Python file that gets executed instantly (for now). This file is expected to contain function definitions with tests for each symbol possible, a modification of the cursor. Then, it must return the new row, new cursor and next function. Functions imported may cause errors, notably if they get overwritten. For example, the init function will be overwritten. Editing imported states is an upcoming feature.

Export

'export' creates a new file where the function of every state defined in the states window is written.

Default examples

Soon!

Code explained

Machine creation

Soon!

Function generation

For each state, a function is called, named 'State.genFunc'. It generates a multiple-line string that writes a function definition. The function is named after the state's name. It takes for parameters the current row and the position of the cursor. It tests what the slot corresponds to, modifies the cursor accordingly, then returns the new list, the new position of the cursor and the next function. The generated string is executed directly. The author has to be careful not to specify a wrong name for the states or an inexistant next state.

Execution

After the 'start' button is pressed, three variables become primordial: 'func', 'slots' and 'cursor'. These are modified every new iteration: the current function is called and replaced with its own returned values, alongside the row and the cursor. A new row is created, displaying the new state.

About

Quick Turing machine simulator.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - Effece/Turing-Machine: Quick Turing machine simulator. · GitHub
Skip to content

Latest commit

History

8 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Turing

This is a quick implementation of a Turing machine in Python, Tkinter. It also exploits sub-modules of Tkinter. I wrote this code in order to work on finding Turing machines efficiently and test them. There are a lot of changes to be made to the code to make it much more efficient, plus new features to be added.

Implementation

This program uses a serie of inputs set to 0, 1 or empty. The states define, for each value, what it has to be changed to, the direction to go in and the next state. At the start, every input is set to empty and the firstly created and used state is 'init'. Empty can be represented with red, 0 with yellow and 1 with red. Note empty is displayed with a 'o'. Empty isn't always defined for Turing machines.

Usage

Upon executing the main file, two windows pop out, one is the set of inputs, the other one contains the entries for the states.

Inputs

The inputs window has a row of 20 squares (size is customizable in the program) that each can take the three previous colors. It swaps between these colors on click. After starting, they are replaced with text boxes.

States

The states window first contains a frame labeled 'init' which defines the initial state. A state is defined in three rows, one for every slot possible. For each possibility, you have an other color case for what it will be replaced with, an arrow to indicate the direction the cursor will go in and an entry to specify the next state's name. There is a menu with four options: 'start' starts the simulation; 'add state' creates a window asking for a new state name then adds it in the window; 'import' executes functions defined in external files for the simulation; 'export' writes your functions in a new file. Be careful of the state's name and make sure to fill the entry with one valid state name. They are executed upon starting the simulation (see the code explanation below). Imports may get overwritten.State names are verified at creation, ensuring they are written with ASCII characters. By default, three states are defined: 'init', the first to be executed; 'true', which concludes the program; 'undef', putting the program in an infinite loop.

Importing and exporting sets of states

The states window has a menu with two options: 'import' and 'export'.

Import

'import' lets you browse a Python file that gets executed instantly (for now). This file is expected to contain function definitions with tests for each symbol possible, a modification of the cursor. Then, it must return the new row, new cursor and next function. Functions imported may cause errors, notably if they get overwritten. For example, the init function will be overwritten. Editing imported states is an upcoming feature.

Export

'export' creates a new file where the function of every state defined in the states window is written.

Default examples

Soon!

Code explained

Machine creation

Soon!

Function generation

For each state, a function is called, named 'State.genFunc'. It generates a multiple-line string that writes a function definition. The function is named after the state's name. It takes for parameters the current row and the position of the cursor. It tests what the slot corresponds to, modifies the cursor accordingly, then returns the new list, the new position of the cursor and the next function. The generated string is executed directly. The author has to be careful not to specify a wrong name for the states or an inexistant next state.

Execution

After the 'start' button is pressed, three variables become primordial: 'func', 'slots' and 'cursor'. These are modified every new iteration: the current function is called and replaced with its own returned values, alongside the row and the cursor. A new row is created, displaying the new state.

About

Quick Turing machine simulator.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - Effece/Turing-Machine: Quick Turing machine simulator. · GitHub
Skip to content

Latest commit

History

8 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Turing

This is a quick implementation of a Turing machine in Python, Tkinter. It also exploits sub-modules of Tkinter. I wrote this code in order to work on finding Turing machines efficiently and test them. There are a lot of changes to be made to the code to make it much more efficient, plus new features to be added.

Implementation

This program uses a serie of inputs set to 0, 1 or empty. The states define, for each value, what it has to be changed to, the direction to go in and the next state. At the start, every input is set to empty and the firstly created and used state is 'init'. Empty can be represented with red, 0 with yellow and 1 with red. Note empty is displayed with a 'o'. Empty isn't always defined for Turing machines.

Usage

Upon executing the main file, two windows pop out, one is the set of inputs, the other one contains the entries for the states.

Inputs

The inputs window has a row of 20 squares (size is customizable in the program) that each can take the three previous colors. It swaps between these colors on click. After starting, they are replaced with text boxes.

States

The states window first contains a frame labeled 'init' which defines the initial state. A state is defined in three rows, one for every slot possible. For each possibility, you have an other color case for what it will be replaced with, an arrow to indicate the direction the cursor will go in and an entry to specify the next state's name. There is a menu with four options: 'start' starts the simulation; 'add state' creates a window asking for a new state name then adds it in the window; 'import' executes functions defined in external files for the simulation; 'export' writes your functions in a new file. Be careful of the state's name and make sure to fill the entry with one valid state name. They are executed upon starting the simulation (see the code explanation below). Imports may get overwritten.State names are verified at creation, ensuring they are written with ASCII characters. By default, three states are defined: 'init', the first to be executed; 'true', which concludes the program; 'undef', putting the program in an infinite loop.

Importing and exporting sets of states

The states window has a menu with two options: 'import' and 'export'.

Import

'import' lets you browse a Python file that gets executed instantly (for now). This file is expected to contain function definitions with tests for each symbol possible, a modification of the cursor. Then, it must return the new row, new cursor and next function. Functions imported may cause errors, notably if they get overwritten. For example, the init function will be overwritten. Editing imported states is an upcoming feature.

Export

'export' creates a new file where the function of every state defined in the states window is written.

Default examples

Soon!

Code explained

Machine creation

Soon!

Function generation

For each state, a function is called, named 'State.genFunc'. It generates a multiple-line string that writes a function definition. The function is named after the state's name. It takes for parameters the current row and the position of the cursor. It tests what the slot corresponds to, modifies the cursor accordingly, then returns the new list, the new position of the cursor and the next function. The generated string is executed directly. The author has to be careful not to specify a wrong name for the states or an inexistant next state.

Execution

After the 'start' button is pressed, three variables become primordial: 'func', 'slots' and 'cursor'. These are modified every new iteration: the current function is called and replaced with its own returned values, alongside the row and the cursor. A new row is created, displaying the new state.

About

Quick Turing machine simulator.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - Effece/Turing-Machine: Quick Turing machine simulator. · GitHub
Skip to content

Latest commit

History

8 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Turing

This is a quick implementation of a Turing machine in Python, Tkinter. It also exploits sub-modules of Tkinter. I wrote this code in order to work on finding Turing machines efficiently and test them. There are a lot of changes to be made to the code to make it much more efficient, plus new features to be added.

Implementation

This program uses a serie of inputs set to 0, 1 or empty. The states define, for each value, what it has to be changed to, the direction to go in and the next state. At the start, every input is set to empty and the firstly created and used state is 'init'. Empty can be represented with red, 0 with yellow and 1 with red. Note empty is displayed with a 'o'. Empty isn't always defined for Turing machines.

Usage

Upon executing the main file, two windows pop out, one is the set of inputs, the other one contains the entries for the states.

Inputs

The inputs window has a row of 20 squares (size is customizable in the program) that each can take the three previous colors. It swaps between these colors on click. After starting, they are replaced with text boxes.

States

The states window first contains a frame labeled 'init' which defines the initial state. A state is defined in three rows, one for every slot possible. For each possibility, you have an other color case for what it will be replaced with, an arrow to indicate the direction the cursor will go in and an entry to specify the next state's name. There is a menu with four options: 'start' starts the simulation; 'add state' creates a window asking for a new state name then adds it in the window; 'import' executes functions defined in external files for the simulation; 'export' writes your functions in a new file. Be careful of the state's name and make sure to fill the entry with one valid state name. They are executed upon starting the simulation (see the code explanation below). Imports may get overwritten.State names are verified at creation, ensuring they are written with ASCII characters. By default, three states are defined: 'init', the first to be executed; 'true', which concludes the program; 'undef', putting the program in an infinite loop.

Importing and exporting sets of states

The states window has a menu with two options: 'import' and 'export'.

Import

'import' lets you browse a Python file that gets executed instantly (for now). This file is expected to contain function definitions with tests for each symbol possible, a modification of the cursor. Then, it must return the new row, new cursor and next function. Functions imported may cause errors, notably if they get overwritten. For example, the init function will be overwritten. Editing imported states is an upcoming feature.

Export

'export' creates a new file where the function of every state defined in the states window is written.

Default examples

Soon!

Code explained

Machine creation

Soon!

Function generation

For each state, a function is called, named 'State.genFunc'. It generates a multiple-line string that writes a function definition. The function is named after the state's name. It takes for parameters the current row and the position of the cursor. It tests what the slot corresponds to, modifies the cursor accordingly, then returns the new list, the new position of the cursor and the next function. The generated string is executed directly. The author has to be careful not to specify a wrong name for the states or an inexistant next state.

Execution

After the 'start' button is pressed, three variables become primordial: 'func', 'slots' and 'cursor'. These are modified every new iteration: the current function is called and replaced with its own returned values, alongside the row and the cursor. A new row is created, displaying the new state.

About

Quick Turing machine simulator.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages