Latest commit

History

13 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Let's Learn Algorithms

Let's Learn Algorithms is an interactive blog/screencast series I am experimenting with to help new developers not only learn algorithms, but to also learn how they are implemented, and how to go from a and how to approach problem solving in general. I decided to go ahead with it after receiving positive feedback on reddit here - https://www.reddit.com/r/learnprogramming/comments/56aboa/i_can_understand_the_basic_algorithms_and_how/.

Lessons will likely be done weekly, but that could vary depending on my own schedule. Each lesson will focus on a single algorithm or topic, with the exception being when two algorithms are heavily related and there is a benefit in pairing the two together.

Each lesson will consist of the following pieces:

1. Introduction to the new algorithm

I start each lesson by explaining what the algorithm is, how it works, what it is useful for, and any other important details about the algorithm.

I am aiming to do this in both screencast and written blog format, but that may change over time. If you have a preference please reach out and let me know - jon@calhoun.io.

2. A walk-through showing how to implement the algorithm

I won't use any hand-waving or pseudo-code. I will actually write a working implementation of the algorithm so that you can see exactly how it could be implemented in your own code.

I strongly encourage that you code along (even if in another language) and then try to write the algorithm yourself a few days later without referencing my implementation. This will help make everything stick a little better.

3. Practice problems

On top of an implementation, I will also try to provide 2-3 practice problems that can be solved using the algorithm. I won't exactly say how, and many of these problems could be solved by other means, but I encourage you to try to use the algorithm you just learned to solve the problem.

And don't just solve it conceptually. Actually sit down and code a solution and verify that it works. I may not have a comprehensive test suite for each problem, but I will try to provide you with a few use cases that will help find bugs in your code.

That said, DO NOT rely on the test cases to ensure your code is correct. I suggest that you don't even look at which particular use case your code fails, and instead step back and think "What about my algorithm is fundamentally flawed?" or "What about my implementation differs from the algorithm I had envisioned?"

4. Review of practice problems

I will also post (possibly a week or two later) a follow-up video/article that covers how to solve every practice problem with real code so that you can reference it to verify your solutions, or to help you understand the solutions to problems you couldn't solve.

About

A repository of programming algorithms implemented in Go. This is meant to complement the "Let's Learn Algorithms" series at calhoun.io

Resources

Stars

94 stars

Watchers

12 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

13 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Let's Learn Algorithms

Let's Learn Algorithms is an interactive blog/screencast series I am experimenting with to help new developers not only learn algorithms, but to also learn how they are implemented, and how to go from a and how to approach problem solving in general. I decided to go ahead with it after receiving positive feedback on reddit here - https://www.reddit.com/r/learnprogramming/comments/56aboa/i_can_understand_the_basic_algorithms_and_how/.

Lessons will likely be done weekly, but that could vary depending on my own schedule. Each lesson will focus on a single algorithm or topic, with the exception being when two algorithms are heavily related and there is a benefit in pairing the two together.

Each lesson will consist of the following pieces:

1. Introduction to the new algorithm

I start each lesson by explaining what the algorithm is, how it works, what it is useful for, and any other important details about the algorithm.

I am aiming to do this in both screencast and written blog format, but that may change over time. If you have a preference please reach out and let me know - jon@calhoun.io.

2. A walk-through showing how to implement the algorithm

I won't use any hand-waving or pseudo-code. I will actually write a working implementation of the algorithm so that you can see exactly how it could be implemented in your own code.

I strongly encourage that you code along (even if in another language) and then try to write the algorithm yourself a few days later without referencing my implementation. This will help make everything stick a little better.

3. Practice problems

On top of an implementation, I will also try to provide 2-3 practice problems that can be solved using the algorithm. I won't exactly say how, and many of these problems could be solved by other means, but I encourage you to try to use the algorithm you just learned to solve the problem.

And don't just solve it conceptually. Actually sit down and code a solution and verify that it works. I may not have a comprehensive test suite for each problem, but I will try to provide you with a few use cases that will help find bugs in your code.

That said, DO NOT rely on the test cases to ensure your code is correct. I suggest that you don't even look at which particular use case your code fails, and instead step back and think "What about my algorithm is fundamentally flawed?" or "What about my implementation differs from the algorithm I had envisioned?"

4. Review of practice problems

I will also post (possibly a week or two later) a follow-up video/article that covers how to solve every practice problem with real code so that you can reference it to verify your solutions, or to help you understand the solutions to problems you couldn't solve.

About

A repository of programming algorithms implemented in Go. This is meant to complement the "Let's Learn Algorithms" series at calhoun.io

Resources

Stars

94 stars

Watchers

12 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

