# Which day of the week is today?

7 people are arguing what the current day of the week might be. Each states what he believes to know:

1. The day after tomorrow is Wednesday.
2. No, Wednesday is today.
3. You are both wrong, Wednesday is tomorrow.
4. Today is not Monday, nor Tuesday or Wednesday.
5. I think yesterday was Thursday.
6. No, yesterday was Tuesday.
7. Whatever. All I know is that yesterday was not Saturday.

All of them, except one, is wrong. What day is it it?

Rewording their statements:

1. Today is Monday.
2. Today is Wednesday.
3. Today is Tuesday.
4. Today is not Monday, nor Tuesday or Wednesday.
5. Today is Friday.
6. Today is Wednesday.
7. Today is not Sunday.

We know that exactly one of these is right. It can't be Wednesday (since then 2 and 6 would both be right), nor can it be Thursday, Friday, or Saturday (since then 4 and 7 would both be right), nor can it be Monday or Tuesday (since then 7 would be right and so would 1 or 3). So today is

Sunday

and the

4th

speaker is the only correct one.

7 says that it's not Sunday, which agrees with 1,2,3,5,6. therefor proof not only that all but 4 is wrong, but also that since the 7th statement is wrong, it means that today IS Sunday. All can be proven with just that 1 statement.

• Love the direction you came from. – user2338816 Oct 15 '16 at 12:41

Sunday

The best way to visualize it is by creating a table with values:

