initial commit
commit
c2b1ece7f7
@ -0,0 +1 @@
|
|||||||
|
.DS_STORE
|
@ -0,0 +1,138 @@
|
|||||||
|
# Imports
|
||||||
|
import re
|
||||||
|
from ast import literal_eval
|
||||||
|
|
||||||
|
|
||||||
|
# LevelData Class
|
||||||
|
class LevelData():
|
||||||
|
|
||||||
|
|
||||||
|
# Validate Level Data
|
||||||
|
@staticmethod
|
||||||
|
def validate(level_data):
|
||||||
|
# Variables
|
||||||
|
level_data = level_data
|
||||||
|
number_of_items = 0
|
||||||
|
number_of_items_buffer = 0
|
||||||
|
# Regular Expression
|
||||||
|
numbers = re.compile(r"\d")
|
||||||
|
# Check and Return Data
|
||||||
|
try:
|
||||||
|
data = literal_eval(level_data)
|
||||||
|
for list_number, list_value in enumerate(data):
|
||||||
|
if list_number == 0:
|
||||||
|
for number, number_value in enumerate(list_value):
|
||||||
|
if number_value < 0 or number_value > 9:
|
||||||
|
return False
|
||||||
|
number_of_items += 1
|
||||||
|
else:
|
||||||
|
for number, number_value in enumerate(list_value):
|
||||||
|
if number_value < 0 or number_value > 9:
|
||||||
|
return False
|
||||||
|
number_of_items_buffer += 1
|
||||||
|
if number_of_items_buffer != number_of_items:
|
||||||
|
return False
|
||||||
|
number_of_items_buffer = 0
|
||||||
|
return True
|
||||||
|
except:
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
# Compress Level Data
|
||||||
|
@staticmethod
|
||||||
|
def compress(level_data):
|
||||||
|
# Variables
|
||||||
|
level_data = level_data
|
||||||
|
cleared_level_data = ""
|
||||||
|
compressed_level_data = ""
|
||||||
|
number_of_matches = 0
|
||||||
|
current_character_count = 0
|
||||||
|
# Regular Expression
|
||||||
|
numbers = re.compile(r"\d")
|
||||||
|
# Add Prefix
|
||||||
|
data = literal_eval(level_data)
|
||||||
|
matches = numbers.finditer(str(data[0]))
|
||||||
|
for match in matches:
|
||||||
|
number_of_matches += 1
|
||||||
|
compressed_level_data += f"{number_of_matches}%"
|
||||||
|
# Clear Data
|
||||||
|
for character_number, character_value in enumerate((level_data)):
|
||||||
|
try:
|
||||||
|
character_value = int(character_value)
|
||||||
|
cleared_level_data += str(character_value)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
# Compress Data
|
||||||
|
for character_number, character_value in enumerate(cleared_level_data):
|
||||||
|
if character_number <= len(cleared_level_data) - 2:
|
||||||
|
if cleared_level_data[character_number] == cleared_level_data [character_number + 1]:
|
||||||
|
current_character_count += 1
|
||||||
|
else:
|
||||||
|
current_character_count += 1
|
||||||
|
if current_character_count > 5:
|
||||||
|
compressed_level_data += f"!{character_value}_{current_character_count}!"
|
||||||
|
current_character_count = 0
|
||||||
|
else:
|
||||||
|
for character in range(current_character_count):
|
||||||
|
compressed_level_data += f"{character_value}"
|
||||||
|
current_character_count = 0
|
||||||
|
else:
|
||||||
|
if current_character_count > 4:
|
||||||
|
compressed_level_data += f"!{character_value}_{current_character_count}!"
|
||||||
|
current_character_count = 0
|
||||||
|
else:
|
||||||
|
for character in range(current_character_count):
|
||||||
|
compressed_level_data += f"{character_value}"
|
||||||
|
current_character_count = 0
|
||||||
|
compressed_level_data += f"{character_value}"
|
||||||
|
# Return Data
|
||||||
|
return compressed_level_data
|
||||||
|
|
||||||
|
|
||||||
|
# Decompress Level Data
|
||||||
|
@staticmethod
|
||||||
|
def decompress(level_data):
|
||||||
|
# Variables
|
||||||
|
level_data = level_data
|
||||||
|
decompressed_level_data = ""
|
||||||
|
final_level_data = ""
|
||||||
|
compressed = False
|
||||||
|
compressed_data_buffer = ""
|
||||||
|
final_data_buffer = ""
|
||||||
|
final_list_counter = 0
|
||||||
|
# Find Level Length
|
||||||
|
data = level_data.split("%")
|
||||||
|
# Decompress Data
|
||||||
|
for character_number, character_value in enumerate(data[1]):
|
||||||
|
if character_value == "!":
|
||||||
|
if compressed == False:
|
||||||
|
compressed = True
|
||||||
|
elif compressed == True:
|
||||||
|
compressed = False
|
||||||
|
compressed_data_buffer += f"{character_value}"
|
||||||
|
compressed_data_buffer = compressed_data_buffer.replace("!", "")
|
||||||
|
compressed_data_buffer = compressed_data_buffer.split("_")
|
||||||
|
for character in range(int(compressed_data_buffer[1])):
|
||||||
|
decompressed_level_data += f"{compressed_data_buffer[0]}"
|
||||||
|
compressed_data_buffer = ""
|
||||||
|
if compressed:
|
||||||
|
compressed_data_buffer += f"{character_value}"
|
||||||
|
elif character_value != "!":
|
||||||
|
decompressed_level_data += f"{character_value}"
|
||||||
|
# Create Final Level Data
|
||||||
|
final_level_data += "["
|
||||||
|
for character_number, character_value in enumerate(decompressed_level_data):
|
||||||
|
if len(final_data_buffer) != int(data[0]) - 1:
|
||||||
|
final_data_buffer += f"{character_value}"
|
||||||
|
else:
|
||||||
|
final_data_buffer += f"{character_value}"
|
||||||
|
final_level_data += "["
|
||||||
|
for character_number_two, character_value_two in enumerate(final_data_buffer):
|
||||||
|
final_level_data += f"{character_value_two},"
|
||||||
|
final_level_data = final_level_data.rstrip(final_level_data[-1])
|
||||||
|
final_level_data += "],"
|
||||||
|
final_data_buffer = ""
|
||||||
|
final_level_data = final_level_data.rstrip(final_level_data[-1])
|
||||||
|
final_level_data += "]"
|
||||||
|
# Return Data
|
||||||
|
return final_level_data
|
Loading…
Reference in New Issue