Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # s=input()
- from collections import deque
- from math import log2
- # s = "prOGraMMIng PuZZleS & cOde ____"
- # #"prOGr aMMIn gPuZZ leScO de ____"
- # 00110
- # i = 0
- # k = 0
- # for letter in s:
- # if letter.isalpha():
- # k = 2*k + (letter < 'a')
- # print(bin(k)[2:])
- # i += 1
- # if i % 5 < 1: # jeżeli to 5 literka
- # s = s.replace('_', chr(k % 32 + 97), 1)
- # print(s.lower())
- # given = input('Podaj swój napis:')
- given = 'wspanialy kebab __ 2 zl'
- secret = 'za'
- number_of_underscored = given.count('_')
- number_of_letters = len([None for letter in given if letter.isalpha()])
- if number_of_letters // 5 < number_of_underscored:
- print('You have {} _ but can support only {}'.format(number_of_underscored,
- number_of_letters // 5))
- exit()
- # secret = input("Give {} letter secret:".format(number_of_underscored))
- if len(secret) != number_of_underscored:
- print("Your secret don't match number of underscores")
- exit()
- for letter in secret:
- if not letter.isalpha():
- print('Your secret does contain non standard letters')
- exit()
- secret = deque([(ord(letter) - 97) for letter in secret])
- # coding
- FIRST_BIT = 2 ** 4 # 5'th bit from the right for 0 - 31 numbers
- num_of_coded_letters = 0
- coded_sentence = []
- i = 0
- coded = 0
- for letter in given:
- # skip non alpha
- if not letter.isalpha():
- coded_sentence.append(letter)
- continue
- # if its beginning of a new group
- print(coded, number_of_underscored)
- if i % 5 == 0:
- if coded >= number_of_underscored:
- secret_letter = 0
- else:
- coded += 1
- secret_letter = secret.popleft()
- leftmost_bit = FIRST_BIT
- # if leftmost bit is 1,
- # in next iteration, this bit is >> 1.
- # Its done 5 times.
- if leftmost_bit & secret_letter: # if its 1
- coded_sentence.append(letter.capitalize())
- else:
- coded_sentence.append(letter)
- leftmost_bit = leftmost_bit >> 1
- i += 1
- print(''.join(coded_sentence))
Add Comment
Please, Sign In to add comment