$\begin{array}{c|c|c|c|c|c|c|c}\underset{(Statement~\#)}{\text{Speaker}}&\text{Mon}&\text{Tue}&\text{Wed}&\text{Thu}&\text{ Fri }&\,\text{Sat}\,&\text{Sun}\\\hline1&\text{X}\\\hline2&&&\text{X}\\\hline3&&\text{X}\\\hline4&&&&\text{X}&\text{X}&\text{X}&\color{red}{\text{X}}\\\hline5&&&&&\text{X}\\\hline6&&&\text{X}\\\hline7&\text{X}&\text{X}&\text{X}&\text{X}&\text{X}&\text{X}\end{array}$

Filling in the rows of the table:
Statement 1 is true only if today is Monday.
Statement 2 is true only if today is Wednesday.
Statement 3 is true only if today is Tuesday.
Statement 4 is true only if today is in the range from Thursday to Sunday.
Statement 5 is true only if today is Friday.
Statement 6 is true only if today is Wednesday.
Statement 7 says that yesterday was not Saturday.  Then yesterday could be Monday, Tuesday, Wednesday, Thursday, Friday or Sunday.  So today is Tuesday, Wednesday, Thursday, Friday, Saturday or Monday – any day except Sunday.

Finally, reading down the columns of the table:
On Monday, statements 1 and 7 are true.
On Tuesday, statements 3 and 7 are true.
On Wednesday, statements 2, 6, and 7 are true.
On Thursday, statements 4 and 7 are true.
On Friday, statements 4, 5, and 7 are true.
On Saturday, statements 4 and 7 are true.
On Sunday, only statement 4 is true.
The only day when only one statement is true is the correct day.  That is Sunday.

• Please can you explain this table and your reasoning a bit better? It looks like a nice pictorial solution, but I'm reluctant to upvote when there's so little explanation. Also, the language of this site is English, so the top row should probably be MTWTFSS rather than LMMJVSD :-) – Rand al'Thor Oct 14 '16 at 21:00
• item 1=Monday, item 2=Wednesday, item 3=Tuesday, item 4=Current Day is in range from Thrusday and Sunday, item 5=Friday, item 6=Wednesday, item 7=Yesterday was not Saturday, Then yesterday it could be Monday, Tuesday, Wednesday, Thursday, Friday, Sunday. So today is Tuesday or Wednesday, Thursday, or Friday or Saturday or Monday. The only day not included is Sunday. Finally, Monday (item 1,7), Tuesday (item 3,7), Wednesday (item 2,6,7), Thursday (item 4,7), Friday (item 4,5), Saturday (4,7), Sunday (4) The day that is mentioned only once is the correct day. Sunday. – Alberto Perez Oct 15 '16 at 3:24
• Ah, these must be the Spanish days of week! Another puzzle right there XD – Highstaker Oct 15 '16 at 12:15

A computer program can be used to solve it (following is in Racket language):

; SUN M T W TH F SAT
; 0   1 2 3 4  5 6

(define (f)
; assume today is x;
(for ((x 7))                          ; check x for 0 to 6
(printf "x=~a; count=~a ~n"
x
(count
(lambda(x) x)
(list (= 3 (+ x 2))        ; statements are listed here
(= x 3)
(= x 2)
(and (not(= x 1)) (not(= x 2)) (not(= x 3)))
(= x 5)
(= x 3)
(not (= 0 x))
)))))

(f)


It takes values of 0 to 6 for Sun to Sat and checks how many statements are correct for each of them. The output is:

x=0; count=1
x=1; count=2
x=2; count=2
x=3; count=3
x=4; count=2
x=5; count=3
x=6; count=2


Hence, only 1 statement is correct only for Sunday (x = 0), hence that is the answer.

Using SymPy:

>>> from sympy import *
>>> sunday, monday, tuesday, wednesday, thursday, friday, saturday = symbols('sunday monday tuesday wednesday thursday friday saturday')


Since only one of the $7$ Boolean variables can be true:

>>> Sun = sunday & Not(monday) & Not(tuesday) & Not(wednesday) & Not(thursday) & Not(friday) & Not(saturday)
>>> Mon = Not(sunday) & monday & Not(tuesday) & Not(wednesday) & Not(thursday) & Not(friday) & Not(saturday)
>>> Tue = Not(sunday) & Not(monday) & tuesday & Not(wednesday) & Not(thursday) & Not(friday) & Not(saturday)
>>> Wed = Not(sunday) & Not(monday) & Not(tuesday) & wednesday & Not(thursday) & Not(friday) & Not(saturday)
>>> Thu = Not(sunday) & Not(monday) & Not(tuesday) & Not(wednesday) & thursday & Not(friday) & Not(saturday)
>>> Fri = Not(sunday) & Not(monday) & Not(tuesday) & Not(wednesday) & Not(thursday) & friday & Not(saturday)
>>> Sat = Not(sunday) & Not(monday) & Not(tuesday) & Not(wednesday) & Not(thursday) & Not(friday) & saturday
>>> Today = Sun | Mon | Tue | Wed | Thu | Fri | Sat


Translating the $7$ statements:

>>> Phi1 = monday
>>> Phi2 = wednesday
>>> Phi3 = tuesday
>>> Phi4 = Not(monday) & Not(tuesday) & Not(wednesday)
>>> Phi5 = friday
>>> Phi6 = wednesday
>>> Phi7 = Not(sunday)


Since $6$ out of $7$ are false:

>>> Psi1 = (Phi1 & Not(Phi2) & Not(Phi3) & Not(Phi4) & Not(Phi5) & Not(Phi6) & Not(Phi7))
>>> Psi2 = (Not(Phi1) & Phi2 & Not(Phi3) & Not(Phi4) & Not(Phi5) & Not(Phi6) & Not(Phi7))
>>> Psi3 = (Not(Phi1) & Not(Phi2) & Phi3 & Not(Phi4) & Not(Phi5) & Not(Phi6) & Not(Phi7))
>>> Psi4 = (Not(Phi1) & Not(Phi2) & Not(Phi3) & Phi4 & Not(Phi5) & Not(Phi6) & Not(Phi7))
>>> Psi5 = (Not(Phi1) & Not(Phi2) & Not(Phi3) & Not(Phi4) & Phi5 & Not(Phi6) & Not(Phi7))
>>> Psi6 = (Not(Phi1) & Not(Phi2) & Not(Phi3) & Not(Phi4) & Not(Phi5) & Phi6 & Not(Phi7))
>>> Psi7 = (Not(Phi1) & Not(Phi2) & Not(Phi3) & Not(Phi4) & Not(Phi5) & Not(Phi6) & Phi7)
>>> Psi = Psi1 | Psi2 | Psi3 | Psi4 | Psi5 | Psi6 | Psi7


Simplifying:

>>> simplify(Today & Psi)
And(Not(friday), Not(monday), Not(saturday), Not(thursday), Not(tuesday), Not(wednesday), sunday)


Hence, today is Sunday.