13 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Let's Learn Algorithms

Let's Learn Algorithms is an interactive blog/screencast series I am experimenting with to help new developers not only learn algorithms, but to also learn how they are implemented, and how to go from a and how to approach problem solving in general. I decided to go ahead with it after receiving positive feedback on reddit here - https://www.reddit.com/r/learnprogramming/comments/56aboa/i_can_understand_the_basic_algorithms_and_how/.

Lessons will likely be done weekly, but that could vary depending on my own schedule. Each lesson will focus on a single algorithm or topic, with the exception being when two algorithms are heavily related and there is a benefit in pairing the two together.

Each lesson will consist of the following pieces:

1. Introduction to the new algorithm

I start each lesson by explaining what the algorithm is, how it works, what it is useful for, and any other important details about the algorithm.

I am aiming to do this in both screencast and written blog format, but that may change over time. If you have a preference please reach out and let me know - jon@calhoun.io.

2. A walk-through showing how to implement the algorithm

I won't use any hand-waving or pseudo-code. I will actually write a working implementation of the algorithm so that you can see exactly how it could be implemented in your own code.

I strongly encourage that you code along (even if in another language) and then try to write the algorithm yourself a few days later without referencing my implementation. This will help make everything stick a little better.

3. Practice problems

On top of an implementation, I will also try to provide 2-3 practice problems that can be solved using the algorithm. I won't exactly say how, and many of these problems could be solved by other means, but I encourage you to try to use the algorithm you just learned to solve the problem.

And don't just solve it conceptually. Actually sit down and code a solution and verify that it works. I may not have a comprehensive test suite for each problem, but I will try to provide you with a few use cases that will help find bugs in your code.

That said, DO NOT rely on the test cases to ensure your code is correct. I suggest that you don't even look at which particular use case your code fails, and instead step back and think "What about my algorithm is fundamentally flawed?" or "What about my implementation differs from the algorithm I had envisioned?"

4. Review of practice problems

I will also post (possibly a week or two later) a follow-up video/article that covers how to solve every practice problem with real code so that you can reference it to verify your solutions, or to help you understand the solutions to problems you couldn't solve.

About

A repository of programming algorithms implemented in Go. This is meant to complement the "Let's Learn Algorithms" series at calhoun.io

Resources

Stars

94 stars

Watchers

12 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

13 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Let's Learn Algorithms

Let's Learn Algorithms is an interactive blog/screencast series I am experimenting with to help new developers not only learn algorithms, but to also learn how they are implemented, and how to go from a and how to approach problem solving in general. I decided to go ahead with it after receiving positive feedback on reddit here - https://www.reddit.com/r/learnprogramming/comments/56aboa/i_can_understand_the_basic_algorithms_and_how/.

Lessons will likely be done weekly, but that could vary depending on my own schedule. Each lesson will focus on a single algorithm or topic, with the exception being when two algorithms are heavily related and there is a benefit in pairing the two together.

Each lesson will consist of the following pieces:

1. Introduction to the new algorithm

I start each lesson by explaining what the algorithm is, how it works, what it is useful for, and any other important details about the algorithm.

I am aiming to do this in both screencast and written blog format, but that may change over time. If you have a preference please reach out and let me know - jon@calhoun.io.

2. A walk-through showing how to implement the algorithm

I won't use any hand-waving or pseudo-code. I will actually write a working implementation of the algorithm so that you can see exactly how it could be implemented in your own code.

I strongly encourage that you code along (even if in another language) and then try to write the algorithm yourself a few days later without referencing my implementation. This will help make everything stick a little better.

3. Practice problems

On top of an implementation, I will also try to provide 2-3 practice problems that can be solved using the algorithm. I won't exactly say how, and many of these problems could be solved by other means, but I encourage you to try to use the algorithm you just learned to solve the problem.

And don't just solve it conceptually. Actually sit down and code a solution and verify that it works. I may not have a comprehensive test suite for each problem, but I will try to provide you with a few use cases that will help find bugs in your code.

That said, DO NOT rely on the test cases to ensure your code is correct. I suggest that you don't even look at which particular use case your code fails, and instead step back and think "What about my algorithm is fundamentally flawed?" or "What about my implementation differs from the algorithm I had envisioned?"

4. Review of practice problems

I will also post (possibly a week or two later) a follow-up video/article that covers how to solve every practice problem with real code so that you can reference it to verify your solutions, or to help you understand the solutions to problems you couldn't solve.

About

A repository of programming algorithms implemented in Go. This is meant to complement the "Let's Learn Algorithms" series at calhoun.io

Resources

Stars

94 stars

Watchers

12 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

