Add missing file - bitreich-bitmasquerade - Scripts for bitreich's new years eve bitmasqurade (DIR) Log (DIR) Files (DIR) Refs --- (DIR) commit c5e699275367669014b8fa015375893eb65d299a (DIR) parent 671752e65924e21870aa288dc51f7145dfcab61b (HTM) Author: Scarlett McAllister <no+reply@roygbyte.com> Date: Sat, 23 Dec 2023 14:10:06 -0400 Add missing file Diffstat: A atelier.dcgi | 129 +++++++++++++++++++++++++++++++ 1 file changed, 129 insertions(+), 0 deletions(-) --- (DIR) diff --git a/atelier.dcgi b/atelier.dcgi @@ -0,0 +1,129 @@ +#!/usr/bin/env python +# coding=utf-8 + +from functools import reduce +import re +import sys + +geomyidae_host = "server" +geomyidae_port = "port" +bitmask_selection = [ '010101010101', '110001100011', '001110011100', + '101010101010', '100000100001', '011111111110', + '000010010000', '100010001001', '010010001000', + '100110001110', '111111101111', '011000100010'] +bitwise_selection = ['Flip', 'Set', 'Clear'] +bitwise_operations = {'Flip' : lambda a, b: a ^ b, + 'Set' : lambda a, b: a | b, + 'Clear' : lambda a, b: a & b} + +def string_to_binary(s, bits): + return ''.join([format(ord(c), '0{}b'.format(bits)) for c in s]) + +def strip_char_to_ascii_range(s, start, end): + range = [format(ord(a), 'x') for a in [start, end]] + patt = r'[^\x{}-\x{}]+'.format(*range) + return re.sub(patt, '', s) + +def strip_to_max_len(s): + return s[:16] + +def print_nick_fail(): + print("Pardon, but I'll need your name") + +def print_step_1_template(nick): + gph_menu_link = lambda s: \ + '[1|{}|atelier.dcgi?{} {}|{}|{}]'.format(s, nick, s, + geomyidae_host, geomyidae_port) + gph_links = '\n'.join(map(gph_menu_link, bitmask_selection)) + with open('step_1.txt', 'r') as file: + print(file.read().format(nick, gph_links)) + +def print_step_2_template(nick, bitmask): + gph_menu_link = lambda s: \ + '[1|{}|atelier.dcgi?{} {} {}|{}|{}]'.format(s, nick, bitmask, s, + geomyidae_host, geomyidae_port) + gph_links = '\n'.join(map(gph_menu_link, bitwise_selection)) + with open('step_2.txt', 'r') as file: + print(file.read().format(nick, gph_links)) + +def print_completion(nick, bitmask, bitwise, mask): + with open('step_complete.txt', 'r') as file: + print(file.read().format(nick, bitmask, bitwise, mask)) + +def make_mask(nick, bitmask, bitwise): + bits = len(nick) + binary_nick = string_to_binary(nick, bits) + # print(binary_nick) + def bit_picker(remaining, accm=""): + if len(accm) == 0: + # Recursion entry point: accumulate first element of + # the list. + return bit_picker(remaining[1:], remaining[0:1]) + if remaining == "": + # Recursion exit point: return the accumulated elements. + return accm + # Main loop: return the current element that corresponds + # with the current multiple of the remaining chars + multiple = int(len(remaining)/bits) + if (len(remaining) % bits) == multiple: + accm = accm + remaining[0:1] + # print(remaining) + return bit_picker(remaining[1:], accm) + return bit_picker(remaining[1:], accm) + selected_bits = bit_picker(binary_nick) + bitmask = bitmask[:len(selected_bits)] + bin_1 = int(selected_bits, 2) + bin_2 = int(bitmask, 2) + return bin(bitwise_operations[bitwise](bin_2, bin_1))\ + [2:].zfill(len(selected_bits)) + +def print_args_fail(): + print("Pardon, but something's not working.") + +def print_bitmask_fail(): + print("Pardon, but that bitmask isn't available.") + +def main(args): + geomyidae_search = args[1] + geomyidae_args = args[2].split(' ') # tab splitting + if geomyidae_search: + # Get the search result, which will be this + # person's nick, and ask them to pick a bitmask from + # the list printed out in the step 1 template. + nick = strip_char_to_ascii_range(geomyidae_search, '!', '~') + nick = strip_to_max_len(nick) + if nick != '': + print_step_1_template(nick) + else: + print_nick_fail() + sys.exit() + # Validate and clear up the input from the bitmask + # selection. + if len(geomyidae_args) < 2: + print_args_fail() + sys.exit() + nick = strip_char_to_ascii_range(geomyidae_args[0], '!', '~') + nick = strip_to_max_len(nick) + bitmask = geomyidae_args[1] + if nick == '': + print_nick_fail() + sys.exit() + if bitmask not in bitmask_selection: + print_bitmask_fail() + sys.exit() + if len(geomyidae_args) == 2: + # Get the prson to choose their bitwise operation. + print_step_2_template(nick, bitmask) + else: # + bitwise = geomyidae_args[2] + if bitwise not in bitwise_selection: + print_bitmask_fail() + sys.exit() + # Finish up by making combining the nick, bitmask, + # and bitwise operation. + mask = make_mask(nick, bitmask, bitwise) + print_completion(nick, bitmask[:len(nick)], bitwise, mask) + sys.exit() + +if __name__ == "__main__": + sys.exit(main(sys.argv))