From debb23c123eb8518913b88362ab58843004297a8 Mon Sep 17 00:00:00 2001 From: Sergey Zhigalov Date: Wed, 31 Oct 2012 18:29:51 +0600 Subject: [PATCH 1/3] =?UTF-8?q?=D0=A1=D0=B3=D0=B5=D0=BD=D0=B5=D1=80=D0=B8?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=B0=D0=BB=20=D1=81=D0=BF=D0=B8=D1=81=D0=BE?= =?UTF-8?q?=D0=BA=20=D1=81=D0=BE=D0=B1=D1=8B=D1=82=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Selection.js | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 Selection.js diff --git a/Selection.js b/Selection.js new file mode 100644 index 0000000..16da134 --- /dev/null +++ b/Selection.js @@ -0,0 +1,74 @@ +/** +* Возвращает объект Event +* +* @param {String} [name = "Событие"] Имя события +* @param {String} [address = ""] Адресс события +* @param {Object} time Дата события +* @param {Array} member Участники +* @param {Number} [raiting=3] Важность события (по шкале от 0 до 5) +* +* @example +* Event( +* "Совещание", "Екатеринбург, ул. Тургенева, д. 4, ауд. 150", +* EventTime(new Date(2011, 10, 10, 14, 48, 00), 60), +* ["Жигалов Сергей Алексеевич"], 5) +* +* @return {Object} +* @see EventTime +*/ + +function Event(name, address, time, member, raiting) { + "use strict"; + return { + "name": name || "Событие", + "address": address.toString(), + "time": time, + "member": member || [], + "raiting": +raiting || 3 + }; +} + + +/** +* Возвращает объект EventTime +* +* @private +* @param {Number|Date} start Начало события +* @param {Number} [length=0] Длительность события в минутрах +* +* @example +* EventTime(new Date(2011, 10, 10, 14, 48, 00), 60) +* +* @return {Object} +*/ +function EventTime(start, length) { + "use strict"; + return { + "start": +start, + "length": +length || 0 + }; +} + +var events = [ + Event("jsy6on0kz4", "7429kpz7nh", EventTime(new Date(2012, 10, 8), 45), ["Иванов", "я", "Петров"]), // 1 + Event("l8zklfh2r5", "1ygb121nee", EventTime(new Date(2012, 11, 22), 45), ["Иванов", "я"]), // 2 + Event("weoua5w3pf", "icu620fqpo", EventTime(new Date(2012, 11, 3), 45), ["Иванов"]), // 3 + Event("5zs4x4aij9", "4x9pkek4dp", EventTime(new Date(2012, 9, 10), 45), ["Иванов", "я", "Петров"]), // 4 + Event("s1m5vkm5mv", "5v6hifv041", EventTime(new Date(2012, 11, 25)), ["Иванов", "я"]), // 5 + Event("3bdg49u3ez", "zwvyu91w3b", EventTime(new Date(2012, 10, 10), 45), ["Иванов", "Петров"]), // 6 + Event("efc7dr20dx", "u641l89gw7", EventTime(new Date(2012, 9, 9)), ["Иванов", "я"]), // 7 + Event("pqlv9jglxq", "nkb24jd7u6", EventTime(new Date(2012, 10, 29)), ["Петров"]), // 8 + Event("iei2z6c63b", "kgzdrcs4mk", EventTime(new Date(2012, 11, 7)), ["я", "Петров"]), // 9 + Event("kygauxe4ub", "br0vzaikwr", EventTime(new Date(2012, 11, 27), 45), ["Иванов", "я"], 5), // 10 + Event("ke4vd03xp8", "9k3bbogzz5", EventTime(new Date(2012, 11, 3), 45), ["Иванов"]), // 11 + Event("jt4kew1ayg", "4q51wfulmd", EventTime(new Date(2012, 11, 29), 45), ["Иванов", "Петров"]), // 12 + Event("dg9q72wmw9", "c5r5t5z024", EventTime(new Date(2012, 11, 8), 45), ["Иванов"]), // 13 + Event("v4873m9tgp", "l0rdqy22d3", EventTime(new Date(2012, 10, 25), 45), ["Иванов", "я"]), // 14 + Event("rrb6bjyubc", "0oxvmk59p4", EventTime(new Date(2012, 10, 23)), ["Иванов", "я"]), // 15 + Event("0oqqd4j655", "rb1gc65t8d", EventTime(new Date(2012, 10, 11), 45), ["Иванов", "Петров"]), // 16 + Event("f7b16x9cmy", "ncxmyqnhp1", EventTime(new Date(2012, 11, 4)), ["Иванов", "я"]), // 17 + Event("ik3xyzqoky", "3cguxe6l6n", EventTime(new Date(2012, 11, 16)), ["Петров"]), // 18 + Event("u4mfqatngu", "a7vnsmnpb0", EventTime(new Date(2012, 9, 24)), ["я"]), // 19 + Event("s53m0j6u9j", "bk9y4szr2s", EventTime(new Date(2012, 9, 7), 45), ["Иванов", "я"], 5), // 20 + Event("lkajbmx7y2", "vwzpu1xl0o", EventTime(new Date(2012, 9, 20), 45), ["Иванов", "я", "Петров"], 1)//21 +]; \ No newline at end of file From 6717bb5f2b0577f7bd7c7ae6b7de1de7495f0b5d Mon Sep 17 00:00:00 2001 From: Sergey Zhigalov Date: Tue, 6 Nov 2012 09:22:31 +0600 Subject: [PATCH 2/3] =?UTF-8?q?=D0=A1=D0=BA=D0=BB=D0=B5=D0=BF=D0=B0=D0=BB?= =?UTF-8?q?=20=D0=BF=D1=80=D0=BE=D1=81=D1=82=D0=B5=D0=B9=D1=88=D0=B8=D0=B5?= =?UTF-8?q?=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=B8=20=D0=B2=D1=8B?= =?UTF-8?q?=D0=B1=D0=BE=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Не конечный вариант! Осталась еще фильтрация и вывод --- Selection.js | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++- index.html | 10 ++++++++++ 2 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 index.html diff --git a/Selection.js b/Selection.js index 16da134..7280287 100644 --- a/Selection.js +++ b/Selection.js @@ -71,4 +71,55 @@ var events = [ Event("u4mfqatngu", "a7vnsmnpb0", EventTime(new Date(2012, 9, 24)), ["я"]), // 19 Event("s53m0j6u9j", "bk9y4szr2s", EventTime(new Date(2012, 9, 7), 45), ["Иванов", "я"], 5), // 20 Event("lkajbmx7y2", "vwzpu1xl0o", EventTime(new Date(2012, 9, 20), 45), ["Иванов", "я", "Петров"], 1)//21 -]; \ No newline at end of file +]; + + +/** +* Прошедшее событие +* +* @param {Object} event Событие +* +* @return {Boolean} +*/ +function OldEvent(event) { + return event.time.start < Date.now(); +} + +/** +* Событие с моим участием +* +* @param {Object} event Событие +* +* @return {Boolean} +*/ +function MyParticipationEvent(event, name) { + return event.member.some(function (member) { + return member == name; + }); +} + +/** +* Предстоящее событие +* +* @param {Object} event Событие +* +* @return {Boolean} +*/ +function NewEvent(event) { + return event.time.start > Date.now(); +} + +/** +* Предстоящее событие +* +* @param {Object} event Событие +* +* @return {Boolean} +*/ +function NewEvent(event) { + return event.time.start > Date.now(); +} + +function Selection() { + console.log(events.filter(MyParticipationEvent).length); +} \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..a6e3203 --- /dev/null +++ b/index.html @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file From d5f0748811edfd2c698395f29efe1b6ac9d06a03 Mon Sep 17 00:00:00 2001 From: Sergey Zhigalov Date: Wed, 7 Nov 2012 13:01:07 +0600 Subject: [PATCH 3/3] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5?= =?UTF-8?q?=20=D0=B3=D0=BE=D1=82=D0=BE=D0=B2=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Выборки по всем предикатам, которые описаны в задании --- ComplexFunctions.js | 40 ++++++++++++ Selection.js => Event.js | 55 +---------------- SelectionFunctions.js | 127 +++++++++++++++++++++++++++++++++++++++ index.html | 12 ++-- 4 files changed, 177 insertions(+), 57 deletions(-) create mode 100644 ComplexFunctions.js rename Selection.js => Event.js (78%) create mode 100644 SelectionFunctions.js diff --git a/ComplexFunctions.js b/ComplexFunctions.js new file mode 100644 index 0000000..3a417bc --- /dev/null +++ b/ComplexFunctions.js @@ -0,0 +1,40 @@ +/** +* Все предстоящие события с моим участием отсортированные по рейтигу +*/ +function NewEventWithMeSortByRaiting() { + "use strict"; + events + .filter(NewEvent) + .filter(EventWithPerson, {name: "я"}) + .sort(SortByRaiting) + .forEach(PrintEvent); +} + +/** +* Все события, которые произойдут на этой неделе, отсортированые по рейтингу +*/ +function ThisWeekSortedByRaiting() { + "use strict"; + var now = new Date(); + var today = new Date(now.getFullYear(), now.getMonth(), now.getDate()).getTime(); + var timeToEndOfWeek = (7 - now.getDay()) * 24 * 60 * 60 * 1000; + var endOfWeek = new Date(today + timeToEndOfWeek); + events + .filter(NewEvent) + .filter(BeforeTimeEvent, { time: endOfWeek }) + .sort(SortByRaiting) + .forEach(PrintEvent); +}; + +/** +* Выбрать ближайшее (по времени) событие без моего участия +*/ +function FirstEventWithoutMe() { + "use strict"; + var filteredEvents = events + .filter(NewEvent) + .filter(EventWithoutPerson, { name: "я" }) + .sort(SortByDate); + if (filteredEvents.length != 0) + PrintEvent(filteredEvents[0]); +}; \ No newline at end of file diff --git a/Selection.js b/Event.js similarity index 78% rename from Selection.js rename to Event.js index 7280287..d576437 100644 --- a/Selection.js +++ b/Event.js @@ -58,7 +58,7 @@ var events = [ Event("3bdg49u3ez", "zwvyu91w3b", EventTime(new Date(2012, 10, 10), 45), ["Иванов", "Петров"]), // 6 Event("efc7dr20dx", "u641l89gw7", EventTime(new Date(2012, 9, 9)), ["Иванов", "я"]), // 7 Event("pqlv9jglxq", "nkb24jd7u6", EventTime(new Date(2012, 10, 29)), ["Петров"]), // 8 - Event("iei2z6c63b", "kgzdrcs4mk", EventTime(new Date(2012, 11, 7)), ["я", "Петров"]), // 9 + Event("iei2z6c63b", "kgzdrcs4mk", EventTime(new Date(2012, 11, 9)), ["я", "Петров"]), // 9 Event("kygauxe4ub", "br0vzaikwr", EventTime(new Date(2012, 11, 27), 45), ["Иванов", "я"], 5), // 10 Event("ke4vd03xp8", "9k3bbogzz5", EventTime(new Date(2012, 11, 3), 45), ["Иванов"]), // 11 Event("jt4kew1ayg", "4q51wfulmd", EventTime(new Date(2012, 11, 29), 45), ["Иванов", "Петров"]), // 12 @@ -71,55 +71,4 @@ var events = [ Event("u4mfqatngu", "a7vnsmnpb0", EventTime(new Date(2012, 9, 24)), ["я"]), // 19 Event("s53m0j6u9j", "bk9y4szr2s", EventTime(new Date(2012, 9, 7), 45), ["Иванов", "я"], 5), // 20 Event("lkajbmx7y2", "vwzpu1xl0o", EventTime(new Date(2012, 9, 20), 45), ["Иванов", "я", "Петров"], 1)//21 -]; - - -/** -* Прошедшее событие -* -* @param {Object} event Событие -* -* @return {Boolean} -*/ -function OldEvent(event) { - return event.time.start < Date.now(); -} - -/** -* Событие с моим участием -* -* @param {Object} event Событие -* -* @return {Boolean} -*/ -function MyParticipationEvent(event, name) { - return event.member.some(function (member) { - return member == name; - }); -} - -/** -* Предстоящее событие -* -* @param {Object} event Событие -* -* @return {Boolean} -*/ -function NewEvent(event) { - return event.time.start > Date.now(); -} - -/** -* Предстоящее событие -* -* @param {Object} event Событие -* -* @return {Boolean} -*/ -function NewEvent(event) { - return event.time.start > Date.now(); -} - -function Selection() { - console.log(events.filter(MyParticipationEvent).length); -} \ No newline at end of file +]; \ No newline at end of file diff --git a/SelectionFunctions.js b/SelectionFunctions.js new file mode 100644 index 0000000..aeba37b --- /dev/null +++ b/SelectionFunctions.js @@ -0,0 +1,127 @@ + +/** +* Прошедшее событие +* +* @param {Object} event Событие +* +* @return {Boolean} +*/ +function OldEvent(event) { + "use strict"; + return event.time.start < new Date().getTime(); +} + +/** +* Предстоящее событие +* +* @param {Object} event Событие +* +* @return {Boolean} +*/ +function NewEvent(event) { + "use strict"; + return event.time.start >= new Date().getTime(); +} + +/** +* Событие, в котором участвует человек с именем "name" +* +* @param {Object} event Событие +* +* @return {Boolean} +*/ +function EventWithPerson(event) { + "use strict"; + var name = this.name; + return event.member.some(function (member) { + return member === name; + }); +} + +/** +* Событие, в котором не участвует человек с именем "name" +* +* @param {Object} event Событие +* +* @return {Boolean} +*/ +function EventWithoutPerson(event) { + "use strict"; + var name = this.name; + return event.member.every(function (member) { + return member !== name; + }); +} + +/** +* События, которые произойдут через время, указанное в time +* +* @param {Object} event Событие +* +* @return {Boolean} +*/ +function LaterTimeEvent(event) { + "use strict"; + return event.time.start >= this.time; +} + +/** +* События, которые произойдут до времени, указанного в time +* +* @param {Object} event Событие +* +* @return {Boolean} +*/ +function BeforeTimeEvent(event) { + "use strict"; + return event.time.start < this.time; +} + +/** +* Сортировка по времени события +* +* @param {Object} first Событие +* @param {Object} second Событие +* +* @return {Int} +*/ +function SortByDate(first, second) { + "use strict"; + if (first.time.start < second.time.start) { + return -1; + } + if (first.time.start > second.time.start) { + return 1; + } + return 0; +} + +/** +* Сортировка по рейтингу события +* +* @param {Object} first Событие +* @param {Object} second Событие +* +* @return {Int} +*/ +function SortByRaiting(first, second) { + "use strict"; + if (first.raiting < second.raiting) { + return 1; + } + if (first.raiting > second.raiting) { + return -1; + } + return 0; +} + +/** +* Напечатать событие +* +* @param {Object} event Событие +* +*/ +function PrintEvent(event) { + "use strict"; + console.log(event.name + " " + event.address + "; Begin in \"" + new Date(event.time.start) + "\". " + event.member.length + " member(s). Raiting: " + event.raiting); +} \ No newline at end of file diff --git a/index.html b/index.html index a6e3203..014d062 100644 --- a/index.html +++ b/index.html @@ -1,10 +1,14 @@ - + - - + Выборки + + + - +

Выбрать все предстоящие события с моим участием отсортированные по рейтигу

+

Выбрать все события, которые произойдут на этой неделе, отсортированые по рейтингу

+

Выбрать ближайшее (по времени) событие без моего участия

\ No newline at end of file