13 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Let's Learn Algorithms

Let's Learn Algorithms is an interactive blog/screencast series I am experimenting with to help new developers not only learn algorithms, but to also learn how they are implemented, and how to go from a and how to approach problem solving in general. I decided to go ahead with it after receiving positive feedback on reddit here - https://www.reddit.com/r/learnprogramming/comments/56aboa/i_can_understand_the_basic_algorithms_and_how/.

Lessons will likely be done weekly, but that could vary depending on my own schedule. Each lesson will focus on a single algorithm or topic, with the exception being when two algorithms are heavily related and there is a benefit in pairing the two together.

Each lesson will consist of the following pieces:

1. Introduction to the new algorithm

I start each lesson by explaining what the algorithm is, how it works, what it is useful for, and any other important details about the algorithm.

I am aiming to do this in both screencast and written blog format, but that may change over time. If you have a preference please reach out and let me know - jon@calhoun.io.

2. A walk-through showing how to implement the algorithm

I won't use any hand-waving or pseudo-code. I will actually write a working implementation of the algorithm so that you can see exactly how it could be implemented in your own code.

I strongly encourage that you code along (even if in another language) and then try to write the algorithm yourself a few days later without referencing my implementation. This will help make everything stick a little better.

3. Practice problems

On top of an implementation, I will also try to provide 2-3 practice problems that can be solved using the algorithm. I won't exactly say how, and many of these problems could be solved by other means, but I encourage you to try to use the algorithm you just learned to solve the problem.

And don't just solve it conceptually. Actually sit down and code a solution and verify that it works. I may not have a comprehensive test suite for each problem, but I will try to provide you with a few use cases that will help find bugs in your code.

That said, DO NOT rely on the test cases to ensure your code is correct. I suggest that you don't even look at which particular use case your code fails, and instead step back and think "What about my algorithm is fundamentally flawed?" or "What about my implementation differs from the algorithm I had envisioned?"

4. Review of practice problems

I will also post (possibly a week or two later) a follow-up video/article that covers how to solve every practice problem with real code so that you can reference it to verify your solutions, or to help you understand the solutions to problems you couldn't solve.

About

A repository of programming algorithms implemented in Go. This is meant to complement the "Let's Learn Algorithms" series at calhoun.io

Resources

Stars

94 stars

Watchers

12 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

13 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Let's Learn Algorithms

Let's Learn Algorithms is an interactive blog/screencast series I am experimenting with to help new developers not only learn algorithms, but to also learn how they are implemented, and how to go from a and how to approach problem solving in general. I decided to go ahead with it after receiving positive feedback on reddit here - https://www.reddit.com/r/learnprogramming/comments/56aboa/i_can_understand_the_basic_algorithms_and_how/.

Lessons will likely be done weekly, but that could vary depending on my own schedule. Each lesson will focus on a single algorithm or topic, with the exception being when two algorithms are heavily related and there is a benefit in pairing the two together.

Each lesson will consist of the following pieces:

1. Introduction to the new algorithm

I start each lesson by explaining what the algorithm is, how it works, what it is useful for, and any other important details about the algorithm.

I am aiming to do this in both screencast and written blog format, but that may change over time. If you have a preference please reach out and let me know - jon@calhoun.io.

2. A walk-through showing how to implement the algorithm

I won't use any hand-waving or pseudo-code. I will actually write a working implementation of the algorithm so that you can see exactly how it could be implemented in your own code.

I strongly encourage that you code along (even if in another language) and then try to write the algorithm yourself a few days later without referencing my implementation. This will help make everything stick a little better.

3. Practice problems

On top of an implementation, I will also try to provide 2-3 practice problems that can be solved using the algorithm. I won't exactly say how, and many of these problems could be solved by other means, but I encourage you to try to use the algorithm you just learned to solve the problem.

And don't just solve it conceptually. Actually sit down and code a solution and verify that it works. I may not have a comprehensive test suite for each problem, but I will try to provide you with a few use cases that will help find bugs in your code.

That said, DO NOT rely on the test cases to ensure your code is correct. I suggest that you don't even look at which particular use case your code fails, and instead step back and think "What about my algorithm is fundamentally flawed?" or "What about my implementation differs from the algorithm I had envisioned?"

4. Review of practice problems

I will also post (possibly a week or two later) a follow-up video/article that covers how to solve every practice problem with real code so that you can reference it to verify your solutions, or to help you understand the solutions to problems you couldn't solve.

About

A repository of programming algorithms implemented in Go. This is meant to complement the "Let's Learn Algorithms" series at calhoun.io

Resources

Stars

94 stars

Watchers

12 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

13 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Let's Learn Algorithms

