Skip to content

Commit d20a6c5

Browse files
committed
Rename the example turing machine.
1 parent abd0ecf commit d20a6c5

15 files changed

+52
-52
lines changed

Makefile

+2-2
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,11 @@ clean:
2323

2424
.PHONY: run
2525
run: venv
26-
venv/bin/python -m vim_turing_machine.machines.merge_business_hours.merge_business_hours '[[1,2],[2,3],[5,8]]' 5
26+
venv/bin/python -m vim_turing_machine.machines.merge_overlapping_intervals.merge_overlapping_intervals '[[1,2],[2,3],[5,8]]' 5
2727

2828
.PHONY: run-vim
2929
build-vim: venv
30-
venv/bin/python -m vim_turing_machine.machines.merge_business_hours.vim_merge_business_hours '[[1,2],[2,3],[5,8]]' 5
30+
venv/bin/python -m vim_turing_machine.machines.merge_overlapping_intervals.vim_merge_overlapping_intervals '[[1,2],[2,3],[5,8]]' 5
3131

3232
open-vim-machine: build-vim
3333
vim -u vimrc machine.vim

README.md

+6-6
Original file line numberDiff line numberDiff line change
@@ -8,22 +8,22 @@ vim_turing_machine: a tool to allow you to run a Turing machine using only
88
normal mode Vim commands.
99

1010
And now you might ask, but what can we do on a Turing machine! To demonstrate
11-
its capabilities, we implemented a solution to the Merge Business Hours
12-
interview question and defined all the state transitions needed to solve this
11+
its capabilities, we implemented a solution to the Merge Overlapping Intervals
12+
question and defined all the state transitions needed to solve this
1313
glorious problem. So next time you need to merge some intervals, don't
1414
hand-write a 10-line python program. Instead, take out your favorite editor and
15-
watch it solve the problem in less than a minute with 1500 lines!
15+
watch it solve the problem in less than a minute with 1500 state transitions!
1616

1717
But a simple naysayer may say, 'We already have vimscript! Why in God's name
1818
would I want to use a Turing machine instead?' To that, we retort: our Turing
1919
machine only uses normal mode. So you could theoretically just type in the
2020
program and then execute it without running a single script! No ex mode either!
2121
This project proves that normal mode in Vim is as powerful as any computer!
2222

23-
Merging your favorite business's hours
24-
======================================
23+
Merging your favorite intervals
24+
===============================
2525

26-
Given a set of sorted potentially overlapping open/close hours, merge the
26+
Given a set of sorted potentially overlapping open/close intervals, merge the
2727
overlapping intervals together.
2828

2929
Example:

decode_hours.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
#! /bin/bash
22

3-
venv/bin/python -m vim_turing_machine.machines.merge_business_hours.decode_hours "$1" $2
3+
venv/bin/python -m vim_turing_machine.machines.merge_overlapping_intervals.decode_hours "$1" $2

tests/machines/merge_business_hours/decode_hours_test.py tests/machines/merge_overlapping_intervals/decode_hours_test.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from vim_turing_machine.machines.merge_business_hours.decode_hours import decode_hours
1+
from vim_turing_machine.machines.merge_overlapping_intervals.decode_hours import decode_hours
22

33

44
def test_encode_hours():

tests/machines/merge_business_hours/encode_hours_test.py tests/machines/merge_overlapping_intervals/encode_hours_test.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import pytest
22

3-
from vim_turing_machine.machines.merge_business_hours.encode_hours import encode_hours
4-
from vim_turing_machine.machines.merge_business_hours.encode_hours import encode_in_x_bits
3+
from vim_turing_machine.machines.merge_overlapping_intervals.encode_hours import encode_hours
4+
from vim_turing_machine.machines.merge_overlapping_intervals.encode_hours import encode_in_x_bits
55

66

