From cd90da13f066bda7b14bc9df4d67dd37e5c8722d Mon Sep 17 00:00:00 2001 From: Ty Mick Date: Wed, 15 Jul 2020 12:49:56 -0400 Subject: [PATCH] Disambiguate "Priority Queue" instructions (#38805) * Disambiguate "Priority Queue" instructions * Add front() to solution * Add tests for front() method * Fix test typo Co-authored-by: Randell Dawson <5313213+RandellDawson@users.noreply.github.com> Co-authored-by: Randell Dawson <5313213+RandellDawson@users.noreply.github.com> --- .../create-a-priority-queue-class.english.md | 81 ++++++++++--------- 1 file changed, 45 insertions(+), 36 deletions(-) diff --git a/curriculum/challenges/english/10-coding-interview-prep/data-structures/create-a-priority-queue-class.english.md b/curriculum/challenges/english/10-coding-interview-prep/data-structures/create-a-priority-queue-class.english.md index 6ad080dcd6..341c48f057 100644 --- a/curriculum/challenges/english/10-coding-interview-prep/data-structures/create-a-priority-queue-class.english.md +++ b/curriculum/challenges/english/10-coding-interview-prep/data-structures/create-a-priority-queue-class.english.md @@ -13,8 +13,8 @@ For instance, let’s imagine we have a priority queue with three items: [['kitten', 2], ['dog', 2], ['rabbit', 2]] Here the second value (an integer) represents item priority. If we enqueue ['human', 1] with a priority of 1 (assuming lower priorities are given precedence) it would then be the first item to be dequeued. The collection would look like this: [['human', 1], ['kitten', 2], ['dog', 2], ['rabbit', 2]]. -We’ve started writing a PriorityQueue in the code editor. You will need to add an enqueue method for adding items with a priority, a dequeue method for removing items, a size method to return the number of items in the queue, a front method to return the element at the front of the queue, and finally an isEmpty method that will return true if the queue is empty or false if it is not. -The enqueue should accept items with the format shown above (['human', 1]) where 1 represents the priority. The dequeue should return only the current item, not its priority. +We’ve started writing a PriorityQueue in the code editor. You will need to add an enqueue method for adding items with a priority, a dequeue method for removing and returning items, a size method to return the number of items in the queue, a front method to return the element at the front of the queue, and finally an isEmpty method that will return true if the queue is empty or false if it is not. +The enqueue should accept items with the format shown above (['human', 1]) where 1 represents the priority. dequeue and front should return only the item's name, not its priority. ## Instructions @@ -33,10 +33,14 @@ tests: testString: assert((function(){var test = new PriorityQueue(); return (typeof test.dequeue === 'function')}())); - text: Your PriorityQueue class should have a size method. testString: assert((function(){var test = new PriorityQueue(); return (typeof test.size === 'function')}())); + - text: Your PriorityQueue class should have a front method. + testString: assert((function(){var test = new PriorityQueue(); return (typeof test.front === 'function')}())); - text: Your PriorityQueue class should have an isEmpty method. testString: assert((function(){var test = new PriorityQueue(); return (typeof test.isEmpty === 'function')}())); - text: Your PriorityQueue class should correctly keep track of the current number of items using the size method as items are enqueued and dequeued. testString: assert((function(){var test = new PriorityQueue(); test.enqueue(['David Brown', 2]); test.enqueue(['Jon Snow', 1]); var size1 = test.size(); test.dequeue(); var size2 = test.size(); test.enqueue(['A', 3]); test.enqueue(['B', 3]); test.enqueue(['C', 3]); return (size1 === 2 && size2 === 1 && test.size() === 4)}())); + - text: The front method should return the correct item at the front of the queue as items are enqueued and dequeued. + testString: assert((function(){var test = new PriorityQueue(); test.enqueue(["David Brown", 2]); var front1 = test.front(); test.enqueue(["Jon Snow", 1]); var front2 = test.front(); test.dequeue(); test.enqueue(["A", 3]); var front3 = test.front(); test.enqueue(["B", 3]); test.enqueue(["C", 3]); test.dequeue(); var front4 = test.front(); return (front1 === "David Brown" && front2 === "Jon Snow" && front3 === "David Brown" && front4 === "A");})()); - text: The isEmpty method should return true when the queue is empty. testString: assert((function(){var test = new PriorityQueue(); test.enqueue(['A', 1]); test.enqueue(['B', 1]); test.dequeue(); var first = test.isEmpty(); test.dequeue(); return (!first && test.isEmpty()); }())); - text: The priority queue should return items with a higher priority before items with a lower priority and return items in first-in-first-out order otherwise. @@ -73,41 +77,46 @@ function PriorityQueue () { ```js -function PriorityQueue () { - this.collection = []; - this.printCollection = function(){ - console.log(this.collection); - }; - this.size = function() { - return this.collection.length; - }; - this.isEmpty = function() { - return this.size() > 0 ? false : true; - }; - this.enqueue = function (newitem) { - if (this.isEmpty()) { - return this.collection.push(newitem); - } +function PriorityQueue() { + this.collection = []; + this.printCollection = function () { + console.log(this.collection); + }; + // Only change code below this line + this.enqueue = function (newitem) { + if (this.isEmpty()) { + return this.collection.push(newitem); + } - this.collection = this.collection.reverse(); - var found_index = this.collection.findIndex(function (item) { - return newitem[1] >= item[1]; - }); - if (found_index === -1) { - this.collection.push(newitem); - } else { - this.collection.splice(found_index, 0, newitem); - } - this.collection = this.collection.reverse(); -}; - this.dequeue = function() { - if (!this.isEmpty()) { - return this.collection.shift()[0]; - } else { - return 'The queue is empty.' - } - }; - } + this.collection = this.collection.reverse(); + var found_index = this.collection.findIndex(function (item) { + return newitem[1] >= item[1]; + }); + if (found_index === -1) { + this.collection.push(newitem); + } else { + this.collection.splice(found_index, 0, newitem); + } + this.collection = this.collection.reverse(); + }; + this.dequeue = function () { + if (!this.isEmpty()) { + return this.collection.shift()[0]; + } else { + return "The queue is empty."; + } + }; + this.size = function () { + return this.collection.length; + }; + this.front = function () { + return this.collection[0][0]; + }; + this.isEmpty = function () { + return this.size() > 0 ? false : true; + }; + // Only change code above this line +} ```