'''
Working of HFTs
HFT, MFT, LFT
Tick to Trade -> NEW, Modify, Cancel -> 800 nanoseconds
IP / Port, UserID, CTCL
Software Team : Buy book -> 100 q1 , 95 q2, 90 , Ask -> 105 q1, 110 q2
Binary Data : Fixed Size and structures.
For example : First 8 bytes will be timestamp, next 4 bytes will message size, next 1 byte will be message type, seq_num,
OrderBooks : maps
2 different FlatHashMaps : ABSL Flat Hash Maps, Google Dense Map.
Input Adapter
UDP Data.
Each packet will have seq numbers attached to it.
Retransmission protocols (TCP).
Order Management Systems
Limit Order, Market Order, Stoploss Order, etc.
if multiple of 3 -> Fizz
if multiple of 5 -> Buzz
if boht -> FIZZBUZZ
void fizzBuzz(int n)
{
if(n % 15 == 0)
{
printf("FIZZBUZZ\n");
}else if(n%3 == 0)
{
printf("FIZZ\n");
}else if(n%5 == 0)
{
printf("BUZZ\n");
}
}
[
{"divisor" : 3, "word" : "Fizz" },
{"divisor" : 5, "word" : "Buzz" }
]
'''
import json
def load_rules(filename):
# with open(filename, 'r') as file:
# return json.load(file)
return [{"divisor" : 3, "word" : "Fizz" },
{"divisor" : 5, "word" : "Buzz" }]
def fizzbuzz(n, rules):
output = ''
for rule in rules:
if n % rule['divisor'] == 0:
output += rule['word']
if output == '':
output = 'None'
print(n,output)
rules = load_rules('config.json')
test_cases = int(input())
for i in range(test_cases):
fizzbuzz(int(input()),rules) #n is any number
JycnCldvcmtpbmcgb2YgSEZUcwpIRlQsIE1GVCwgTEZUCgpUaWNrIHRvIFRyYWRlIC0+IE5FVywgTW9kaWZ5LCBDYW5jZWwgLT4gODAwIG5hbm9zZWNvbmRzCgoKSVAgLyBQb3J0LCBVc2VySUQsIENUQ0wKClNvZnR3YXJlIFRlYW0gOiBCdXkgYm9vayAtPiAxMDAgcTEgLCA5NSBxMiwgOTAgLCBBc2sgLT4gMTA1IHExLCAxMTAgcTIKCkJpbmFyeSBEYXRhIDogRml4ZWQgU2l6ZSBhbmQgc3RydWN0dXJlcy4gCkZvciBleGFtcGxlIDogIEZpcnN0IDggYnl0ZXMgd2lsbCBiZSB0aW1lc3RhbXAsIG5leHQgNCBieXRlcyB3aWxsIG1lc3NhZ2Ugc2l6ZSwgbmV4dCAxIGJ5dGUgd2lsbCBiZSBtZXNzYWdlIHR5cGUsIHNlcV9udW0sIAoKT3JkZXJCb29rcyA6IG1hcHMgCgoyIGRpZmZlcmVudCBGbGF0SGFzaE1hcHMgOiBBQlNMIEZsYXQgSGFzaCBNYXBzLCBHb29nbGUgRGVuc2UgTWFwLgoKSW5wdXQgQWRhcHRlcgoKVURQIERhdGEuIAoKRWFjaCBwYWNrZXQgd2lsbCBoYXZlIHNlcSBudW1iZXJzIGF0dGFjaGVkIHRvIGl0LgoKUmV0cmFuc21pc3Npb24gcHJvdG9jb2xzIChUQ1ApLiAKCk9yZGVyIE1hbmFnZW1lbnQgU3lzdGVtcwoKTGltaXQgT3JkZXIsIE1hcmtldCBPcmRlciwgU3RvcGxvc3MgT3JkZXIsIGV0Yy4gCgoKaWYgbXVsdGlwbGUgb2YgMyAtPiBGaXp6CmlmIG11bHRpcGxlIG9mIDUgLT4gQnV6egppZiBib2h0IC0+IEZJWlpCVVpaCgoKCnZvaWQgZml6ekJ1enooaW50IG4pCnsKICAgIGlmKG4gJSAxNSA9PSAwKQogICAgewogICAgICAgIHByaW50ZigiRklaWkJVWlpcbiIpOwogICAgfWVsc2UgaWYobiUzID09IDApCiAgICB7CiAgICAgICAgcHJpbnRmKCJGSVpaXG4iKTsKICAgIH1lbHNlIGlmKG4lNSA9PSAwKQogICAgewogICAgICAgIHByaW50ZigiQlVaWlxuIik7CiAgICB9Cn0KCgpbCgl7ImRpdmlzb3IiIDogMywgIndvcmQiIDogIkZpenoiIH0sCgl7ImRpdmlzb3IiIDogNSwgIndvcmQiIDogIkJ1enoiIH0KXQoKJycnCgppbXBvcnQganNvbgoKZGVmIGxvYWRfcnVsZXMoZmlsZW5hbWUpOgoJIyB3aXRoIG9wZW4oZmlsZW5hbWUsICdyJykgYXMgZmlsZToKCSMgCXJldHVybiBqc29uLmxvYWQoZmlsZSkKCXJldHVybiBbeyJkaXZpc29yIiA6IDMsICJ3b3JkIiA6ICJGaXp6IiB9LAoJeyJkaXZpc29yIiA6IDUsICJ3b3JkIiA6ICJCdXp6IiB9XQoKZGVmIGZpenpidXp6KG4sIHJ1bGVzKToKCW91dHB1dCA9ICcnCglmb3IgcnVsZSBpbiBydWxlczoKCQlpZiBuICUgcnVsZVsnZGl2aXNvciddID09IDA6CgkJCW91dHB1dCArPSBydWxlWyd3b3JkJ10KCWlmIG91dHB1dCA9PSAnJzoKCQlvdXRwdXQgPSAnTm9uZScKCXByaW50KG4sb3V0cHV0KQoKCnJ1bGVzID0gbG9hZF9ydWxlcygnY29uZmlnLmpzb24nKQp0ZXN0X2Nhc2VzID0gaW50KGlucHV0KCkpCgpmb3IgaSBpbiByYW5nZSh0ZXN0X2Nhc2VzKToKCWZpenpidXp6KGludChpbnB1dCgpKSxydWxlcykgI24gaXMgYW55IG51bWJlcgoJCQkKCQoKCg==