77
@pytest.mark.parametrize('number, encoded', [

tests/machines/merge_business_hours/merge_business_hours_test.py tests/machines/merge_overlapping_intervals/merge_overlapping_intervals_test.py

+10-10
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,17 @@
22

33
import pytest
44

5-
import vim_turing_machine.machines.merge_business_hours.merge_business_hours
5+
import vim_turing_machine.machines.merge_overlapping_intervals.merge_overlapping_intervals
66
import vim_turing_machine.struct
77
import vim_turing_machine.turing_machine
88
from vim_turing_machine.constants import INITIAL_STATE
99
from vim_turing_machine.constants import NO_FINAL_STATE
1010
from vim_turing_machine.constants import YES_FINAL_STATE
11-
from vim_turing_machine.machines.merge_business_hours.decode_hours import decode_hours
12-
from vim_turing_machine.machines.merge_business_hours.encode_hours import encode_hours
13-
from vim_turing_machine.machines.merge_business_hours.merge_business_hours import invert_bit
14-
from vim_turing_machine.machines.merge_business_hours.merge_business_hours import invert_direction
15-
from vim_turing_machine.machines.merge_business_hours.merge_business_hours import MergeBusinessHoursGenerator
11+
from vim_turing_machine.machines.merge_overlapping_intervals.decode_hours import decode_hours
12+
from vim_turing_machine.machines.merge_overlapping_intervals.encode_hours import encode_hours
13+
from vim_turing_machine.machines.merge_overlapping_intervals.merge_overlapping_intervals import invert_bit
14+
from vim_turing_machine.machines.merge_overlapping_intervals.merge_overlapping_intervals import invert_direction
15+
from vim_turing_machine.machines.merge_overlapping_intervals.merge_overlapping_intervals import MergeBusinessHoursGenerator
1616
from vim_turing_machine.struct import BACKWARDS
1717
from vim_turing_machine.struct import FORWARDS
1818
from vim_turing_machine.turing_machine import TuringMachine
@@ -32,12 +32,12 @@ def mock_blank_character():
3232
('0', '1', ' '),
3333
):
3434
with mock.patch.object(
35-
vim_turing_machine.machines.merge_business_hours.merge_business_hours,
35+
vim_turing_machine.machines.merge_overlapping_intervals.merge_overlapping_intervals,
3636
'BLANK_CHARACTER',
3737
' ',
3838
):
3939
with mock.patch.object(
40-
vim_turing_machine.machines.merge_business_hours.merge_business_hours,
40+
vim_turing_machine.machines.merge_overlapping_intervals.merge_overlapping_intervals,
4141
'VALID_CHARACTERS',
4242
('0', '1', ' '),
4343
):
@@ -265,11 +265,11 @@ def test_copy_closing_hour_without_merging(merger):
265265
)
266266
]
267267
)
268-
def test_merge_business_hours(merger, initial_hours, final_hours):
268+
def test_merge_overlapping_intervals(merger, initial_hours, final_hours):
269269
"""The true integration test!"""
270270
tape = encode_hours(initial_hours, num_bits=3)
271271
machine = run_machine(
272-
merger.merge_business_hours_transitions(),
272+
merger.merge_overlapping_intervals_transitions(),
273273
tape=tape,
274274
)
275275

tox.ini

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ envdir = venv
2121
commands =
2222

2323
[flake8]
24-
max-line-length = 119
24+
max-line-length = 131
2525

2626
[pep8]
2727
ignore = E265,E309,E501

vim_turing_machine/machines/merge_business_hours/vim_merge_business_hours.py

-17
This file was deleted.

vim_turing_machine/machines/merge_business_hours/decode_hours.py vim_turing_machine/machines/merge_overlapping_intervals/decode_hours.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
"""Descodes a binary string to a json representation of the business's hours
2-
after the merge business hours turing machine has processed it. Reads json from
3-
arv1 and outputs the initial tape."""
1+
"""Decodes a binary string to a json representation of the intervals
2+
after the merge overlapping intervals turing machine have processed them. Reads
3+
json from the command line and outputs the initial tape."""
44
import json
55
import sys
66

