Cheryl's birthday: Difference between revisions
Content added Content deleted
No edit summary |
Alextretyak (talk | contribs) (Added 11l) |
||
Line 27: | Line 27: | ||
* [https://en.wikipedia.org/wiki/Tuple_relational_calculus, Tuple Relational Calculus] |
* [https://en.wikipedia.org/wiki/Tuple_relational_calculus, Tuple Relational Calculus] |
||
<br><br> |
<br><br> |
||
=={{header|11l}}== |
|||
{{trans|Nim}} |
|||
<lang 11l>T Date |
|||
String month |
|||
Int day |
|||
F (month, day) |
|||
.month = month |
|||
.day = day |
|||
V dates = [Date(‘May’, 15), Date(‘May’, 16), Date(‘May’, 19), Date(‘June’, 17), Date(‘June’, 18), |
|||
Date(‘July’, 14), Date(‘July’, 16), Date(‘August’, 14), Date(‘August’, 15), Date(‘August’, 17)] |
|||
DefaultDict[Int, Set[String]] monthTable |
|||
L(date) dates |
|||
monthTable[date.day].add(date.month) |
|||
DefaultDict[String, Set[Int]] dayTable |
|||
L(date) dates |
|||
dayTable[date.month].add(date.day) |
|||
V possibleMonths = Set[String]() |
|||
V possibleDays = Set[Int]() |
|||
L(month, days) dayTable |
|||
I days.len > 1 |
|||
possibleMonths.add(month) |
|||
L(month, days) dayTable |
|||
L(day) days |
|||
I monthTable[day].len == 1 |
|||
possibleMonths.remove(month) |
|||
print(‘After first Albert's sentence, possible months are ’Array(possibleMonths).join(‘, ’)‘.’) |
|||
L(day, months) monthTable |
|||
I months.len > 1 |
|||
possibleDays.add(day) |
|||
V impossibleDays = Set[Int]() |
|||
L(day) possibleDays |
|||
I monthTable[day].intersection(possibleMonths).len > 1 |
|||
impossibleDays.add(day) |
|||
L(day) impossibleDays |
|||
possibleDays.remove(day) |
|||
print(‘After Bernard's sentence, possible days are ’Array(possibleDays).join(‘, ’)‘.’) |
|||
V impossibleMonths = Set[String]() |
|||
L(month) possibleMonths |
|||
I dayTable[month].intersection(possibleDays).len > 1 |
|||
impossibleMonths.add(month) |
|||
L(month) impossibleMonths |
|||
possibleMonths.remove(month) |
|||
assert(possibleMonths.len == 1) |
|||
V month = possibleMonths.pop() |
|||
print(‘After second Albert's sentence, remaining month is ’month‘...’) |
|||
possibleDays = possibleDays.intersection(dayTable[month]) |
|||
assert(possibleDays.len == 1) |
|||
V day = possibleDays.pop() |
|||
print(‘and thus remaining day is ’day‘.’) |
|||
print() |
|||
print(‘So birthday date is ’month‘ ’day‘.’)</lang> |
|||
{{out}} |
|||
<pre> |
|||
After first Albert's sentence, possible months are August, July. |
|||
After Bernard's sentence, possible days are 15, 16, 17. |
|||
After second Albert's sentence, remaining month is July... |
|||
and thus remaining day is 16. |
|||
So birthday date is July 16. |
|||
</pre> |
|||
=={{header|AppleScript}}== |
=={{header|AppleScript}}== |