The Big Programming Thread - Page 534
Forum Index > General Forum |
Thread Rules 1. This is not a "do my homework for me" thread. If you have specific questions, ask, but don't post an assignment or homework problem and expect an exact solution. 2. No recruiting for your cockamamie projects (you won't replace facebook with 3 dudes you found on the internet and $20) 3. If you can't articulate why a language is bad, don't start slinging shit about it. Just remember that nothing is worse than making CSS IE6 compatible. 4. Use [code] tags to format code blocks. | ||
Days
United States219 Posts
| ||
phar
United States1080 Posts
On October 23 2014 23:48 Morfildur wrote: Indeed. gVim is even a decent implementation for windows. For big projects I'd still use a real IDE though. Depends on the size of the project, haha. There is an upper bound where real IDEs start breaking and you end up back using vim. | ||
icystorage
Jollibee19343 Posts
| ||
Blisse
Canada3710 Posts
it was working, i'm just a bad coder (fu mode=twoway) | ||
bangsholt
Denmark138 Posts
On October 24 2014 06:47 Days wrote: Yes I am using that API. Sorry about not providing links. I guess I just don't have experience serializing/deserializing JSON data in C#. I guess I have to do a bit more research xD A few helpers then ;-) https://www.nuget.org/packages/Microsoft.Net.Http Specifically, HttpClient. Can do all sorts of requests and is async. https://www.nuget.org/packages/Newtonsoft.Json/ JsonConverter is the best http://json2csharp.com/ Saves time in creating objects to deserialize to. | ||
teamamerica
United States958 Posts
Question is given an array of stock prices, indexed by date, return the pair of dates where you could buy/sell stock for biggest differential. If there are multiple valid dates, any pair works. When I got asked the question, I did not ask what happens if there was no day you could have made a profit selling it (i.e. the array is continuously decreasing). I'm a little unsure as to how I'd account for that. The code I have so far definitely doesn't take that into account. + Show Spoiler +
| ||
Blisse
Canada3710 Posts
On October 25 2014 05:55 bangsholt wrote: A few helpers then ;-) https://www.nuget.org/packages/Microsoft.Net.Http Specifically, HttpClient. Can do all sorts of requests and is async. https://www.nuget.org/packages/Newtonsoft.Json/ JsonConverter is the best http://json2csharp.com/ Saves time in creating objects to deserialize to. What does Microsoft.Net.Http offer over using System.Net.WebClient and System.Net.Http.HttpClient? Never really used the Microsoft.Net offering. I prefer using the JToken.FromObject and JToken.ToObject methods instead. Makes code much more portable I feel. Interestingly, Visual Studio (at the very least 2013) has the ability to create objects too in the Edit menu. I knew people at Microsoft who didn't know about this either haha. On October 25 2014 07:46 teamamerica wrote: Hi all - there was some cs problem I got asked - completely bungled it when asked - but I'm trying to work out a solution for it now. Wondered if anyone could check my solution for me. Question is given an array of stock prices, indexed by date, return the pair of dates where you could buy/sell stock for biggest differential. If there are multiple valid dates, any pair works. When I got asked the question, I did not ask what happens if there was no day you could have made a profit selling it (i.e. the array is continuously decreasing). I'm a little unsure as to how I'd account for that. The code I have so far definitely doesn't take that into account. Super easy and more "pythonic" way of doing this is using Python's itertools.combinations(stocks, 2) to generate all possible 2-tuple combinations of stock prices, and finding the max difference of 2-tuples. To handle the no profit case you can simply not give an answer if the best option is not a profit, or just give the least negative number. The best pair of dates to buy/sell stock can be interpreted as the best days to buy/sell, and if it's impossible to gain a profit, the best days to buy/sell are the days where you lose the least. Depends on how you define the requirements. | ||
dae
Canada1600 Posts
On October 25 2014 13:09 Blisse wrote: Super easy and more "pythonic" way of doing this is using Python's itertools.combinations(stocks, 2) to generate all possible 2-tuple combinations of stock prices, and finding the max difference of 2-tuples. To handle the no profit case you can simply not give an answer if the best option is not a profit, or just give the least negative number. The best pair of dates to buy/sell stock can be interpreted as the best days to buy/sell, and if it's impossible to gain a profit, the best days to buy/sell are the days where you lose the least. Depends on how you define the requirements. Personally, I would: Sort the array by date, in increasing order (first day first, etc). Do one linear sweep through the array, keeping track of the minimum price, and the best buy/sell pair seen so far. That is, for each date, check if it's price is lower then current minimum - if it is, set that date to be minimum. Otherwise, check if the difference between its price/minimum price is larger then the current best buy/sell pair - if it is. set the current best size pair to that date and the current minimum date. O(nlogn) if the array is not presorted, O(n) if it is. Edit: Didnt see your code at first, it's pretty much exactly what I just described. (read your question in above posters quote) | ||
teamamerica
United States958 Posts
On October 25 2014 13:09 Blisse wrote: What does Microsoft.Net.Http offer over using System.Net.WebClient and System.Net.Http.HttpClient? Never really used the Microsoft.Net offering. I prefer using the JToken.FromObject and JToken.ToObject methods instead. Makes code much more portable I feel. Interestingly, Visual Studio (at the very least 2013) has the ability to create objects too in the Edit menu. I knew people at Microsoft who didn't know about this either haha. Super easy and more "pythonic" way of doing this is using Python's itertools.combinations(stocks, 2) to generate all possible 2-tuple combinations of stock prices, and finding the max difference of 2-tuples. To handle the no profit case you can simply not give an answer if the best option is not a profit, or just give the least negative number. The best pair of dates to buy/sell stock can be interpreted as the best days to buy/sell, and if it's impossible to gain a profit, the best days to buy/sell are the days where you lose the least. Depends on how you define the requirements. So I understand that algorithmic complexity isn't the be-all,end-all of code, and that stuff like readability. But wouldn't that be n^2 and what I posed be O(n). I mean itertools.combinations(stocks,2) is basically nested for-loops and then iterating over that, which definitely is simplest. Secondly, that doesn't seem right because because the order of stocks matter - you since stock indexed by date, min_idx has to be less then max_idx (can't buy stock in future to sell in past). Just generating all combinations wouldn't take this into account I think. edit: On October 25 2014 15:32 dae wrote: Personally, I would: Sort the array by date, in increasing order (first day first, etc). Do one linear sweep through the array, keeping track of the minimum price, and the best buy/sell pair seen so far. That is, for each date, check if it's price is lower then current minimum - if it is, set that date to be minimum. Otherwise, check if the difference between its price/minimum price is larger then the current best buy/sell pair - if it is. set the current best size pair to that date and the current minimum date. O(nlogn) if the array is not presorted, O(n) if it is. Question assumes array sorted by date. Isn't this what I posted??? | ||
Nesserev
Belgium2760 Posts
| ||
bangsholt
Denmark138 Posts
On October 25 2014 13:09 Blisse wrote: What does Microsoft.Net.Http offer over using System.Net.WebClient and System.Net.Http.HttpClient? Never really used the Microsoft.Net offering. I prefer using the JToken.FromObject and JToken.ToObject methods instead. Makes code much more portable I feel. I was referring to System.Net.Http.HttpClient ;o) Is JToken a standard interface of some sort, or why do you think it makes code more portable than JsonConverter? I mostly care about compatibility with Xamarin. | ||
Xyik
Canada728 Posts
On October 25 2014 15:53 Nesserev wrote: Won't you ignore the fact that the days are in a certain order... you cannot sell something before you bought it. Observe this list of stock prices (for consecutive days): 5 3 6 7 8 4 2 1 3 First day, we start at 5, which is our lowest, and highest sp (stock price) so far: lowest_sp = 5, lowest_day = 0 3 OPTIONS: - Whenever the sp is lower than lowest_sp, set lowest_x and highest_x to current day (day 2) lowest_sp = 3, lowest_day = 1 - Whenever the sp is higher than highest_sp, set highest_x to current day, ... (day 3) lowest_sp = 3, lowest_day = 1 ... and compare the difference between lowest_sp and highest_sp with max_diff. If the difference is larger than max_diff, you have a new max_diff, buy day = lowest_day and sell_day = highest_day: lowest_sp = 3, lowest_day = 1 - Otherwise: pass go to next day... The idea behind this algorithm, is that if the stock price on the current day is lower than any following day, it will definitely be the buy day for stocks sold on any following day. Can anyone see any flaws in this approach, or does anyone know a better algorithm? EDIT: Why do people always post 5 seconds just after I decide to reply to something This approach is correct. | ||
teamamerica
United States958 Posts
On October 25 2014 15:53 Nesserev wrote: Won't you ignore the fact that the days are in a certain order... you cannot sell something before you bought it. Observe this list of stock prices (for consecutive days): 5 3 6 7 8 4 2 1 3 First day, we start at 5, which is our lowest, and highest sp (stock price) so far: lowest_sp = 5, lowest_day = 0 3 OPTIONS: - Whenever the sp is lower than lowest_sp, set lowest_x and highest_x to current day (day 2) lowest_sp = 3, lowest_day = 1 - Whenever the sp is higher than highest_sp, set highest_x to current day, ... (day 3) lowest_sp = 3, lowest_day = 1 ... and compare the difference between lowest_sp and highest_sp with max_diff. If the difference is larger than max_diff, you have a new max_diff, buy day = lowest_day and sell_day = highest_day: lowest_sp = 3, lowest_day = 1 - Otherwise: pass go to next day... The idea behind this algorithm, is that if the stock price on the current day is lower than any following day, it will definitely be the buy day for stocks sold on any following day. Can anyone see any flaws in this approach, or does anyone know a better algorithm? EDIT: Why do people always post 5 seconds just after I decide to reply to something Checked -- pretty sure that's same approach as dae and I take. I don't think that you need to remember both lowest and highest prices, since you are remembering max_diff, so really knowing lowest price and max diff lets you always calculate what sell price you're going with is. Still doesn't seem to handle case of continuously decreasing array. Apologies if this isn't what you were proposing. + Show Spoiler +
But see my adjustments to it, which makes it boil down to what dae and I had.
| ||
Nesserev
Belgium2760 Posts
| ||
teamamerica
United States958 Posts
On October 26 2014 02:58 Nesserev wrote: Yeah, you're right. Overall, it's the same approach. Well, it implicitly handles the case of a continuously decreasing array... because if the stock prices are always decreasing, the max_diff will never change (buy and sell on the first day, zero loss?). One difference would be the that my approach will try to skip dates that can be ruled out as candidates, while your approach will calculate and compare something for every day. Ya I guess I can't know what assumptions question had since I didn't ask - but assuming you can't buy-sell on same day, how would you handle that? | ||
Nesserev
Belgium2760 Posts
| ||
Blisse
Canada3710 Posts
My way I write like 4-5 lines of code that solves the abstract problem. If we're not going for fastest code I would prefer this way by far. Even if we were going for fastest this is infinitely more "pythonic" and readable and id use it until I see bottlenecks. edit: -i like your code better- | ||
berated-
United States1134 Posts
On October 24 2014 12:14 icystorage wrote: In android, the navigation drawer (seen here http://developer.android.com/design/patterns/navigation-drawer.html) when opened, overlaps on the view. How do I change this so that when the drawer is opened it pushes the view to the side instead of overlapping. Did you already try this solution suggested on stack overflow? Another try Did you try seaching? Seems to be a lot of examples. | ||
teamamerica
United States958 Posts
On October 26 2014 04:03 Blisse wrote: Itertools.combinations preserves order of inputs I believe. My way I write like 4-5 lines of code that solves the abstract problem. If we're not going for fastest code I would prefer this way by far. Even if we were going for fastest this is infinitely more "pythonic" and readable and id use it until I see bottlenecks. Definitely see and appreciate that point of view, I had mentioned that. Didn't realize that combinations preservers order of input, good to know. Given combinations preserves order of inputs (sry, should have checked on that first), that gives you nice Pytohn one-liner
| ||
Blisse
Canada3710 Posts
On October 26 2014 04:14 teamamerica wrote: Definitely see and appreciate that point of view, I had mentioned that. Didn't realize that combinations preservers order of input, good to know. Given combinations preserves order of inputs (sry, should have checked on that first), that gives you nice Pytohn one-liner
ye :p in python i try to avoid writing as much code as possible. so everytime i see procedural code in python i ask myself if i could codegolf it instead | ||
| ||