Last active
May 25, 2020 17:50
-
-
Save svgl/dd52e7cbcb215589a59c4230b2c8472b to your computer and use it in GitHub Desktop.
Design a simplified version of Twitter, where users can post tweets, follow/unfollow others, and is able to see the 10 most recent tweets in the user’s news feed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from time import time | |
from pprint import pprint | |
def postTweet(userid, tweet): | |
""" | |
""" | |
tweets.append({"message": tweet, "userid": userid, "creationTime": time()}) | |
def follow(follower, followee): | |
""" | |
add followee id to follower's following list. | |
""" | |
follower["following"].append(followee["id"]) | |
def unfollow(follower, followee): | |
""" | |
""" | |
follower["following"].remove(followee["id"]) | |
def getNewsFeed(userid): | |
""" | |
return 10 most recent tweets from the following list for user | |
""" | |
feed = [] | |
user = getUserById(userid) | |
for tweet in sorted(tweets, key=lambda tweet: tweet["creationTime"], reverse=True): | |
if tweet["userid"] in user["following"]: | |
feed.append(tweet) | |
if len(feed) == 10: | |
break | |
return feed | |
def addUser(id): | |
users.append({"id": id, "following": []}) | |
def getUserById(userid): | |
for user in users: | |
if user["id"] == userid: | |
return user | |
users = [] | |
tweets = [] | |
def main(): | |
addUser(1) | |
addUser(2) | |
addUser(3) | |
follow(users[0], users[1]) | |
follow(users[1], users[0]) | |
follow(users[1], users[2]) | |
postTweet(users[0]["id"], "My first tweet") | |
postTweet(users[1]["id"], "My first tweet") | |
postTweet(users[2]["id"], "My first tweet") | |
postTweet(users[0]["id"], "My second tweet") | |
postTweet(users[1]["id"], "My second tweet") | |
postTweet(users[2]["id"], "My second tweet") | |
postTweet(users[0]["id"], "My third tweet") | |
postTweet(users[1]["id"], "My third tweet") | |
postTweet(users[2]["id"], "My third tweet") | |
postTweet(users[0]["id"], "My fourth tweet") | |
postTweet(users[1]["id"], "My fourth tweet") | |
postTweet(users[2]["id"], "My fourth tweet") | |
postTweet(users[0]["id"], "My fifth tweet") | |
postTweet(users[1]["id"], "My fifth tweet") | |
postTweet(users[2]["id"], "My fifth tweet") | |
postTweet(users[0]["id"], "My sixth tweet") | |
postTweet(users[1]["id"], "My sixth tweet") | |
postTweet(users[2]["id"], "My sixth tweet") | |
print(f"User {users[1]} feed:") | |
pprint(getNewsFeed(users[1]["id"])) | |
if __name__ == '__main__': | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment