From dfc7cf47c5bf216d32a3f2d3af37321ec63c78a4 Mon Sep 17 00:00:00 2001 From: Francisco Munoz Date: Tue, 11 Jan 2022 23:44:32 -0500 Subject: [PATCH] Added files via upload Updated files with my work --- LICENSE | 2 +- README.md | 14 ++++--- backEnd_challenge.py | 79 +++++++++++++++++++++++++++++++++++ browserIcon.png | Bin 0 -> 3906 bytes database_challenge.py | 56 +++++++++++++++++++++++++ database_relationalModel.jpg | Bin 0 -> 41219 bytes frontEnd_Challenge.html | 60 ++++++++++++++++++++++++++ oldData.txt | 25 +++++++++++ testingFile.py | 34 +++++++++++++++ 9 files changed, 263 insertions(+), 7 deletions(-) create mode 100644 backEnd_challenge.py create mode 100644 browserIcon.png create mode 100644 database_challenge.py create mode 100644 database_relationalModel.jpg create mode 100644 frontEnd_Challenge.html create mode 100644 oldData.txt create mode 100644 testingFile.py diff --git a/LICENSE b/LICENSE index 7666b16bc..267a776e3 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2019 Headstorm +Copyright (c) 2022 Francisco Munoz Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index f2d817b00..c7d31893d 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,11 @@ -## Headstorm Interview +# HeadStorm_Challenge +Repository that holds work for the HeadStorm Challenge -Welcome to the Headstorm interview challenge! This repository is designed for candidates to [fork and create Pull Requests](https://help.github.com/en/articles/creating-a-pull-request-from-a-fork) with their solutions. There are two types of 'take-home' problems here: +## backEnd_challenge.py +This is the file that holds the code for the back end challenge. It is a standalone file with on dependencies on any other file. -### Challenges -These are domain specific problems that can be submitted individually. You can choose from backend, frontend, databases, or data-science. You can submit a PR for one, many, or all the challenges. +## database_challenge.py +This is the file that holds the code for the database challenge. Using postgreSQL, python commands were used to create the database, the tables, and the INSERT commands to insert the data into the tables. Some dependencies include the testingFile.py, which randomly generated 25 entries that would be used to insert into the tables in the database and the oldData.txt, which held this information. The database_relationalModel.jpg shows the ER model of how this database is constructed. -### Interviews -These are language specific interview questions and you can choose the language in which you implement your solution. +## frontEnd_Challenge.html +This is the file that holds the code for the front end challenge. One of the dependencies is the browserIcon.png file that is used for the icon on the browser, but aside from that this html file is a standalone file. diff --git a/backEnd_challenge.py b/backEnd_challenge.py new file mode 100644 index 000000000..33f972c42 --- /dev/null +++ b/backEnd_challenge.py @@ -0,0 +1,79 @@ +""" +Assumptions made: +1. For the GET method, assuming that whenever that GET method is ran, list will always be size 500, +so no need to check and just return the sorted list. + +2. For the overall API, assuming this would be ran locally so enabled it to be ran locally. Otherwise, +possible to corrected and be ran on a server and use a curl command to access it. +""" + +""" +Used Flask to be able to create the REST API and used some in built functions to be able to execute +certain calculations more efficiently. +""" + +from flask import Flask, request +from flask_restful import Resource, Api, reqparse, abort +import pandas as pd +import ast +import random, json, requests, re, bisect + +app = Flask(__name__) +api = Api(app) +NUMBERLIST = {"list":[]} + +# Class Declaration that contains all 3 different methods +class ListData(Resource): + # Retrieve Data, sort before returning + def get(self): + NUMBERLIST['list'].sort() + return NUMBERLIST + + # Create Data, make sure all entries are numbers and size is of 500 + def post(self): + numlist = [] + templist = str(request.data).split(',') + for i in templist: + temp = re.sub("[^0-9]", "", i) + numlist.append(int(temp)) + + if(len(numlist) == 500): + result = all(isinstance(x, int) for x in numlist) + if (result == True): + NUMBERLIST['list'] = numlist + return NUMBERLIST + else: + abort(400,"Invalid Input. All entries have to be numbers.") + else: + abort(400, "Invalid input. Length is not 500.") + + # Insert one element in corresponding order + def patch(self): + entry = str(request.data).strip() + temp = re.sub("[^0-9]", "", entry) + + # Check if the single entry is a number or not + if(temp.isnumeric()): + # Use built in function to insert entry in a sorted list + bisect.insort(NUMBERLIST['list'], int(temp)) + return NUMBERLIST + else: + abort(400,"Invalid Input. All entries have to be numbers.") + +api.add_resource(ListData, '/data/') # '/data' is our entry point +if __name__ == '__main__': + app.run(host='0.0.0.0', port=5000, debug=True) + + +# Testing Commands +payload = [] +for i in range(0, 500): + payload.append(random.randint(0,1000)) + +newPayload = json.dumps(payload) +newData = str(random.randint(0,1000)) + +r=requests.post("http://localhost:5000/data/",data=newPayload) +r=requests.get("http://localhost:5000/data/") +r=requests.patch("http://localhost:5000/data/",data=newData) + diff --git a/browserIcon.png b/browserIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..6bb707b5fbc987ba214d31d8300a1154e3c5a95b GIT binary patch literal 3906 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 literal 0 HcmV?d00001 diff --git a/frontEnd_Challenge.html b/frontEnd_Challenge.html new file mode 100644 index 000000000..e12bd5462 --- /dev/null +++ b/frontEnd_Challenge.html @@ -0,0 +1,60 @@ + + + + + + + + + + + + Company Title: A New Horizon + + + + + + + + + +
+

