var a = 12;
db.talks.aggregate([
{$project:{"_id":1,"from":1, "to":1, "msg":1, "ft":["$from", "$to"]}},
{$match:{"ft":a}},
{$unwind: "$ft"},
{$match:{"ft":{$ne:a}}},
{$sort:{"_id":1}},
{$group: {"_id":"$ft", "orig_id":{$last:"$_id"},"from":{$last:"$from"},
"to":{$last:"$to"},"msg":{$last:"$msg"}}},
{$sort:{"_id":1}},
{$project:{"_id":"$orig_id","from":1, "to":1, "msg":1}}
]);
короткий и длинный рукав => 2
6 элементов рубашки, 3 варианта каждого элемента => 3^6
3 буквы латинского алфавита => 26^3
итого 2 * 3^6 * 26^3
import base64, re
def enc(telstr):
s = re.sub(r'\D', '', telstr)
if len(s) < 10 or len(s) == 11 and s[0] not in '78' or len(s) > 11:
raise ValueError('"%s" не похоже на телефонный номер' % telstr)
x, l = int(s[-10:]), bytearray(b'\0\0\0\0\0')
for i in range(4, -1, -1):
x, rest = divmod(x, 256)
l[i] = rest
return base64.encodebytes(l)[:7].decode('utf-8')
def dec(b64):
x = 0
for b in base64.decodebytes(b64.encode('utf-8') + b'=\n'):
x = x * 256 + b
return x
s = enc('8(926)123-4567')
print(s) # AigDOYc
print(dec(s)) # 9261234567