Let's Learn Algorithms is an interactive blog/screencast series I am experimenting with to help new developers not only learn algorithms, but to also learn how they are implemented, and how to go from a and how to approach problem solving in general. I decided to go ahead with it after receiving positive feedback on reddit here - https://www.reddit.com/r/learnprogramming/comments/56aboa/i_can_understand_the_basic_algorithms_and_how/.

Lessons will likely be done weekly, but that could vary depending on my own schedule. Each lesson will focus on a single algorithm or topic, with the exception being when two algorithms are heavily related and there is a benefit in pairing the two together.

Each lesson will consist of the following pieces:

1. Introduction to the new algorithm

I start each lesson by explaining what the algorithm is, how it works, what it is useful for, and any other important details about the algorithm.

I am aiming to do this in both screencast and written blog format, but that may change over time. If you have a preference please reach out and let me know - jon@calhoun.io.

2. A walk-through showing how to implement the algorithm

I won't use any hand-waving or pseudo-code. I will actually write a working implementation of the algorithm so that you can see exactly how it could be implemented in your own code.

I strongly encourage that you code along (even if in another language) and then try to write the algorithm yourself a few days later without referencing my implementation. This will help make everything stick a little better.

3. Practice problems

On top of an implementation, I will also try to provide 2-3 practice problems that can be solved using the algorithm. I won't exactly say how, and many of these problems could be solved by other means, but I encourage you to try to use the algorithm you just learned to solve the problem.

And don't just solve it conceptually. Actually sit down and code a solution and verify that it works. I may not have a comprehensive test suite for each problem, but I will try to provide you with a few use cases that will help find bugs in your code.

That said, DO NOT rely on the test cases to ensure your code is correct. I suggest that you don't even look at which particular use case your code fails, and instead step back and think "What about my algorithm is fundamentally flawed?" or "What about my implementation differs from the algorithm I had envisioned?"

4. Review of practice problems

I will also post (possibly a week or two later) a follow-up video/article that covers how to solve every practice problem with real code so that you can reference it to verify your solutions, or to help you understand the solutions to problems you couldn't solve.

About

A repository of programming algorithms implemented in Go. This is meant to complement the "Let's Learn Algorithms" series at calhoun.io

Resources

Stars

94 stars

Watchers

12 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

13 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Let's Learn Algorithms

Let's Learn Algorithms is an interactive blog/screencast series I am experimenting with to help new developers not only learn algorithms, but to also learn how they are implemented, and how to go from a and how to approach problem solving in general. I decided to go ahead with it after receiving positive feedback on reddit here - https://www.reddit.com/r/learnprogramming/comments/56aboa/i_can_understand_the_basic_algorithms_and_how/.

Lessons will likely be done weekly, but that could vary depending on my own schedule. Each lesson will focus on a single algorithm or topic, with the exception being when two algorithms are heavily related and there is a benefit in pairing the two together.

Each lesson will consist of the following pieces:

1. Introduction to the new algorithm

I start each lesson by explaining what the algorithm is, how it works, what it is useful for, and any other important details about the algorithm.

I am aiming to do this in both screencast and written blog format, but that may change over time. If you have a preference please reach out and let me know - jon@calhoun.io.

2. A walk-through showing how to implement the algorithm

I won't use any hand-waving or pseudo-code. I will actually write a working implementation of the algorithm so that you can see exactly how it could be implemented in your own code.

I strongly encourage that you code along (even if in another language) and then try to write the algorithm yourself a few days later without referencing my implementation. This will help make everything stick a little better.

3. Practice problems

On top of an implementation, I will also try to provide 2-3 practice problems that can be solved using the algorithm. I won't exactly say how, and many of these problems could be solved by other means, but I encourage you to try to use the algorithm you just learned to solve the problem.

And don't just solve it conceptually. Actually sit down and code a solution and verify that it works. I may not have a comprehensive test suite for each problem, but I will try to provide you with a few use cases that will help find bugs in your code.

That said, DO NOT rely on the test cases to ensure your code is correct. I suggest that you don't even look at which particular use case your code fails, and instead step back and think "What about my algorithm is fundamentally flawed?" or "What about my implementation differs from the algorithm I had envisioned?"

4. Review of practice problems

I will also post (possibly a week or two later) a follow-up video/article that covers how to solve every practice problem with real code so that you can reference it to verify your solutions, or to help you understand the solutions to problems you couldn't solve.

About

A repository of programming algorithms implemented in Go. This is meant to complement the "Let's Learn Algorithms" series at calhoun.io

Resources

Stars

94 stars

Watchers

12 watching

Forks

Releases

Packages

Contributors

Languages