teleren/devto huggingface dataset:
Invert Binary Tree
Published: 2023-11-25 22:36:08


**Условие**. Нужно инвертировать двоичное дерево. Т.е. поменять местами все левые и правые вершины. Например:

![](https://cdn-images-1.medium.com/max/2880/1*3bvaoNlJpZSCUdJ3i9RmLQ.png)

**Решение**. Для решения будем использовать [DFS](https://dev.to/faangmaster/dfs-depth-first-searchpoisk-v-ghlubinu-28ea), его рекурсивную версию.

Двоичное дерево — дерево, в котором каждая вершина имеет не более двух дочерних вершин (их называют левым и правым ребенком).

Class BinaryTree:

```java
    class BinaryTree {
      public int value;
      public BinaryTree left;
      public BinaryTree right;
    
      public BinaryTree(int value) {
        this.value = value;
      }
    }
```

Для двоичного дерева алгоритм DFS упростится до:

```java
    public static void dfs(BinaryTree tree) {
      if (tree == null) {
        return;
      }
      visit(tree);
      dfs(tree.left);
      dfs(tree.right);
    }
```

Для деревьев нам не нужно помечать вершины посещенными, потому что в дереве нет циклов по определению. Мы будем идти от родительских вершин к дочерним.

Такой алгоритм обхода двоичного дерева называется pre-order traversal: [Tree Traversal](https://en.wikipedia.org/wiki/Tree_traversal).

Мы вначале посещаем вершину, а потом вызываем рекурсивно для левого и правого ребенка.

Есть еще вариации обхода двоичного дерева, которые называются соответственно in-order (вначале посещаем левого ребенка, потом вершину, потом правого ребенка):

```java
    public static void dfs(BinaryTree tree) {
      if (tree == null) {
        return;
      }
      dfs(tree.left);
      visit(tree);
      dfs(tree.right);
    }
```

И post-order (вначале посещаем левого и правого ребенка, а потом уже саму вершину):

```java
    public static void dfs(BinaryTree tree) {
      if (tree == null) {
        return;
      }
      dfs(tree.left);
      dfs(tree.right);
      visit(tree);
    }
```

**Вернемся к задаче.** Будем идти по дереву и для каждой вершины менять местами левого и правого ребенка. И рекурсивно вызывать алгоритм для левой и правой вершины. Т.е. будем использовать pre-order обход двоичного дерева. Базовым условием выхода из функции является отсутствие вершины (достигли листовой вершины дерева tree == null).

**Реализация**:

```java
    class Program {
      public static void invertBinaryTree(BinaryTree tree) {
        if (tree == null) {
          return;
        }
        //Меняем местами левого и правого ребенка
        BinaryTree tmp = tree.left;
        tree.left = tree.right;
        tree.right = tmp;
        //Рекурсивно вызываем функцию для левого и правого ребенка
        invertBinaryTree(tree.left);
        invertBinaryTree(tree.right);
      }
    }
```
Creating a NPM CLI application
Tags: npm, npmpackage
Published: 2023-11-26 00:00:00

---
title: Creating a NPM CLI application
published: true
description: 
tags: 
  - npm
  - npmpackage
cover_image: https://images.unsplash.com/photo-1516031190212-da133013de50?q=80&w=1080&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D
published_at: 2023-11-26 00:00 +0000
---

I am writing this blog post today, following a long day, based on my writing mood. You will discover today how to build a npm CLI application. 

I'm thinking of developing a cli package that uses npm to make a choice for you. Making decisions is something I struggle with in my personal life. So i am going to make a CLI tool to let JavaScript make decision from me. while writing this blog post i am learning think myself. 

I have created my first npm CLI application, and you can check it out. Just run `npx make-me-a-choice`  in your terminal.

## Requirement
- Must know what is **NPM** and how to use it **little bit**.
- You need to have basic **knowledge of JavaScript & Node.js**. 
- Have a working computer that is able to run **Node.js.**
- internet connection is must.

## Creating project
1. Create a empty folder and give it the name according to project for me it is to `make-me-a-choice`. 
2. Now open project folder in terminal  & run `npm init` fill all the details. 
3. Edit your `package.json` file add `"bin"` option  like below.
```json
{
...
"bin":{
	"<yourcommandname>":"bin/index.js" // use own command instead 
},
...
}
```
4. Create a file in `bin\index.js` it is going to be your & put below code in it or modify it according to your need.
```javascript
#! /usr/bin/env node
console.log("Hellow from my NPM Package")
```

That's it now just run `npm i` & `npx <yourcommandname>` for my case i have create a project. `make-me-a-choice`. So i have `make-me-a-choice` as `<yourcommandname>`.

You have successful create a package add to you Github repo and make it public to for other to see. 

## Publishing on NPM

Now to publish you package to npm you need to have account on npm, if not just create one email and password.  Open your project directory in terminal and run `npm adduser` this will SignIn in to you account in npm. Then just run `npm publish`  in terminal in you project.

>Hurray You have successfully published your first package to npm🎉

Now just run `npx <yourcommandname>` or `npx <yourprojectname> <yourcommandname>`

If you get error because their is already a package with same as you project name. Use `npm init --scope=@my-username`  & `npm publish --access public`.


Checkout out my repo as example for taking some inputs and doing think in cli: https://github.com/kuldeepdev407/make-me-a-choice

>1 more think if you delete an npm package you can republish same package in after 24 hour only.


## References
NPM docs:- https://docs.npmjs.com/creating-node-js-modules
Boost PowerShell Performance: Harness Ngen for Effortless Speed
Tags: technology, software
Published: 2023-10-09 02:59:24

---
title: Boost PowerShell Performance: Harness Ngen for Effortless Speed
published: true
date: 2023-11-26 00:00:00 UTC
tags: Technology,Software,
canonical_url: https://simeononsecurity.ch/guides/boost-powershell-performance-with-ngen/
---

Learn how to supercharge PowerShell startup and execution with Ngen, enhancing performance effortlessly.

[https://simeononsecurity.ch/guides/boost-powershell-performance-with-ngen/](https://simeononsecurity.ch/guides/boost-powershell-performance-with-ngen/)
TIL Week 2
Tags: spartacodingclub, coding, programming, webdev
Published: 2023-11-25 23:46:00

Sparta Coding Club Week 2 Highlights (**TIL**):

1. Exploring the foundational aspects of JavaScript syntax, gaining a comprehensive understanding of its fundamental building blocks and structure.

2. Understanding the dynamic duo of jQuery and JSON; unraveling their potential to streamline and enhance web applications. 
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/69s1woqedrjt9sijjuv9.png)
Why lowercase letters save data
Tags: webdev, performance, html, javascript
Published: 2023-11-25 22:54:32

Lowercase letters and uppercase letters use the same amout of data — `1 byte` each.

So, it's surprising to learn that swapping uppercase letters for lowercase letters saves data.

How, you'll have to read my article on my website. I normally put them on dev.to, but this one has too many interactive elements.

Here's the article in full:

[why lowercase letters save data](https://endtimes.dev/why-lowercase-letters-save-data/)

let me know what you think!
Amazon Rekognition - IS too Good
Tags: ai, aiops, amazonrekognition, aws
Published: 2023-11-25 22:43:22

I am glad to see the confidence intervals in #AmazonRekognition. Its a powerful #AI service from #AWS that has a pretty good, trained model. Its really helpful in building an innovative application that harnesses the capabilities for image and video analysis.
As we continue to explore the vast landscape of AI and AWS, I'm eager to see the positive impact this technology can bring to businesses and society. 
Let's drive innovation together!
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kwtk1iq0iicx06k0xemv.png)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j8rpj7wkjfz67ow5jcvc.png)
Проверка на палиндром, усложненная версия
Published: 2023-11-25 22:40:03


Ссылка на leetcode: [https://leetcode.com/problems/valid-palindrome/description/](https://leetcode.com/problems/valid-palindrome/description/)

Статья про проверку на палиндром: [Проверка на палиндром](https://dev.to/faangmaster/provierka-na-palindrom-3e7p).

Усложнение задачи проверки на палиндром.

**Условие**. Проверить, является ли строка палиндромом. Палиндром — это строка, которая читается одинаково слева направо и справа налево. Нужно игнорировать пробелы, регистр букв и все символы, которые не являются английскими буквами и цифрами. Например: “A b a” -> палиндром, “A!23 * 32a”-> палиндром.

**Решение**. Для решения также будем использовать метод Two Pointers. Первый указатель будет указывать на начало строки, второй на конец строки. Будем итерироваться по строке до тех пока первый индекс меньше второго. На каждой итерации будем делать несколько проверок:

 1. Если символ, на который указывает первый указатель, не является буквой или цифрой, то игнорируем его увеличением индекса на единицу и переходим на следующую итерацию цикла.

 2. Если символ, на который указывает второй указатель, не является буквой или цифрой, то игнорируем его уменьшением индекса на единицу и переходим на следующую итерацию цикла.

 3. Если оба символа являются буквами или цифрами, то приводим их к одному реестру (например нижнему) и сравниваем. Если они не равны, то строка не палиндром. Если равны, то увеличиваем первый индекс и уменьшаем второй.

Time complexity: O(n), Space Complexity O(1).

**Реализация**:

```java
    class Solution {
        public boolean isPalindrome(String s) {
            int left = 0;
            int right = s.length() - 1;
            while (left < right) {
                if (!isAlphaNum(s.charAt(left))) {
                    left++;
                } else if (!isAlphaNum(s.charAt(right))) {
                    right--;
                } else {
                    if (Character.toLowerCase(s.charAt(left)) != Character.toLowerCase(s.charAt(right))) {
                        return false;
                    }
                    left++;
                    right--;
                }
            }
            return true;
        }
        
        //Можно заменить на Character.isLetterOrDigit()
        private boolean isAlphaNum(char c) {
            return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9');
        }
    }
```
Проверка на палиндром
Published: 2023-11-25 22:39:21


**Задача**. Проверить, является ли строка палиндромом. Палиндром — это строка, которая читается одинаково слева направо и справа налево.

Например, abcba — палиндром, Abba — не палиндром (если учитываем регистр букв), abc — не палиндром, a — палиндром, aba — палиндром, TENET — палиндром.

**Решение**. Эту задачу можно решить при помощи техники, которая называется **Two Pointers** (Два Указателя).

**Справка по Two Pointers.**

Обычно, когда мы идем циклом по какой-то структуре данных, мы используем один указатель. Обычно это текущий элемент этой структуры данных. Например:

```java
    for (int i = 0; i < str.length(); i++) {
      char c = str.charAt(i);
      .....
    }
```

В данном случаем i это единственный указатель.

**Часто, в алгоритмических задачах на массивы, строки и списки можно использовать одновременно два указателя.**

Например:

 1. **Первый указатель начинает с начала, а второй с конца и они идут навстречу друг другу** (как в задаче на палиндромы или в задаче на поиске пар элементов, сумма, которых равна заданному числу в отсортированном массиве).

 2. **Оба указателя начинают с начала, но идут с разной скоростью** (Например, в задаче, когда надо найти k-й элемент с конца в **односвязном** списке).

 3. **В рамках одного цикла мы одновременно итерируемся по двум структурам данных.** (Например, в задаче, где надо слить два отсортированных массива или списка друг с другом, или в задачах, где надо проанализировать календари совещаний разных людей, чтобы проверить доступность людей в определенное время как в outlook).

**Вернемся к данной задаче.**

В данной задаче, мы будем использовать вариант, когда надо использовать два указателя, один идет с начала строки, второй с конца. Будем сравнивать символы, на которые указывают эти указатели. Если символы разные, то это не палиндром. Если они одинаковые, то первый индекс увеличим на один, а второй уменьшим. Так будем повторять до тех пор, пока первый индекс меньше второго.

Реализация:

```java
    class Solution {
      public boolean isPalindrome(String str) {
        int left = 0;
        int right = str.length() - 1;
        while (left < right) {
          if (str.charAt(left) != str.charAt(right)) {
            return false;
          }
          left++;
          right--;
        }
        return true; 
      }
    }
```

Time complexity: O(n), Space Complexity: O(1).
Алгоритмы обхода двоичного дерева
Published: 2023-11-25 22:24:17


Двоичное дерево — дерево, в котором каждая вершина имеет не более двух дочерних вершин (их называют левым и правым ребенком).

Пример двоичного дерева:

![](https://cdn-images-1.medium.com/max/2000/0*xXVpTwHIIj3BQD7B.png)

Class BinaryTree:

```java
    class BinaryTree {
      public int value;
      public BinaryTree left;
      public BinaryTree right;
    
      public BinaryTree(int value) {
        this.value = value;
      }
    }
```

Чтобы обойти вершины двоичного дерева можно использовать алгоритм поиска в глубину ([DFS](https://dev.to/faangmaster/dfs-depth-first-searchpoisk-v-ghlubinu-28ea)). **Обычно в алгоритмических задачах на двоичные деревья используется рекурсивная версия этого алгоритма**. **Для деревьев этот алгоритм сильно упрощается, т.к. нам не надо использовать visited**. Для деревьев нам не нужно помечать вершины посещенными, потому что в дереве нет циклов по определению. А также мы будем идти от родительских вершин к дочерним.

Поэтому для двоичного дерева алгоритм упрощается до:

```java
    public static void dfs(BinaryTree tree) {
      if (tree == null) {
        return;
      }
      visit(tree);
      dfs(tree.left);
      dfs(tree.right);
    }
```

Такой алгоритм обхода двоичного дерева называется pre-order traversal: [Tree Traversal](https://en.wikipedia.org/wiki/Tree_traversal).

Мы вначале посещаем вершину, а потом вызываем рекурсивно для левого и правого ребенка. Это позволяет посещать вершины в топологическом порядке. Вначале родителей, потом детей.

Есть еще вариации обхода двоичного дерева, которые называются соответственно in-order (вначале посещаем левого ребенка, потом вершину, потом правого ребенка):

```java
    public static void dfs(BinaryTree tree) {
      if (tree == null) {
        return;
      }
      dfs(tree.left);
      visit(tree);
      dfs(tree.right);
    }
```

Такой обход может быть полезен для бинарных деревьев поиска. В таком случае мы будем посещать вершины в порядке возрастания значений.

И post-order (вначале посещаем левого и правого ребенка, а потом уже саму вершину):

```java
    public static void dfs(BinaryTree tree) {
      if (tree == null) {
        return;
      }
      dfs(tree.left);
      dfs(tree.right);
      visit(tree);
    }
```

**Большинство алгоритмических задач на двоичные деревья на собеседованиях сводятся к применению этого алгоритма.**

Обычно, надо написать какую-то кастомную логику под задачу для каждой посещенной вершины вместо метода visit. Иногда надо добавить дополнительные if-else для рекурсивных вызовов. Иногда надо передавать или возвращать какие-то значения или объекты из метода dfs.
Navigating Choices: A Guide to Antigua's Used Car Market
Tags: auto, cars
Published: 2023-11-25 21:54:34

The scenic landscapes and vibrant culture of Antigua beckon, and as you prepare to explore this Caribbean gem, the question of reliable transportation arises. Navigating Antigua's used car market offers a range of options for both residents and visitors seeking affordable and quality vehicles.

**Understanding the Market Dynamics**

In the heart of the Caribbean, Antigua's used car market is a dynamic landscape influenced by diverse factors. From economic considerations to vehicle availability, comprehending these dynamics is crucial.

**Local Insights**

For those eyeing the roads of Antigua, understanding the local used car dealerships is key. <a href="https://www.miauto.jp/">Used car dealers in antigua and barbuda</a> with a solid reputation and a history of customer satisfaction. Local insights often lead to valuable discoveries, ensuring a smooth transaction.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q78jk3ie9n0wonb65i2k.jpg)

**Quality Over Quantity: A Buyer's Approach**

In a market abundant with choices, prioritizing quality over quantity is paramount. Thoroughly inspect vehicles, checking for both mechanical reliability and cosmetic appeal. Engaging with trusted dealers ensures transparency in the vehicle's history, empowering buyers to make informed decisions.

**Exploring Varied Options**

Antigua's used car market caters to diverse preferences. Whether you're in search of a compact city car for urban adventures or a sturdy SUV for off-road exploration, the market offers a spectrum of options. Understanding your needs helps narrow down the choices, making the selection process more efficient.

**Navigating Legalities and Paperwork**

Smooth navigation through Antigua's used car market involves understanding the legalities and paperwork associated with vehicle purchase. Ensure that all documentation, including registration and transfer of ownership, is in order. Knowledgeable dealerships assist buyers in navigating this process seamlessly.

**Factors Influencing Pricing**

The pricing of used cars in Antigua is influenced by factors such as the vehicle's age, condition, and mileage. Researching market trends and engaging with reputable dealerships provides insight into fair pricing, preventing potential pitfalls.

**A Sustainable Approach to Transportation**

Antigua's commitment to sustainability extends to its transportation sector. Consider fuel-efficient and eco-friendly options when navigating the used car market. Embracing sustainable practices aligns with the island's environmental ethos.

**Conclusion**

As you embark on the journey of exploring Antigua, navigating the used car market becomes an integral part of the experience. By understanding market dynamics, local insights, and adopting a discerning buyer's approach, you ensure that your chosen vehicle becomes a reliable companion on the roads of this picturesque Caribbean destination. For those seeking trustworthy options, the network stands ready to assist, offering a diverse array of vehicles to suit every traveler's needs.
Exploring 1-Based Indexing in Programming Languages
Tags: programming, tutorial, development
Published: 2023-11-25 22:17:23

#Introduction

In the diverse world of programming languages, indexing is a fundamental concept, with most languages adopting 0-based indexing. However, several languages stand out with their choice of 1-based indexing, an intriguing deviation from the norm.

## Why 1-Based Indexing?

1-based indexing isn't merely a whimsical choice; it often stems from historical reasons, mathematical convenience, or the preferences of a specific user base. Understanding these languages offers insight into the varied paradigms in programming.

## Implications of 1-Based Indexing

The choice of 1-based indexing affects everything from algorithm design to beginner learning curves. It's a testament to the diversity of programming paradigms and their adaptation to different needs.

## Language Examples
#-------------

### 1- lua
In Lua, tables (akin to arrays) begin at index 1. This design aligns with Lua's user-friendly philosophy.

```lua
local fruits = {"apple", "banana", "cherry"}
print(fruits[1])  -- apple
```

### 2 - Fortran
Fortran's arrays start at 1, a choice rooted in its history as a pioneer in scientific computing.

```fortran
INTEGER :: numbers(5) = [1, 2, 3, 4, 5]
PRINT *, numbers(1)  -- 1
```

### 3- matlab
MATLAB's matrix-centric design uses 1-based indexing, ideal for its target audience in engineering and science.

```matlab
A = [1, 2; 3, 4];
disp(A(1,1))  -- 1
```

### 4 - R
R, a language for statistical analysis, uses 1-based indexing, aligning with statistical conventions.

```R
numbers <- c(10, 20, 30)
print(numbers[1])  -- 10
```

### 5 - COBOL
In COBOL, often used in business applications, arrays start with index 1, reflecting its business-oriented design.

```COBOL
01 NUMBERS PIC 9(3) OCCURS 5 TIMES.
MOVE 100 TO NUMBERS(1)
DISPLAY NUMBERS(1)
```

### 5 - Julia
Julia combines performance and ease of use with 1-based indexing, appealing to scientific computing users.

```Julia
numbers = [5, 10, 15]
println(numbers[1])  -- 5
```

### 6 - Smalltalk
Smalltalk's 1-based arrays reflect its role in pioneering object-oriented programming.

```Smalltalk
| numbers |
numbers := Array with: 1 with: 2 with: 3.
Transcript show: numbers at: 1.  -- 1
```

## Conclusion

The world of programming languages is rich and varied. The choice between 1-based and 0-based indexing is more than a mere technicality; it reflects deeper philosophical and practical considerations in language design.