Skip to content

Instantly share code, notes, and snippets.

@svgl
Last active May 25, 2020 17:50
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save svgl/dd52e7cbcb215589a59c4230b2c8472b to your computer and use it in GitHub Desktop.
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.
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