Content-Length: 8530 | pFad | http://github.com/TheAlgorithms/JavaScript/pull/1671.patch
thub.com
From 1ff709e7bdaeb0d325fa789a150e4b1c357751ea Mon Sep 17 00:00:00 2001
From: ddaniel27
Date: Mon, 6 May 2024 22:13:25 -0500
Subject: [PATCH 1/5] [Solution] Project euler challenge 19 with tests
---
Project-Euler/Problem019.js | 55 +++++++++++++++++++++++++++
Project-Euler/test/Problem019.test.js | 8 ++++
2 files changed, 63 insertions(+)
create mode 100644 Project-Euler/Problem019.js
create mode 100644 Project-Euler/test/Problem019.test.js
diff --git a/Project-Euler/Problem019.js b/Project-Euler/Problem019.js
new file mode 100644
index 0000000000..6b273b5953
--- /dev/null
+++ b/Project-Euler/Problem019.js
@@ -0,0 +1,55 @@
+/**
+ * Problem 19 - Counting Sundays
+ *
+ * @see {@link https://projecteuler.net/problem=19}
+ *
+ * You are given the following information, but you may prefer to do some research for yourself.
+ * 1 Jan 1900 was a Monday.
+ * Thirty days has September,
+ * April, June and November.
+ * All the rest have thirty-one,
+ * Saving February alone,
+ * Which has twenty-eight, rain or shine.
+ * And on leap years, twenty-nine.
+ * A leap year occurs on any year evenly divisible by 4, but not on a century unless it is divisible by 400.
+ * How many Sundays fell on the first of the month during the twentieth century (1 Jan 1901 to 31 Dec 2000)?
+ *
+ * @author ddaniel27
+ */
+
+// Check if a year is a leap year
+// A leap year occurs on any year evenly divisible by 4, but not on a century unless it is divisible by 400.
+function isLeapYear(year) {
+ return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0
+}
+
+function problem19() {
+ let sundaysCount = 0 // Count of Sundays
+ let dayOfWeek = 2 // 1st Jan 1900 was a Monday, so 1st Jan 1901 was a Tuesday
+
+ for (let year = 1901; year <= 2000; year++) {
+ // From 1901 to 2000
+ for (let month = 1; month <= 12; month++) {
+ // From January to December
+ if (dayOfWeek === 0) {
+ // If it's a Sunday (0 is Sunday, 1 is Monday, ..., 6 is Saturday)
+ sundaysCount++
+ }
+
+ let daysInMonth = 31
+ if (month === 4 || month === 6 || month === 9 || month === 11) {
+ // April, June, September, November
+ daysInMonth = 30
+ } else if (month === 2) {
+ // February
+ daysInMonth = isLeapYear(year) ? 29 : 28
+ }
+
+ dayOfWeek = (dayOfWeek + daysInMonth) % 7 // Calculate the day of the week
+ }
+ }
+
+ return sundaysCount
+}
+
+export { problem19 }
diff --git a/Project-Euler/test/Problem019.test.js b/Project-Euler/test/Problem019.test.js
new file mode 100644
index 0000000000..8845e5a0ac
--- /dev/null
+++ b/Project-Euler/test/Problem019.test.js
@@ -0,0 +1,8 @@
+import { problem19 } from '../Problem019.js'
+
+describe('checking sundays during the twentieth century', () => {
+ // Project Euler Challenge Check
+ test('result should be 171', () => {
+ expect(problem19()).toBe(171)
+ })
+})
From 664da39d784ad0e0c90a960b0dbd576acab32bfc Mon Sep 17 00:00:00 2001
From: ddaniel27
Date: Mon, 27 May 2024 10:27:29 -0500
Subject: [PATCH 2/5] update leap year function
---
Project-Euler/Problem019.js | 7 +------
1 file changed, 1 insertion(+), 6 deletions(-)
diff --git a/Project-Euler/Problem019.js b/Project-Euler/Problem019.js
index 6b273b5953..75e8d7528b 100644
--- a/Project-Euler/Problem019.js
+++ b/Project-Euler/Problem019.js
@@ -16,12 +16,7 @@
*
* @author ddaniel27
*/
-
-// Check if a year is a leap year
-// A leap year occurs on any year evenly divisible by 4, but not on a century unless it is divisible by 400.
-function isLeapYear(year) {
- return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0
-}
+import { isLeapYear } from '../Maths/LeapYear'
function problem19() {
let sundaysCount = 0 // Count of Sundays
From 98a6fa4d80127096fbc82d821e70158b2e9dc638 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Lars=20M=C3=BCller?=
<34514239+appgurueu@users.noreply.github.com>
Date: Sat, 15 Jun 2024 00:18:31 +0200
Subject: [PATCH 3/5] Remove unnecessary, confusingly placed comments
---
Project-Euler/Problem019.js | 2 --
1 file changed, 2 deletions(-)
diff --git a/Project-Euler/Problem019.js b/Project-Euler/Problem019.js
index 75e8d7528b..5b488c7f96 100644
--- a/Project-Euler/Problem019.js
+++ b/Project-Euler/Problem019.js
@@ -23,9 +23,7 @@ function problem19() {
let dayOfWeek = 2 // 1st Jan 1900 was a Monday, so 1st Jan 1901 was a Tuesday
for (let year = 1901; year <= 2000; year++) {
- // From 1901 to 2000
for (let month = 1; month <= 12; month++) {
- // From January to December
if (dayOfWeek === 0) {
// If it's a Sunday (0 is Sunday, 1 is Monday, ..., 6 is Saturday)
sundaysCount++
From 2b70c8cd3987da64a77e22d7fd1e35644d6fe9fe Mon Sep 17 00:00:00 2001
From: ddaniel27
Date: Tue, 18 Jun 2024 10:22:16 -0500
Subject: [PATCH 4/5] [COMPRESSOR] RLE
---
Compression/RLE.js | 41 ++++++++++++++++++++++++++++++++++++
Compression/test/RLE.test.js | 13 ++++++++++++
2 files changed, 54 insertions(+)
create mode 100644 Compression/RLE.js
create mode 100644 Compression/test/RLE.test.js
diff --git a/Compression/RLE.js b/Compression/RLE.js
new file mode 100644
index 0000000000..02a1ba1fed
--- /dev/null
+++ b/Compression/RLE.js
@@ -0,0 +1,41 @@
+/*
+ * RLE (Run Length Encoding) is a simple form of data compression.
+ * The basic idea is to represent repeated successive characters as a single count and character.
+ * For example, the string "AAAABBBCCDAA" would be encoded as "4A3B2C1D2A".
+ *
+ * @author - [ddaniel27](https://github.com/ddaniel27)
+*/
+
+function Compress(str) {
+ let compressed = ''
+ let count = 1
+
+ for (let i = 0; i < str.length; i++) {
+ if (str[i] !== str[i + 1]) {
+ compressed += count + str[i]
+ count = 1
+ continue
+ }
+
+ count++
+ }
+
+ return compressed
+}
+
+function Decompress(str) {
+ let decompressed = ''
+ let match = [...str.matchAll(/(\d+)(\D)/g)] // match all groups of digits followed by a non-digit character
+
+ match.forEach(item => {
+ let [count, char] = [item[1], item[2]]
+ decompressed += char.repeat(count)
+ })
+
+ return decompressed
+}
+
+export {
+ Compress,
+ Decompress
+}
diff --git a/Compression/test/RLE.test.js b/Compression/test/RLE.test.js
new file mode 100644
index 0000000000..0094b5b7e2
--- /dev/null
+++ b/Compression/test/RLE.test.js
@@ -0,0 +1,13 @@
+import { Compress, Decompress } from '../RLE'
+
+describe('Test RLE Compressor/Decompressor', () => {
+ it('Test - 1, Pass long repetitive strings', () => {
+ expect(Compress('AAAAAAAAAAAAAA')).toBe('14A')
+ expect(Compress('AAABBQQQQQFG')).toBe('3A2B5Q1F1G')
+ })
+
+ it('Test - 2, Pass compressed strings', () => {
+ expect(Decompress('14A')).toBe('AAAAAAAAAAAAAA')
+ expect(Decompress('3A2B5Q1F1G')).toBe('AAABBQQQQQFG')
+ })
+})
From 3e1156c51b23352936899df3661d2534da3304af Mon Sep 17 00:00:00 2001
From: ddaniel27
Date: Tue, 18 Jun 2024 10:22:55 -0500
Subject: [PATCH 5/5] [COMPRESSOR] RLE style fixed
---
Compression/RLE.js | 21 +++++++++------------
1 file changed, 9 insertions(+), 12 deletions(-)
diff --git a/Compression/RLE.js b/Compression/RLE.js
index 02a1ba1fed..81a1538646 100644
--- a/Compression/RLE.js
+++ b/Compression/RLE.js
@@ -1,10 +1,10 @@
/*
- * RLE (Run Length Encoding) is a simple form of data compression.
- * The basic idea is to represent repeated successive characters as a single count and character.
- * For example, the string "AAAABBBCCDAA" would be encoded as "4A3B2C1D2A".
- *
- * @author - [ddaniel27](https://github.com/ddaniel27)
-*/
+ * RLE (Run Length Encoding) is a simple form of data compression.
+ * The basic idea is to represent repeated successive characters as a single count and character.
+ * For example, the string "AAAABBBCCDAA" would be encoded as "4A3B2C1D2A".
+ *
+ * @author - [ddaniel27](https://github.com/ddaniel27)
+ */
function Compress(str) {
let compressed = ''
@@ -27,15 +27,12 @@ function Decompress(str) {
let decompressed = ''
let match = [...str.matchAll(/(\d+)(\D)/g)] // match all groups of digits followed by a non-digit character
- match.forEach(item => {
+ match.forEach((item) => {
let [count, char] = [item[1], item[2]]
decompressed += char.repeat(count)
})
- return decompressed
+ return decompressed
}
-export {
- Compress,
- Decompress
-}
+export { Compress, Decompress }
--- a PPN by Garber Painting Akron. With Image Size Reduction included!Fetched URL: http://github.com/TheAlgorithms/JavaScript/pull/1671.patch
Alternative Proxies:
Alternative Proxy
pFad Proxy
pFad v3 Proxy
pFad v4 Proxy