Contact Me

+
+ +
+
+
+
+
+
+
+
+
+ +
+ + \ No newline at end of file diff --git a/oldData.txt b/oldData.txt new file mode 100644 index 000000000..ce32f04b7 --- /dev/null +++ b/oldData.txt @@ -0,0 +1,25 @@ +1785; Mary Simmer; 2690175222; 1304370303; SFRvYtzUDymLJsr@gmail.com; 6356 Bethany Ranch Apt. 796 Brownfurt, IA 98767; 604; 1528; True; +1045; Martha Mccoy; 8179795075; 6978684276; MqtCFhoNEYzaegy@gmail.com; 04307 Monica Mall West Breanna, ME 51243; 609; 624; False; +1967; Charlotte Hershey; 1214902815; 6735265431; CRvJRKgzLGKnaeE@gmail.com; 756 Jacqueline Crescent Apt. 072 Victoriachester, HI 55142; 1623; 1605; True; +925; Idella Brown; 8949144699; 6563726364; vXZpraQqgSnCuoB@gmail.com; 4173 Kathleen Court Apt. 962 Julieburgh, AR 67414; 1037; 1741; False; +254; Martin Thompson; 7754106150; 9673530514; UjvmpglnGlAlIRP@gmail.com; 11457 Russell Parkways Apt. 449 Port Curtischester, NJ 45460; 1613; 314; False; +1024; Bonnie Mitchell; 1846020140; 9296540382; AmYdCsmKtWgggvW@gmail.com; Unit 9708 Box 4539 DPO AE 18616; 1613; 1771; False; +1984; Marie Orona; 3539449144; 2356949131; yJcbQmrwwKnOMKl@gmail.com; 545 Rodgers Bypass Millerberg, NC 28758; 912; 1383; False; +565; Julie Pierce; 9099331270; 7645174016; PlHUeGbQgohYfSi@gmail.com; PSC 9081, Box 2446 APO AE 81270; 946; 646; False; +1123; Sonja Wagoner; 1006289674; 7608903378; iApxFmerNTkAcZn@gmail.com; 508 Leslie Summit Suite 638 East Gabriel, ND 48735; 1063; 461; True; +909; David Cross; 3142926865; 7611185394; yqYesTlWrxwwLDe@gmail.com; 76847 Wright Turnpike Apt. 457 Millerland, IL 65899; 650; 105; False; +940; Susan Newton; 2445331621; 4159013134; LNnpZTGerpFwfGP@gmail.com; 54783 Austin Shoals Suite 668 Allenberg, VT 46440; 308; 48; False; +6; Ruth Saldivar; 2288169164; 4530547090; NEYTiIMhFvKPJpI@gmail.com; 28833 Felicia Radial Lake Micheleshire, HI 87840; 195; 1404; False; +844; Cassandra Jones; 9031806207; 7663108826; HuUHeHUZgJKUyTh@gmail.com; 461 Raymond Meadows North Adamborough, OK 17005; 48; 937; False; +1986; Jayme Murphy; 3371272946; 1779622004; pLZZjcsQARptbNi@gmail.com; 993 Holden Camp Apt. 437 West Lisaborough, WV 69178; 1452; 1556; False; +1035; Mary Fyall; 8428725296; 1087071071; PuhxJfLEDLRCvYb@gmail.com; 20910 Dylan Heights Apt. 178 Rodriguezborough, DE 56334; 1967; 325; False; +1682; Clint Barnes; 1958875411; 9555349579; JryllXhBFDumJUL@gmail.com; 3602 Joe Underpass Suite 295 East Mariabury, LA 86858; 181; 722; True; +154; Yesenia Crook; 6278970113; 7991538452; XplVAMqGiIupEYh@gmail.com; 111 Stevens Pike Suite 147 West Juanside, AK 12854; 1754; 1682; True; +1244; Barbara Wallace; 1454107749; 8763131082; XdkpASkvpCxtnle@gmail.com; 92263 Kimberly Pass South Mary, TX 19471; 1532; 1740; True; +988; Ina Koelling; 6579626087; 9289509798; GSoiYlYkQUFXuDw@gmail.com; 06446 Robert Glen Apt. 833 Andrewview, WI 14681; 1837; 1400; False; +1785; David Cooper; 4670865569; 8284376404; fGOMhpzwKuAyitA@gmail.com; PSC 3558, Box 4253 APO AA 64934; 1410; 1669; True; +706; Brian Koroma; 1890871912; 4899792378; fTidYgMorRvfFuB@gmail.com; 638 Jacob Manor Apt. 189 Leeberg, MD 00888; 1869; 1852; False; +1515; Megan Miller; 7089943029; 5513552086; aiZzUFFqiqMJwjJ@gmail.com; 829 Cook Bypass Morganfurt, FL 65614; 685; 1495; True; +698; Doris Liefer; 3336404101; 5898317116; jYjKOVHSSUStIfG@gmail.com; 951 Chung Skyway East Kimberlyview, VT 12746; 1487; 592; True; +948; Gayle Vidot; 8777934481; 1175692524; kRapwdMLpgYuiHY@gmail.com; 713 Glenn Park North Williamville, MI 57301; 1271; 1659; False; +1291; Brenda Maddox; 3983690736; 6983501758; NRgwfNQQaUUryJV@gmail.com; 93209 Spears Throughway South Heather, CT 42645; 1654; 1555; False; diff --git a/testingFile.py b/testingFile.py new file mode 100644 index 000000000..f3c07e135 --- /dev/null +++ b/testingFile.py @@ -0,0 +1,34 @@ +import random, names, string +from faker import Faker +import json +from random import randint + +oldData = [] +fake = Faker() + +def random_char(y): + return ''.join(random.choice(string.ascii_letters) for x in range(y)) + +def random_with_N_digits(n): + range_start = 10**(n-1) + range_end = (10**n)-1 + return randint(range_start, range_end) + + +textfile = open("oldData.txt", "w") +for i in range(0,25): + record = random.randint(0,2000) + basicWidgetOrder = random.randint(0,2000) + advWidgetOrder = random.randint(0,2000) + protectPlan = bool(random.getrandbits(1)) + fullName = names.get_full_name() + cellPhone = str(random_with_N_digits(10)) + workPhone = str(random_with_N_digits(10)) + email = (random_char(15) + "@gmail.com") + address = fake.address().replace('\n', ' ') + tempData = [record, fullName, cellPhone, workPhone, email, address, basicWidgetOrder, advWidgetOrder, protectPlan] + for j in tempData: + textfile.write(str(j) + '; ') + textfile.write('\n') + +textfile.close() \ No newline at end of file