Page **1** of **2**

### Stupid brainteaser

Posted: **April 22nd, 2015, 6:03 am**

by **mbunea**

I stared at this for a long time and couldn't figure out what it does. Seems like a good problem to have each employee take and if they don't solve it, should be fired.int what(int y, int m) { return m ^ 2 ? 31 - --m % 7 % 2 : 29 - (y & 3 || y & 15 && !(y % 25));}

### Stupid brainteaser

Posted: **April 22nd, 2015, 1:04 pm**

by **oas**

The person that should be fired is the one that wrote the code.

### Stupid brainteaser

Posted: **April 22nd, 2015, 2:39 pm**

by **MHill**

Looked to me like it was trying to get month-end dates, but as I've never used C, I had to find out what the operators do. I'm still not clear on bits of it.m ^ 2 ? ... : ...seems to be the equivalent of 'if m=2, do the stuff after the colon, else do the stuff before the colon.'So if m (month) isn't February, return 31 - --m % 7 % 2'--m % 7 % 2' returns 1 if the month doesn't have 31 days (every second month has <31 days until you get to August, then you need every second month from July. This is the % 7 % 2 bit).So we return 31 where there are 31 days in the month, 30 otherwise.If m is February, return '29 - (y & 3 || y & 15 && !(y % 25))'I don't understand the operators here. I get that 'y & 3' returns 0 if the year is a multple of 4 (ie a leap year). I don't get the rest of it.

### Stupid brainteaser

Posted: **April 22nd, 2015, 4:50 pm**

by **mbunea**

I'm joking about firing, in case it isn't clear. This is a problem given in a local computer science journal, for high school kids. A workmate of mine who is training internship students presented them the problem and no one figured out what it does so he asked several colleagues, including me, to try solve it, so he can get an idea on how difficult it is. No one figured it out. Then he told us what if y were for year and m for month. Suddenly the purpose of the code became obvious.Now it seems almost embarassing how we coulnd't make the connection. There's 31 and 29 there also, they now seem like clues.

### Stupid brainteaser

Posted: **April 22nd, 2015, 5:38 pm**

by **MHill**

Yeah, it was the 'm' and 'y' that made me guess it was a date function, and the 31 and 29 that it was for month ends. I did wonder briefly if it was for finding the last working day / Friday / Wednesday of the month, which is why I looked up C operators.I still don't get what the last bit of the 'February' code does. 'Y & 15' must return zero if the year is a multiple of 16. I don't see what use this is.I don't understand what 'NOT (y modulo 25)' means.And so I don't get what happens when you combine the three elements.Unless it's something to do with not having leap years on the turn of the century / millennium?(And is that really how 'millennium' is spelled?)

### Stupid brainteaser

Posted: **April 22nd, 2015, 5:46 pm**

by **oas**

A nice explanation of the leap year part of the algorithm is here:

http://stackoverflow.com/questions/3220 ... cally-in-c

### Stupid brainteaser

Posted: **April 22nd, 2015, 6:50 pm**

by **MHill**

Thanks! Would never have worked that one out.

### Stupid brainteaser

Posted: **April 23rd, 2015, 6:10 am**

by **katastrofa**

Quotem ^ 2 ? ... : ...seems to be the equivalent of 'if m=2, do the stuff after the colon, else do the stuff before the colon.'^ is bitwise XOR

### Stupid brainteaser

Posted: **April 23rd, 2015, 6:44 am**

by **ExSan**

QuoteOriginally posted by: mbuneaI stared at this for a long time and couldn't figure out what it does. Seems like a good problem to have each employee take and if they don't solve it, should be fired.int what(int y, int m) { return m ^ 2 ? 31 - --m % 7 % 2 : 29 - (y & 3 || y & 15 && !(y % 25));}and the brainteaser is ?

### Stupid brainteaser

Posted: **April 23rd, 2015, 7:18 am**

by **mbunea**

Psychological question actually, check if person realizes y is for year and m for month.

### Stupid brainteaser

Posted: **April 23rd, 2015, 8:36 am**

by **katastrofa**

I thought m was for mother.

### Stupid brainteaser

Posted: **April 23rd, 2015, 9:16 am**

by **Cuchulainn**

Quoteint what(int y, int m) { return m ^ 2 ? 31 - --m % 7 % 2 : 29 - (y & 3 || y & 15 && !(y % 25));}Too much whitespace.

### Stupid brainteaser

Posted: **April 23rd, 2015, 11:05 am**

by **daveangel**

QuoteOriginally posted by: CuchulainnQuoteint what(int y, int m) { return m ^ 2 ? 31 - --m % 7 % 2 : 29 - (y & 3 || y & 15 && !(y % 25));}Too much whitespace.more obfuscation please and write it in FORTRAN

### Stupid brainteaser

Posted: **April 23rd, 2015, 11:53 am**

by **Cuchulainn**

QuoteOriginally posted by: daveangelQuoteOriginally posted by: CuchulainnQuoteint what(int y, int m) { return m ^ 2 ? 31 - --m % 7 % 2 : 29 - (y & 3 || y & 15 && !(y % 25));}Too much whitespace.more obfuscation please and write it in FORTRANFortran66 and punch cards, of course.

### Stupid brainteaser

Posted: **April 29th, 2015, 8:20 am**

by **DevonFangs**

Here's a global pattern matcher:main(int c,char**v){return!m(v[1],v[2]);}m(char*s,char*t){return*t-42?*s?63==*t|*s==*t&&m(s+1,t+1):!*t:m(s,t+1)||*s&&m(s+1,t);}(hint)