vim_turing_machine/machines/merge_business_hours/encode_hours.py vim_turing_machine/machines/merge_overlapping_intervals/encode_hours.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
"""Encodes a json representation of the business's hours into the 5-bit binary
2-
representation used by the merge business hours turing machine. It takes input
3-
from stdin and outputs the initial tape."""
1+
"""Encodes a json representation of the intervals into the 5-bit binary
2+
representation used by the merge overlapping intervals hours turing machine. It
3+
takes input from stdin and outputs the initial tape."""
44
import json
55
import sys
66

vim_turing_machine/machines/merge_business_hours/merge_business_hours.py vim_turing_machine/machines/merge_overlapping_intervals/merge_overlapping_intervals.py

+6-6
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@
1818
from vim_turing_machine.constants import INITIAL_STATE
1919
from vim_turing_machine.constants import VALID_CHARACTERS
2020
from vim_turing_machine.constants import YES_FINAL_STATE
21-
from vim_turing_machine.machines.merge_business_hours.decode_hours import decode_hours
22-
from vim_turing_machine.machines.merge_business_hours.encode_hours import encode_hours
21+
from vim_turing_machine.machines.merge_overlapping_intervals.decode_hours import decode_hours
22+
from vim_turing_machine.machines.merge_overlapping_intervals.encode_hours import encode_hours
2323
from vim_turing_machine.struct import BACKWARDS
2424
from vim_turing_machine.struct import DO_NOT_MOVE
2525
from vim_turing_machine.struct import FORWARDS
@@ -31,7 +31,7 @@ class MergeBusinessHoursGenerator(object):
3131
def __init__(self, num_bits=BITS_PER_NUMBER):
3232
self._num_bits = num_bits
3333

34-
def merge_business_hours_transitions(self):
34+
def merge_overlapping_intervals_transitions(self):
3535
"""This is the main orchestration point of the program"""
3636
# This is the beginning of the loop that goes through the rest of the hours.
3737
CHECK_NEXT_SET_OF_HOURS = 'CheckNextSetOfHours'
@@ -673,7 +673,7 @@ def invert_direction(direction):
673673
initial_tape = encode_hours(input_string, num_bits)
674674

675675
gen = MergeBusinessHoursGenerator(num_bits)
676-
merge_business_hours = TuringMachine(gen.merge_business_hours_transitions(), debug=True)
677-
merge_business_hours.run(initial_tape=initial_tape, max_steps=5000)
676+
merge_overlapping_intervals = TuringMachine(gen.merge_overlapping_intervals_transitions(), debug=True)
677+
merge_overlapping_intervals.run(initial_tape=initial_tape, max_steps=5000)
678678

679-
print(decode_hours(''.join(merge_business_hours.tape), num_bits))
679+
print(decode_hours(''.join(merge_overlapping_intervals.tape), num_bits))
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import json
2+
import sys
3+
4+
from vim_turing_machine.machines.merge_overlapping_intervals.encode_hours import encode_hours
5+
from vim_turing_machine.machines.merge_overlapping_intervals.merge_overlapping_intervals import MergeBusinessHoursGenerator
6+
from vim_turing_machine.vim_machine import VimTuringMachine
7+
8+
9+
if __name__ == '__main__':
10+
input_string = json.loads(sys.argv[1])
11+
num_bits = int(sys.argv[2])
12+
13+
initial_tape = encode_hours(input_string, num_bits)
14+
15+
gen = MergeBusinessHoursGenerator(num_bits)
16+
merge_overlapping_intervals = VimTuringMachine(gen.merge_overlapping_intervals_transitions(), debug=True)
17+
merge_overlapping_intervals.run(initial_tape=initial_tape)

0 commit comments

Comments
 (0)