<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Corso on</title><link>https://bacarotech.github.io/tags/corso/</link><description>Recent content in Corso on</description><generator>Hugo</generator><language>it</language><lastBuildDate>Wed, 25 Feb 2026 14:01:43 +0000</lastBuildDate><atom:link href="https://bacarotech.github.io/tags/corso/index.xml" rel="self" type="application/rss+xml"/><item><title>SQLLeetCode - 2356 - Number of Unique Subjects Taught by Each Teacher</title><link>https://bacarotech.github.io/blog/2026/sqlleetcode---2356---number-of-unique-subjects-taught-by-each-teacher/</link><pubDate>Wed, 25 Feb 2026 14:01:43 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/sqlleetcode---2356---number-of-unique-subjects-taught-by-each-teacher/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode a tema SQL:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Write a solution to calculate the number of unique subjects each teacher teaches in the university.&lt;/p&gt;
&lt;p&gt;Return the result table in any order.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Guardando le tabelle fornite dall&amp;rsquo;esercizio si può notare che la tabella Teacher contiene le informazioni sugli insegnanti: &lt;code&gt;teacher_id&lt;/code&gt;, &lt;code&gt;subject_id&lt;/code&gt;, &lt;code&gt;dept_id&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;obiettivo è contare il numero di materie uniche insegnate da ciascun insegnante. Poiché un insegnante può insegnare la stessa materia in dipartimenti diversi, dobbiamo contare solo le materie distinte per ogni insegnante.&lt;/p&gt;</description></item><item><title>SQLLeetCode - 1934 - Confirmation Rate</title><link>https://bacarotech.github.io/blog/2026/sqlleetcode---1934---confirmation-rate/</link><pubDate>Wed, 25 Feb 2026 14:01:42 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/sqlleetcode---1934---confirmation-rate/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode a tema SQL:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The confirmation rate of a user is the number of &amp;lsquo;confirmed&amp;rsquo; messages divided by the total number of requested confirmation messages. The confirmation rate of a user that did not request any confirmation messages is 0. Round the confirmation rate to two decimal places.&lt;/p&gt;
&lt;p&gt;Write a solution to find the confirmation rate of each user.&lt;/p&gt;
&lt;p&gt;Return the result table in any order.&lt;/p&gt;</description></item><item><title>SQLLeetCode - 1757 - Recyclable and Low Fat Products</title><link>https://bacarotech.github.io/blog/2026/sqlleetcode---1757---recyclable-and-low-fat-products/</link><pubDate>Wed, 25 Feb 2026 14:01:41 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/sqlleetcode---1757---recyclable-and-low-fat-products/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode a tema SQL:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Write a solution to find the ids of products that are both low fat and recyclable.&lt;/p&gt;
&lt;p&gt;Return the result table in any order.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Guardando le tabelle fornite dall&amp;rsquo;esercizio si può notare che la tabella Products contiene le informazioni sui prodotti: &lt;code&gt;product_id&lt;/code&gt; (ID del prodotto), &lt;code&gt;low_fats&lt;/code&gt; (indica se il prodotto è a basso contenuto di grassi - &amp;lsquo;Y&amp;rsquo; o &amp;lsquo;N&amp;rsquo;), &lt;code&gt;recyclable&lt;/code&gt; (indica se il prodotto è riciclabile - &amp;lsquo;Y&amp;rsquo; o &amp;lsquo;N&amp;rsquo;).&lt;/p&gt;</description></item><item><title>SQLLeetCode - 1731 - The Number of Employees Which Report to Each Employee</title><link>https://bacarotech.github.io/blog/2026/sqlleetcode---1731---the-number-of-employees-which-report-to-each-employee/</link><pubDate>Wed, 25 Feb 2026 14:01:40 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/sqlleetcode---1731---the-number-of-employees-which-report-to-each-employee/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode a tema SQL:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Write a solution to report the ids and the names of all managers, the number of employees who report directly to them, and the average age of the reports rounded to the nearest integer.&lt;/p&gt;
&lt;p&gt;Return the result table ordered by employee_id.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Guardando le tabelle fornite dall&amp;rsquo;esercizio si può notare che la tabella Employees contiene le informazioni sui dipendenti: &lt;code&gt;employee_id&lt;/code&gt;, &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;age&lt;/code&gt;, &lt;code&gt;reports_to&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>SQLLeetCode - 1729 - Find Followers Count</title><link>https://bacarotech.github.io/blog/2026/sqlleetcode---1729---find-followers-count/</link><pubDate>Wed, 25 Feb 2026 14:01:39 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/sqlleetcode---1729---find-followers-count/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode a tema SQL:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Write a solution that will, for each user, return the number of followers.&lt;/p&gt;
&lt;p&gt;Return the result table ordered by user_id in ascending order.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Guardando le tabelle fornite dall&amp;rsquo;esercizio si può notare che la tabella Followers contiene le informazioni sui follower: &lt;code&gt;user_id&lt;/code&gt; (l&amp;rsquo;utente che viene seguito), &lt;code&gt;follower_id&lt;/code&gt; (l&amp;rsquo;utente che segue).&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;obiettivo è contare il numero di follower per ogni utente. Poiché un utente può avere più follower, dobbiamo raggruppare per user_id e contare i follower distinti.&lt;/p&gt;</description></item><item><title>SQLLeetCode - 1683 - Invalid Tweets</title><link>https://bacarotech.github.io/blog/2026/sqlleetcode---1683---invalid-tweets/</link><pubDate>Wed, 25 Feb 2026 14:01:38 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/sqlleetcode---1683---invalid-tweets/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode a tema SQL:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Write a solution to find the IDs of the invalid tweets. The tweet is invalid if the number of characters used in the content of the tweet is strictly greater than 15.&lt;/p&gt;
&lt;p&gt;Return the result table in any order.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Guardando le tabelle fornite dall&amp;rsquo;esercizio si può notare che la tabella Tweets contiene le informazioni sui tweet: &lt;code&gt;tweet_id&lt;/code&gt; (ID del tweet), &lt;code&gt;content&lt;/code&gt; (contenuto del tweet).&lt;/p&gt;</description></item><item><title>SQLLeetCode - 1661 - Average Time Of Process Per Machine</title><link>https://bacarotech.github.io/blog/2026/sqlleetcode---1661---average-time-of-process-per-machine/</link><pubDate>Wed, 25 Feb 2026 14:01:37 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/sqlleetcode---1661---average-time-of-process-per-machine/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode a tema SQL:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Write a solution to find the average time each machine takes to complete a process.
The time to complete a process is the &amp;rsquo;end&amp;rsquo; timestamp minus the &amp;lsquo;start&amp;rsquo; timestamp. The average time is calculated by the total time to complete every process on the machine divided by the number of processes that were run.&lt;/p&gt;
&lt;p&gt;The resulting table should have the machine_id along with the average time as processing_time, which should be rounded to 3 decimal places.&lt;/p&gt;</description></item><item><title>SQLLeetCode - 1633 - Percentage of Users Attended a Contest</title><link>https://bacarotech.github.io/blog/2026/sqlleetcode---1633---percentage-of-users-attended-a-contest/</link><pubDate>Wed, 25 Feb 2026 14:01:36 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/sqlleetcode---1633---percentage-of-users-attended-a-contest/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode a tema SQL:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Write a solution to find the percentage of the users registered in each contest rounded to two decimals.&lt;/p&gt;
&lt;p&gt;Return the result table ordered by percentage in descending order. In case of a tie, order it by contest_id in ascending order.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Guardando le tabelle fornite dall&amp;rsquo;esercizio si può notare che ci sono due tabelle: Users (con user_id) e Register (con contest_id, user_id).&lt;/p&gt;</description></item><item><title>SQLLeetCode - 1581 - Customer Who Visited but Did Not Make Any Transactions</title><link>https://bacarotech.github.io/blog/2026/sqlleetcode---1581---customer-who-visited-but-did-not-make-any-transactions/</link><pubDate>Wed, 25 Feb 2026 14:01:35 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/sqlleetcode---1581---customer-who-visited-but-did-not-make-any-transactions/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode a tema SQL:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Write a solution to find the IDs of the users who visited without making any transactions and the number of times they made these types of visits.&lt;/p&gt;
&lt;p&gt;Return the result table in any order.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Guardando le tabelle fornite dall&amp;rsquo;esercizio si può notare che ci sono due tabelle: Visits (con visit_id, customer_id, visit_date) e Transactions (con transaction_id, visit_id, amount).&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;obiettivo è trovare i clienti che hanno visitato il negozio ma non hanno effettuato alcuna transazione e quante volte lo hanno fatto. Per farlo, dobbiamo collegare le due tabelle e identificare le visite senza transazioni associate.&lt;/p&gt;</description></item><item><title>SQLLeetCode - 1378 - Replace Employee Id With The Unique Identifier</title><link>https://bacarotech.github.io/blog/2026/sqlleetcode---1378---replace-employee-id-with-the-unique-identifier/</link><pubDate>Wed, 25 Feb 2026 14:01:34 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/sqlleetcode---1378---replace-employee-id-with-the-unique-identifier/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode a tema SQL:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Write a solution to show the unique ID of each user, If a user does not have a unique ID replace just show null.&lt;/p&gt;
&lt;p&gt;Return the result table in any order.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Guardando le tabelle fornite dall&amp;rsquo;esercizio si può notare che ci sono due tabelle: Employees (con id e name) e EmployeeUNI (con id e unique_id).&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;obiettivo è unire le due tabelle per ottenere per ogni dipendente il suo unique_id dalla tabella EmployeeUNI. Dobbiamo usare una LEFT JOIN perché vogliamo includere tutti i dipendenti, anche quelli che non hanno un unique_id assegnato (in quel caso unique_id sarà NULL).&lt;/p&gt;</description></item><item><title>SQLLeetCode - 1280 - Students And Examinations</title><link>https://bacarotech.github.io/blog/2026/sqlleetcode---1280---students-and-examinations/</link><pubDate>Wed, 25 Feb 2026 14:01:33 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/sqlleetcode---1280---students-and-examinations/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode a tema SQL:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Write a solution to find the number of examinations each student attended for each subject.&lt;/p&gt;
&lt;p&gt;Return the result table sorted by student_id and subject_name.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Guardando le tabelle fornite dall&amp;rsquo;esercizio si può notare che ci sono tre tabelle: Students (con student_id, student_name), Subjects (con subject_name), e Examinations (con student_id, subject_name).&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;obiettivo è trovare per ogni combinazione studente-materia, quante volte lo studente ha sostenuto quell&amp;rsquo;esame. Dobbiamo includere tutti gli studenti e tutte le materie, anche se lo studente non ha sostenuto alcun esame per quella materia (in quel caso il conteggio sarà 0).&lt;/p&gt;</description></item><item><title>SQLLeetCode - 1251 - Average Selling Price</title><link>https://bacarotech.github.io/blog/2026/sqlleetcode---1251---average-selling-price/</link><pubDate>Wed, 25 Feb 2026 14:01:32 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/sqlleetcode---1251---average-selling-price/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode a tema SQL:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Write a solution to find the average selling price for each product. average_price should be rounded to 2 decimal places. If a product does not have any sold units, its average selling price is assumed to be 0.&lt;/p&gt;
&lt;p&gt;Return the result table in any order.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Guardando le tabelle fornite dall&amp;rsquo;esercizio si può notare che ci sono due tabelle: Prices (con product_id, start_date, end_date, price) e UnitsSold (con product_id, purchase_date, units).&lt;/p&gt;</description></item><item><title>SQLLeetCode - 1211 - Queries Quality and Percentage</title><link>https://bacarotech.github.io/blog/2026/sqlleetcode---1211---queries-quality-and-percentage/</link><pubDate>Wed, 25 Feb 2026 14:01:31 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/sqlleetcode---1211---queries-quality-and-percentage/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode a tema SQL:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We define query quality as:&lt;/p&gt;
&lt;p&gt;The average of the ratio between query rating and its position.&lt;/p&gt;
&lt;p&gt;We also define poor query percentage as:&lt;/p&gt;
&lt;p&gt;The percentage of all queries with rating less than 3.&lt;/p&gt;
&lt;p&gt;Write a solution to find each query_name, the quality and poor_query_percentage.&lt;/p&gt;
&lt;p&gt;Both quality and poor_query_percentage should be rounded to 2 decimal places.&lt;/p&gt;
&lt;p&gt;Return the result table in any order.&lt;/p&gt;</description></item><item><title>SQLLeetCode - 1193 - Monthly Transactions I</title><link>https://bacarotech.github.io/blog/2026/sqlleetcode---1193---monthly-transactions-i/</link><pubDate>Wed, 25 Feb 2026 14:01:30 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/sqlleetcode---1193---monthly-transactions-i/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode a tema SQL:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Write an SQL query to find for each month and country, the number of transactions and their total amount, the number of approved transactions and their total amount.&lt;/p&gt;
&lt;p&gt;Return the result table in any order.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Guardando le tabelle fornite dall&amp;rsquo;esercizio si può notare che la tabella Transactions contiene le informazioni sulle transazioni: &lt;code&gt;id&lt;/code&gt;, &lt;code&gt;country&lt;/code&gt;, &lt;code&gt;state&lt;/code&gt; (approved/void), &lt;code&gt;amount&lt;/code&gt;, &lt;code&gt;trans_date&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;obiettivo è raggruppare le transazioni per mese (anno-mese) e paese, e calcolare:&lt;/p&gt;</description></item><item><title>SQLLeetCode - 1174 - Immediate Food Delivery II</title><link>https://bacarotech.github.io/blog/2026/sqlleetcode---1174---immediate-food-delivery-ii/</link><pubDate>Wed, 25 Feb 2026 14:01:29 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/sqlleetcode---1174---immediate-food-delivery-ii/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode a tema SQL:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Write a solution to find the percentage of immediate orders in the first orders of all customers, rounded to 2 decimal places.&lt;/p&gt;
&lt;p&gt;Return the result table in any order.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Guardando le tabelle fornite dall&amp;rsquo;esercizio si può notare che la tabella Delivery contiene le informazioni sulle consegne: &lt;code&gt;delivery_id&lt;/code&gt;, &lt;code&gt;customer_id&lt;/code&gt;, &lt;code&gt;order_date&lt;/code&gt;, &lt;code&gt;customer_pref_delivery_date&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;obiettivo è calcolare la percentuale di ordini immediati rispetto al primo ordine di ogni cliente. Un ordine è considerato &amp;ldquo;immediato&amp;rdquo; se &lt;code&gt;order_date = customer_pref_delivery_date&lt;/code&gt;, cioè se la data di consegna coincide con la data preferita del cliente.&lt;/p&gt;</description></item><item><title>SQLLeetCode - 1164 - Product Price at a Given Date</title><link>https://bacarotech.github.io/blog/2026/sqlleetcode---1164---product-price-at-a-given-date/</link><pubDate>Wed, 25 Feb 2026 14:01:28 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/sqlleetcode---1164---product-price-at-a-given-date/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode a tema SQL:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Write a solution to find the prices of all products on 2019-08-16. Assume the price of all products before any change is 10.&lt;/p&gt;
&lt;p&gt;Return the result table in any order.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Guardando le tabelle fornite dall&amp;rsquo;esercizio si può notare che la tabella Products contiene le informazioni sui prezzi dei prodotti: &lt;code&gt;product_id&lt;/code&gt;, &lt;code&gt;new_price&lt;/code&gt;, &lt;code&gt;change_date&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;obiettivo è trovare il prezzo di tutti i prodotti alla data specifica (2019-08-16). La regola è:&lt;/p&gt;</description></item><item><title>SQLLeetCode - 1148 - Article Views I</title><link>https://bacarotech.github.io/blog/2026/sqlleetcode---1148---article-views-i/</link><pubDate>Wed, 25 Feb 2026 14:01:27 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/sqlleetcode---1148---article-views-i/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode a tema SQL:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Write a solution to find all the authors that viewed at least one of their own articles.&lt;/p&gt;
&lt;p&gt;Return the result table sorted by author_id.&lt;/p&gt;
&lt;p&gt;The author_id of the author is the same as the viewer_id of the view.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Guardando le tabelle fornite dall&amp;rsquo;esercizio si può notare che la tabella Views contiene le informazioni sulle visualizzazioni degli articoli: &lt;code&gt;article_id&lt;/code&gt; (ID dell&amp;rsquo;articolo), &lt;code&gt;author_id&lt;/code&gt; (ID dell&amp;rsquo;autore dell&amp;rsquo;articolo), &lt;code&gt;viewer_id&lt;/code&gt; (ID di chi ha visualizzato l&amp;rsquo;articolo), &lt;code&gt;view_date&lt;/code&gt; (data della visualizzazione).&lt;/p&gt;</description></item><item><title>SQLLeetCode - 1141 - User Activity for the Past 30 Days I</title><link>https://bacarotech.github.io/blog/2026/sqlleetcode---1141---user-activity-for-the-past-30-days-i/</link><pubDate>Wed, 25 Feb 2026 14:01:26 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/sqlleetcode---1141---user-activity-for-the-past-30-days-i/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode a tema SQL:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Write a solution to report the daily active user count for a 30-day period ending on 2019-07-27 inclusively. A user became active on a given day if they made at least one activity on that day.&lt;/p&gt;
&lt;p&gt;Return the result table in any order.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Guardando le tabelle fornite dall&amp;rsquo;esercizio si può notare che la tabella Activity contiene le informazioni sulle attività degli utenti: &lt;code&gt;user_id&lt;/code&gt;, &lt;code&gt;activity_date&lt;/code&gt;, &lt;code&gt;activity_type&lt;/code&gt;, &lt;code&gt;activity_id&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>SQLLeetCode - 1075 - Project Employees I</title><link>https://bacarotech.github.io/blog/2026/sqlleetcode---1075---project-employees-i/</link><pubDate>Wed, 25 Feb 2026 14:01:25 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/sqlleetcode---1075---project-employees-i/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode a tema SQL:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Write a solution to report the average experience years of all the employees for each project rounded to 2 digit&lt;/p&gt;
&lt;p&gt;Return the result table in any order.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Guardando le tabelle fornite dall&amp;rsquo;esercizio si può notare che ci sono due tabelle: Project (con project_id, employee_id) e Employee (con employee_id, name, experience_years).&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;obiettivo è calcolare la media degli anni di esperienza per ogni progetto. Ogni progetto può avere più dipendenti, e dobbiamo calcolare la media degli anni di esperienza di tutti i dipendenti assegnati a quel progetto.&lt;/p&gt;</description></item><item><title>SQLLeetCode - 1070 - Product Sales Analysis III</title><link>https://bacarotech.github.io/blog/2026/sqlleetcode---1070---product-sales-analysis-iii/</link><pubDate>Wed, 25 Feb 2026 14:01:24 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/sqlleetcode---1070---product-sales-analysis-iii/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode a tema SQL:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Write a solution to report the first year of sales for each product id.&lt;/p&gt;
&lt;p&gt;Return the result table in any order.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Guardando le tabelle fornite dall&amp;rsquo;esercizio si può notare che la tabella Sales contiene le informazioni sulle vendite: &lt;code&gt;sale_id&lt;/code&gt;, &lt;code&gt;product_id&lt;/code&gt;, &lt;code&gt;year&lt;/code&gt;, &lt;code&gt;quantity&lt;/code&gt;, &lt;code&gt;price&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;obiettivo è trovare per ogni prodotto l&amp;rsquo;anno della prima vendita (l&amp;rsquo;anno più vecchio). Dobbiamo selezionare la riga con l&amp;rsquo;anno minimo per ogni prodotto.&lt;/p&gt;</description></item><item><title>SQLLeetCode - 1068 - Product Sales Analysis I</title><link>https://bacarotech.github.io/blog/2026/sqlleetcode---1068---product-sales-analysis-i/</link><pubDate>Wed, 25 Feb 2026 14:01:23 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/sqlleetcode---1068---product-sales-analysis-i/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode a tema SQL:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Write a solution to report the product_name, year, and price for each sales entry in the Sales table.&lt;/p&gt;
&lt;p&gt;Return the result table in any order.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Guardando le tabelle fornite dall&amp;rsquo;esercizio si può notare che ci sono due tabelle: Sales (con sale_id, product_id, year, quantity, price) e Product (con product_id, product_name).&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;obiettivo è unire le due tabelle per ottenere il nome del prodotto insieme alle informazioni di vendita. Dobbiamo collegare le tabelle usando product_id come chiave di join.&lt;/p&gt;</description></item><item><title>SQLLeetCode - 1045 - Customers Who Bought All Products</title><link>https://bacarotech.github.io/blog/2026/sqlleetcode---1045---customers-who-bought-all-products/</link><pubDate>Wed, 25 Feb 2026 14:01:22 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/sqlleetcode---1045---customers-who-bought-all-products/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode a tema SQL:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Write a solution to find the customer_id of customers that bought all the products.&lt;/p&gt;
&lt;p&gt;Return the result table in any order.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Guardando le tabelle fornite dall&amp;rsquo;esercizio si può notare che ci sono due tabelle: Customer (con customer_id, product_key) e Product (con product_key).&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;obiettivo è trovare i clienti che hanno acquistato tutti i prodotti disponibili. Dobbiamo confrontare il numero di prodotti acquistati da ogni cliente con il numero totale di prodotti disponibili.&lt;/p&gt;</description></item><item><title>SQLLeetCode - 620 - Not Boring Movies</title><link>https://bacarotech.github.io/blog/2026/sqlleetcode---620---not-boring-movies/</link><pubDate>Wed, 25 Feb 2026 14:01:21 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/sqlleetcode---620---not-boring-movies/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode a tema SQL:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Write a solution to find the interesting movies. An interesting movie has an id that is odd, and its description is not &amp;ldquo;boring&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Return the result table sorted by rating in descending order.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Guardando le tabelle fornite dall&amp;rsquo;esercizio si può notare che la tabella Cinema (o Movie) contiene le informazioni sui film: &lt;code&gt;id&lt;/code&gt;, &lt;code&gt;movie&lt;/code&gt;, &lt;code&gt;description&lt;/code&gt;, &lt;code&gt;rating&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;obiettivo è trovare i film &amp;ldquo;interessanti&amp;rdquo; che soddisfano due condizioni:&lt;/p&gt;</description></item><item><title>SQLLeetCode - 619 - Biggest Single Number</title><link>https://bacarotech.github.io/blog/2026/sqlleetcode---619---biggest-single-number/</link><pubDate>Wed, 25 Feb 2026 14:01:20 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/sqlleetcode---619---biggest-single-number/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode a tema SQL:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A &amp;ldquo;single&amp;rdquo; number is a number that appears exactly once in the MyNumbers table.&lt;/p&gt;
&lt;p&gt;Write a solution to find the biggest single number. If there is no single number, the answer is null.&lt;/p&gt;
&lt;p&gt;Return the result table in any order.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Guardando le tabelle fornite dall&amp;rsquo;esercizio si può notare che la tabella MyNumbers contiene solo una colonna &lt;code&gt;num&lt;/code&gt; con vari numeri, alcuni dei quali possono essere ripetuti.&lt;/p&gt;</description></item><item><title>SQLLeetCode - 596 - Classes More Than 5 Students</title><link>https://bacarotech.github.io/blog/2026/sqlleetcode---596---classes-more-than-5-students/</link><pubDate>Wed, 25 Feb 2026 14:01:19 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/sqlleetcode---596---classes-more-than-5-students/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode a tema SQL:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Write a solution to find all classes that have at least five students.&lt;/p&gt;
&lt;p&gt;Return the result table in any order.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Guardando le tabelle fornite dall&amp;rsquo;esercizio si può notare che la tabella Courses contiene le informazioni sugli studenti iscritti ai corsi: &lt;code&gt;student&lt;/code&gt; (nome dello studente), &lt;code&gt;class&lt;/code&gt; (nome del corso).&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;obiettivo è trovare tutti i corsi che hanno almeno cinque studenti iscritti. Per fare ciò, dobbiamo raggruppare gli studenti per classe e contare quanti studenti ci sono in ciascun corso, poi filtrare quelli con count &amp;gt;= 5.&lt;/p&gt;</description></item><item><title>SQLLeetCode - 595 - Big Countries</title><link>https://bacarotech.github.io/blog/2026/sqlleetcode---595---big-countries/</link><pubDate>Wed, 25 Feb 2026 14:01:18 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/sqlleetcode---595---big-countries/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode a tema SQL:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A country is big if:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;it has an area of at least 3,000,000 km², or&lt;/li&gt;
&lt;li&gt;it has a population of at least 25,000,000.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Write a SQL query to report the name, population, and area of the big countries.&lt;/p&gt;
&lt;p&gt;Return the result table in any order.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Guardando le tabelle fornite dall&amp;rsquo;esercizio si può notare che la tabella World contiene le informazioni sui paesi: &lt;code&gt;name&lt;/code&gt; (nome del paese), &lt;code&gt;population&lt;/code&gt; (popolazione), &lt;code&gt;area&lt;/code&gt; (superficie in km²).&lt;/p&gt;</description></item><item><title>SQLLeetCode - 584 - Find Customer RefereeFind Customer Referee</title><link>https://bacarotech.github.io/blog/2026/sqlleetcode---584---find-customer-refereefind-customer-referee/</link><pubDate>Wed, 25 Feb 2026 14:01:17 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/sqlleetcode---584---find-customer-refereefind-customer-referee/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode a tema SQL:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Find the names of the customer that are either:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;referred by any customer with id != 2.&lt;/li&gt;
&lt;li&gt;not referred by any customer.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Return the result table in any order.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Guardando le tabelle fornite dall’esercizio si può notare che la tabella Customer contiene anche il campo referee_id, che indica quale cliente ha fatto da referente (referrer) per un altro cliente. Tuttavia, questo campo può essere NULL nel caso in cui il cliente non abbia alcun referente.&lt;/p&gt;</description></item><item><title>SQLLeetCode - 577 - Employee Bonus</title><link>https://bacarotech.github.io/blog/2026/sqlleetcode---577---employee-bonus/</link><pubDate>Wed, 25 Feb 2026 14:01:16 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/sqlleetcode---577---employee-bonus/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode a tema SQL:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Write a solution to report the name and bonus amount of each employee who satisfies either of the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The employee has a bonus less than 1000.&lt;/li&gt;
&lt;li&gt;The employee did not get any bonus.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Return the result table in any order.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Guardando le tabelle fornite dall’esercizio si può notare che la tabella Employee contiene tutti i dipendenti, mentre la tabella Bonus associa eventualmente un bonus a ciascun dipendente tramite empId. Tuttavia, non tutti i dipendenti hanno necessariamente un bonus assegnato.&lt;/p&gt;</description></item><item><title>SQLLeetCode - 570 - Managers with at Least 5 Direct Reports</title><link>https://bacarotech.github.io/blog/2026/sqlleetcode---570---managers-with-at-least-5-direct-reports/</link><pubDate>Wed, 25 Feb 2026 14:01:15 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/sqlleetcode---570---managers-with-at-least-5-direct-reports/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode a tema SQL:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Write a solution to find managers with at least five direct reports.&lt;/p&gt;
&lt;p&gt;Return the result table in any order.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Guardando le tabelle fornite dall’esercizio si può notare che la tabella Employee contiene sia i dipendenti che i manager, e il campo managerId indica a quale manager ogni dipendente riporta.&lt;/p&gt;
&lt;p&gt;L’obiettivo è quindi individuare i manager che hanno almeno 5 dipendenti diretti (direct reports).&lt;/p&gt;</description></item><item><title>SQLLeetCode - 550 - Game Play Analysis IV</title><link>https://bacarotech.github.io/blog/2026/sqlleetcode---550---game-play-analysis-iv/</link><pubDate>Wed, 25 Feb 2026 14:01:14 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/sqlleetcode---550---game-play-analysis-iv/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode a tema SQL:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Write a solution to report the fraction of players that logged in again on the day after the day they first logged in, rounded to 2 decimal places.&lt;/p&gt;
&lt;p&gt;In other words, you need to determine the number of players who logged in on the day immediately following their initial login, and divide it by the number of total players.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Guardando le tabelle fornite dall’esercizio si può notare che la tabella Activity registra gli accessi degli utenti nel tempo, identificando ogni giocatore tramite player_id e ogni login tramite la data event_date.&lt;/p&gt;</description></item><item><title>SQLLeetCode - 197 - Rising Temperature</title><link>https://bacarotech.github.io/blog/2026/sqlleetcode---197---rising-temperature/</link><pubDate>Wed, 25 Feb 2026 14:01:13 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/sqlleetcode---197---rising-temperature/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode a tema SQL:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Write a solution to find all dates&amp;rsquo; id with higher temperatures compared to its previous dates (yesterday).&lt;/p&gt;
&lt;p&gt;Return the result table in any order.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Guardando le tabelle fornite dall’esercizio si può notare che la tabella Weather contiene le registrazioni giornaliere della temperatura, dove ogni riga è identificata da una data (recordDate) e da un id univoco.&lt;/p&gt;
&lt;p&gt;L’obiettivo è quindi confrontare la temperatura di un giorno con quella del giorno precedente, per trovare i casi in cui la temperatura è aumentata.&lt;/p&gt;</description></item><item><title>SQLLeetCode - 183 - Customers Who Never Order</title><link>https://bacarotech.github.io/blog/2026/sqlleetcode---183---customers-who-never-order/</link><pubDate>Wed, 25 Feb 2026 14:01:12 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/sqlleetcode---183---customers-who-never-order/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode a tema SQL:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Write a solution to find all customers who never order anything.&lt;/p&gt;
&lt;p&gt;WReturn the result table in any order.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Guardando le tabelle fornite dall’esercizio si può notare che la tabella Customers contiene tutti i clienti, mentre la tabella Orders tiene traccia degli ordini effettuati e collega ogni ordine a un cliente tramite il campo customerId.&lt;/p&gt;
&lt;p&gt;Di conseguenza, per trovare i clienti che non hanno mai effettuato ordini, è sufficiente selezionare quelli il cui id non compare tra i customerId presenti nella tabella Orders.&lt;/p&gt;</description></item><item><title>SQLLeetCode - 181 - Employees Earning More Than Their Managers</title><link>https://bacarotech.github.io/blog/2026/sqlleetcode---181---employees-earning-more-than-their-managers/</link><pubDate>Wed, 25 Feb 2026 14:01:11 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/sqlleetcode---181---employees-earning-more-than-their-managers/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode a tema SQL:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Write a solution to find the employees who earn more than their managers.&lt;/p&gt;
&lt;p&gt;Return the result table in any order.W&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Guardando le tabelle fornite dall’esercizio si può notare che la tabella Employee contiene sia le informazioni dei dipendenti che dei manager, distinguendoli tramite il campo managerId, che rappresenta un riferimento all’id di un altro dipendente. Inoltre, non tutti i dipendenti hanno un manager (ad esempio il CEO), quindi in alcuni casi managerId può essere NULL.&lt;/p&gt;</description></item><item><title>SQLLeetCode - 175 - Combine Two Tables</title><link>https://bacarotech.github.io/blog/2026/sqlleetcode---175---combine-two-tables/</link><pubDate>Wed, 25 Feb 2026 14:01:10 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/sqlleetcode---175---combine-two-tables/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode a tema SQL:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Write a solution to report the first name, last name, city, and state of each person in the Person table. If the address of a personId is not present in the Address table, report null instead.&lt;/p&gt;
&lt;p&gt;Return the result table in any order.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Guardando le tabelle fornite dall’esercizio si può notare che la tabella Person contiene le informazioni anagrafiche (firstName, lastName) identificate da personId, mentre la tabella Address contiene città e stato associati allo stesso personId. Tuttavia, non è garantito che ogni persona abbia un indirizzo corrispondente nella tabella Address.&lt;/p&gt;</description></item><item><title>DesignPatternTeoria - Structural - adapter</title><link>https://bacarotech.github.io/blog/2026/designpatternteoria---structural---adapter/</link><pubDate>Wed, 25 Feb 2026 14:01:09 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/designpatternteoria---structural---adapter/</guid><description>&lt;h1 id="design-pattern-adapter" class="no-underline "&gt;
	&lt;a href="#design-pattern-adapter"&gt;
		DESIGN PATTERN: ADAPTER
	&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;L&amp;rsquo;Adapter (o Adattatore / Wrapper) è un pattern strutturale che consente
a due classi con interfacce incompatibili di collaborare.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;adattatore funge da &amp;ldquo;traduttore&amp;rdquo; tra l&amp;rsquo;interfaccia attesa dal codice client
(Target) e quella realmente offerta da un oggetto esistente (Adaptee),
senza modificare né il client né la classe originale.&lt;/p&gt;
&lt;h2 id="quando-utilizzarlo" class="no-underline "&gt;
	&lt;a href="#quando-utilizzarlo"&gt;
		QUANDO UTILIZZARLO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Integrazione di librerie o componenti di terze parti.&lt;/li&gt;
&lt;li&gt;Uniformare formati di input/output differenti (es. XML ⇆ JSON, sistemi di coordinate diversi).&lt;/li&gt;
&lt;li&gt;Migrare verso una nuova API senza interrompere il funzionamento del codice esistente.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="vantaggi" class="no-underline "&gt;
	&lt;a href="#vantaggi"&gt;
		VANTAGGI
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Basso accoppiamento&lt;/strong&gt;: il client dipende solo dall&amp;rsquo;interfaccia Target.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Nessuna modifica a codice esistente&lt;/strong&gt;: adattamento non invasivo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flessibilità nella sostituzione&lt;/strong&gt;: puoi introdurre più adattatori per transizioni graduali.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Riutilizzo di codice&lt;/strong&gt;: componenti vecchi possono integrarsi con sistemi nuovi.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="potenziali-svantaggi" class="no-underline "&gt;
	&lt;a href="#potenziali-svantaggi"&gt;
		POTENZIALI SVANTAGGI
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Aumento della complessità&lt;/strong&gt;: più formati = più adapter da gestire.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Prestazioni&lt;/strong&gt;: un layer aggiuntivo può introdurre overhead.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Soluzione temporanea&lt;/strong&gt;: spesso è un &amp;ldquo;cerotto&amp;rdquo; invece di una riprogettazione strutturale.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="codice" class="no-underline "&gt;
	&lt;a href="#codice"&gt;
		CODICE
	&lt;/a&gt;
&lt;/h2&gt;


&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Sorgenti dati JSON ok
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;JSONData&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;content&lt;/span&gt;: &lt;span class="kt"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="kr"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;: &lt;span class="kt"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Sorgenti dati XML ok =&amp;gt; da adattare con il nostro design pattern
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;XMLData&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;content&lt;/span&gt;: &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="kr"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;: &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * ADAPTER
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Interfaccia comune per l&amp;#39;adattamento a un MCM
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;CommonData&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;convertToCommonData&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSONData&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * CONVERTITORE JSON
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;convertJSONData&lt;/span&gt; &lt;span class="kr"&gt;implements&lt;/span&gt; &lt;span class="nx"&gt;CommonData&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;jsonData&lt;/span&gt;: &lt;span class="kt"&gt;JSONData&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="kr"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;jsonData&lt;/span&gt;: &lt;span class="kt"&gt;JSONData&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;jsonData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;jsonData&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;convertToCommonData&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSONData&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;jsonData&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * CONVERTITORE XML
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;convertXMLData&lt;/span&gt; &lt;span class="kr"&gt;implements&lt;/span&gt; &lt;span class="nx"&gt;CommonData&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;xmlData&lt;/span&gt;: &lt;span class="kt"&gt;XMLData&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="kr"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;xmlData&lt;/span&gt;: &lt;span class="kt"&gt;XMLData&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;xmlData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;xmlData&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;convertToCommonData&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSONData&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="c1"&gt;//Parsing manuale semplificato (solo per esempio)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;matches&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;xmlData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/&amp;lt;campo1 xml&amp;gt;(.*?)&amp;lt;\/campo1 xml&amp;gt;[\s\S]*&amp;lt;campo2 xml&amp;gt;(.*?)&amp;lt;\/campo2 xml&amp;gt;/&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;matches&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Formato XML non valido&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;jsonObj&lt;/span&gt;: &lt;span class="kt"&gt;Object&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="s2"&gt;&amp;#34;campo 1 xml&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;matches&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="s2"&gt;&amp;#34;campo 2 xml&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;matches&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;JSONData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;jsonObj&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;//USO ADAPTER
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;jsonData&lt;/span&gt;: &lt;span class="kt"&gt;JSONData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;JSONData&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="s2"&gt;&amp;#34;campo 1 json&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;valore 1 json&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="s2"&gt;&amp;#34;campo 2 json&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;valore 2 json&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;xmlData&lt;/span&gt;: &lt;span class="kt"&gt;XMLData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;XMLData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sb"&gt;`
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sb"&gt; &amp;lt;root&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sb"&gt; &amp;lt;campo1 xml&amp;gt;valore 1 xml&amp;lt;/campo1 xml&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sb"&gt; &amp;lt;campo2 xml&amp;gt;valore 2 xml&amp;lt;/campo2 xml&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sb"&gt; &amp;lt;/root&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;commonDataFromJSON&lt;/span&gt;: &lt;span class="kt"&gt;JSONData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;convertJSONData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;jsonData&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;convertToCommonData&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;commonDataFromXML&lt;/span&gt;: &lt;span class="kt"&gt;JSONData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;convertXMLData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;xmlData&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;convertToCommonData&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;JSON convertito a JSON: &amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;commonDataFromJSON&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;XML convertito a JSON: &amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;commonDataFromXML&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>DesignPatternTeoria - Structural - decorator</title><link>https://bacarotech.github.io/blog/2026/designpatternteoria---structural---decorator/</link><pubDate>Wed, 25 Feb 2026 14:01:09 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/designpatternteoria---structural---decorator/</guid><description>&lt;h1 id="design-pattern-decorator" class="no-underline "&gt;
	&lt;a href="#design-pattern-decorator"&gt;
		DESIGN PATTERN: DECORATOR
	&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;Il Decorator è un pattern strutturale che consente di aggiungere,
in modo dinamico, nuove funzionalità a un oggetto senza modificarne
la classe originale.&lt;/p&gt;
&lt;p&gt;Il principio di base è &amp;ldquo;impacchettare&amp;rdquo; (wrapping) l&amp;rsquo;oggetto originale
all&amp;rsquo;interno di un altro oggetto che implementa la stessa interfaccia,
delegando le chiamate e arricchendole prima o dopo l&amp;rsquo;esecuzione.&lt;/p&gt;
&lt;h2 id="quando-utilizzarlo" class="no-underline "&gt;
	&lt;a href="#quando-utilizzarlo"&gt;
		QUANDO UTILIZZARLO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Vuoi estendere il comportamento di un oggetto a runtime senza usare l&amp;rsquo;ereditarietà.&lt;/li&gt;
&lt;li&gt;Vuoi evitare la proliferazione di sottoclassi per ogni combinazione di funzionalità
(es. &lt;code&gt;ButtonBlueLargeWithIcon&lt;/code&gt;, &lt;code&gt;ButtonRedSmallNoIcon&lt;/code&gt;, ecc.).&lt;/li&gt;
&lt;li&gt;Necessiti di combinare funzionalità in modo flessibile e modulare.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="vantaggi" class="no-underline "&gt;
	&lt;a href="#vantaggi"&gt;
		VANTAGGI
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Modularità&lt;/strong&gt;: aggiungi funzionalità senza toccare la classe originale.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flessibilità&lt;/strong&gt;: puoi impilare più decoratori in qualunque ordine.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Open/Closed Principle&lt;/strong&gt;: estendi il comportamento senza modificare codice esistente.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="potenziali-svantaggi" class="no-underline "&gt;
	&lt;a href="#potenziali-svantaggi"&gt;
		POTENZIALI SVANTAGGI
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Maggiore complessità&lt;/strong&gt;: troppi oggetti annidati possono rendere il flusso poco chiaro.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Configurazione verbosa&lt;/strong&gt;: la creazione e combinazione dei decoratori può diventare prolissa.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="codice" class="no-underline "&gt;
	&lt;a href="#codice"&gt;
		CODICE
	&lt;/a&gt;
&lt;/h2&gt;


&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Interfaccia comune per DataSource
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;DataSource&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;writeData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;: &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;readData&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Classe concreta: sorgente dati base
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;FileDataSource&lt;/span&gt; &lt;span class="kr"&gt;implements&lt;/span&gt; &lt;span class="nx"&gt;DataSource&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="kr"&gt;private&lt;/span&gt; &lt;span class="nx"&gt;storage&lt;/span&gt;: &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;writeData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;: &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Scrittura dati nel file:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;storage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;readData&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Lettura dati dal file&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;storage&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * DECORATOR
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Decoratore concreto che implementa DataSource e ha un riferimento a un DataSource
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Inoltre aggiunge compressione ai dati
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Serve per dare piu struttura al codice ma si può evitare e fare direttamente il Decoratore concreto
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;DataSourceDecorator&lt;/span&gt; &lt;span class="kr"&gt;implements&lt;/span&gt; &lt;span class="nx"&gt;DataSource&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="c1"&gt;//Oggetto di base wrappato
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="kr"&gt;protected&lt;/span&gt; &lt;span class="nx"&gt;wrapper&lt;/span&gt;: &lt;span class="kt"&gt;DataSource&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="kr"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;source&lt;/span&gt;: &lt;span class="kt"&gt;DataSource&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;wrapper&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;source&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="c1"&gt;//riutilizzo le funzioni del wrapper e aggiungo altra logica
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;writeData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;: &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;compress&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;wrapper&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;writeData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;readData&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;wrapper&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;readData&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;decompress&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="c1"&gt;//aggiungo ulteriori funzioni
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="kr"&gt;private&lt;/span&gt; &lt;span class="nx"&gt;compress&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;: &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="c1"&gt;//Implementazione di compressione fittizia (esempio semplice)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;reverse&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="kr"&gt;private&lt;/span&gt; &lt;span class="nx"&gt;decompress&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;: &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="c1"&gt;//Decompressione fittizia(in questo caso inversa della compressione)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;reverse&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;//Da questo momento in poi potrei procedere in 2 modi:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;//VERTICALE: Aggiungo un nuovo decoratore(virtuale e concreto) &amp;#39;wrappando&amp;#39; un oggetto di tipo CompressionDecorator
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;//ORIZZONTALE: Aggiungo un nuovo decoratore(virtuale e concreto) &amp;#39;wrappando&amp;#39; un oggetto di tipo DataSource =&amp;gt; Consigliato
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;//USO DECORATOR
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fileSource&lt;/span&gt;: &lt;span class="kt"&gt;FileDataSource&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;FileDataSource&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;compressedSource&lt;/span&gt;: &lt;span class="kt"&gt;DataSourceDecorator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;DataSourceDecorator&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fileSource&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;compressedSource&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;writeData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Questo è un testo da salvare&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;: &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;compressedSource&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;readData&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Dati letti decompressi:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>DesignPatternTeoria - Structural - facade</title><link>https://bacarotech.github.io/blog/2026/designpatternteoria---structural---facade/</link><pubDate>Wed, 25 Feb 2026 14:01:09 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/designpatternteoria---structural---facade/</guid><description>&lt;h1 id="design-pattern-facade" class="no-underline "&gt;
	&lt;a href="#design-pattern-facade"&gt;
		DESIGN PATTERN: FACADE
	&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;Il Facade è un pattern strutturale che fornisce un&amp;rsquo;interfaccia unificata
e semplificata a un insieme di sottosistemi complessi.&lt;/p&gt;
&lt;p&gt;La &amp;ldquo;facciata&amp;rdquo; nasconde i dettagli interni e offre al client un solo punto
di accesso, riducendo l&amp;rsquo;accoppiamento tra componenti e migliorando la leggibilità.&lt;/p&gt;
&lt;h2 id="quando-usarlo" class="no-underline "&gt;
	&lt;a href="#quando-usarlo"&gt;
		QUANDO USARLO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Quando il sistema ha API verbose, complesse o frammentate.&lt;/li&gt;
&lt;li&gt;Quando vuoi esporre solo facciate e non classi interne ai livelli superiori.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="vantaggi" class="no-underline "&gt;
	&lt;a href="#vantaggi"&gt;
		VANTAGGI
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Semplifica l&amp;rsquo;uso del sistema, nascondendo la complessità.&lt;/li&gt;
&lt;li&gt;Riduce l&amp;rsquo;accoppiamento tra client e sottosistemi.&lt;/li&gt;
&lt;li&gt;Fornisce un punto unico di controllo (utile per logging, sicurezza, transazioni).&lt;/li&gt;
&lt;li&gt;Facilita modifiche e manutenzione, isolando le dipendenze.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="potenziali-svantaggi" class="no-underline "&gt;
	&lt;a href="#potenziali-svantaggi"&gt;
		POTENZIALI SVANTAGGI
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Se il client necessita di funzionalità molto specifiche, potrebbe comunque dover accedere ai sottosistemi.&lt;/li&gt;
&lt;li&gt;Un eccessivo numero di facciate può portare a duplicazione di logica già presente nei moduli interni.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="codice" class="no-underline "&gt;
	&lt;a href="#codice"&gt;
		CODICE
	&lt;/a&gt;
&lt;/h2&gt;


&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Interfaccia comune
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;Crypto&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;currency&lt;/span&gt;: &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;doPayment&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;amount&lt;/span&gt;: &lt;span class="kt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;getCurrency&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Implementazioni concrete
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;BTC&lt;/span&gt; &lt;span class="kr"&gt;implements&lt;/span&gt; &lt;span class="nx"&gt;Crypto&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;currency&lt;/span&gt;: &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;BTC&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;doPayment&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;amount&lt;/span&gt;: &lt;span class="kt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;[BTC] Avvio pagamento di &amp;#34;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;amount&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34; BTC&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;[BTC] Operazione riuscita&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;[BTC] Invio mail di conferma&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;getCurrency&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;currency&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;Dogecoin&lt;/span&gt; &lt;span class="kr"&gt;implements&lt;/span&gt; &lt;span class="nx"&gt;Crypto&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;currency&lt;/span&gt;: &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Dogecoin&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;doPayment&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;amount&lt;/span&gt;: &lt;span class="kt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;[Dogecoin] Avvio pagamento di &amp;#34;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;amount&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34; Dogecoin&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;[Dogecoin] Operazione riuscita&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;[Dogecoin] Invio mail di conferma&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;getCurrency&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;currency&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * FACADE
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Espone un&amp;#39;interfaccia semplificata per il client
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;CryptoFacade&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="kr"&gt;private&lt;/span&gt; &lt;span class="nx"&gt;wallet&lt;/span&gt;: &lt;span class="kt"&gt;Map&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;Crypto&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Map&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="kr"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="c1"&gt;// Registrazione delle crypto disponibili
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;btc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;BTC&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;dogecoin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Dogecoin&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;wallet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kr"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;btc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getCurrency&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="nx"&gt;btc&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;wallet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kr"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;dogecoin&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getCurrency&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="nx"&gt;dogecoin&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="c1"&gt;// Metodo comune per pagare
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="kr"&gt;public&lt;/span&gt; &lt;span class="nx"&gt;pay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;amount&lt;/span&gt;: &lt;span class="kt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;currency&lt;/span&gt;: &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;crypto&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;wallet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kr"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;currency&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;crypto&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Valuta non supportata: &amp;#34;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;currency&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;=== Avvio pagamento tramite Facade ===&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="nx"&gt;crypto&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;doPayment&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;amount&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;=== Fine pagamento ===&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * USO DEL FACADE
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Il client vede solo la Facade, non le classi concrete
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;paymentSystem&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;CryptoFacade&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;paymentSystem&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;BTC&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;paymentSystem&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Dogecoin&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;paymentSystem&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Ethereum&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// non supportata
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>DesignPatternTeoria - Creational - builder</title><link>https://bacarotech.github.io/blog/2026/designpatternteoria---creational---builder/</link><pubDate>Wed, 25 Feb 2026 14:01:08 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/designpatternteoria---creational---builder/</guid><description>&lt;h1 id="design-pattern-builder" class="no-underline "&gt;
	&lt;a href="#design-pattern-builder"&gt;
		DESIGN PATTERN: BUILDER
	&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;Il Builder è un pattern creazionale che consente di costruire oggetti
complessi passo dopo passo.&lt;/p&gt;
&lt;p&gt;A differenza del Factory, che si concentra solo sulla creazione,
il Builder gestisce anche la composizione graduale dell&amp;rsquo;oggetto,
rendendo il processo più leggibile e flessibile.&lt;/p&gt;
&lt;h2 id="quando-utilizzarlo" class="no-underline "&gt;
	&lt;a href="#quando-utilizzarlo"&gt;
		QUANDO UTILIZZARLO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;La costruzione dell&amp;rsquo;oggetto richiede molti passaggi o parametri opzionali.&lt;/li&gt;
&lt;li&gt;Vuoi evitare il &amp;ldquo;telescoping constructor&amp;rdquo; (costruttori con troppi parametri).&lt;/li&gt;
&lt;li&gt;Vuoi che l&amp;rsquo;oggetto finale sia immutabile, ma la sua creazione rimanga flessibile.&lt;/li&gt;
&lt;li&gt;Necessiti di creare varianti partendo da una configurazione di base.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="vantaggi" class="no-underline "&gt;
	&lt;a href="#vantaggi"&gt;
		VANTAGGI
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Chiarezza&lt;/strong&gt;: sequenze come &lt;code&gt;.setX().setY().build()&lt;/code&gt; rendono il codice leggibile e modulare.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flessibilità&lt;/strong&gt;: permette di configurare solo ciò che serve.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Immutabilità&lt;/strong&gt;: l&amp;rsquo;oggetto finale può essere reso non modificabile.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pulizia del costruttore&lt;/strong&gt;: evita l&amp;rsquo;uso di costruttori con troppi parametri.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Riutilizzo&lt;/strong&gt;: puoi partire da un builder già configurato per creare varianti.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="potenziali-svantaggi" class="no-underline "&gt;
	&lt;a href="#potenziali-svantaggi"&gt;
		POTENZIALI SVANTAGGI
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Maggiore complessità&lt;/strong&gt;: richiede classi aggiuntive anche per casi semplici.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overkill&lt;/strong&gt;: non necessario per oggetti con poche proprietà.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Validazione assente&lt;/strong&gt;: di default non impone controlli sui dati forniti.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="chicca-opzionale-direttive" class="no-underline "&gt;
	&lt;a href="#chicca-opzionale-direttive"&gt;
		CHICCA OPZIONALE: DIRETTIVE
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Nel caso in cui notiamo nel codice dei casi in cui abbiamo diversi build che hanno lo stesso set di parametri
allora conviene utilizzare oltre ai builder anche le DIRETTIVE, ovvero dei builder pre-compilati&lt;/p&gt;</description></item><item><title>DesignPatternTeoria - Creational - factory method</title><link>https://bacarotech.github.io/blog/2026/designpatternteoria---creational---factory-method/</link><pubDate>Wed, 25 Feb 2026 14:01:08 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/designpatternteoria---creational---factory-method/</guid><description>&lt;h1 id="design-pattern-factory-method" class="no-underline "&gt;
	&lt;a href="#design-pattern-factory-method"&gt;
		DESIGN PATTERN: FACTORY METHOD
	&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;Il Factory Method è un pattern creazionale che definisce un&amp;rsquo;interfaccia
per la creazione di oggetti, delegando alle sottoclassi la decisione
su quale classe concreta istanziare.&lt;/p&gt;
&lt;p&gt;Questo approccio separa la logica di creazione dal codice che utilizza
gli oggetti, migliorando flessibilità e manutenibilità.&lt;/p&gt;
&lt;h2 id="quando-utilizzarlo" class="no-underline "&gt;
	&lt;a href="#quando-utilizzarlo"&gt;
		QUANDO UTILIZZARLO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Quando non conosci a priori la classe concreta da istanziare.&lt;/li&gt;
&lt;li&gt;Quando vuoi centralizzare la logica di creazione degli oggetti.&lt;/li&gt;
&lt;li&gt;Quando desideri ridurre le dipendenze dirette da classi specifiche.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="vantaggi" class="no-underline "&gt;
	&lt;a href="#vantaggi"&gt;
		VANTAGGI
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Separazione delle responsabilità&lt;/strong&gt;: isola la logica di istanziazione dal codice client.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Estendibilità&lt;/strong&gt;: per supportare nuovi tipi di oggetti basta estendere la factory.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Open/Closed Principle&lt;/strong&gt;: il codice client dipende da interfacce, non da implementazioni concrete.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Codice più pulito e modulare&lt;/strong&gt;: la creazione è incapsulata.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="potenziali-svantaggi" class="no-underline "&gt;
	&lt;a href="#potenziali-svantaggi"&gt;
		POTENZIALI SVANTAGGI
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Potrebbe richiedere molte sottoclassi o rami condizionali per gestire vari tipi di oggetti.&lt;/li&gt;
&lt;li&gt;Non è ottimale per oggetti con numerose varianti di configurazione.&lt;/li&gt;
&lt;li&gt;L&amp;rsquo;aggiunta di nuovi tipi può richiedere modifiche alla factory esistente.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="codice" class="no-underline "&gt;
	&lt;a href="#codice"&gt;
		CODICE
	&lt;/a&gt;
&lt;/h2&gt;


&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Interfaccia di base(necessaria)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;Notifica&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;invia&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;messaggio&lt;/span&gt;: &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Classi specializzate che implementano l&amp;#39;interfaccia di partenza
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;NotificaEmail&lt;/span&gt; &lt;span class="kr"&gt;implements&lt;/span&gt; &lt;span class="nx"&gt;Notifica&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//Override del metodo
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;invia&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;messaggio&lt;/span&gt;: &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sb"&gt;`Invio email con messaggio: &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;messaggio&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Classi specializzate che implementano l&amp;#39;interfaccia di partenza
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;NotificaSMS&lt;/span&gt; &lt;span class="kr"&gt;implements&lt;/span&gt; &lt;span class="nx"&gt;Notifica&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//Override del metodo
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;invia&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;messaggio&lt;/span&gt;: &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sb"&gt;`Invio SMS con messaggio: &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;messaggio&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**FACTORY
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;* Andremo a eseguire le new passando per il metodo statico della factory
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;* Deleghiamo come avviene la creazione/costruzione dell&amp;#39;oggetto alla factory
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;* Per funzionare le classi devono avere un padre comune(interfaccia o classe)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;NotificaFactory&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;static&lt;/span&gt; &lt;span class="nx"&gt;creaNotifica&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;tipo&lt;/span&gt;: &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;switch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;tipo&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;email&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;NotificaEmail&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;sms&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;NotificaSMS&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Tipo di notifica non supportato&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;//USO FACORY
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;//Nelle righe a seguire io non so come viene creata una notifica -&amp;gt; delego questa logica alla &amp;#39;NotificaFactory&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;notifica&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;NotificaFactory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;creaNotifica&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;sms&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;notifica&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;invia&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Ciao utente!&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;notifica&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;NotificaFactory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;creaNotifica&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;email&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;notifica&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;invia&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Come stai?&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>DesignPatternTeoria - Creational - singleton</title><link>https://bacarotech.github.io/blog/2026/designpatternteoria---creational---singleton/</link><pubDate>Wed, 25 Feb 2026 14:01:08 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/designpatternteoria---creational---singleton/</guid><description>&lt;h1 id="design-pattern-singleton" class="no-underline "&gt;
	&lt;a href="#design-pattern-singleton"&gt;
		DESIGN PATTERN: SINGLETON
	&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;Il pattern Singleton è una soluzione architetturale che garantisce la creazione
di &lt;strong&gt;una sola istanza&lt;/strong&gt; di una determinata classe per l&amp;rsquo;intera durata
dell&amp;rsquo;applicazione.&lt;/p&gt;
&lt;p&gt;Viene utilizzato quando è necessario un unico punto di accesso globale
a una risorsa condivisa, ad esempio:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;configurazioni dell&amp;rsquo;applicazione&lt;/li&gt;
&lt;li&gt;connessioni a database&lt;/li&gt;
&lt;li&gt;sistemi di logging&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="quando-utilizzarlo" class="no-underline "&gt;
	&lt;a href="#quando-utilizzarlo"&gt;
		QUANDO UTILIZZARLO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Serve una sola istanza condivisa&lt;/li&gt;
&lt;li&gt;Lo stato deve essere centralizzato&lt;/li&gt;
&lt;li&gt;L&amp;rsquo;oggetto è costoso da creare&lt;/li&gt;
&lt;li&gt;È richiesta una visione globale dello stato&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="vantaggi" class="no-underline "&gt;
	&lt;a href="#vantaggi"&gt;
		VANTAGGI
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Consistenza globale&lt;/strong&gt;: tutti gli utilizzatori condividono lo stesso stato.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Controllo centralizzato&lt;/strong&gt;: gestione unificata della risorsa.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Risparmio di memoria&lt;/strong&gt;: un&amp;rsquo;unica istanza evita duplicazioni inutili.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="potenziali-svantaggi" class="no-underline "&gt;
	&lt;a href="#potenziali-svantaggi"&gt;
		POTENZIALI SVANTAGGI
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Testing più complesso&lt;/strong&gt;: può introdurre dipendenze nascoste, ostacolando i test unitari.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Accesso globale rischioso&lt;/strong&gt;: se abusato, può portare a un design meno modulare
e più difficile da manutenere.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="codice" class="no-underline "&gt;
	&lt;a href="#codice"&gt;
		CODICE
	&lt;/a&gt;
&lt;/h2&gt;


&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * SINGLETON
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;Logger&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="c1"&gt;//Istanza statica per conservare le informazioni
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="kr"&gt;private&lt;/span&gt; &lt;span class="kr"&gt;static&lt;/span&gt; &lt;span class="nx"&gt;instance?&lt;/span&gt;: &lt;span class="kt"&gt;Logger&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="kr"&gt;private&lt;/span&gt; &lt;span class="nx"&gt;message?&lt;/span&gt;: &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="c1"&gt;//Costruttore privato
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="kr"&gt;private&lt;/span&gt; &lt;span class="kr"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;: &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="c1"&gt;//Punto in cui avviene la magia
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="kr"&gt;static&lt;/span&gt; &lt;span class="nx"&gt;getInstance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;: &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Logger&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="c1"&gt;//Attenzione nei linguaggi multi thread in questo punto 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;instance&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;instance&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;instance&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Logger&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;instance&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="kr"&gt;public&lt;/span&gt; &lt;span class="nx"&gt;getMessage() {&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;//USO SINGLETON
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;logger1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getInstance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;ciao mondo&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;logger2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getInstance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;seconda instanza, non mi vedi&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;logger1&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;logger2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// true -&amp;gt; stessa istanza!
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;logger1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getMessage&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;logger2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getMessage&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>DesignPatternTeoria - Behavioral - command</title><link>https://bacarotech.github.io/blog/2026/designpatternteoria---behavioral---command/</link><pubDate>Wed, 25 Feb 2026 14:01:07 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/designpatternteoria---behavioral---command/</guid><description>&lt;h1 id="design-pattern-command" class="no-underline "&gt;
	&lt;a href="#design-pattern-command"&gt;
		DESIGN PATTERN: COMMAND
	&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;Il Command è un pattern comportamentale che incapsula una richiesta
all&amp;rsquo;interno di un oggetto, consentendo di parametrizzare i client con
richieste differenti, mettere in coda o salvare operazioni, e
supportare funzionalità come undo/redo.&lt;/p&gt;
&lt;p&gt;Il pattern separa chi invoca un&amp;rsquo;operazione (Invoker) da chi la esegue
(Receiver), permettendo maggiore flessibilità nella gestione delle azioni.&lt;/p&gt;
&lt;h2 id="quando-usarlo" class="no-underline "&gt;
	&lt;a href="#quando-usarlo"&gt;
		QUANDO USARLO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Vuoi separare il codice che invoca un&amp;rsquo;operazione dal codice che la esegue.&lt;/li&gt;
&lt;li&gt;Vuoi implementare operazioni annullabili (undo/redo).&lt;/li&gt;
&lt;li&gt;Vuoi registrare, ritardare o eseguire operazioni in batch.&lt;/li&gt;
&lt;li&gt;Vuoi implementare macro che combinano più comandi in sequenza.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="vantaggi" class="no-underline "&gt;
	&lt;a href="#vantaggi"&gt;
		VANTAGGI
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Separazione delle responsabilità&lt;/strong&gt;: chi invoca non conosce i dettagli dell&amp;rsquo;esecuzione.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flessibilità&lt;/strong&gt;: code di comandi, esecuzione ritardata, batch, macro.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Undo/Redo&lt;/strong&gt;: possibile mantenendo lo stato o registrando operazioni inverse.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Estendibilità&lt;/strong&gt;: nuovi comandi possono essere aggiunti senza modificare il codice esistente.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="potenziali-svantaggi" class="no-underline "&gt;
	&lt;a href="#potenziali-svantaggi"&gt;
		POTENZIALI SVANTAGGI
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Maggiore complessità&lt;/strong&gt;: richiede una classe separata per ogni comando.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overkill per sistemi semplici&lt;/strong&gt;: il vantaggio si percepisce in scenari più complessi.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="codice" class="no-underline "&gt;
	&lt;a href="#codice"&gt;
		CODICE
	&lt;/a&gt;
&lt;/h2&gt;


&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Classe ricevente(del comando)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;Light&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="kr"&gt;private&lt;/span&gt; &lt;span class="nx"&gt;state&lt;/span&gt;: &lt;span class="kt"&gt;boolean&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;getState&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;boolean&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;setState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newState&lt;/span&gt;: &lt;span class="kt"&gt;boolean&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;newState&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;accesa&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;spenta&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * COMMAND
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;CommandLight&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="c1"&gt;//comando astratto
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;executeSwitchOnOffLight&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Classe mandante(del comando)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Deve implementare correttamente l&amp;#39;interfaccia command
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;Room&lt;/span&gt; &lt;span class="kr"&gt;implements&lt;/span&gt; &lt;span class="nx"&gt;CommandLight&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;roomLight&lt;/span&gt;: &lt;span class="kt"&gt;Light&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="kr"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;light&lt;/span&gt;: &lt;span class="kt"&gt;Light&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;roomLight&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;light&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;	 * Comando contreto
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;	 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;executeSwitchOnOffLight&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;oldState&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;roomLight&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getState&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;roomLight&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;oldState&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;La lampadina è&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;roomLight&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;//USO COMMAND
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;light&lt;/span&gt;: &lt;span class="kt"&gt;Light&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Light&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;room&lt;/span&gt;: &lt;span class="kt"&gt;Room&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Room&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;light&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;room&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;executeSwitchOnOffLight&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;room&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;executeSwitchOnOffLight&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>DesignPatternTeoria - Behavioral - observer</title><link>https://bacarotech.github.io/blog/2026/designpatternteoria---behavioral---observer/</link><pubDate>Wed, 25 Feb 2026 14:01:07 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/designpatternteoria---behavioral---observer/</guid><description>&lt;h1 id="design-pattern-observer" class="no-underline "&gt;
	&lt;a href="#design-pattern-observer"&gt;
		DESIGN PATTERN: OBSERVER
	&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;L&amp;rsquo;Observer è un pattern comportamentale che permette a un oggetto
(Subject) di notificare automaticamente un insieme di oggetti (Observers)
ogni volta che il suo stato cambia.&lt;br&gt;
È alla base di molti sistemi basati su eventi e della programmazione reattiva.&lt;/p&gt;
&lt;h2 id="quando-usarlo" class="no-underline "&gt;
	&lt;a href="#quando-usarlo"&gt;
		QUANDO USARLO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Più oggetti devono reagire ai cambiamenti di stato di un altro oggetto.&lt;/li&gt;
&lt;li&gt;Vuoi implementare sistemi di eventi o flussi di dati asincroni.&lt;/li&gt;
&lt;li&gt;Vuoi disaccoppiare il publisher dai subscriber, evitando dipendenze dirette.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="vantaggi" class="no-underline "&gt;
	&lt;a href="#vantaggi"&gt;
		VANTAGGI
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Broadcasting semplice verso più listener contemporaneamente.&lt;/li&gt;
&lt;li&gt;Disaccoppiamento tra chi emette eventi e chi li gestisce.&lt;/li&gt;
&lt;li&gt;Perfetto per UI reattive, flussi di dati in tempo reale e sistemi asincroni.&lt;/li&gt;
&lt;li&gt;Supportato nativamente in librerie come RxJS.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="potenziali-svantaggi" class="no-underline "&gt;
	&lt;a href="#potenziali-svantaggi"&gt;
		POTENZIALI SVANTAGGI
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Possibili &lt;strong&gt;memory leak&lt;/strong&gt; se gli observer non vengono disiscritti.&lt;/li&gt;
&lt;li&gt;La complessità aumenta con il numero di observer e interazioni.&lt;/li&gt;
&lt;li&gt;Debug più complesso in sistemi con molti eventi concatenati.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="struttura" class="no-underline "&gt;
	&lt;a href="#struttura"&gt;
		STRUTTURA
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;SUBJECT -&amp;gt; OBSERVER 1, OBSERVER 2, &amp;hellip;, OBSERVER N(stesso tipo) -&amp;gt; NOTIFICATION&lt;/p&gt;</description></item><item><title>DesignPatternTeoria - Behavioral - state</title><link>https://bacarotech.github.io/blog/2026/designpatternteoria---behavioral---state/</link><pubDate>Wed, 25 Feb 2026 14:01:07 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/designpatternteoria---behavioral---state/</guid><description>&lt;h1 id="design-pattern-state" class="no-underline "&gt;
	&lt;a href="#design-pattern-state"&gt;
		DESIGN PATTERN: STATE
	&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;Lo State è un pattern comportamentale che permette a un oggetto di
modificare il proprio comportamento quando cambia il suo stato interno.&lt;br&gt;
È come se l&amp;rsquo;oggetto cambiasse &amp;ldquo;classe&amp;rdquo; in modo dinamico.&lt;/p&gt;
&lt;h2 id="quando-usarlo" class="no-underline "&gt;
	&lt;a href="#quando-usarlo"&gt;
		QUANDO USARLO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Un oggetto deve cambiare comportamento in base al suo stato.&lt;/li&gt;
&lt;li&gt;Vuoi evitare grandi istruzioni &lt;code&gt;if&lt;/code&gt; o &lt;code&gt;switch&lt;/code&gt; che controllano lo stato.&lt;/li&gt;
&lt;li&gt;Vuoi centralizzare i comportamenti di uno stato in una classe dedicata.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="vantaggi" class="no-underline "&gt;
	&lt;a href="#vantaggi"&gt;
		VANTAGGI
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Elimina &lt;code&gt;if-else&lt;/code&gt; o &lt;code&gt;switch-case&lt;/code&gt; complessi.&lt;/li&gt;
&lt;li&gt;Ogni stato è isolato in una classe separata (Single Responsibility Principle).&lt;/li&gt;
&lt;li&gt;Facile aggiungere nuovi stati senza modificare quelli esistenti.&lt;/li&gt;
&lt;li&gt;Migliora leggibilità e manutenzione del codice.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="potenziali-svantaggi" class="no-underline "&gt;
	&lt;a href="#potenziali-svantaggi"&gt;
		POTENZIALI SVANTAGGI
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Aumenta il numero di classi nel sistema.&lt;/li&gt;
&lt;li&gt;Può risultare eccessivo per macchine a stati semplici.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="codice" class="no-underline "&gt;
	&lt;a href="#codice"&gt;
		CODICE
	&lt;/a&gt;
&lt;/h2&gt;


&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Classe con internamente il riferimento a uno degli stati esterni
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;Semaforo&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//Determino solo che esiste uno stato, non mi interessa la logica di aggiornamento
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;private&lt;/span&gt; &lt;span class="nx"&gt;stato&lt;/span&gt;: &lt;span class="kt"&gt;StatoSemaforo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Rosso&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;aggiornataStato&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;stato&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;stato&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;cambia&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;getStato&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;stato&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;mostra&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * STATE
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * State interfaccia comune
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;StatoSemaforo&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;cambia&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;StatoSemaforo&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;mostra&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Stati concreto =&amp;gt; Rosso 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Slego il cambio stato dalla &amp;#34;classe con stato&amp;#34; agli &amp;#34;stati effettivi&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;Rosso&lt;/span&gt; &lt;span class="kr"&gt;implements&lt;/span&gt; &lt;span class="nx"&gt;StatoSemaforo&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;cambia&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;StatoSemaforo&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Cambio da ROSSO a VERDE&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Verde&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;mostra&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Rosso: STOP&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Stati concreto =&amp;gt; Verde 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Slego il cambio stato dalla &amp;#34;classe con stato&amp;#34; agli &amp;#34;stati effettivi&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;Verde&lt;/span&gt; &lt;span class="kr"&gt;implements&lt;/span&gt; &lt;span class="nx"&gt;StatoSemaforo&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;cambia&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;StatoSemaforo&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Cambio da VERDE a GIALLO&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Giallo&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;mostra&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Verde: VAI&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Stati concreto =&amp;gt; Giallo 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Slego il cambio stato dalla &amp;#34;classe con stato&amp;#34; agli &amp;#34;stati effettivi&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;Giallo&lt;/span&gt; &lt;span class="kr"&gt;implements&lt;/span&gt; &lt;span class="nx"&gt;StatoSemaforo&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;cambia&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;StatoSemaforo&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Cambio da GIALLO a ROSSO&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Rosso&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;mostra&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Giallo: ATTENZIONE&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// USO STATE
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;semaforo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Semaforo&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;semaforo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getStato&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;semaforo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;aggiornataStato&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;semaforo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getStato&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;semaforo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;aggiornataStato&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;semaforo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getStato&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;semaforo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;aggiornataStato&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>DesignPatternTeoria - Behavioral - strategy</title><link>https://bacarotech.github.io/blog/2026/designpatternteoria---behavioral---strategy/</link><pubDate>Wed, 25 Feb 2026 14:01:07 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/designpatternteoria---behavioral---strategy/</guid><description>&lt;h1 id="design-pattern-strategy" class="no-underline "&gt;
	&lt;a href="#design-pattern-strategy"&gt;
		DESIGN PATTERN: STRATEGY
	&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;Lo Strategy è un pattern comportamentale che permette di definire una
famiglia di algoritmi, incapsularli e renderli intercambiabili a runtime
senza modificare il contesto che li utilizza.&lt;br&gt;
In pratica, consente di cambiare il &amp;ldquo;comportamento&amp;rdquo; di un oggetto in modo flessibile.&lt;/p&gt;
&lt;h2 id="quando-usarlo" class="no-underline "&gt;
	&lt;a href="#quando-usarlo"&gt;
		QUANDO USARLO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Più algoritmi alternativi devono essere scelti dinamicamente.&lt;/li&gt;
&lt;li&gt;Vuoi evitare lunghi &lt;code&gt;if-else&lt;/code&gt; o &lt;code&gt;switch-case&lt;/code&gt; pieni di logica condizionale.&lt;/li&gt;
&lt;li&gt;Vuoi rispettare l&amp;rsquo;Open/Closed Principle: estendere il comportamento senza modificare il codice esistente.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="vantaggi" class="no-underline "&gt;
	&lt;a href="#vantaggi"&gt;
		VANTAGGI
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Possibilità di aggiungere nuovi algoritmi senza modificare il codice principale.&lt;/li&gt;
&lt;li&gt;Migliora leggibilità eliminando &lt;code&gt;if/switch&lt;/code&gt; complessi.&lt;/li&gt;
&lt;li&gt;Promuove la composizione invece dell&amp;rsquo;ereditarietà.&lt;/li&gt;
&lt;li&gt;Algoritmi intercambiabili a runtime.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="potenziali-svantaggi" class="no-underline "&gt;
	&lt;a href="#potenziali-svantaggi"&gt;
		POTENZIALI SVANTAGGI
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Aumenta il numero di classi/funzioni (una per strategia).&lt;/li&gt;
&lt;li&gt;Il contesto deve conoscere l&amp;rsquo;interfaccia comune.&lt;/li&gt;
&lt;li&gt;Più complesso rispetto a una semplice funzione inline per problemi banali.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="codice" class="no-underline "&gt;
	&lt;a href="#codice"&gt;
		CODICE
	&lt;/a&gt;
&lt;/h2&gt;


&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Strategy astratta comune
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;Strategy&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;esegui&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;: &lt;span class="kt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;: &lt;span class="kt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Strategy concrete
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;StrategiaAddizione&lt;/span&gt; &lt;span class="kr"&gt;implements&lt;/span&gt; &lt;span class="nx"&gt;Strategy&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;esegui&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;: &lt;span class="kt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;: &lt;span class="kt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;number&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Strategy concrete
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;StrategiaSottrazione&lt;/span&gt; &lt;span class="kr"&gt;implements&lt;/span&gt; &lt;span class="nx"&gt;Strategy&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;esegui&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;: &lt;span class="kt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;: &lt;span class="kt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;number&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Strategy concrete
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;StrategiaMoltiplicazione&lt;/span&gt; &lt;span class="kr"&gt;implements&lt;/span&gt; &lt;span class="nx"&gt;Strategy&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;esegui&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;: &lt;span class="kt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;: &lt;span class="kt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;number&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * STRATEGY
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Classe che utilizza una strategia interna
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;Calcolatrice&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;private&lt;/span&gt; &lt;span class="nx"&gt;StrategiaCalcolo&lt;/span&gt;: &lt;span class="kt"&gt;Strategy&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;strategia&lt;/span&gt;: &lt;span class="kt"&gt;Strategy&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;StrategiaCalcolo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;strategia&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;setStrategia&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;strategia&lt;/span&gt;: &lt;span class="kt"&gt;Strategy&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;StrategiaCalcolo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;strategia&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;eseguiStrategia&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;: &lt;span class="kt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;: &lt;span class="kt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;number&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;StrategiaCalcolo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;esegui&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// USO STRATEGY
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;calcolatrice&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Calcolatrice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;StrategiaAddizione&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Risultato:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;calcolatrice&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;eseguiStrategia&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;calcolatrice&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setStrategia&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;StrategiaSottrazione&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Risultato:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;calcolatrice&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;eseguiStrategia&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;calcolatrice&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setStrategia&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;StrategiaMoltiplicazione&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Risultato:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;calcolatrice&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;eseguiStrategia&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Corso C - lezione 24 - esercizi sulle stringhe</title><link>https://bacarotech.github.io/blog/2026/corso-c---lezione-24---esercizi-sulle-stringhe/</link><pubDate>Wed, 25 Feb 2026 14:01:06 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/corso-c---lezione-24---esercizi-sulle-stringhe/</guid><description>&lt;h2 id="lezione-24---esercizi-sulle-stringhec" class="no-underline "&gt;
	&lt;a href="#lezione-24---esercizi-sulle-stringhec"&gt;
		lezione 24 - esercizi sulle stringhe.c
	&lt;/a&gt;
&lt;/h2&gt;


&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Corso C - lezione 23 - stringhe</title><link>https://bacarotech.github.io/blog/2026/corso-c---lezione-23---stringhe/</link><pubDate>Wed, 25 Feb 2026 14:01:05 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/corso-c---lezione-23---stringhe/</guid><description>&lt;h1 id="string-in-c" class="no-underline "&gt;
	&lt;a href="#string-in-c"&gt;
		STRING IN C
	&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;Nel linguaggio C, le stringhe non sono un tipo di dato primitivo, ma vengono rappresentate come array di caratteri terminati da un carattere speciale che indica la fine della sequenza.&lt;/p&gt;
&lt;h2 id="cosa-sono" class="no-underline "&gt;
	&lt;a href="#cosa-sono"&gt;
		COSA SONO?
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Una stringa è una sequenza di caratteri memorizzata in memoria in modo contiguo. La sua particolarità è la presenza di un terminatore finale che segnala dove la stringa finisce, permettendo alle funzioni di riconoscerne la lunghezza.&lt;/p&gt;</description></item><item><title>Corso C - lezione 22 - esercizi matrici</title><link>https://bacarotech.github.io/blog/2026/corso-c---lezione-22---esercizi-matrici/</link><pubDate>Wed, 25 Feb 2026 14:01:04 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/corso-c---lezione-22---esercizi-matrici/</guid><description>&lt;h1 id="esercizi-sulle-matrici" class="no-underline "&gt;
	&lt;a href="#esercizi-sulle-matrici"&gt;
		ESERCIZI SULLE MATRICI
	&lt;/a&gt;
&lt;/h1&gt;
&lt;h2 id="es-1" class="no-underline "&gt;
	&lt;a href="#es-1"&gt;
		ES 1
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Disegno di una scacchiera su una matrice di char&lt;/p&gt;
&lt;h2 id="es-2" class="no-underline "&gt;
	&lt;a href="#es-2"&gt;
		ES 2
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Calcolo della diagonale maggiore&lt;/p&gt;
&lt;h2 id="es-3" class="no-underline "&gt;
	&lt;a href="#es-3"&gt;
		ES 3
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Calcolo della diagonale minore&lt;/p&gt;


&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;//es 1: disegno di una scacchiera su una matrice di char
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;disegno&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;M&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;M&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sc"&gt;&amp;#39;+&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;M&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sc"&gt;&amp;#39;-&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;stampa&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;M&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;%c &amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;M&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;//es 2: calcolo della diagonale maggiore
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;somma_DM&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;M&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;somma&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;somma&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;somma&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;M&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;somma&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;//es 3: calcolo della diagonale minore
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;somma_dm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;M&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;somma&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;somma&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;somma&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;M&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;somma&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;M&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;13&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;scac&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;disegno&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scac&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;stampa&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scac&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;es2: %d&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;somma_DM&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;M&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;es3: %d&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;somma_dm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;M&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Corso C - lezione 21 - matrici</title><link>https://bacarotech.github.io/blog/2026/corso-c---lezione-21---matrici/</link><pubDate>Wed, 25 Feb 2026 14:01:03 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/corso-c---lezione-21---matrici/</guid><description>&lt;h1 id="matrici" class="no-underline "&gt;
	&lt;a href="#matrici"&gt;
		MATRICI
	&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;Nel linguaggio C, le matrici sono un’estensione degli array che permettono di organizzare i dati in più dimensioni, tipicamente in forma di tabella con righe e colonne.&lt;/p&gt;
&lt;h2 id="cosa-sono" class="no-underline "&gt;
	&lt;a href="#cosa-sono"&gt;
		COSA SONO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Una matrice è una struttura dati bidimensionale composta da elementi dello stesso tipo, disposti in righe e colonne. Ogni elemento è identificato da una coppia di indici che rappresentano la sua posizione.&lt;/p&gt;
&lt;h2 id="regole" class="no-underline "&gt;
	&lt;a href="#regole"&gt;
		REGOLE
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Le matrici in C hanno dimensioni fisse definite al momento della dichiarazione. Gli indici partono da zero per ogni dimensione, quindi sia righe che colonne seguono questa convenzione. È fondamentale rispettare i limiti per evitare accessi a memoria non validi.&lt;/p&gt;</description></item><item><title>Corso C - lezione 20 - esercizi array</title><link>https://bacarotech.github.io/blog/2026/corso-c---lezione-20---esercizi-array/</link><pubDate>Wed, 25 Feb 2026 14:01:02 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/corso-c---lezione-20---esercizi-array/</guid><description>&lt;h1 id="esercizi-sugli-array" class="no-underline "&gt;
	&lt;a href="#esercizi-sugli-array"&gt;
		ESERCIZI SUGLI ARRAY
	&lt;/a&gt;
&lt;/h1&gt;
&lt;h2 id="es-1" class="no-underline "&gt;
	&lt;a href="#es-1"&gt;
		ES 1
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Determinare se un array contiene solo numeri pari&lt;/p&gt;
&lt;h2 id="es-2" class="no-underline "&gt;
	&lt;a href="#es-2"&gt;
		ES 2
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Scrivere una funzione sub_mult che dato un array di interi v e un intero n, stampi solo i multipli di n&lt;/p&gt;
&lt;h2 id="es-3" class="no-underline "&gt;
	&lt;a href="#es-3"&gt;
		ES 3
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Scrivere una funzione cumulative_sum che dato un array di interi v, stampi un nuovo array di interi
contenente le somme cumulative per ogni elemento del vettore in input. Ovvero, in ogni posizione i
del nuovo array, dovrà essere la somma di tutti gli elementi in v fino alla posizione i (compresa).&lt;/p&gt;</description></item><item><title>Corso C - lezione 19 - array</title><link>https://bacarotech.github.io/blog/2026/corso-c---lezione-19---array/</link><pubDate>Wed, 25 Feb 2026 14:01:01 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/corso-c---lezione-19---array/</guid><description>&lt;h1 id="array" class="no-underline "&gt;
	&lt;a href="#array"&gt;
		ARRAY
	&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;Nel linguaggio C, gli array sono strutture dati che permettono di memorizzare più valori dello stesso tipo in una sequenza ordinata.&lt;/p&gt;
&lt;h2 id="cosa-sono" class="no-underline "&gt;
	&lt;a href="#cosa-sono"&gt;
		COSA SONO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Un array è una collezione di elementi omogenei, cioè tutti dello stesso tipo, memorizzati in posizioni di memoria contigue. Ogni elemento è accessibile tramite un indice che rappresenta la sua posizione.&lt;/p&gt;
&lt;h2 id="regole" class="no-underline "&gt;
	&lt;a href="#regole"&gt;
		REGOLE
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Gli array in C hanno una dimensione fissa definita al momento della dichiarazione e non può essere modificata successivamente. Gli indici partono da zero, quindi il primo elemento si trova sempre in posizione zero. È importante non accedere a posizioni fuori dai limiti, perché può causare errori gravi.&lt;/p&gt;</description></item><item><title>Corso C - lezione 18 - esercizi puntatori</title><link>https://bacarotech.github.io/blog/2026/corso-c---lezione-18---esercizi-puntatori/</link><pubDate>Wed, 25 Feb 2026 14:01:00 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/corso-c---lezione-18---esercizi-puntatori/</guid><description>&lt;h1 id="esercizi-sui-puntatori" class="no-underline "&gt;
	&lt;a href="#esercizi-sui-puntatori"&gt;
		ESERCIZI SUI PUNTATORI
	&lt;/a&gt;
&lt;/h1&gt;
&lt;h2 id="es-1" class="no-underline "&gt;
	&lt;a href="#es-1"&gt;
		ES 1
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Scrivi un programma in C che dichiari due variabili intere.
Implementa una funzione swap che prende in input due puntatori a intero e scambia i valori delle due variabili.&lt;/p&gt;
&lt;h2 id="es-2" class="no-underline "&gt;
	&lt;a href="#es-2"&gt;
		ES 2
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Scrivi un programma che dichiari una funzione int quadrato(int x) che restituisce il quadrato di un numero.
Nel main, dichiara un puntatore a funzione e usalo per chiamare la funzione quadrato.&lt;/p&gt;</description></item><item><title>Corso C - lezione 17 - puntatori</title><link>https://bacarotech.github.io/blog/2026/corso-c---lezione-17---puntatori/</link><pubDate>Wed, 25 Feb 2026 14:00:59 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/corso-c---lezione-17---puntatori/</guid><description>&lt;h1 id="puntatori" class="no-underline "&gt;
	&lt;a href="#puntatori"&gt;
		PUNTATORI
	&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;Nel linguaggio C, i puntatori sono uno degli strumenti più potenti e caratteristici. Permettono di lavorare direttamente con la memoria, offrendo un controllo molto preciso sul comportamento del programma.&lt;/p&gt;
&lt;h2 id="cosa-sono" class="no-underline "&gt;
	&lt;a href="#cosa-sono"&gt;
		COSA SONO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Un puntatore è una variabile che contiene l’indirizzo di memoria di un’altra variabile. Invece di memorizzare direttamente un valore, “punta” alla posizione in cui quel valore è salvato.&lt;/p&gt;
&lt;h2 id="come-si-scrivono" class="no-underline "&gt;
	&lt;a href="#come-si-scrivono"&gt;
		COME SI SCRIVONO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Un puntatore viene dichiarato specificando il tipo di dato a cui fa riferimento e un simbolo che indica che si tratta di un indirizzo. Questo tipo deve essere coerente con il dato a cui il puntatore si riferisce.&lt;/p&gt;</description></item><item><title>Corso C - lezione 16 - esercizi funzioni</title><link>https://bacarotech.github.io/blog/2026/corso-c---lezione-16---esercizi-funzioni/</link><pubDate>Wed, 25 Feb 2026 14:00:58 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/corso-c---lezione-16---esercizi-funzioni/</guid><description>&lt;h1 id="esercizi-sulle-funzioni" class="no-underline "&gt;
	&lt;a href="#esercizi-sulle-funzioni"&gt;
		ESERCIZI SULLE FUNZIONI
	&lt;/a&gt;
&lt;/h1&gt;
&lt;h2 id="es-1" class="no-underline "&gt;
	&lt;a href="#es-1"&gt;
		ES 1
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Scrivi una funzione area_rettangolo(base, altezza) che restituisca l’area di un rettangolo.
Poi chiedi all’utente i valori di base e altezza e stampa il risultato.&lt;/p&gt;
&lt;h2 id="es-2" class="no-underline "&gt;
	&lt;a href="#es-2"&gt;
		ES 2
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Scrivi una funzione pari_o_dispari(n) che ritorni
la valore 1 se il numero è pari e 0 se il numero è dispari.&lt;/p&gt;
&lt;h2 id="es-3" class="no-underline "&gt;
	&lt;a href="#es-3"&gt;
		ES 3
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Scrivi una funzione calcola(a, b, operatore) che prenda due numeri e una carattere che rappresenta
l’operazione (&amp;rsquo;+&amp;rsquo;, &amp;lsquo;-&amp;rsquo;, &amp;lsquo;*&amp;rsquo;, &amp;lsquo;/&amp;rsquo;). La funzione deve restituire il risultato dell’operazione.
Poi crea un programma che chieda i due numeri e l’operatore all’utente e mostri il risultato.&lt;/p&gt;</description></item><item><title>Corso C - lezione 15 - funzioni</title><link>https://bacarotech.github.io/blog/2026/corso-c---lezione-15---funzioni/</link><pubDate>Wed, 25 Feb 2026 14:00:57 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/corso-c---lezione-15---funzioni/</guid><description>&lt;h1 id="funzioni" class="no-underline "&gt;
	&lt;a href="#funzioni"&gt;
		FUNZIONI
	&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;Nel linguaggio C, le funzioni sono blocchi di codice riutilizzabili progettati per svolgere un compito specifico. Permettono di suddividere un programma in parti più piccole, migliorandone organizzazione e leggibilità.&lt;/p&gt;
&lt;h2 id="cosa-sono" class="no-underline "&gt;
	&lt;a href="#cosa-sono"&gt;
		COSA SONO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Una funzione è una sequenza di istruzioni identificata da un nome, che può essere eseguita ogni volta che viene richiamata. Può ricevere dei dati in ingresso e, opzionalmente, restituire un risultato.&lt;/p&gt;
&lt;h2 id="come-si-scrivono" class="no-underline "&gt;
	&lt;a href="#come-si-scrivono"&gt;
		COME SI SCRIVONO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Una funzione in C è definita specificando un tipo di ritorno, un nome e un insieme di parametri. Il suo corpo contiene le istruzioni da eseguire. Questa struttura permette di isolare una logica precisa dal resto del programma.&lt;/p&gt;</description></item><item><title>Corso C - lezione 14 - confronto tra for, while e do while</title><link>https://bacarotech.github.io/blog/2026/corso-c---lezione-14---confronto-tra-for-while-e-do-while/</link><pubDate>Wed, 25 Feb 2026 14:00:56 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/corso-c---lezione-14---confronto-tra-for-while-e-do-while/</guid><description>&lt;h1 id="confronto-for-while-e-do-while" class="no-underline "&gt;
	&lt;a href="#confronto-for-while-e-do-while"&gt;
		CONFRONTO FOR, WHILE E DO WHILE
	&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;Nel linguaggio C, i cicli for, while e do while servono tutti a ripetere un blocco di codice, ma si differenziano per struttura e modalità di utilizzo.&lt;/p&gt;
&lt;h2 id="ciclo-for" class="no-underline "&gt;
	&lt;a href="#ciclo-for"&gt;
		CICLO FOR
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Il ciclo for è ideale quando si conosce in anticipo il numero di iterazioni da eseguire, perché racchiude inizializzazione, condizione e aggiornamento in un’unica struttura compatta.&lt;/p&gt;
&lt;h2 id="ciclo-while" class="no-underline "&gt;
	&lt;a href="#ciclo-while"&gt;
		CICLO WHILE
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Il ciclo while è più flessibile ed è utilizzato quando il numero di iterazioni non è noto a priori, ma dipende da una condizione che viene valutata prima di ogni esecuzione del ciclo.&lt;/p&gt;</description></item><item><title>Corso C - lezione 13 - esercizi while e do while</title><link>https://bacarotech.github.io/blog/2026/corso-c---lezione-13---esercizi-while-e-do-while/</link><pubDate>Wed, 25 Feb 2026 14:00:55 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/corso-c---lezione-13---esercizi-while-e-do-while/</guid><description>&lt;h1 id="esercizi-sui-while-e-do-while" class="no-underline "&gt;
	&lt;a href="#esercizi-sui-while-e-do-while"&gt;
		ESERCIZI SUI WHILE E DO WHILE
	&lt;/a&gt;
&lt;/h1&gt;
&lt;h1 id="es-1" class="no-underline "&gt;
	&lt;a href="#es-1"&gt;
		ES 1
	&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;Scrivi un programma che chieda all’utente un numero intero positivo e stampi a video un conto alla rovescia fino a 0.&lt;/p&gt;
&lt;h1 id="es-2" class="no-underline "&gt;
	&lt;a href="#es-2"&gt;
		ES 2
	&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;Chiedi all’utente di inserire numeri interi. Il programma continua a chiedere numeri fino a quando l’utente inserisce 0.
Alla fine stampa la somma di tutti i numeri inseriti (escluso lo zero).&lt;/p&gt;</description></item><item><title>Corso C - lezione 12 - while e do while</title><link>https://bacarotech.github.io/blog/2026/corso-c---lezione-12---while-e-do-while/</link><pubDate>Wed, 25 Feb 2026 14:00:54 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/corso-c---lezione-12---while-e-do-while/</guid><description>&lt;h1 id="cicli-while" class="no-underline "&gt;
	&lt;a href="#cicli-while"&gt;
		CICLI WHILE
	&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;Nel linguaggio C, i cicli while sono strutture iterative che permettono di eseguire un blocco di codice finché una determinata condizione rimane vera.&lt;/p&gt;
&lt;h2 id="cosa-sono" class="no-underline "&gt;
	&lt;a href="#cosa-sono"&gt;
		COSA SONO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;I while sono cicli “a controllo iniziale”, ovvero valutano la condizione prima di ogni iterazione. Se la condizione è vera, il ciclo continua; se è falsa, il ciclo termina.&lt;/p&gt;
&lt;h2 id="come-si-scrivono" class="no-underline "&gt;
	&lt;a href="#come-si-scrivono"&gt;
		COME SI SCRIVONO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;La struttura di un while prevede una condizione logica e un blocco di istruzioni associato. Il programma verifica la condizione e, se soddisfatta, esegue il blocco, ripetendo il processo fino a quando la condizione non diventa falsa.&lt;/p&gt;</description></item><item><title>Corso C - lezione 11 - esercizi for</title><link>https://bacarotech.github.io/blog/2026/corso-c---lezione-11---esercizi-for/</link><pubDate>Wed, 25 Feb 2026 14:00:53 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/corso-c---lezione-11---esercizi-for/</guid><description>&lt;h1 id="esercizi-for" class="no-underline "&gt;
	&lt;a href="#esercizi-for"&gt;
		ESERCIZI FOR
	&lt;/a&gt;
&lt;/h1&gt;
&lt;h2 id="es-1" class="no-underline "&gt;
	&lt;a href="#es-1"&gt;
		ES 1
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Scrivi un programma che stampi i numeri da 10 a 1 in ordine decrescente utilizzando un ciclo for.&lt;/p&gt;
&lt;h2 id="es-2" class="no-underline "&gt;
	&lt;a href="#es-2"&gt;
		ES 2
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Calcola la somma di tutti i numeri pari da 1 a 100 usando un ciclo for.&lt;/p&gt;
&lt;h2 id="es-3" class="no-underline "&gt;
	&lt;a href="#es-3"&gt;
		ES 3
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Chiedi all’utente un numero n e stampa la sua tabellina fino a n × 10.&lt;/p&gt;
&lt;h2 id="soluzioni" class="no-underline "&gt;
	&lt;a href="#soluzioni"&gt;
		SOLUZIONI
	&lt;/a&gt;
&lt;/h2&gt;


&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; ES 1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; Scrivi un programma che stampi i numeri da 10 a 1 in ordine decrescente utilizzando un ciclo for.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;start&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;end&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;start&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;%d &amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; ES 2
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; Calcola la somma di tutti i numeri pari da 1 a 100 usando un ciclo for.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;somma&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;start&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;end&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;start&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//all&amp;#39;interno di somma ci metto il vecchio valore + l&amp;#39;elemento di ciclo(dipende dallo step)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;somma&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;somma&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;%d&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;somma&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; ES 3
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; Chiedi all’utente un numero n e stampa la sua tabellina fino a n × 10.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;valore&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;inserisci valore del quale si vuole calcolare la tabellina&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;scanf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;%d&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;valore&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;%d x %d = %d&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;valore&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;valore&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Corso C - lezione 10 - for</title><link>https://bacarotech.github.io/blog/2026/corso-c---lezione-10---for/</link><pubDate>Wed, 25 Feb 2026 14:00:52 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/corso-c---lezione-10---for/</guid><description>&lt;h1 id="for" class="no-underline "&gt;
	&lt;a href="#for"&gt;
		FOR
	&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;Nel linguaggio C, il ciclo for è una struttura iterativa che permette di eseguire un blocco di istruzioni più volte, in modo controllato.&lt;/p&gt;
&lt;h2 id="cosa-sono" class="no-underline "&gt;
	&lt;a href="#cosa-sono"&gt;
		COSA SONO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;I for sono costrutti utilizzati per ripetere una sequenza di operazioni per un numero definito di volte. Sono particolarmente adatti quando si conosce in anticipo quante iterazioni devono essere eseguite.&lt;/p&gt;
&lt;h2 id="perchè-servono" class="no-underline "&gt;
	&lt;a href="#perch%c3%a8-servono"&gt;
		PERCHÈ SERVONO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Servono per automatizzare operazioni ripetitive, evitando di scrivere più volte lo stesso codice. Sono molto utilizzati, ad esempio, per scorrere sequenze di dati, eseguire calcoli ripetuti o iterare su strutture come array.&lt;/p&gt;</description></item><item><title>Corso C - lezione 9 - esercizi switch</title><link>https://bacarotech.github.io/blog/2026/corso-c---lezione-9---esercizi-switch/</link><pubDate>Wed, 25 Feb 2026 14:00:51 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/corso-c---lezione-9---esercizi-switch/</guid><description>&lt;h1 id="esercizi-switch" class="no-underline "&gt;
	&lt;a href="#esercizi-switch"&gt;
		ESERCIZI SWITCH
	&lt;/a&gt;
&lt;/h1&gt;
&lt;h2 id="es-1" class="no-underline "&gt;
	&lt;a href="#es-1"&gt;
		ES 1
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Scrivi un programma che, dato un numero da 1 a 7, stampi il nome del giorno corrispondente.
1 → Lunedì
2 → Martedì
…
7 → Domenica&lt;/p&gt;
&lt;h2 id="es-2" class="no-underline "&gt;
	&lt;a href="#es-2"&gt;
		ES 2
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Scrivi un programma che, dato un voto scolastico da 1 a 10, stampi il giudizio:
1–4 → &amp;ldquo;Insufficiente&amp;rdquo;
5 → &amp;ldquo;Mediocre&amp;rdquo;
6 → &amp;ldquo;Sufficiente&amp;rdquo;
7–8 → &amp;ldquo;Buono&amp;rdquo;
9–10 → &amp;ldquo;Ottimo&amp;rdquo;&lt;/p&gt;</description></item><item><title>Corso C - lezione 8 - switch</title><link>https://bacarotech.github.io/blog/2026/corso-c---lezione-8---switch/</link><pubDate>Wed, 25 Feb 2026 14:00:50 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/corso-c---lezione-8---switch/</guid><description>&lt;h1 id="switch" class="no-underline "&gt;
	&lt;a href="#switch"&gt;
		SWITCH
	&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;Nel linguaggio C, lo switch è una struttura di controllo che permette di selezionare tra diversi blocchi di codice in base al valore di una variabile o espressione.&lt;/p&gt;
&lt;h2 id="cosa-sono" class="no-underline "&gt;
	&lt;a href="#cosa-sono"&gt;
		COSA SONO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Gli switch sono costrutti decisionali alternativi agli if, pensati per gestire in modo più ordinato situazioni in cui una variabile può assumere diversi valori distinti. Ogni possibile valore corrisponde a un ramo specifico del programma.&lt;/p&gt;</description></item><item><title>Corso C - lezione 7 - esercizi sulle tabelle di verita</title><link>https://bacarotech.github.io/blog/2026/corso-c---lezione-7---esercizi-sulle-tabelle-di-verita/</link><pubDate>Wed, 25 Feb 2026 14:00:49 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/corso-c---lezione-7---esercizi-sulle-tabelle-di-verita/</guid><description>&lt;h1 id="esercizi-sulle-tabelle-di-verita" class="no-underline "&gt;
	&lt;a href="#esercizi-sulle-tabelle-di-verita"&gt;
		ESERCIZI SULLE TABELLE DI VERITA'
	&lt;/a&gt;
&lt;/h1&gt;
&lt;h2 id="es-1" class="no-underline "&gt;
	&lt;a href="#es-1"&gt;
		ES 1
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Un utente può entrare in una stanza solo se ha la chiave e conosce il codice di sicurezza.
Usare l’operatore AND per determinare se l’accesso è consentito.&lt;/p&gt;
&lt;h2 id="es-2" class="no-underline "&gt;
	&lt;a href="#es-2"&gt;
		ES 2
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Una persona può guidare un’auto se ha la patente oppure è accompagnata da un istruttore.
Usare OR per stabilire se può guidare.&lt;/p&gt;
&lt;h2 id="es-3" class="no-underline "&gt;
	&lt;a href="#es-3"&gt;
		ES 3
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Un allarme deve scattare solo se la finestra è aperta e non c’è una persona autorizzata in casa.
Usare NOT e AND.&lt;/p&gt;</description></item><item><title>Corso C - lezione 6 - tabelle di verita</title><link>https://bacarotech.github.io/blog/2026/corso-c---lezione-6---tabelle-di-verita/</link><pubDate>Wed, 25 Feb 2026 14:00:48 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/corso-c---lezione-6---tabelle-di-verita/</guid><description>&lt;h1 id="tabelle-di-verita" class="no-underline "&gt;
	&lt;a href="#tabelle-di-verita"&gt;
		TABELLE DI VERITA
	&lt;/a&gt;
&lt;/h1&gt;
&lt;h2 id="not" class="no-underline "&gt;
	&lt;a href="#not"&gt;
		NOT
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Nel linguaggio C, l’operatore NOT serve per invertire il valore di una condizione booleana. È un operatore unario, quindi agisce su una sola espressione. Il simbolo utilizzato per rappresentare il NOT in C è il punto esclamativo. Viene posto prima della condizione che si vuole invertire.&lt;/p&gt;
&lt;p&gt;!
1 -&amp;gt; 0
0 -&amp;gt; 1&lt;/p&gt;
&lt;h2 id="and" class="no-underline "&gt;
	&lt;a href="#and"&gt;
		AND
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Nel linguaggio C, l’operatore AND viene utilizzato per combinare due o più condizioni booleane. Il risultato è vero solo se tutte le condizioni coinvolte sono vere. L’AND lavora confrontando almeno due condizioni. Queste condizioni vengono valutate insieme per determinare un unico risultato logico. Il simbolo utilizzato per rappresentare l’AND in C è la doppia e commerciale. Serve per collegare più condizioni all’interno di un’unica espressione.&lt;/p&gt;</description></item><item><title>Corso C - lezione 5 - esercizi if else</title><link>https://bacarotech.github.io/blog/2026/corso-c---lezione-5---esercizi-if-else/</link><pubDate>Wed, 25 Feb 2026 14:00:47 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/corso-c---lezione-5---esercizi-if-else/</guid><description>&lt;h1 id="esercizi-sugli-if" class="no-underline "&gt;
	&lt;a href="#esercizi-sugli-if"&gt;
		ESERCIZI SUGLI IF
	&lt;/a&gt;
&lt;/h1&gt;
&lt;h2 id="es-1" class="no-underline "&gt;
	&lt;a href="#es-1"&gt;
		ES 1
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Utilizzare una struttura if per determinare se un numero è positivo, negativo o zero.&lt;/p&gt;
&lt;h2 id="es-2" class="no-underline "&gt;
	&lt;a href="#es-2"&gt;
		ES 2
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Confrontare due numeri interi e stampare il maggiore.&lt;/p&gt;
&lt;h2 id="es-3" class="no-underline "&gt;
	&lt;a href="#es-3"&gt;
		ES 3
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Controllare se un voto è valido (0–30) e determinare se è sufficiente (≥18).&lt;/p&gt;
&lt;h2 id="soluzioni" class="no-underline "&gt;
	&lt;a href="#soluzioni"&gt;
		SOLUZIONI
	&lt;/a&gt;
&lt;/h2&gt;


&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; es 1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; Utilizzare una struttura if per determinare se un numero è positivo, negativo o zero.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// v1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/*int val = -1;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; if(val &amp;gt; 0){
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; printf(&amp;#34;positivo&amp;#34;);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; }else{
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; if(val &amp;lt; 0){
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; printf(&amp;#34;negativo&amp;#34;);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; }else{
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; printf(&amp;#34;zero&amp;#34;);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; }*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// v2
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;val&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;val&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;positivo&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;val&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;negativo&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;zero&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; es 2
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; Confrontare due numeri interi e stampare il maggiore.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;v1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;v2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v1&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;v2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;max: %d&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;max: %d&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; es 3
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; Controllare se un voto è valido (0–30) e determinare se è sufficiente (≥18).
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;voto&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// 0 &amp;lt;= 60 &amp;lt;= 30 -&amp;gt; no
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// 0 &amp;lt;= 60 &amp;lt;= 30 -&amp;gt; 0 &amp;lt;= 60 e 60 &amp;lt;= 30
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="n"&gt;voto&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;voto&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;valido&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;voto&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;sufficiente&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;insufficiente&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;non valido&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Corso C - lezione 4 - if else</title><link>https://bacarotech.github.io/blog/2026/corso-c---lezione-4---if-else/</link><pubDate>Wed, 25 Feb 2026 14:00:46 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/corso-c---lezione-4---if-else/</guid><description>&lt;h1 id="if" class="no-underline "&gt;
	&lt;a href="#if"&gt;
		IF
	&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;Nel linguaggio C, le istruzioni condizionali permettono di controllare il flusso del programma in base a determinate condizioni. L’istruzione più comune per questo scopo è l’if, che consente di eseguire porzioni di codice solo quando una certa condizione risulta vera.&lt;/p&gt;
&lt;h2 id="cosa-sono" class="no-underline "&gt;
	&lt;a href="#cosa-sono"&gt;
		COSA SONO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Gli if sono costrutti decisionali che valutano un’espressione logica. Se il risultato della valutazione è vero, il programma esegue un certo blocco di istruzioni; in caso contrario, quel blocco viene saltato.&lt;/p&gt;</description></item><item><title>Corso C - lezione 3 - esercizi variabili</title><link>https://bacarotech.github.io/blog/2026/corso-c---lezione-3---esercizi-variabili/</link><pubDate>Wed, 25 Feb 2026 14:00:45 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/corso-c---lezione-3---esercizi-variabili/</guid><description>&lt;h1 id="esercizi-sui-tipi" class="no-underline "&gt;
	&lt;a href="#esercizi-sui-tipi"&gt;
		ESERCIZI SUI TIPI
	&lt;/a&gt;
&lt;/h1&gt;
&lt;h2 id="es1" class="no-underline "&gt;
	&lt;a href="#es1"&gt;
		ES1
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Dichiarare due variabili intere, assegnare loro un valore e stampare la loro somma.&lt;/p&gt;
&lt;h2 id="es2" class="no-underline "&gt;
	&lt;a href="#es2"&gt;
		ES2
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Usare variabili float per calcolare area e perimetro di un rettangolo.&lt;/p&gt;
&lt;h2 id="es3" class="no-underline "&gt;
	&lt;a href="#es3"&gt;
		ES3
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Scambiare i valori di due variabili intere utilizzando una variabile temporanea.&lt;/p&gt;
&lt;h2 id="soluzioni" class="no-underline "&gt;
	&lt;a href="#soluzioni"&gt;
		SOLUZIONI
	&lt;/a&gt;
&lt;/h2&gt;


&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;stdbool.h&amp;gt; // Per il tipo bool(non nativo di C, in caso si possono usare gli interi)&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// commento di singola riga
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; commento su più righe
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; es1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; Dichiarare due variabili intere, assegnare loro un valore e stampare la loro somma.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;A&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;B&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;somma&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;A&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;B&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;la somma è: %d&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;somma&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; es2
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; Usare variabili float per calcolare area e perimetro di un rettangolo.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;float&lt;/span&gt; &lt;span class="n"&gt;B&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;float&lt;/span&gt; &lt;span class="n"&gt;H&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;inserisci base: &amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;scanf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;%f&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;B&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;inserisci altezza: &amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;scanf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;%f&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;H&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;float&lt;/span&gt; &lt;span class="n"&gt;P&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;B&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;H&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;float&lt;/span&gt; &lt;span class="n"&gt;A&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;B&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;H&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;P: %f&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;P&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;A: %f&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;A&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; es3
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; Scambiare i valori di due variabili intere utilizzando una variabile temporanea.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;v1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;v2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;backup&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;prima: %d %d&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;backup&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;v1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;v2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;backup&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;dopo: %d %d&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Corso C - lezione 2 - tipi</title><link>https://bacarotech.github.io/blog/2026/corso-c---lezione-2---tipi/</link><pubDate>Wed, 25 Feb 2026 14:00:44 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/corso-c---lezione-2---tipi/</guid><description>&lt;h1 id="tipi" class="no-underline "&gt;
	&lt;a href="#tipi"&gt;
		TIPI
	&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;Nel linguaggio C, i tipi di dato definiscono la natura delle informazioni che una variabile può contenere. Sono fondamentali perché permettono al compilatore di sapere come interpretare i dati e quanta memoria allocare.&lt;/p&gt;
&lt;h2 id="quanti-sono" class="no-underline "&gt;
	&lt;a href="#quanti-sono"&gt;
		QUANTI SONO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;In C esistono diversi tipi di dato primitivi, come numeri interi, numeri con virgola, caratteri e valori booleani (anche se questi ultimi non sono nativi nelle versioni più vecchie). Ogni tipo ha caratteristiche specifiche in termini di dimensione e utilizzo.&lt;/p&gt;</description></item><item><title>Corso C - lezione 1 - variabili</title><link>https://bacarotech.github.io/blog/2026/corso-c---lezione-1---variabili/</link><pubDate>Wed, 25 Feb 2026 14:00:43 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/corso-c---lezione-1---variabili/</guid><description>&lt;h1 id="variabili" class="no-underline "&gt;
	&lt;a href="#variabili"&gt;
		VARIABILI
	&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;Nel linguaggio C, le variabili rappresentano delle porzioni di memoria che vengono utilizzate per memorizzare dati durante l’esecuzione di un programma. Sono uno degli elementi fondamentali della programmazione, perché permettono di salvare informazioni, modificarle e riutilizzarle nel tempo.&lt;/p&gt;
&lt;h2 id="cosa-sono-le-variabili" class="no-underline "&gt;
	&lt;a href="#cosa-sono-le-variabili"&gt;
		COSA SONO LE VARIABILI
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Una variabile è essenzialmente un contenitore con un nome (identificatore) e un tipo. Il tipo definisce che tipo di dato può contenere (ad esempio numeri interi, numeri decimali o caratteri), mentre il nome serve per poterla richiamare all’interno del programma.&lt;/p&gt;</description></item><item><title>CodingLeetCode - 2798 - Number of Employees Who Met the Target</title><link>https://bacarotech.github.io/blog/2026/codingleetcode---2798---number-of-employees-who-met-the-target/</link><pubDate>Wed, 25 Feb 2026 14:00:42 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/codingleetcode---2798---number-of-employees-who-met-the-target/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;You are given an array hours representing the working hours of employees and an integer target.
Return the number of employees who worked at least target hours.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Possiamo risolvere questo problema contando semplicemente quanti valori soddisfano la condizione, come nel codice proposto.&lt;/p&gt;
&lt;p&gt;L’idea chiave è:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;inizializziamo un contatore a 0&lt;/li&gt;
&lt;li&gt;scorriamo l’array hours elemento per elemento&lt;/li&gt;
&lt;li&gt;per ogni valore controlliamo se è maggiore o uguale al target&lt;/li&gt;
&lt;li&gt;se la condizione è vera, incrementiamo il contatore&lt;/li&gt;
&lt;li&gt;al termine restituiamo il numero totale di elementi validi&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Questo approccio permette di ottenere una complessità O(n), dove n è la lunghezza dell’array, ed è ottimale perché richiede una sola scansione senza strutture dati aggiuntive.&lt;/p&gt;</description></item><item><title>CodingLeetCode - 2399 - Check Distances Between Same Letters</title><link>https://bacarotech.github.io/blog/2026/codingleetcode---2399---check-distances-between-same-letters/</link><pubDate>Wed, 25 Feb 2026 14:00:41 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/codingleetcode---2399---check-distances-between-same-letters/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;You are given a string s consisting of lowercase English letters and an integer array distance of length 26.
For every letter from &amp;lsquo;a&amp;rsquo; to &amp;lsquo;z&amp;rsquo;, if it appears twice in s, the distance between its two occurrences must be equal to distance[i].
Return true if all distances match, otherwise return false.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Possiamo risolvere questo problema calcolando la distanza tra le due occorrenze di ogni carattere, come nei due codici proposti.&lt;/p&gt;</description></item><item><title>CodingLeetCode - 2011 - Final Value of Variable After Performing Operations</title><link>https://bacarotech.github.io/blog/2026/codingleetcode---2011---final-value-of-variable-after-performing-operations/</link><pubDate>Wed, 25 Feb 2026 14:00:40 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/codingleetcode---2011---final-value-of-variable-after-performing-operations/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;There is a programming language with only four operations: ++X, X++, &amp;ndash;X, X&amp;ndash;.
Given an array of strings operations, return the final value of X after performing all the operations starting from X = 0.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Possiamo risolvere questo problema simulando direttamente l’esecuzione delle operazioni, come nel codice proposto.&lt;/p&gt;
&lt;p&gt;L’idea chiave è:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;inizializziamo una variabile value a 0&lt;/li&gt;
&lt;li&gt;scorriamo l’array di operazioni una per una&lt;/li&gt;
&lt;li&gt;se l’operazione è incremento (++X o X++), aumentiamo il valore di 1&lt;/li&gt;
&lt;li&gt;altrimenti, per le operazioni di decremento (&amp;ndash;X o X&amp;ndash;), diminuiamo il valore di 1&lt;/li&gt;
&lt;li&gt;continuiamo fino alla fine dell’array&lt;/li&gt;
&lt;li&gt;restituiamo il valore finale&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Questo approccio permette di ottenere una complessità O(n), dove n è il numero di operazioni, ed è efficiente perché simula direttamente il comportamento richiesto senza strutture dati aggiuntive o trasformazioni intermedie.&lt;/p&gt;</description></item><item><title>CodingLeetCode - 1672 - Richest Customer Wealth</title><link>https://bacarotech.github.io/blog/2026/codingleetcode---1672---richest-customer-wealth/</link><pubDate>Wed, 25 Feb 2026 14:00:39 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/codingleetcode---1672---richest-customer-wealth/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;You are given an m x n integer grid accounts where accounts[i][j] is the amount of money the i-th customer has in the j-th bank.
Return the wealth that the richest customer has.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Possiamo risolvere questo problema calcolando la somma di ogni riga della matrice, come nel codice proposto.&lt;/p&gt;
&lt;p&gt;L’idea chiave è:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ogni riga dell’array rappresenta un cliente&lt;/li&gt;
&lt;li&gt;ogni elemento della riga rappresenta il denaro in una banca&lt;/li&gt;
&lt;li&gt;per ogni cliente, calcoliamo la somma di tutti i suoi conti&lt;/li&gt;
&lt;li&gt;confrontiamo la somma ottenuta con il massimo attuale&lt;/li&gt;
&lt;li&gt;se la somma è maggiore, aggiorniamo il massimo&lt;/li&gt;
&lt;li&gt;alla fine restituiamo il valore massimo trovato&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Questo approccio permette di ottenere una complessità O(m × n), dove m è il numero di clienti e n il numero di conti per cliente. È una soluzione semplice e diretta, che scorre la matrice una sola volta senza strutture dati aggiuntive&lt;/p&gt;</description></item><item><title>CodingLeetCode - 1603 - Design Parking System</title><link>https://bacarotech.github.io/blog/2026/codingleetcode---1603---design-parking-system/</link><pubDate>Wed, 25 Feb 2026 14:00:38 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/codingleetcode---1603---design-parking-system/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Design a parking system for a parking lot.
The parking lot has three types of parking spaces: big, medium, and small.
Each type has a fixed number of slots.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Implement the ParkingSystem class:&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;ParkingSystem(int big, int medium, int small)
bool addCar(int carType)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Possiamo risolvere questo problema modellando direttamente lo stato del parcheggio, come nel codice proposto.&lt;/p&gt;
&lt;p&gt;L’idea chiave è:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;memorizziamo il numero di posti disponibili per ogni tipo di auto: big, medium, small&lt;/li&gt;
&lt;li&gt;nel costruttore inizializziamo la disponibilità di ciascuna categoria&lt;/li&gt;
&lt;li&gt;quando arriva una richiesta addCar(carType):
&lt;ul&gt;
&lt;li&gt;se il tipo è 1 (big) e c’è disponibilità, decrementiamo e ritorniamo true&lt;/li&gt;
&lt;li&gt;se il tipo è 2 (medium) e c’è disponibilità, decrementiamo e ritorniamo true&lt;/li&gt;
&lt;li&gt;se il tipo è 3 (small) e c’è disponibilità, decrementiamo e ritorniamo true&lt;/li&gt;
&lt;li&gt;se non c’è spazio disponibile per quel tipo, ritorniamo false&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Questo approccio permette di ottenere una complessità O(1) per ogni operazione, ed è efficiente perché rappresenta direttamente lo stato del sistema senza strutture dati aggiuntive o logica complessa.&lt;/p&gt;</description></item><item><title>CodingLeetCode - 1470 - Shuffle the Array</title><link>https://bacarotech.github.io/blog/2026/codingleetcode---1470---shuffle-the-array/</link><pubDate>Wed, 25 Feb 2026 14:00:37 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/codingleetcode---1470---shuffle-the-array/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Given the array nums consisting of 2n elements in the form [x1,x2,&amp;hellip;,xn,y1,y2,&amp;hellip;,yn].
Return the array in the form [x1,y1,x2,y2,&amp;hellip;,xn,yn].&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Possiamo risolvere questo problema intercalando gli elementi delle due metà dell’array, come nel codice proposto.&lt;/p&gt;
&lt;p&gt;L’idea chiave è:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;dividiamo logicamente l’array in due metà: la prima contiene gli elementi x, la seconda gli elementi y&lt;/li&gt;
&lt;li&gt;calcoliamo la metà della lunghezza dell’array&lt;/li&gt;
&lt;li&gt;scorriamo i primi n elementi&lt;/li&gt;
&lt;li&gt;per ogni indice i:
&lt;ul&gt;
&lt;li&gt;aggiungiamo nums[i] (parte sinistra)&lt;/li&gt;
&lt;li&gt;aggiungiamo nums[i + n] (parte destra)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;continuiamo fino a ricostruire l’array alternato&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Questo approccio permette di ottenere una complessità O(n), dove n è la metà della lunghezza dell’array, ed è efficiente perché costruisce direttamente il risultato senza passaggi aggiuntivi o riorganizzazioni intermedie.&lt;/p&gt;</description></item><item><title>CodingLeetCode - 1431 - Kids With the Greatest Number of Candies</title><link>https://bacarotech.github.io/blog/2026/codingleetcode---1431---kids-with-the-greatest-number-of-candies/</link><pubDate>Wed, 25 Feb 2026 14:00:36 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/codingleetcode---1431---kids-with-the-greatest-number-of-candies/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Given an array candies, where candies[i] represents the number of candies the i-th kid has, and an integer extraCandies.
Return a boolean array result, where result[i] is true if, after giving the i-th kid all the extraCandies, they will have the greatest number of candies among all kids.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Possiamo risolvere questo problema confrontando ogni bambino con il massimo attuale, come nel codice proposto.&lt;/p&gt;</description></item><item><title>CodingLeetCode - 1108 - Defanging an IP Address</title><link>https://bacarotech.github.io/blog/2026/codingleetcode---1108---defanging-an-ip-address/</link><pubDate>Wed, 25 Feb 2026 14:00:35 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/codingleetcode---1108---defanging-an-ip-address/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Given a valid (IPv4) IP address address, return a defanged version of that IP address.
defanged IP address replaces every period &amp;ldquo;.&amp;rdquo; with &amp;ldquo;[.]&amp;rdquo;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Possiamo risolvere questo problema dividendo l’indirizzo IP nelle sue componenti e ricostruendolo con la forma richiesta, come nel codice proposto.&lt;/p&gt;
&lt;p&gt;L’idea chiave è:&lt;/p&gt;
&lt;p&gt;dividiamo la stringa dell’IP utilizzando il punto come separatore
otteniamo così le quattro parti dell’indirizzo IPv4
ricostruiamo la stringa inserendo tra ogni parte la sequenza &amp;ldquo;[.]&amp;rdquo;
restituiamo il risultato finale&lt;/p&gt;</description></item><item><title>CodingLeetCode - 771 - Jewels and Stones</title><link>https://bacarotech.github.io/blog/2026/codingleetcode---771---jewels-and-stones/</link><pubDate>Wed, 25 Feb 2026 14:00:34 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/codingleetcode---771---jewels-and-stones/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;You&amp;rsquo;re given strings jewels representing the types of stones that are jewels, and stones representing the stones you have.
Each character in stones is a type of stone you have.
You want to know how many of the stones you have are also jewels.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Possiamo risolvere questo problema usando una struttura dati che ci permetta di verificare rapidamente se un carattere è un “jewel”, come nel codice proposto.&lt;/p&gt;</description></item><item><title>CodingLeetCode - 605 - Can Place Flowers</title><link>https://bacarotech.github.io/blog/2026/codingleetcode---605---can-place-flowers/</link><pubDate>Wed, 25 Feb 2026 14:00:33 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/codingleetcode---605---can-place-flowers/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;You have a long flowerbed in which some of the plots are planted, and some are not.
However, flowers cannot be planted in adjacent plots.
Given an integer array flowerbed containing 0&amp;rsquo;s and 1&amp;rsquo;s, where 0 means empty and 1 means planted, and an integer n, return true if n new flowers can be planted in the flowerbed without violating the no-adjacent-flowers rule.&lt;/p&gt;</description></item><item><title>CodingLeetCode - 345 - Reverse Vowels of a String</title><link>https://bacarotech.github.io/blog/2026/codingleetcode---345---reverse-vowels-of-a-string/</link><pubDate>Wed, 25 Feb 2026 14:00:32 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/codingleetcode---345---reverse-vowels-of-a-string/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Given a string s, reverse only all the vowels in the string and return it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Possiamo risolvere questo problema raccogliendo prima le vocali e poi reinserendole in ordine inverso, come nel codice proposto.&lt;/p&gt;
&lt;p&gt;L’idea chiave è:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;scorriamo la stringa da destra verso sinistra e salviamo tutte le vocali in un array&lt;/li&gt;
&lt;li&gt;in questo modo otteniamo già le vocali in ordine inverso&lt;/li&gt;
&lt;li&gt;scorriamo nuovamente la stringa da sinistra verso destra&lt;/li&gt;
&lt;li&gt;ogni volta che incontriamo una vocale, la sostituiamo con quella successiva nell’array delle vocali invertite&lt;/li&gt;
&lt;li&gt;utilizziamo una funzione di supporto per sostituire il carattere nella posizione corretta&lt;/li&gt;
&lt;li&gt;continuiamo fino a ricostruire tutta la stringa&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Questo approccio permette di ottenere una complessità O(n), ma utilizza memoria aggiuntiva e operazioni di slicing che creano nuove stringhe. Una soluzione più ottimale utilizza due puntatori (uno all’inizio e uno alla fine) e scambia direttamente le vocali senza creare strutture ausiliarie.&lt;/p&gt;</description></item><item><title>CodingLeetCode - 344 - Reverse String</title><link>https://bacarotech.github.io/blog/2026/codingleetcode---344---reverse-string/</link><pubDate>Wed, 25 Feb 2026 14:00:31 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/codingleetcode---344---reverse-string/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Write a function that reverses a string.
The input string is given as an array of characters s.
You must do this by modifying the input array in-place with O(1) extra memory.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Possiamo risolvere questo problema invertendo direttamente gli elementi dell’array, come nel codice proposto.&lt;/p&gt;
&lt;p&gt;L’idea chiave è:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;utilizziamo due puntatori: uno all’inizio e uno alla fine dell’array&lt;/li&gt;
&lt;li&gt;scorriamo solo metà dell’array&lt;/li&gt;
&lt;li&gt;ad ogni iterazione scambiamo gli elementi simmetrici&lt;/li&gt;
&lt;li&gt;utilizziamo una variabile temporanea per effettuare lo scambio&lt;/li&gt;
&lt;li&gt;continuiamo fino a raggiungere il centro dell’array&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Questo approccio permette di ottenere una complessità O(n) e spazio O(1), ed è ottimale perché modifica l’array direttamente senza utilizzare strutture dati aggiuntive.&lt;/p&gt;</description></item><item><title>CodingLeetCode - 283 - Move Zeroes</title><link>https://bacarotech.github.io/blog/2026/codingleetcode---283---move-zeroes/</link><pubDate>Wed, 25 Feb 2026 14:00:30 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/codingleetcode---283---move-zeroes/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Given an integer array nums, move all 0&amp;rsquo;s to the end of it while maintaining the relative order of the non-zero elements.
Note that you must do this in-place without making a copy of the array.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Possiamo risolvere questo problema rimuovendo gli zeri e aggiungendoli alla fine, come nel codice proposto.&lt;/p&gt;
&lt;p&gt;L’idea chiave è:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;scorriamo l’array elemento per elemento&lt;/li&gt;
&lt;li&gt;quando troviamo uno zero, lo rimuoviamo usando splice&lt;/li&gt;
&lt;li&gt;teniamo traccia del numero di zeri rimossi&lt;/li&gt;
&lt;li&gt;non incrementiamo l’indice dopo la rimozione, perché gli elementi si spostano&lt;/li&gt;
&lt;li&gt;se l’elemento non è zero, passiamo al successivo&lt;/li&gt;
&lt;li&gt;al termine della scansione, aggiungiamo tanti zeri quanti ne abbiamo rimossi&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Questo approccio permette di ottenere una soluzione corretta e mantiene l’ordine relativo degli elementi. Tuttavia, ha una complessità O(n²) a causa delle operazioni di splice, che spostano gli elementi dell’array: una soluzione più efficiente utilizza due puntatori e lavora in O(n) senza operazioni costose.&lt;/p&gt;</description></item><item><title>CodingLeetCode - 242 - Valid Anagram</title><link>https://bacarotech.github.io/blog/2026/codingleetcode---242---valid-anagram/</link><pubDate>Wed, 25 Feb 2026 14:00:29 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/codingleetcode---242---valid-anagram/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Given two strings s and t, return true if t is an anagram of s, and false otherwise.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Possiamo risolvere questo problema confrontando le versioni ordinate delle due stringhe, come nel codice proposto.&lt;/p&gt;
&lt;p&gt;L’idea chiave è:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;controlliamo subito se le due stringhe hanno lunghezze diverse&lt;/li&gt;
&lt;li&gt;se sì, non possono essere anagrammi&lt;/li&gt;
&lt;li&gt;convertiamo entrambe le stringhe in array di caratteri&lt;/li&gt;
&lt;li&gt;ordiniamo i due array&lt;/li&gt;
&lt;li&gt;confrontiamo i caratteri posizione per posizione&lt;/li&gt;
&lt;li&gt;se troviamo una differenza, le stringhe non sono anagrammi&lt;/li&gt;
&lt;li&gt;se tutti i caratteri coincidono, allora sono anagrammi&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Questo approccio permette di ottenere una complessità O(n log n) a causa dell’ordinamento. È una soluzione semplice e intuitiva, anche se non la più efficiente: si può migliorare utilizzando una struttura di conteggio delle frequenze per raggiungere una complessità O(n).&lt;/p&gt;</description></item><item><title>CodingLeetCode - 239 - Sliding Window Maximum</title><link>https://bacarotech.github.io/blog/2026/codingleetcode---239---sliding-window-maximum/</link><pubDate>Wed, 25 Feb 2026 14:00:28 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/codingleetcode---239---sliding-window-maximum/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;You are given an array of integers nums, and there is a sliding window of size k which is moving from the very left of the array to the very right.
You can only see the k numbers in the window.
Each time the sliding window moves right by one position, return the maximum value in the window.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Possiamo risolvere questo problema calcolando il massimo per ogni finestra, come nel codice proposto.&lt;/p&gt;</description></item><item><title>CodingLeetCode - 217 - Contains Duplicate</title><link>https://bacarotech.github.io/blog/2026/codingleetcode---217---contains-duplicate/</link><pubDate>Wed, 25 Feb 2026 14:00:27 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/codingleetcode---217---contains-duplicate/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Given an integer array nums, return true if any value appears at least twice in the array, and return false if every element is distinct.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Possiamo risolvere questo problema ordinando l’array e controllando elementi consecutivi, come nel codice proposto.&lt;/p&gt;
&lt;p&gt;L’idea chiave è:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ordiniamo l’array utilizzando un algoritmo di ordinamento (in questo caso merge sort)&lt;/li&gt;
&lt;li&gt;una volta ordinato, eventuali duplicati saranno adiacenti&lt;/li&gt;
&lt;li&gt;scorriamo l’array a partire dal secondo elemento&lt;/li&gt;
&lt;li&gt;confrontiamo ogni elemento con il precedente&lt;/li&gt;
&lt;li&gt;se troviamo due elementi uguali consecutivi, esiste un duplicato&lt;/li&gt;
&lt;li&gt;altrimenti, se arriviamo alla fine senza trovare uguaglianze, tutti gli elementi sono distinti&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Questo approccio permette di ottenere una complessità O(n log n) a causa dell’ordinamento. Tuttavia, utilizza più operazioni del necessario: una soluzione più efficiente sfrutta una struttura dati come un set per ottenere una complessità O(n), evitando l’ordinamento.&lt;/p&gt;</description></item><item><title>CodingLeetCode - 169 - Majority Element</title><link>https://bacarotech.github.io/blog/2026/codingleetcode---169---majority-element/</link><pubDate>Wed, 25 Feb 2026 14:00:26 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/codingleetcode---169---majority-element/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Given an array nums of size n, return the majority element.
The majority element is the element that appears more than ⌊n / 2⌋ times.
You may assume that the majority element always exists in the array.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Possiamo risolvere questo problema contando le occorrenze di ogni elemento, come nel codice proposto.&lt;/p&gt;
&lt;p&gt;L’idea chiave è:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;utilizziamo una mappa per tenere traccia del numero di occorrenze di ciascun elemento&lt;/li&gt;
&lt;li&gt;scorriamo l’array e aggiorniamo il contatore per ogni numero&lt;/li&gt;
&lt;li&gt;una volta popolata la mappa, estraiamo tutte le chiavi&lt;/li&gt;
&lt;li&gt;per ogni chiave, verifichiamo se il numero di occorrenze è maggiore di n / 2&lt;/li&gt;
&lt;li&gt;quando troviamo l’elemento che soddisfa la condizione, lo restituiamo&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Questo approccio permette di ottenere una complessità O(n), ma utilizza memoria aggiuntiva per la mappa. Esiste una soluzione più ottimale (algoritmo di Boyer-Moore) che permette di trovare l’elemento di maggioranza in O(n) tempo e O(1) spazio, evitando strutture dati ausiliarie.&lt;/p&gt;</description></item><item><title>CodingLeetCode - 141 - Linked List Cycle</title><link>https://bacarotech.github.io/blog/2026/codingleetcode---141---linked-list-cycle/</link><pubDate>Wed, 25 Feb 2026 14:00:25 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/codingleetcode---141---linked-list-cycle/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Given head, the head of a linked list, determine if the linked list has a cycle in it.
There is a cycle in a linked list if there is some node in the list that can be reached again by continuously following the next pointer.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Possiamo risolvere questo problema tenendo traccia dei nodi già visitati durante la scansione, come nel codice proposto.&lt;/p&gt;
&lt;p&gt;L’idea chiave è:&lt;/p&gt;</description></item><item><title>CodingLeetCode - 125 - Valid Palindrome</title><link>https://bacarotech.github.io/blog/2026/codingleetcode---125---valid-palindrome/</link><pubDate>Wed, 25 Feb 2026 14:00:24 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/codingleetcode---125---valid-palindrome/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A phrase is a palindrome if, after converting all uppercase letters into lowercase letters and removing all non-alphanumeric characters, it reads the same forward and backward.
Given a string s, return true if it is a palindrome, or false otherwise.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Possiamo risolvere questo problema normalizzando prima la stringa e poi confrontandola simmetricamente, come nel codice proposto.&lt;/p&gt;
&lt;p&gt;L’idea chiave è:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;scorriamo la stringa e costruiamo una nuova stringa contenente solo caratteri alfanumerici&lt;/li&gt;
&lt;li&gt;convertiamo tutti i caratteri in minuscolo per evitare problemi di confronto&lt;/li&gt;
&lt;li&gt;confrontiamo i caratteri agli estremi: il primo con l’ultimo, il secondo con il penultimo, e così via&lt;/li&gt;
&lt;li&gt;se troviamo una differenza, la stringa non è palindroma&lt;/li&gt;
&lt;li&gt;se tutti i confronti vanno a buon fine, la stringa è palindroma&lt;/li&gt;
&lt;li&gt;gestiamo come casi validi anche stringhe vuote o con un solo carattere&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Questo approccio permette di ottenere una complessità O(n), dove n è la lunghezza della stringa, ed è efficace perché filtra prima i caratteri non validi e poi applica un semplice confronto simmetrico. Una possibile ottimizzazione consiste nell’evitare la creazione di una nuova stringa e lavorare direttamente con due puntatori sulla stringa originale.&lt;/p&gt;</description></item><item><title>CodingLeetCode - 121 - Best Time to Buy and Sell Stock</title><link>https://bacarotech.github.io/blog/2026/codingleetcode---121---best-time-to-buy-and-sell-stock/</link><pubDate>Wed, 25 Feb 2026 14:00:23 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/codingleetcode---121---best-time-to-buy-and-sell-stock/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;You are given an array prices where prices[i] is the price of a given stock on the i-th day.
You want to maximize your profit by choosing a single day to buy one stock and choosing a different day in the future to sell that stock.
Return the maximum profit you can achieve from this transaction. If you cannot achieve any profit, return 0.&lt;/p&gt;</description></item><item><title>CodingLeetCode - 88 - Merge Sorted Array</title><link>https://bacarotech.github.io/blog/2026/codingleetcode---88---merge-sorted-array/</link><pubDate>Wed, 25 Feb 2026 14:00:22 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/codingleetcode---88---merge-sorted-array/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;You are given two integer arrays nums1 and nums2, sorted in non-decreasing order, and two integers m and n, representing the number of elements in nums1 and nums2 respectively.
Merge nums2 into nums1 as one sorted array.
The final sorted array should not be returned, but instead be stored inside nums1.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Possiamo risolvere questo problema unendo i due array ordinati, come nel codice proposto, utilizzando una struttura temporanea per costruire il risultato.&lt;/p&gt;</description></item><item><title>CodingLeetCode - 86 - Partition List</title><link>https://bacarotech.github.io/blog/2026/codingleetcode---86---partition-list/</link><pubDate>Wed, 25 Feb 2026 14:00:21 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/codingleetcode---86---partition-list/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Given the head of a linked list and a value x, partition it such that all nodes less than x come before nodes greater than or equal to x.
You should preserve the original relative order of the nodes in each of the two partitions.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Possiamo risolvere questo problema separando i valori in due gruppi distinti e poi ricombinandoli, come nel codice proposto.&lt;/p&gt;</description></item><item><title>CodingLeetCode - 70 - Climbing Stairs</title><link>https://bacarotech.github.io/blog/2026/codingleetcode---70---climbing-stairs/</link><pubDate>Wed, 25 Feb 2026 14:00:20 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/codingleetcode---70---climbing-stairs/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;You are climbing a staircase. It takes n steps to reach the top.
Each time you can either climb 1 or 2 steps.
In how many distinct ways can you climb to the top?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Possiamo risolvere questo problema osservando che il numero di modi per arrivare a uno scalino dipende da quelli precedenti, come nel codice proposto.&lt;/p&gt;
&lt;p&gt;L’idea chiave è:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;per arrivare allo scalino n possiamo provenire da n-1 (facendo 1 passo) oppure da n-2 (facendo 2 passi)&lt;/li&gt;
&lt;li&gt;quindi il numero di modi per arrivare a n è la somma dei modi per arrivare a n-1 e n-2&lt;/li&gt;
&lt;li&gt;gestiamo i casi base: per 0 e 1 c’è un solo modo&lt;/li&gt;
&lt;li&gt;utilizziamo due variabili per tenere traccia dei risultati precedenti&lt;/li&gt;
&lt;li&gt;ad ogni iterazione aggiorniamo i valori sommando i due precedenti&lt;/li&gt;
&lt;li&gt;continuiamo fino a raggiungere n&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Questo approccio permette di ottenere una complessità O(n) e spazio O(1), ed è equivalente al calcolo della successione di Fibonacci, evitando l’uso della ricorsione che sarebbe meno efficiente.&lt;/p&gt;</description></item><item><title>CodingLeetCode - 66 - Plus One</title><link>https://bacarotech.github.io/blog/2026/codingleetcode---66---plus-one/</link><pubDate>Wed, 25 Feb 2026 14:00:19 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/codingleetcode---66---plus-one/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;You are given a large integer represented as an integer array digits, where each digits[i] is the i-th digit of the integer.
The digits are ordered from most significant to least significant.
Increment the large integer by one and return the resulting array of digits.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Possiamo risolvere questo problema simulando la somma di uno come faremmo manualmente, partendo dalla cifra meno significativa, come nel codice proposto.&lt;/p&gt;</description></item><item><title>CodingLeetCode - 58 - Length of Last Word</title><link>https://bacarotech.github.io/blog/2026/codingleetcode---58---length-of-last-word/</link><pubDate>Wed, 25 Feb 2026 14:00:18 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/codingleetcode---58---length-of-last-word/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Given a string s consisting of words and spaces, return the length of the last word in the string.
A word is a maximal substring consisting of non-space characters only.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Possiamo risolvere questo problema analizzando la stringa e individuando l’ultima parola valida, come nel codice proposto.&lt;/p&gt;
&lt;p&gt;L’idea chiave è:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;dividiamo la stringa utilizzando lo spazio come separatore&lt;/li&gt;
&lt;li&gt;otteniamo così un array di possibili parole (inclusi eventuali elementi vuoti)&lt;/li&gt;
&lt;li&gt;scorriamo l’array a ritroso, partendo dall’ultima posizione&lt;/li&gt;
&lt;li&gt;ignoriamo le stringhe vuote causate da spazi multipli o finali&lt;/li&gt;
&lt;li&gt;appena troviamo una parola valida, ne restituiamo la lunghezza&lt;/li&gt;
&lt;li&gt;se non troviamo parole, restituiamo un valore di fallback&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Questo approccio permette di ottenere una complessità O(n), dove n è la lunghezza della stringa, ed è semplice da implementare. Tuttavia, crea una struttura ausiliaria (l’array) che può essere evitata scorrendo direttamente la stringa da destra verso sinistra.&lt;/p&gt;</description></item><item><title>CodingLeetCode - 27 - Remove Element</title><link>https://bacarotech.github.io/blog/2026/codingleetcode---27---remove-element/</link><pubDate>Wed, 25 Feb 2026 14:00:17 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/codingleetcode---27---remove-element/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Given an integer array nums and an integer val, remove all occurrences of val in nums in-place.
The order of the elements may be changed.
Return the number of elements in nums which are not equal to val.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Possiamo risolvere questo problema modificando direttamente l’array durante l’iterazione, come nel codice proposto.&lt;/p&gt;
&lt;p&gt;L’idea chiave è:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;scorriamo l’array utilizzando un indice&lt;/li&gt;
&lt;li&gt;se troviamo un elemento uguale a val, lo rimuoviamo con splice&lt;/li&gt;
&lt;li&gt;non incrementiamo l’indice dopo la rimozione, perché gli elementi successivi vengono spostati&lt;/li&gt;
&lt;li&gt;se l’elemento è diverso da val, passiamo a quello successivo&lt;/li&gt;
&lt;li&gt;continuiamo fino alla fine dell’array&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Questo approccio permette di ottenere una soluzione corretta, ma con una complessità O(n²), perché ogni rimozione comporta uno shift degli elementi. Una soluzione più efficiente utilizza due puntatori e lavora in O(n), evitando operazioni costose sull’array.&lt;/p&gt;</description></item><item><title>CodingLeetCode - 26 - Remove Duplicates from Sorted Array</title><link>https://bacarotech.github.io/blog/2026/codingleetcode---26---remove-duplicates-from-sorted-array/</link><pubDate>Wed, 25 Feb 2026 14:00:16 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/codingleetcode---26---remove-duplicates-from-sorted-array/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Given an integer array nums sorted in non-decreasing order, remove the duplicates in-place such that each unique element appears only once.
The relative order of the elements should be kept the same.
Return the number of unique elements.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Possiamo risolvere questo problema modificando direttamente l’array durante l’iterazione, come nel codice proposto.&lt;/p&gt;
&lt;p&gt;L’idea chiave è:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;partiamo dal secondo elemento dell’array&lt;/li&gt;
&lt;li&gt;confrontiamo ogni elemento con quello precedente&lt;/li&gt;
&lt;li&gt;se sono uguali, significa che abbiamo trovato un duplicato&lt;/li&gt;
&lt;li&gt;in questo caso rimuoviamo l’elemento usando splice&lt;/li&gt;
&lt;li&gt;non incrementiamo l’indice, perché dopo la rimozione gli elementi si spostano&lt;/li&gt;
&lt;li&gt;se invece sono diversi, passiamo all’elemento successivo&lt;/li&gt;
&lt;li&gt;continuiamo fino alla fine dell’array&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Questo approccio permette di ottenere una soluzione corretta, ma con una complessità O(n²), perché ogni splice comporta uno spostamento degli elementi. Una soluzione più ottimale utilizza due puntatori e lavora in O(n), evitando operazioni costose sull’array.&lt;/p&gt;</description></item><item><title>CodingLeetCode - 21 - Merge Two Sorted Lists</title><link>https://bacarotech.github.io/blog/2026/codingleetcode---21---merge-two-sorted-lists/</link><pubDate>Wed, 25 Feb 2026 14:00:15 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/codingleetcode---21---merge-two-sorted-lists/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;You are given the heads of two sorted linked lists list1 and list2.
Merge the two lists into one sorted list.
The list should be made by splicing together the nodes of the first two lists.
Return the head of the merged linked list.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Possiamo risolvere questo problema confrontando gli elementi delle due liste e costruendo una nuova struttura ordinata, come nel codice proposto.&lt;/p&gt;</description></item><item><title>CodingLeetCode - 20 - Valid Parentheses</title><link>https://bacarotech.github.io/blog/2026/codingleetcode---20---valid-parentheses/</link><pubDate>Wed, 25 Feb 2026 14:00:14 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/codingleetcode---20---valid-parentheses/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Given a string s containing just the characters &amp;lsquo;(&amp;rsquo;, &amp;lsquo;)&amp;rsquo;, &amp;lsquo;{&amp;rsquo;, &amp;lsquo;}&amp;rsquo;, &amp;lsquo;[&amp;rsquo; and &amp;lsquo;]&amp;rsquo;, determine if the input string is valid.
An input string is valid if:
Open brackets must be closed by the same type of brackets.
Open brackets must be closed in the correct order.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Possiamo risolvere questo problema utilizzando una struttura dati che segue il principio LIFO (Last In, First Out), come nel codice proposto.&lt;/p&gt;</description></item><item><title>CodingLeetCode - 14 - Longest Common Prefix</title><link>https://bacarotech.github.io/blog/2026/codingleetcode---14---longest-common-prefix/</link><pubDate>Wed, 25 Feb 2026 14:00:13 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/codingleetcode---14---longest-common-prefix/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Write a function to find the longest common prefix string amongst an array of strings.
If there is no common prefix, return an empty string &amp;ldquo;&amp;rdquo;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Possiamo risolvere questo problema confrontando i caratteri delle stringhe posizione per posizione, come nel codice proposto.&lt;/p&gt;
&lt;p&gt;L’idea chiave è:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;prendiamo la prima stringa come riferimento&lt;/li&gt;
&lt;li&gt;scorriamo i suoi caratteri uno alla volta&lt;/li&gt;
&lt;li&gt;ad ogni iterazione aggiungiamo il carattere corrente al prefisso comune&lt;/li&gt;
&lt;li&gt;verifichiamo che tutte le altre stringhe abbiano lo stesso carattere in quella posizione&lt;/li&gt;
&lt;li&gt;se una stringa è più corta oppure il carattere non coincide, rimuoviamo l’ultimo carattere aggiunto e interrompiamo il ciclo&lt;/li&gt;
&lt;li&gt;continuiamo finché tutti i controlli sono soddisfatti&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Questo approccio permette di ottenere una complessità O(n * m), dove n è il numero di stringhe e m è la lunghezza del prefisso comune. È una soluzione semplice e leggibile, anche se può essere leggermente ottimizzata interrompendo subito il ciclo interno appena si trova una discordanza.&lt;/p&gt;</description></item><item><title>CodingLeetCode - 13 - Roman to Integer</title><link>https://bacarotech.github.io/blog/2026/codingleetcode---13---roman-to-integer/</link><pubDate>Wed, 25 Feb 2026 14:00:12 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/codingleetcode---13---roman-to-integer/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Given a roman numeral, convert it to an integer.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Possiamo risolvere questo problema scorrendo la stringa e gestendo separatamente i casi “standard” e quelli in cui una cifra più piccola precede una più grande (notazione sottrattiva), come nel codice proposto.&lt;/p&gt;
&lt;p&gt;L’idea chiave è:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;utilizziamo una mappa per associare ogni simbolo romano al suo valore numerico&lt;/li&gt;
&lt;li&gt;scorriamo la stringa carattere per carattere&lt;/li&gt;
&lt;li&gt;per ogni simbolo, controlliamo se forma una coppia speciale (IV, IX, XL, XC, CD, CM)&lt;/li&gt;
&lt;li&gt;se sì, sottraiamo il valore corrente da quello successivo e saltiamo il prossimo carattere&lt;/li&gt;
&lt;li&gt;altrimenti, sommiamo semplicemente il valore del simbolo corrente&lt;/li&gt;
&lt;li&gt;continuiamo fino alla fine della stringa&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Questo approccio permette di ottenere una complessità O(n), dove n è la lunghezza della stringa, ed è efficace nel gestire correttamente tutti i casi. Tuttavia, nel codice proposto la gestione delle coppie speciali è suddivisa in più funzioni (checkI, checkX, checkC), rendendo la soluzione più verbosa: può essere semplificata confrontando direttamente il valore corrente con quello successivo in un unico passaggio.&lt;/p&gt;</description></item><item><title>CodingLeetCode - 9 - Palindrome Number</title><link>https://bacarotech.github.io/blog/2026/codingleetcode---9---palindrome-number/</link><pubDate>Wed, 25 Feb 2026 14:00:11 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/codingleetcode---9---palindrome-number/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Given an integer x, return true if x is a palindrome, and false otherwise.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Possiamo risolvere questo problema confrontando le cifre del numero da entrambi i lati, proprio come fatto nel codice proposto.&lt;/p&gt;
&lt;p&gt;L’idea chiave è:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;escludiamo subito i numeri negativi, perché non possono essere palindromi&lt;/li&gt;
&lt;li&gt;convertiamo il numero in stringa per poter accedere facilmente alle singole cifre&lt;/li&gt;
&lt;li&gt;trasformiamo la stringa in un array di cifre&lt;/li&gt;
&lt;li&gt;confrontiamo gli elementi simmetrici: il primo con l’ultimo, il secondo con il penultimo, e così via&lt;/li&gt;
&lt;li&gt;se troviamo anche una sola differenza, il numero non è palindromo&lt;/li&gt;
&lt;li&gt;se tutti i confronti vanno a buon fine, il numero è palindromo&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Questo approccio permette di ottenere una complessità O(n), dove n è il numero di cifre, ed è semplice da implementare. Tuttavia, il ciclo potrebbe essere ottimizzato fermandosi a metà dell’array, evitando confronti ridondanti.&lt;/p&gt;</description></item><item><title>CodingLeetCode - 7 - Reverse Integer</title><link>https://bacarotech.github.io/blog/2026/codingleetcode---7---reverse-integer/</link><pubDate>Wed, 25 Feb 2026 14:00:10 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/codingleetcode---7---reverse-integer/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Given a signed 32-bit integer x, return x with its digits reversed.
If reversing x causes the value to go outside the signed 32-bit integer range&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Possiamo risolvere questo problema invertendo le cifre del numero, come nel codice proposto, ma prestando attenzione alla gestione del segno e dell’overflow.&lt;/p&gt;
&lt;p&gt;L’idea chiave è:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;gestiamo separatamente il segno del numero (positivo o negativo)&lt;/li&gt;
&lt;li&gt;convertiamo il numero in stringa per poter lavorare facilmente sulle singole cifre&lt;/li&gt;
&lt;li&gt;invertiamo l’array di caratteri scambiando gli elementi simmetrici&lt;/li&gt;
&lt;li&gt;ricostruiamo il numero a partire dalle cifre invertite&lt;/li&gt;
&lt;li&gt;riapplichiamo il segno se necessario&lt;/li&gt;
&lt;li&gt;infine, controlliamo che il risultato rientri nei limiti di un intero a 32 bit&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Questo approccio permette di ottenere una soluzione semplice da implementare, ma nel codice proposto la gestione dell’overflow è hardcoded su alcuni casi specifici, rendendola poco scalabile. Una soluzione più robusta prevede invece un controllo generale sui limiti, evitando di elencare manualmente i casi fuori range.&lt;/p&gt;</description></item><item><title>CodingLeetCode - 2 - Add Two Numbers</title><link>https://bacarotech.github.io/blog/2026/codingleetcode---2---add-two-numbers/</link><pubDate>Wed, 25 Feb 2026 14:00:09 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/codingleetcode---2---add-two-numbers/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order, and each of their nodes &amp;gt; contains a single digit. Add the two numbers and return the sum as a linked list.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Possiamo analizzare questo problema partendo da un approccio in due fasi, come nel codice proposto, in cui utilizziamo una struttura dati per memorizzare le informazioni utili durante l’elaborazione.&lt;/p&gt;</description></item><item><title>CodingLeetCode - 1 - Two Sum</title><link>https://bacarotech.github.io/blog/2026/codingleetcode---1---two-sum/</link><pubDate>Wed, 25 Feb 2026 14:00:08 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/codingleetcode---1---two-sum/</guid><description>&lt;p&gt;Oggi vediamo il seguente esercizio di LeetCode:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Given an array of integers nums and an integer target, return indices of the two numbers such that they add up to target.&lt;/p&gt;
&lt;p&gt;You may assume that each input would have exactly one solution, and you may not use the same element twice.
You can return the answer in any order.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Possiamo risolvere questo problema sfruttando una struttura dati che ci permetta di controllare rapidamente se esiste il complemento di un numero rispetto al target.&lt;/p&gt;</description></item><item><title>AlgoritmiTeoria - 7 - graph - belman-ford</title><link>https://bacarotech.github.io/blog/2026/algoritmiteoria---7---graph---belman-ford/</link><pubDate>Wed, 25 Feb 2026 14:00:07 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/algoritmiteoria---7---graph---belman-ford/</guid><description>&lt;h1 id="algoritmo-bellman-ford" class="no-underline "&gt;
	&lt;a href="#algoritmo-bellman-ford"&gt;
		ALGORITMO: BELLMAN-FORD
	&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;L&amp;rsquo;&lt;strong&gt;algoritmo di Bellman-Ford&lt;/strong&gt; calcola i percorsi minimi da un nodo sorgente a tutti gli altri nodi
in un &lt;strong&gt;grafo orientato o non orientato pesato&lt;/strong&gt;, anche con &lt;strong&gt;archi a peso negativo&lt;/strong&gt;,
a condizione che non siano presenti cicli negativi raggiungibili dalla sorgente.&lt;/p&gt;
&lt;h2 id="precondizioni" class="no-underline "&gt;
	&lt;a href="#precondizioni"&gt;
		PRECONDIZIONI
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Il grafo può contenere archi con &lt;strong&gt;peso negativo&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Non devono esserci &lt;strong&gt;cicli negativi&lt;/strong&gt; raggiungibili dalla sorgente.&lt;/li&gt;
&lt;li&gt;Funziona su grafi orientati e non orientati pesati.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="terminologia" class="no-underline "&gt;
	&lt;a href="#terminologia"&gt;
		TERMINOLOGIA
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Vertice (Vertex)&lt;/strong&gt; → nodo del grafo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Arco Pesato (Weighted Edge)&lt;/strong&gt; → connessione tra due vertici con un peso (positivo o negativo).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Distanza&lt;/strong&gt; → costo cumulativo minimo dal nodo sorgente a un nodo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Predecessore (Parent/Predecessor)&lt;/strong&gt; → nodo precedente lungo il percorso minimo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rilassamento (Relaxation)&lt;/strong&gt; → operazione che aggiorna la distanza di un nodo se si trova un percorso più corto.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="operazioni-principali" class="no-underline "&gt;
	&lt;a href="#operazioni-principali"&gt;
		OPERAZIONI PRINCIPALI
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;aggiungiVertice(v)&lt;/code&gt; → inserisce un nuovo vertice nel grafo.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;aggiungiArco(v1, v2, peso)&lt;/code&gt; → aggiunge un arco orientato o non orientato con peso.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bellmanFord(start)&lt;/code&gt; → calcola i percorsi minimi dal nodo sorgente &lt;code&gt;start&lt;/code&gt; a tutti gli altri nodi, restituendo:
&lt;ul&gt;
&lt;li&gt;le &lt;strong&gt;distanze minime&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;i &lt;strong&gt;predecessori&lt;/strong&gt; per ricostruire i percorsi.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Rileva &lt;strong&gt;cicli negativi&lt;/strong&gt;: se dopo |V|-1 rilassamenti un arco può ancora essere rilassato, esiste un ciclo negativo raggiungibile dalla sorgente.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="funzionamento-dellalgoritmo" class="no-underline "&gt;
	&lt;a href="#funzionamento-dellalgoritmo"&gt;
		FUNZIONAMENTO DELL&amp;rsquo;ALGORITMO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Inizializza tutte le distanze a &lt;strong&gt;∞&lt;/strong&gt;, eccetto il nodo sorgente (distanza = 0).&lt;/li&gt;
&lt;li&gt;Ripeti &lt;strong&gt;|V| - 1 volte&lt;/strong&gt; (dove |V| è il numero di vertici):
&lt;ul&gt;
&lt;li&gt;Per ogni arco &lt;code&gt;(u, v)&lt;/code&gt; con peso &lt;code&gt;w&lt;/code&gt;:
&lt;ul&gt;
&lt;li&gt;Se &lt;code&gt;distanza[u] + w &amp;lt; distanza[v]&lt;/code&gt; → aggiorna &lt;code&gt;distanza[v]&lt;/code&gt; e imposta &lt;code&gt;u&lt;/code&gt; come predecessore.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Controlla tutti gli archi una volta in più per rilevare eventuali cicli negativi.&lt;/li&gt;
&lt;li&gt;Al termine:
&lt;ul&gt;
&lt;li&gt;le &lt;strong&gt;distanze minime&lt;/strong&gt; sono corrette se non ci sono cicli negativi.&lt;/li&gt;
&lt;li&gt;è possibile ricostruire i percorsi minimi seguendo i predecessori.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="complessità" class="no-underline "&gt;
	&lt;a href="#complessit%c3%a0"&gt;
		COMPLESSITÀ
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Tempo → &lt;strong&gt;O(V * E)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Spazio → &lt;strong&gt;O(V)&lt;/strong&gt; per memorizzare distanze e predecessori&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="esempio-di-uscita" class="no-underline "&gt;
	&lt;a href="#esempio-di-uscita"&gt;
		ESEMPIO DI USCITA
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Grafo:
A -&amp;gt; B(4), C(2)
B -&amp;gt; C(-1), D(5)
C -&amp;gt; D(3), E(4)
D -&amp;gt; E(7)
E -&amp;gt;&lt;/p&gt;</description></item><item><title>AlgoritmiTeoria - 7 - graph - dijkstra</title><link>https://bacarotech.github.io/blog/2026/algoritmiteoria---7---graph---dijkstra/</link><pubDate>Wed, 25 Feb 2026 14:00:07 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/algoritmiteoria---7---graph---dijkstra/</guid><description>&lt;h1 id="algoritmo-dijkstra" class="no-underline "&gt;
	&lt;a href="#algoritmo-dijkstra"&gt;
		ALGORITMO: DIJKSTRA
	&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;L&amp;rsquo;&lt;strong&gt;algoritmo di Dijkstra&lt;/strong&gt; calcola i percorsi minimi da un nodo sorgente a tutti gli altri nodi
in un &lt;strong&gt;grafo orientato o non orientato pesato&lt;/strong&gt;, con pesi &lt;strong&gt;non negativi&lt;/strong&gt;.&lt;br&gt;
È uno degli algoritmi fondamentali per il calcolo di percorsi minimi in informatica e nelle reti.&lt;/p&gt;
&lt;h2 id="precondizioni" class="no-underline "&gt;
	&lt;a href="#precondizioni"&gt;
		PRECONDIZIONI
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Il grafo può essere orientato o non orientato.&lt;/li&gt;
&lt;li&gt;I pesi degli archi devono essere &lt;strong&gt;non negativi&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Non gestisce correttamente grafi con archi a peso negativo (per quelli serve Bellman-Ford).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="terminologia" class="no-underline "&gt;
	&lt;a href="#terminologia"&gt;
		TERMINOLOGIA
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Vertice (Vertex)&lt;/strong&gt; → nodo del grafo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Arco Pesato (Weighted Edge)&lt;/strong&gt; → connessione tra due vertici con peso associato.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Distanza&lt;/strong&gt; → costo cumulativo minimo dal nodo sorgente a un nodo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Predecessore (Parent/Predecessor)&lt;/strong&gt; → nodo precedente lungo il percorso minimo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Coda di Priorità (Priority Queue / Min-Heap)&lt;/strong&gt; → struttura utilizzata per selezionare il nodo con distanza minima.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="operazioni-principali" class="no-underline "&gt;
	&lt;a href="#operazioni-principali"&gt;
		OPERAZIONI PRINCIPALI
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;aggiungiVertice(v)&lt;/code&gt; → inserisce un nuovo vertice nel grafo.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;aggiungiArco(v1, v2, peso)&lt;/code&gt; → aggiunge un arco orientato o non orientato con peso.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dijkstra(start)&lt;/code&gt; → calcola i percorsi minimi dal nodo sorgente &lt;code&gt;start&lt;/code&gt; a tutti gli altri nodi, restituendo:
&lt;ul&gt;
&lt;li&gt;le &lt;strong&gt;distanze minime&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;i &lt;strong&gt;predecessori&lt;/strong&gt; per ricostruire i percorsi.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="rappresentazione" class="no-underline "&gt;
	&lt;a href="#rappresentazione"&gt;
		RAPPRESENTAZIONE
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Lista di adiacenza con pesi&lt;/strong&gt;:&lt;br&gt;
Esempio → &lt;code&gt;{ A: [{node: B, peso: 4}, {node: C, peso: 2}], B: [{node: C, peso: 5}], ... }&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="funzionamento-dellalgoritmo" class="no-underline "&gt;
	&lt;a href="#funzionamento-dellalgoritmo"&gt;
		FUNZIONAMENTO DELL&amp;rsquo;ALGORITMO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Inizializza tutte le distanze a &lt;strong&gt;∞&lt;/strong&gt;, eccetto il nodo sorgente (distanza = 0).&lt;/li&gt;
&lt;li&gt;Inserisci tutti i nodi in una &lt;strong&gt;coda di priorità&lt;/strong&gt; basata sulla distanza minima.&lt;/li&gt;
&lt;li&gt;Finché la coda non è vuota:
&lt;ul&gt;
&lt;li&gt;Estrai il nodo con distanza minima.&lt;/li&gt;
&lt;li&gt;Aggiorna le distanze dei suoi vicini se si trova un percorso più corto.&lt;/li&gt;
&lt;li&gt;Aggiorna i predecessori dei vicini per tracciare il percorso minimo.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Al termine, si ottengono:
&lt;ul&gt;
&lt;li&gt;la &lt;strong&gt;distanza minima&lt;/strong&gt; da sorgente a ogni nodo&lt;/li&gt;
&lt;li&gt;il &lt;strong&gt;cammino più breve&lt;/strong&gt; ricostruibile seguendo i predecessori.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="complessità" class="no-underline "&gt;
	&lt;a href="#complessit%c3%a0"&gt;
		COMPLESSITÀ
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Inserimento vertice → &lt;strong&gt;O(1)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Inserimento arco → &lt;strong&gt;O(1)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Calcolo percorso minimo:
&lt;ul&gt;
&lt;li&gt;Con &lt;strong&gt;min-heap / coda di priorità&lt;/strong&gt; → &lt;strong&gt;O(V + E log V)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Con semplice array → &lt;strong&gt;O(V^2)&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="esempio-di-uscita" class="no-underline "&gt;
	&lt;a href="#esempio-di-uscita"&gt;
		ESEMPIO DI USCITA
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Grafo:
A -&amp;gt; B(4), C(2)
B -&amp;gt; C(5), D(10)
C -&amp;gt; D(3), E(4)
D -&amp;gt; E(7)
E -&amp;gt;&lt;/p&gt;</description></item><item><title>AlgoritmiTeoria - 7 - graph - edmonds-karp</title><link>https://bacarotech.github.io/blog/2026/algoritmiteoria---7---graph---edmonds-karp/</link><pubDate>Wed, 25 Feb 2026 14:00:07 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/algoritmiteoria---7---graph---edmonds-karp/</guid><description>&lt;h1 id="algoritmo-edmonds-karp" class="no-underline "&gt;
	&lt;a href="#algoritmo-edmonds-karp"&gt;
		ALGORITMO: EDMONDS-KARP
	&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;L&amp;rsquo;&lt;strong&gt;algoritmo di Edmonds-Karp&lt;/strong&gt; è una specifica implementazione
dell&amp;rsquo;&lt;strong&gt;algoritmo di Ford-Fulkerson&lt;/strong&gt; per il calcolo del flusso massimo
in un grafo connesso e pesato.&lt;br&gt;
La differenza principale è l&amp;rsquo;uso della &lt;strong&gt;ricerca in ampiezza (BFS)&lt;/strong&gt; per trovare i percorsi aumentanti.&lt;/p&gt;
&lt;h2 id="terminologia" class="no-underline "&gt;
	&lt;a href="#terminologia"&gt;
		TERMINOLOGIA
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Vertice (Vertex)&lt;/strong&gt; → nodo del grafo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Arco con Capacità (Capacity Edge)&lt;/strong&gt; → connessione tra due vertici con capacità massima.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flusso (Flow)&lt;/strong&gt; → quantità di risorsa trasportata lungo un arco.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Percorso Aumentante (Augmenting Path)&lt;/strong&gt; → percorso dalla sorgente al pozzo con capacità residua disponibile.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sorgente (Source)&lt;/strong&gt; → nodo iniziale del flusso.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pozzo / Destinazione (Sink)&lt;/strong&gt; → nodo finale del flusso.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="funzionamento-dellalgoritmo" class="no-underline "&gt;
	&lt;a href="#funzionamento-dellalgoritmo"&gt;
		FUNZIONAMENTO DELL&amp;rsquo;ALGORITMO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Inizializza il flusso di tutti gli archi a 0.&lt;/li&gt;
&lt;li&gt;Usa &lt;strong&gt;BFS&lt;/strong&gt; per trovare il percorso aumentante più corto (minimo numero di archi) dalla sorgente alla destinazione.&lt;/li&gt;
&lt;li&gt;Determina il flusso massimo possibile lungo questo percorso (minima capacità residua).&lt;/li&gt;
&lt;li&gt;Aggiorna il flusso lungo gli archi diretti e inversi del percorso.&lt;/li&gt;
&lt;li&gt;Ripeti finché non esistono più percorsi aumentanti.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="strutture-di-supporto" class="no-underline "&gt;
	&lt;a href="#strutture-di-supporto"&gt;
		STRUTTURE DI SUPPORTO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Grafo con capacità residua&lt;/strong&gt; → memorizza capacità disponibili sugli archi.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Coda per BFS&lt;/strong&gt; → utilizzata per individuare il percorso aumentante più breve.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="complessità" class="no-underline "&gt;
	&lt;a href="#complessit%c3%a0"&gt;
		COMPLESSITÀ
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Tempo → &lt;strong&gt;O(V * E²)&lt;/strong&gt; nel caso peggiore.&lt;/li&gt;
&lt;li&gt;Spazio → &lt;strong&gt;O(V + E)&lt;/strong&gt; per memorizzare il grafo e le capacità residue.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="esempio-di-utilizzo" class="no-underline "&gt;
	&lt;a href="#esempio-di-utilizzo"&gt;
		ESEMPIO DI UTILIZZO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Grafo con capacità:
S → A(10), S → B(5), A → B(15), A → T(10), B → T(10)&lt;/p&gt;</description></item><item><title>AlgoritmiTeoria - 7 - graph - ford-fulkerson</title><link>https://bacarotech.github.io/blog/2026/algoritmiteoria---7---graph---ford-fulkerson/</link><pubDate>Wed, 25 Feb 2026 14:00:07 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/algoritmiteoria---7---graph---ford-fulkerson/</guid><description>&lt;h1 id="algoritmo-ford-fulkerson" class="no-underline "&gt;
	&lt;a href="#algoritmo-ford-fulkerson"&gt;
		ALGORITMO: FORD-FULKERSON
	&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;L&amp;rsquo;&lt;strong&gt;algoritmo di Ford-Fulkerson&lt;/strong&gt; calcola il &lt;strong&gt;flusso massimo&lt;/strong&gt; in un grafo &lt;strong&gt;connesso e pesato&lt;/strong&gt;,
dove i pesi rappresentano le capacità massime degli archi.&lt;/p&gt;
&lt;h2 id="terminologia" class="no-underline "&gt;
	&lt;a href="#terminologia"&gt;
		TERMINOLOGIA
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Vertice (Vertex)&lt;/strong&gt; → nodo del grafo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Arco con Capacità (Capacity Edge)&lt;/strong&gt; → connessione tra due vertici con capacità massima.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flusso (Flow)&lt;/strong&gt; → quantità di risorsa trasportata lungo un arco.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Percorso Aumentante (Augmenting Path)&lt;/strong&gt; → percorso dalla sorgente al pozzo con capacità residua disponibile.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sorgente (Source)&lt;/strong&gt; → nodo iniziale del flusso.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pozzo / Destinazione (Sink)&lt;/strong&gt; → nodo finale del flusso.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="funzionamento-dellalgoritmo" class="no-underline "&gt;
	&lt;a href="#funzionamento-dellalgoritmo"&gt;
		FUNZIONAMENTO DELL&amp;rsquo;ALGORITMO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Inizializza il flusso di tutti gli archi a 0.&lt;/li&gt;
&lt;li&gt;Cerca un &lt;strong&gt;percorso aumentante&lt;/strong&gt; dalla sorgente alla destinazione con capacità residua &amp;gt; 0.&lt;/li&gt;
&lt;li&gt;Determina il &lt;strong&gt;flusso massimo possibile&lt;/strong&gt; lungo questo percorso (minima capacità residua).&lt;/li&gt;
&lt;li&gt;Aumenta il flusso sugli archi del percorso di questa quantità.&lt;/li&gt;
&lt;li&gt;Aggiorna le capacità residue lungo gli archi diretti e inversi.&lt;/li&gt;
&lt;li&gt;Ripeti finché non esistono più percorsi aumentanti.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="strutture-di-supporto" class="no-underline "&gt;
	&lt;a href="#strutture-di-supporto"&gt;
		STRUTTURE DI SUPPORTO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Grafo con capacità residua&lt;/strong&gt; → memorizza capacità disponibili lungo gli archi.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Algoritmo di ricerca&lt;/strong&gt; → BFS (Edmonds-Karp) o DFS per trovare percorsi aumentanti.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="complessità" class="no-underline "&gt;
	&lt;a href="#complessit%c3%a0"&gt;
		COMPLESSITÀ
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Dipende dalla scelta della tecnica di ricerca:
&lt;ul&gt;
&lt;li&gt;Con BFS (Edmonds-Karp) → &lt;strong&gt;O(V * E²)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Con DFS → complessità può variare e dipende dai valori dei flussi.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Spazio → &lt;strong&gt;O(V + E)&lt;/strong&gt; per memorizzare il grafo e le capacità residue.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="esempio-di-utilizzo" class="no-underline "&gt;
	&lt;a href="#esempio-di-utilizzo"&gt;
		ESEMPIO DI UTILIZZO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Grafo con capacità:
S → A(10), S → B(5), A → B(15), A → T(10), B → T(10)&lt;/p&gt;</description></item><item><title>AlgoritmiTeoria - 7 - graph - kruskal</title><link>https://bacarotech.github.io/blog/2026/algoritmiteoria---7---graph---kruskal/</link><pubDate>Wed, 25 Feb 2026 14:00:07 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/algoritmiteoria---7---graph---kruskal/</guid><description>&lt;h1 id="algoritmo-kruskal" class="no-underline "&gt;
	&lt;a href="#algoritmo-kruskal"&gt;
		ALGORITMO: KRUSKAL
	&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;L&amp;rsquo;&lt;strong&gt;algoritmo di Kruskal&lt;/strong&gt; è utilizzato per trovare un &lt;strong&gt;albero ricoprente minimo (Minimum Spanning Tree - MST)&lt;/strong&gt;
in un grafo &lt;strong&gt;connesso e pesato&lt;/strong&gt;.&lt;br&gt;
L&amp;rsquo;MST collega tutti i vertici senza formare cicli e minimizza la somma dei pesi degli archi inclusi.&lt;/p&gt;
&lt;h2 id="terminologia" class="no-underline "&gt;
	&lt;a href="#terminologia"&gt;
		TERMINOLOGIA
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Vertice (Vertex)&lt;/strong&gt; → nodo del grafo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Arco Pesato (Weighted Edge)&lt;/strong&gt; → connessione tra due vertici con un peso associato.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Albero Ricoprente (Spanning Tree)&lt;/strong&gt; → sottoinsieme di archi che collega tutti i vertici senza cicli.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MST (Minimum Spanning Tree)&lt;/strong&gt; → albero ricoprente con somma minima dei pesi degli archi.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Union-Find / Disjoint Set&lt;/strong&gt; → struttura dati per rilevare cicli durante l&amp;rsquo;inclusione degli archi.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="funzionamento-dellalgoritmo" class="no-underline "&gt;
	&lt;a href="#funzionamento-dellalgoritmo"&gt;
		FUNZIONAMENTO DELL&amp;rsquo;ALGORITMO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Ordina tutti gli archi del grafo in &lt;strong&gt;ordine crescente di peso&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Inizia con un grafo MST vuoto.&lt;/li&gt;
&lt;li&gt;Per ciascun arco &lt;code&gt;(u, v)&lt;/code&gt; nell&amp;rsquo;ordine ordinato:
&lt;ul&gt;
&lt;li&gt;Se aggiungendo l&amp;rsquo;arco &lt;strong&gt;non si forma un ciclo&lt;/strong&gt; → includilo nel MST.&lt;/li&gt;
&lt;li&gt;Altrimenti → scartalo.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Ripeti fino a includere &lt;strong&gt;V - 1 archi&lt;/strong&gt;, dove V è il numero di vertici.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="strutture-di-supporto" class="no-underline "&gt;
	&lt;a href="#strutture-di-supporto"&gt;
		STRUTTURE DI SUPPORTO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Union-Find (Disjoint Set)&lt;/strong&gt; → per verificare rapidamente se due vertici appartengono allo stesso sottoalbero (evita cicli).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Array / Lista di archi&lt;/strong&gt; → per ordinare gli archi in base al peso.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="complessità" class="no-underline "&gt;
	&lt;a href="#complessit%c3%a0"&gt;
		COMPLESSITÀ
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Tempo → &lt;strong&gt;O(E log E)&lt;/strong&gt;, principalmente per l&amp;rsquo;ordinamento degli archi.&lt;/li&gt;
&lt;li&gt;Spazio → &lt;strong&gt;O(V + E)&lt;/strong&gt; per memorizzare il grafo e le strutture ausiliarie.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="esempio-di-utilizzo" class="no-underline "&gt;
	&lt;a href="#esempio-di-utilizzo"&gt;
		ESEMPIO DI UTILIZZO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Grafo con archi pesati:
A - B(4), A - C(2), B - C(1), B - D(5), C - D(3)&lt;/p&gt;</description></item><item><title>AlgoritmiTeoria - 7 - graph - not-oriented-graph</title><link>https://bacarotech.github.io/blog/2026/algoritmiteoria---7---graph---not-oriented-graph/</link><pubDate>Wed, 25 Feb 2026 14:00:07 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/algoritmiteoria---7---graph---not-oriented-graph/</guid><description>&lt;h1 id="struttura-dati-grafo-non-orientato" class="no-underline "&gt;
	&lt;a href="#struttura-dati-grafo-non-orientato"&gt;
		STRUTTURA DATI: GRAFO NON ORIENTATO
	&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;Un &lt;strong&gt;grafo non orientato&lt;/strong&gt; è una collezione di nodi (vertici)
connessi da archi che rappresentano relazioni bidirezionali.&lt;/p&gt;
&lt;h2 id="proprietà-principali" class="no-underline "&gt;
	&lt;a href="#propriet%c3%a0-principali"&gt;
		PROPRIETÀ PRINCIPALI
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Rappresentato come coppia (V, E):
&lt;ul&gt;
&lt;li&gt;V → insieme dei vertici (nodi).&lt;/li&gt;
&lt;li&gt;E → insieme degli archi (coppie non ordinate di vertici).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Gli archi non hanno direzione:&lt;br&gt;
se esiste un arco tra &lt;code&gt;A&lt;/code&gt; e &lt;code&gt;B&lt;/code&gt;, si può navigare sia da &lt;code&gt;A&lt;/code&gt; a &lt;code&gt;B&lt;/code&gt;
che da &lt;code&gt;B&lt;/code&gt; a &lt;code&gt;A&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="terminologia" class="no-underline "&gt;
	&lt;a href="#terminologia"&gt;
		TERMINOLOGIA
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Vertice (Vertex)&lt;/strong&gt; → un nodo del grafo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Arco (Edge)&lt;/strong&gt; → connessione tra due vertici.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Grado (Degree)&lt;/strong&gt; → numero di archi connessi a un vertice.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Percorso (Path)&lt;/strong&gt; → sequenza di vertici connessi da archi.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ciclo (Cycle)&lt;/strong&gt; → percorso chiuso (inizio = fine).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Componente Connessa&lt;/strong&gt; → sottoinsieme di vertici in cui
ogni coppia è collegata direttamente o indirettamente.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="operazioni-principali" class="no-underline "&gt;
	&lt;a href="#operazioni-principali"&gt;
		OPERAZIONI PRINCIPALI
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;aggiungiVertice(v)&lt;/code&gt; → inserisce un nuovo vertice.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;aggiungiArco(v1, v2)&lt;/code&gt; → crea un arco tra due vertici
(aggiunge i vertici se non esistono).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rimuoviArco(v1, v2)&lt;/code&gt; → elimina un arco se presente.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rimuoviVertice(v)&lt;/code&gt; → elimina un vertice e tutti i suoi archi.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;verificaConnesso(v1, v2)&lt;/code&gt; → controlla se esiste un percorso tra due vertici.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;visitaAmpiezza(v)&lt;/code&gt; → BFS a partire da un vertice.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;visitaProfondità(v)&lt;/code&gt; → DFS a partire da un vertice.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="rappresentazione" class="no-underline "&gt;
	&lt;a href="#rappresentazione"&gt;
		RAPPRESENTAZIONE
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Lista di adiacenza&lt;/strong&gt; (efficiente in grafi sparsi):&lt;br&gt;
Esempio → { A: [B, C], B: [A, D], C: [A], D: [B] }&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Matrice di adiacenza&lt;/strong&gt; (più adatta in grafi densi).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="efficienza" class="no-underline "&gt;
	&lt;a href="#efficienza"&gt;
		EFFICIENZA
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Inserimento vertice → &lt;strong&gt;O(1)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Inserimento arco → &lt;strong&gt;O(1)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Rimozione arco → &lt;strong&gt;O(d)&lt;/strong&gt; (d = grado massimo tra i due vertici).&lt;/li&gt;
&lt;li&gt;Attraversamento BFS/DFS → &lt;strong&gt;O(V + E)&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="applicazioni" class="no-underline "&gt;
	&lt;a href="#applicazioni"&gt;
		APPLICAZIONI
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Reti sociali.&lt;/li&gt;
&lt;li&gt;Mappe stradali.&lt;/li&gt;
&lt;li&gt;Reti di computer.&lt;/li&gt;
&lt;li&gt;Pianificazione di percorsi senza direzione.&lt;/li&gt;
&lt;li&gt;Analisi di sistemi complessi.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="vantaggi" class="no-underline "&gt;
	&lt;a href="#vantaggi"&gt;
		VANTAGGI
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Struttura flessibile, adatta a molti problemi reali.&lt;/li&gt;
&lt;li&gt;Operazioni ottimizzabili a seconda della rappresentazione.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="limitazioni" class="no-underline "&gt;
	&lt;a href="#limitazioni"&gt;
		LIMITAZIONI
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Grafi densi → memoria elevata.&lt;/li&gt;
&lt;li&gt;Operazioni come rimozione arco o verifica connessione
possono essere costose rispetto a strutture specializzate.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="note" class="no-underline "&gt;
	&lt;a href="#note"&gt;
		NOTE
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Base per algoritmi fondamentali:
&lt;ul&gt;
&lt;li&gt;calcolo delle componenti connesse,&lt;/li&gt;
&lt;li&gt;rilevamento cicli,&lt;/li&gt;
&lt;li&gt;cammino minimo.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="codice" class="no-underline "&gt;
	&lt;a href="#codice"&gt;
		CODICE
	&lt;/a&gt;
&lt;/h2&gt;


&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Interfaccia che rappresenta un arco pesato.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;export&lt;/span&gt; &lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;Edge&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;node&lt;/span&gt;: &lt;span class="kt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;weight&lt;/span&gt;: &lt;span class="kt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Implementazione di un grafo generico pesato e non orientato.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @typeParam E - Tipo dei vertici
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;export&lt;/span&gt; &lt;span class="kr"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;NotOrientedGraph&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;private&lt;/span&gt; &lt;span class="nx"&gt;adjacencyList&lt;/span&gt;: &lt;span class="kt"&gt;Record&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;Edge&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;[]&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;adjacencyList&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Aggiunge un vertice al grafo.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Se il vertice è già presente, non fa nulla.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param vertex - Il vertice da aggiungere
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;aggiungiVertice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;vertex&lt;/span&gt;: &lt;span class="kt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;vertex&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;adjacencyList&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;adjacencyList&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Aggiunge un arco pesato non orientato tra due vertici.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Se i vertici non esistono, vengono creati automaticamente.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param vertex1 - Primo vertice
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param vertex2 - Secondo vertice
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param weight - Peso dell&amp;#39;arco
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;aggiungiArco&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;vertex1&lt;/span&gt;: &lt;span class="kt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;vertex2&lt;/span&gt;: &lt;span class="kt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;weight&lt;/span&gt;: &lt;span class="kt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;v1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;vertex1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;v2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;vertex2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;adjacencyList&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;v1&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;aggiungiVertice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;vertex1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;adjacencyList&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;v2&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;aggiungiVertice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;vertex2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;adjacencyList&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;v1&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;node&lt;/span&gt;: &lt;span class="kt"&gt;vertex2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;weight&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;adjacencyList&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;v2&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;node&lt;/span&gt;: &lt;span class="kt"&gt;vertex1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;weight&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Rimuove un arco tra due vertici, se esiste.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param vertex1 - Primo vertice
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param vertex2 - Secondo vertice
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;rimuoviArco&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;vertex1&lt;/span&gt;: &lt;span class="kt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;vertex2&lt;/span&gt;: &lt;span class="kt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;v1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;vertex1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;v2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;vertex2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;adjacencyList&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;v1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;adjacencyList&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;v1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;edge&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;edge&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="nx"&gt;vertex2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;adjacencyList&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;v2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;adjacencyList&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;v2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;edge&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;edge&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="nx"&gt;vertex1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Rimuove un vertice e tutti i relativi archi.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param vertex - Il vertice da rimuovere
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;rimuoviVertice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;vertex&lt;/span&gt;: &lt;span class="kt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;v&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;vertex&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;adjacencyList&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;v&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;adjacentEdge&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;adjacencyList&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;v&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;pop&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="kr"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;Edge&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rimuoviArco&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;vertex&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;adjacentEdge&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;delete&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;adjacencyList&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;v&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Visualizza il grafo in console.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;display&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;vertex&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;adjacencyList&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;edges&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;adjacencyList&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;vertex&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;rappresentazione&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;edges&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;edges&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;(&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;weight&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;)`&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;, &amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;NULL&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;vertex&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt; -&amp;gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;rappresentazione&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Verifica se il grafo è connesso.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @returns true se il grafo è connesso, false altrimenti
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;verificaConnesso&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;boolean&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;visitati&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Set&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;vertices&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;adjacencyList&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;vertices&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// grafo vuoto = connesso
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;dfs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;vertex&lt;/span&gt;: &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;visitati&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;vertex&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;edge&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;adjacencyList&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;vertex&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;edge&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;visitati&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;has&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;dfs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;dfs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;vertices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;vertices&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;visitati&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;size&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Visita in ampiezza (BFS) a partire da un vertice.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param start - Vertice di partenza
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @returns Lista dei vertici visitati in ordine BFS
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;visitaAmpiezza&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;start&lt;/span&gt;: &lt;span class="kt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;E&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;: &lt;span class="kt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;visitati&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Set&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;queue&lt;/span&gt;: &lt;span class="kt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;start&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;visitati&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;start&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;nodo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;shift&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="kr"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;E&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nodo&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;edge&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;adjacencyList&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nodo&lt;/span&gt;&lt;span class="p"&gt;)])&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;edge&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;visitati&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;has&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;visitati&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;edge&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Visita in profondità (DFS) a partire da un vertice.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param start - Vertice di partenza
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @returns Lista dei vertici visitati in ordine DFS
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;visitaProfondita&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;start&lt;/span&gt;: &lt;span class="kt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;E&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;: &lt;span class="kt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;visitati&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Set&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;dfs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;vertex&lt;/span&gt;: &lt;span class="kt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;visitati&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;vertex&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;vertex&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;edge&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;adjacencyList&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;vertex&lt;/span&gt;&lt;span class="p"&gt;)])&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;visitati&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;has&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;edge&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;dfs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;edge&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;dfs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;start&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Restituisce tutti i vertici del grafo
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @returns tutti i vertici del grafo
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;getVertices&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;E&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;verticesSet&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Set&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;key&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;adjacencyList&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;verticesSet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt; &lt;span class="kr"&gt;as&lt;/span&gt; &lt;span class="kt"&gt;unknown&lt;/span&gt; &lt;span class="kr"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;E&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;edge&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;adjacencyList&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;verticesSet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;edge&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kr"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;verticesSet&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Restituisce tutti gli archi senza duplicati
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @returns tutti gli archi senza duplicati
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;getEdges&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="kr"&gt;from&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;E&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt;: &lt;span class="kt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;weight&lt;/span&gt;: &lt;span class="kt"&gt;number&lt;/span&gt; &lt;span class="p"&gt;}[]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;edges&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="kr"&gt;from&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;E&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt;: &lt;span class="kt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;weight&lt;/span&gt;: &lt;span class="kt"&gt;number&lt;/span&gt; &lt;span class="p"&gt;}[]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;visited&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Set&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;key&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;adjacencyList&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;edge&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;adjacencyList&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Crea un id unico indipendente dall&amp;#39;ordine dei nodi
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;edge&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;)].&lt;/span&gt;&lt;span class="nx"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;-&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;visited&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;has&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;edges&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="kr"&gt;from&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;key&lt;/span&gt; &lt;span class="kr"&gt;as&lt;/span&gt; &lt;span class="kt"&gt;unknown&lt;/span&gt; &lt;span class="kr"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;E&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt;: &lt;span class="kt"&gt;edge.node&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;weight&lt;/span&gt;: &lt;span class="kt"&gt;edge.weight&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;visited&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;edges&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Fornisce la lista di adiacenza dei nodi del grafo 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @returns lista di adiacenza
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;getAdjacencyList&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;adjacencyList&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// =============================
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Test della struttura dati
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// =============================
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;graph&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;NotOrientedGraph&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;graph&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;aggiungiVertice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;A&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;graph&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;aggiungiVertice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;B&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;graph&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;aggiungiVertice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;C&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;graph&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;aggiungiArco&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;A&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;B&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;graph&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;aggiungiArco&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;A&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;C&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;graph&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;aggiungiArco&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;B&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;C&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;graph&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;display&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;\nGrafo connesso:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;graph&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;verificaConnesso&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Visita in ampiezza da A:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;graph&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;visitaAmpiezza&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;A&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Visita in profondità da A:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;graph&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;visitaProfondita&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;A&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;graph&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rimuoviArco&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;A&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;C&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;\nDopo aver rimosso l&amp;#39;arco A-C:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;graph&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;display&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;graph&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rimuoviVertice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;B&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;\nDopo aver rimosso il vertice B:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;graph&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;display&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;\nGrafo connesso:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;graph&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;verificaConnesso&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Visita in ampiezza da A:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;graph&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;visitaAmpiezza&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;A&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Visita in profondità da A:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;graph&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;visitaProfondita&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;A&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>AlgoritmiTeoria - 7 - graph - oriented-graph</title><link>https://bacarotech.github.io/blog/2026/algoritmiteoria---7---graph---oriented-graph/</link><pubDate>Wed, 25 Feb 2026 14:00:07 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/algoritmiteoria---7---graph---oriented-graph/</guid><description>&lt;h1 id="struttura-dati-grafo-orientato" class="no-underline "&gt;
	&lt;a href="#struttura-dati-grafo-orientato"&gt;
		STRUTTURA DATI: GRAFO ORIENTATO
	&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;Un &lt;strong&gt;grafo orientato&lt;/strong&gt; è una collezione di nodi (vertici) connessi da archi direzionati,
dove ciascun arco rappresenta una relazione unidirezionale tra due nodi.&lt;/p&gt;
&lt;h2 id="proprietà-principali" class="no-underline "&gt;
	&lt;a href="#propriet%c3%a0-principali"&gt;
		PROPRIETÀ PRINCIPALI
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Rappresentato come coppia (V, E):
&lt;ul&gt;
&lt;li&gt;V → insieme dei vertici (nodi).&lt;/li&gt;
&lt;li&gt;E → insieme degli archi (coppie ordinate di vertici).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Gli archi hanno direzione:&lt;br&gt;
se esiste un arco da &lt;code&gt;A&lt;/code&gt; a &lt;code&gt;B&lt;/code&gt;, si può navigare &lt;strong&gt;solo da A a B&lt;/strong&gt; e non viceversa.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="terminologia" class="no-underline "&gt;
	&lt;a href="#terminologia"&gt;
		TERMINOLOGIA
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Vertice (Vertex)&lt;/strong&gt; → un nodo del grafo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Arco (Edge)&lt;/strong&gt; → connessione direzionata tra due vertici.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Grado di Entrata (In-Degree)&lt;/strong&gt; → numero di archi che arrivano a un vertice.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Grado di Uscita (Out-Degree)&lt;/strong&gt; → numero di archi che partono da un vertice.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Percorso (Path)&lt;/strong&gt; → sequenza di vertici connessi da archi direzionati.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ciclo (Cycle)&lt;/strong&gt; → percorso chiuso (inizio = fine).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Componente Fortemente Connessa&lt;/strong&gt; → sottoinsieme di vertici in cui ogni coppia
è raggiungibile reciprocamente.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="operazioni-principali" class="no-underline "&gt;
	&lt;a href="#operazioni-principali"&gt;
		OPERAZIONI PRINCIPALI
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;aggiungiVertice(v)&lt;/code&gt; → inserisce un nuovo vertice.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;aggiungiArco(v1, v2)&lt;/code&gt; → crea un arco orientato da &lt;code&gt;v1&lt;/code&gt; a &lt;code&gt;v2&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rimuoviArco(v1, v2)&lt;/code&gt; → elimina l&amp;rsquo;arco orientato da &lt;code&gt;v1&lt;/code&gt; a &lt;code&gt;v2&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rimuoviVertice(v)&lt;/code&gt; → elimina un vertice e tutti i suoi archi.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;verificaConnesso()&lt;/code&gt; → controlla se il grafo è fortemente connesso.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;visitaAmpiezza(v)&lt;/code&gt; → BFS a partire da un vertice.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;visitaProfondità(v)&lt;/code&gt; → DFS a partire da un vertice.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="rappresentazione" class="no-underline "&gt;
	&lt;a href="#rappresentazione"&gt;
		RAPPRESENTAZIONE
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Lista di adiacenza&lt;/strong&gt; (più comune):&lt;br&gt;
Esempio → { A: [B, C], B: [D], C: [], D: [B] }&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Matrice di adiacenza&lt;/strong&gt; (più adatta in grafi densi).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="efficienza" class="no-underline "&gt;
	&lt;a href="#efficienza"&gt;
		EFFICIENZA
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Inserimento vertice → &lt;strong&gt;O(1)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Inserimento arco → &lt;strong&gt;O(1)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Rimozione arco → &lt;strong&gt;O(d)&lt;/strong&gt; (d = grado di uscita del vertice).&lt;/li&gt;
&lt;li&gt;Attraversamento BFS/DFS → &lt;strong&gt;O(V + E)&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="applicazioni" class="no-underline "&gt;
	&lt;a href="#applicazioni"&gt;
		APPLICAZIONI
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Reti sociali con relazioni asimmetriche.&lt;/li&gt;
&lt;li&gt;Modellazione di flussi di dati.&lt;/li&gt;
&lt;li&gt;Reti di computer.&lt;/li&gt;
&lt;li&gt;Pianificazione di percorsi con direzione.&lt;/li&gt;
&lt;li&gt;Analisi di dipendenze in sistemi complessi.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="vantaggi" class="no-underline "&gt;
	&lt;a href="#vantaggi"&gt;
		VANTAGGI
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Modellano in modo naturale relazioni asimmetriche.&lt;/li&gt;
&lt;li&gt;Utili per processi sequenziali e dipendenze.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="limitazioni" class="no-underline "&gt;
	&lt;a href="#limitazioni"&gt;
		LIMITAZIONI
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Più complessi da visualizzare rispetto ai grafi non orientati.&lt;/li&gt;
&lt;li&gt;La connettività richiede algoritmi specifici.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="note" class="no-underline "&gt;
	&lt;a href="#note"&gt;
		NOTE
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Base per algoritmi fondamentali:
&lt;ul&gt;
&lt;li&gt;calcolo delle componenti fortemente connesse,&lt;/li&gt;
&lt;li&gt;rilevamento di cicli orientati,&lt;/li&gt;
&lt;li&gt;calcolo dei percorsi minimi.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="codice" class="no-underline "&gt;
	&lt;a href="#codice"&gt;
		CODICE
	&lt;/a&gt;
&lt;/h2&gt;


&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Classe che rappresenta un arco orientato e pesato
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;export&lt;/span&gt; &lt;span class="kr"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;Edge&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;nodo&lt;/span&gt;: &lt;span class="kt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;peso&lt;/span&gt;: &lt;span class="kt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nodo&lt;/span&gt;: &lt;span class="kt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;peso&lt;/span&gt;: &lt;span class="kt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nodo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;nodo&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;peso&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;peso&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Classe che rappresenta un grafo orientato pesato
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;export&lt;/span&gt; &lt;span class="kr"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;DirectedGraph&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;private&lt;/span&gt; &lt;span class="nx"&gt;adjacencyList&lt;/span&gt;: &lt;span class="kt"&gt;Map&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;Edge&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;[]&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;adjacencyList&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Map&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Aggiunge un vertice al grafo.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Se il vertice esiste già, non fa nulla.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;aggiungiVertice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;vertex&lt;/span&gt;: &lt;span class="kt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;adjacencyList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;has&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;vertex&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;adjacencyList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kr"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;vertex&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;	 * Fornisce la lista di adiacenza dei nodi del grafo 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;	 * @returns lista di adiacenza
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;	 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;getAdjacencyList&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;adjacencyList&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Aggiunge un arco orientato e pesato tra due vertici.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Se i vertici non esistono, vengono creati automaticamente.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;aggiungiArco&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;from&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;E&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt;: &lt;span class="kt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;peso&lt;/span&gt;: &lt;span class="kt"&gt;number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;adjacencyList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;has&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;from&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;aggiungiVertice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;from&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;adjacencyList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;has&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;aggiungiVertice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;adjacencyList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kr"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;from&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Edge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;peso&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Rimuove un arco orientato dal grafo.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;rimuoviArco&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;from&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;E&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt;: &lt;span class="kt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;adjacencyList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;has&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;from&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;adjacencyList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kr"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;from&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;adjacencyList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kr"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;from&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;edge&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;edge&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nodo&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Rimuove un vertice e tutti gli archi entranti/ uscenti.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;rimuoviVertice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;vertex&lt;/span&gt;: &lt;span class="kt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;adjacencyList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;vertex&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;edges&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;adjacencyList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;entries&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;adjacencyList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kr"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;edges&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;edge&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;edge&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nodo&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="nx"&gt;vertex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Visualizza il grafo (lista di adiacenza).
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;display&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;vertex&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;edges&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;adjacencyList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;entries&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;out&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;edges&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nodo&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;(&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;peso&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;)`&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;, &amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;vertex&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt; -&amp;gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;out&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;NULL&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Verifica se il grafo è fortemente connesso.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * (Semplificato: controlla raggiungibilità da un nodo di partenza)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;verificaConnesso&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;boolean&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;vertices&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kr"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;adjacencyList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;vertices&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;visitati&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Set&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;dfs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;start&lt;/span&gt;: &lt;span class="kt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;stack&lt;/span&gt;: &lt;span class="kt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;start&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;visitati&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;start&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;v&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pop&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;vicino&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;adjacencyList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kr"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;v&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;visitati&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;has&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;vicino&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nodo&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;visitati&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;vicino&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nodo&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;vicino&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nodo&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;dfs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;vertices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;visitati&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;size&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;vertices&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Visita in ampiezza (BFS).
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;visitaAmpiezza&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;start&lt;/span&gt;: &lt;span class="kt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;E&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;visitati&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Set&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;risultato&lt;/span&gt;: &lt;span class="kt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;coda&lt;/span&gt;: &lt;span class="kt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;start&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;visitati&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;start&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;coda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;nodo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;coda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;shift&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;risultato&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nodo&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;vicino&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;adjacencyList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kr"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nodo&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;visitati&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;has&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;vicino&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nodo&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;visitati&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;vicino&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nodo&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;coda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;vicino&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nodo&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;risultato&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Visita in profondità (DFS).
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;visitaProfondita&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;start&lt;/span&gt;: &lt;span class="kt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;E&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;visitati&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Set&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;risultato&lt;/span&gt;: &lt;span class="kt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;dfs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;v&lt;/span&gt;: &lt;span class="kt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;visitati&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;v&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;risultato&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;v&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;vicino&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;adjacencyList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kr"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;v&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;visitati&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;has&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;vicino&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nodo&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;dfs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;vicino&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nodo&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;dfs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;start&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;risultato&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// =============================
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Test della struttura dati
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// =============================
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;graphTest&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;DirectedGraph&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;graphTest&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;aggiungiVertice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;A&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;graphTest&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;aggiungiVertice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;B&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;graphTest&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;aggiungiVertice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;C&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;graphTest&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;aggiungiArco&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;A&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;B&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;graphTest&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;aggiungiArco&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;A&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;C&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;graphTest&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;aggiungiArco&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;B&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;C&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;graphTest&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;display&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;\nGrafo fortemente connesso:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;graphTest&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;verificaConnesso&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Visita in ampiezza da A:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;graphTest&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;visitaAmpiezza&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;A&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Visita in profondità da A:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;graphTest&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;visitaProfondita&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;A&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;graphTest&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rimuoviArco&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;A&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;C&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;\nDopo aver rimosso l&amp;#39;arco A-&amp;gt;C:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;graphTest&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;display&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;graphTest&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rimuoviVertice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;B&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;\nDopo aver rimosso il vertice B:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;graphTest&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;display&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>AlgoritmiTeoria - 7 - graph - prim</title><link>https://bacarotech.github.io/blog/2026/algoritmiteoria---7---graph---prim/</link><pubDate>Wed, 25 Feb 2026 14:00:07 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/algoritmiteoria---7---graph---prim/</guid><description>&lt;h1 id="algoritmo-prim" class="no-underline "&gt;
	&lt;a href="#algoritmo-prim"&gt;
		ALGORITMO: PRIM
	&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;L&amp;rsquo;&lt;strong&gt;algoritmo di Prim&lt;/strong&gt; è utilizzato per trovare un &lt;strong&gt;albero ricoprente minimo (Minimum Spanning Tree - MST)&lt;/strong&gt;
in un grafo &lt;strong&gt;connesso e pesato&lt;/strong&gt;.&lt;br&gt;
L&amp;rsquo;MST collega tutti i vertici senza formare cicli e minimizza la somma dei pesi degli archi inclusi.&lt;/p&gt;
&lt;h2 id="terminologia" class="no-underline "&gt;
	&lt;a href="#terminologia"&gt;
		TERMINOLOGIA
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Vertice (Vertex)&lt;/strong&gt; → nodo del grafo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Arco Pesato (Weighted Edge)&lt;/strong&gt; → connessione tra due vertici con un peso associato.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Albero Ricoprente (Spanning Tree)&lt;/strong&gt; → sottoinsieme di archi che collega tutti i vertici senza cicli.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MST (Minimum Spanning Tree)&lt;/strong&gt; → albero ricoprente con somma minima dei pesi degli archi.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Nodo Visitato / Non Visitato&lt;/strong&gt; → stato dei vertici durante l&amp;rsquo;esecuzione dell&amp;rsquo;algoritmo.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="funzionamento-dellalgoritmo" class="no-underline "&gt;
	&lt;a href="#funzionamento-dellalgoritmo"&gt;
		FUNZIONAMENTO DELL&amp;rsquo;ALGORITMO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Scegli un nodo sorgente e aggiungilo al MST.&lt;/li&gt;
&lt;li&gt;Seleziona l&amp;rsquo;&lt;strong&gt;arco più leggero&lt;/strong&gt; che connette un nodo del MST con un nodo &lt;strong&gt;non ancora incluso&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Aggiungi il nodo collegato al MST e marca come visitato.&lt;/li&gt;
&lt;li&gt;Ripeti fino a includere tutti i nodi.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="strutture-di-supporto" class="no-underline "&gt;
	&lt;a href="#strutture-di-supporto"&gt;
		STRUTTURE DI SUPPORTO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Coda di priorità (Min-Heap)&lt;/strong&gt; → per selezionare rapidamente l&amp;rsquo;arco di peso minimo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Array / Lista di adiacenza&lt;/strong&gt; → per memorizzare il grafo pesato.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="complessità" class="no-underline "&gt;
	&lt;a href="#complessit%c3%a0"&gt;
		COMPLESSITÀ
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Tempo → &lt;strong&gt;O(E log V)&lt;/strong&gt; con coda di priorità.&lt;/li&gt;
&lt;li&gt;Spazio → &lt;strong&gt;O(V + E)&lt;/strong&gt; per memorizzare il grafo e le strutture ausiliarie.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="esempio-di-utilizzo" class="no-underline "&gt;
	&lt;a href="#esempio-di-utilizzo"&gt;
		ESEMPIO DI UTILIZZO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Grafo con archi pesati:
A - B(4), A - C(2), B - C(1), B - D(5), C - D(3)&lt;/p&gt;</description></item><item><title>AlgoritmiTeoria - 6 - tree - AVL tree</title><link>https://bacarotech.github.io/blog/2026/algoritmiteoria---6---tree---avl-tree/</link><pubDate>Wed, 25 Feb 2026 14:00:06 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/algoritmiteoria---6---tree---avl-tree/</guid><description>&lt;h1 id="struttura-dati-albero-avl" class="no-underline "&gt;
	&lt;a href="#struttura-dati-albero-avl"&gt;
		STRUTTURA DATI: ALBERO AVL
	&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;L&amp;rsquo;&lt;strong&gt;Albero AVL&lt;/strong&gt; (Adelson-Velsky e Landis) è una variante bilanciata
dei &lt;strong&gt;Binary Search Tree (BST)&lt;/strong&gt;.&lt;br&gt;
Mantiene l&amp;rsquo;altezza dei sottoalberi sempre bilanciata, evitando il problema
degli alberi sbilanciati e garantendo prestazioni efficienti.&lt;/p&gt;
&lt;h2 id="proprietà-di-bilanciamento" class="no-underline "&gt;
	&lt;a href="#propriet%c3%a0-di-bilanciamento"&gt;
		PROPRIETÀ DI BILANCIAMENTO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Per ogni nodo &lt;code&gt;N&lt;/code&gt;:&lt;br&gt;
|altezza(sottoalbero sinistro) - altezza(sottoalbero destro)| ≤ 1&lt;/p&gt;
&lt;p&gt;Questa proprietà viene mantenuta &lt;strong&gt;dinamicamente&lt;/strong&gt; attraverso &lt;strong&gt;rotazioni&lt;/strong&gt;
dopo inserimenti o eliminazioni.&lt;/p&gt;
&lt;h2 id="proprietà-di-ricerca" class="no-underline "&gt;
	&lt;a href="#propriet%c3%a0-di-ricerca"&gt;
		PROPRIETÀ DI RICERCA
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Come in un &lt;strong&gt;BST&lt;/strong&gt;:&lt;/p&gt;</description></item><item><title>AlgoritmiTeoria - 6 - tree - binary search tree</title><link>https://bacarotech.github.io/blog/2026/algoritmiteoria---6---tree---binary-search-tree/</link><pubDate>Wed, 25 Feb 2026 14:00:06 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/algoritmiteoria---6---tree---binary-search-tree/</guid><description>&lt;h1 id="struttura-dati-albero-binario-di-ricerca-bst" class="no-underline "&gt;
	&lt;a href="#struttura-dati-albero-binario-di-ricerca-bst"&gt;
		STRUTTURA DATI: ALBERO BINARIO DI RICERCA (BST)
	&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;Un &lt;strong&gt;Binary Search Tree (BST)&lt;/strong&gt; è una struttura dati ad albero
che organizza i valori in modo ordinato per consentire
ricerca, inserimento e rimozione efficienti.&lt;/p&gt;
&lt;h2 id="proprietà-di-ricerca" class="no-underline "&gt;
	&lt;a href="#propriet%c3%a0-di-ricerca"&gt;
		PROPRIETÀ DI RICERCA
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Ogni nodo contiene un valore univoco.&lt;/li&gt;
&lt;li&gt;Per ogni nodo &lt;code&gt;N&lt;/code&gt;:
&lt;ul&gt;
&lt;li&gt;Sottoalbero sinistro → valori &amp;lt; &lt;code&gt;N.value&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Sottoalbero destro → valori &amp;gt; &lt;code&gt;N.value&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Grazie a questa proprietà, è possibile sfruttare
la &lt;strong&gt;ricerca binaria&lt;/strong&gt; durante la navigazione.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="terminologia" class="no-underline "&gt;
	&lt;a href="#terminologia"&gt;
		TERMINOLOGIA
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Nodo&lt;/strong&gt; → contiene un valore e i puntatori a sinistra e destra.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Radice (Root)&lt;/strong&gt; → nodo principale dell&amp;rsquo;albero.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Foglia (Leaf)&lt;/strong&gt; → nodo senza figli.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Padre (Parent)&lt;/strong&gt; → nodo con almeno un figlio.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Figlio (Child)&lt;/strong&gt; → nodo collegato a un padre.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sottoalbero (Subtree)&lt;/strong&gt; → albero discendente da un nodo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Altezza dell&amp;rsquo;Albero&lt;/strong&gt; → percorso più lungo dalla radice a una foglia.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="operazioni-principali" class="no-underline "&gt;
	&lt;a href="#operazioni-principali"&gt;
		OPERAZIONI PRINCIPALI
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;inserisci(valore)&lt;/code&gt; → aggiunge un nodo rispettando la proprietà BST.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cerca(valore)&lt;/code&gt; → verifica la presenza di un valore.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;elimina(valore)&lt;/code&gt; → rimuove un nodo:
&lt;ul&gt;
&lt;li&gt;Nessun figlio → eliminato direttamente.&lt;/li&gt;
&lt;li&gt;Un figlio → sostituito con il figlio.&lt;/li&gt;
&lt;li&gt;Due figli → sostituito dal successore in ordine (minimo del sottoalbero destro).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;visitaInOrdine()&lt;/code&gt; → restituisce valori ordinati crescenti.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;visitaPreOrdine()&lt;/code&gt; → visita radice → sottoalbero sinistro → sottoalbero destro.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;visitaPostOrdine()&lt;/code&gt; → visita sottoalberi → radice.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;altezza()&lt;/code&gt; → calcola la profondità massima.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;contaNodi()&lt;/code&gt; → numero totale di nodi.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="operazioni-ausiliarie" class="no-underline "&gt;
	&lt;a href="#operazioni-ausiliarie"&gt;
		OPERAZIONI AUSILIARIE
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;getMin()&lt;/code&gt; → valore minimo (nodo più a sinistra).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;getMax()&lt;/code&gt; → valore massimo (nodo più a destra).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;isBalanced()&lt;/code&gt; → verifica che le altezze dei sottoalberi
differiscano al massimo di 1.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="efficienza" class="no-underline "&gt;
	&lt;a href="#efficienza"&gt;
		EFFICIENZA
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Ricerca → &lt;strong&gt;O(log n)&lt;/strong&gt; (medio), &lt;strong&gt;O(n)&lt;/strong&gt; (peggiore caso).&lt;/li&gt;
&lt;li&gt;Inserimento → &lt;strong&gt;O(log n)&lt;/strong&gt; (medio), &lt;strong&gt;O(n)&lt;/strong&gt; (peggiore caso).&lt;/li&gt;
&lt;li&gt;Eliminazione → &lt;strong&gt;O(log n)&lt;/strong&gt; (medio), &lt;strong&gt;O(n)&lt;/strong&gt; (peggiore caso).&lt;/li&gt;
&lt;li&gt;Spazio → &lt;strong&gt;O(n)&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="applicazioni" class="no-underline "&gt;
	&lt;a href="#applicazioni"&gt;
		APPLICAZIONI
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Strutture di database.&lt;/li&gt;
&lt;li&gt;Implementazioni di insiemi e mappe ordinate.&lt;/li&gt;
&lt;li&gt;Algoritmi di ordinamento.&lt;/li&gt;
&lt;li&gt;Gestione di intervalli e dati gerarchici.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="note" class="no-underline "&gt;
	&lt;a href="#note"&gt;
		NOTE
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Più semplice rispetto ad AVL.&lt;/li&gt;
&lt;li&gt;Non garantisce bilanciamento automatico.&lt;/li&gt;
&lt;li&gt;Può degradare in una lista se i dati sono inseriti in ordine.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="codice" class="no-underline "&gt;
	&lt;a href="#codice"&gt;
		CODICE
	&lt;/a&gt;
&lt;/h2&gt;


&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;Node&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;value&lt;/span&gt;: &lt;span class="kt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;left&lt;/span&gt;: &lt;span class="kt"&gt;Node&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;right&lt;/span&gt;: &lt;span class="kt"&gt;Node&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;: &lt;span class="kt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;left&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;right&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;BinarySearchTree&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;root&lt;/span&gt;: &lt;span class="kt"&gt;Node&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Inserisce un valore nell&amp;#39;albero rispettando la proprieta di ricerca
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param value valore da inserire nell&amp;#39;albero
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @returns nuovo nodo inserito
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;insert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;: &lt;span class="kt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Node&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;newNode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Node&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;newNode&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;current&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// valori duplicati non consentiti
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;left&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;left&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;newNode&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;current&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;left&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;right&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;right&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;newNode&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;current&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;right&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Cerca un valore nell&amp;#39;albero sfruttando la proprietà di ricerca
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param value valore da cercare nell&amp;#39;albero
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @returns true se esiste un nodo con il valore &amp;#34;value&amp;#34;, false altrimenti
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;: &lt;span class="kt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;boolean&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;current&lt;/span&gt;: &lt;span class="kt"&gt;Node&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;current&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;left&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;current&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;right&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Funzione ausiliaria che effettua l&amp;#39;eleminazione
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param node nodo da cui deve partire l&amp;#39;eliminazione, valore di partenza la radice
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param value valore da eliminare
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @returns nuova radice dell&amp;#39;albero
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;private&lt;/span&gt; &lt;span class="nx"&gt;auxRemove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;: &lt;span class="kt"&gt;Node&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;: &lt;span class="kt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Node&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;left&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;auxRemove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;left&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;right&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;auxRemove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;right&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Caso 1: Nessun figlio
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;left&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;right&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Caso 2: Un figlio
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;left&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;right&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;right&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;left&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Caso 3: Due figli
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;temp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getMin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;right&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;temp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;temp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;right&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;auxRemove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;right&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;temp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Rimuove un nodo dall&amp;#39;albero
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param value valore del nodo da eliminare
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;remove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;: &lt;span class="kt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;auxRemove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Trova il valore minimo in un sottoalbero sfruttando la proprietà di ricerca
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param node nodo da cui deve partire la ricerca, valore di partenza la radice
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @returns nodo con il valore minimo, null se l&amp;#39;albero è vuoto
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;getMin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;: &lt;span class="kt"&gt;Node&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Node&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;left&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;node&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;left&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Trova il valore massimo in un sottoalbero sfruttando la proprietà di ricerca
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param node nodo da cui deve partire la ricerca, valore di partenza la radice
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @returns nodo con il valore massimo, null se l&amp;#39;albero è vuoto
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;getMax&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;: &lt;span class="kt"&gt;Node&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Node&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;right&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;node&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;right&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Funzione ausiliara che detrmina se l&amp;#39;albero radicato su nodo in input è bilanciato o meno
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param node nodo da verificare se è bilanciato
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @returns oggetto con contenuto se è bilanciato o meno e l&amp;#39;altezza
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;private&lt;/span&gt; &lt;span class="nx"&gt;isBalancedAux&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;: &lt;span class="kt"&gt;Node&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;balanced&lt;/span&gt;: &lt;span class="kt"&gt;boolean&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;height&lt;/span&gt;: &lt;span class="kt"&gt;number&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;balanced&lt;/span&gt;: &lt;span class="kt"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;height&lt;/span&gt;: &lt;span class="kt"&gt;0&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;left&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isBalancedAux&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;left&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;right&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isBalancedAux&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;right&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;balanced&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;left&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;balanced&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;right&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;balanced&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;abs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;left&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;height&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;right&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;height&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;height&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;left&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;height&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;right&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;height&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;balanced&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;height&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Verifica che l&amp;#39;albero è bilanciato
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @returns oggetto con contenuto se è bilanciato o meno e l&amp;#39;altezza 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;isBalanced&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;balanced&lt;/span&gt;: &lt;span class="kt"&gt;boolean&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;height&lt;/span&gt;: &lt;span class="kt"&gt;number&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isBalancedAux&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Visita in ordine dell&amp;#39;albero
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @returns array con i
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;inOrderTraversal&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;E&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;: &lt;span class="kt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;auxInOrderTraversal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Ritorna l&amp;#39;albero in ordine (in-order traversal)[sx - r - dx]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param node nodo da cui far partire la visita, di solito la radice
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param result array contenente i valori in ordine in base alla visita
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;auxInOrderTraversal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;: &lt;span class="kt"&gt;Node&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;: &lt;span class="kt"&gt;E&lt;/span&gt;&lt;span class="p"&gt;[])&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;left&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;auxInOrderTraversal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;left&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;right&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;auxInOrderTraversal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;right&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// test della struttura dati
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;bst&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;BinarySearchTree&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;bst&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;insert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;bst&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;insert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;bst&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;insert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;bst&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;insert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;bst&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;insert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;bst&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;insert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;13&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;bst&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;insert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Attraversamento in preordine:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;bst&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;inOrderTraversal&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Ricerca di valori:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Cerca 7:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;bst&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Cerca 20:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;bst&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Eliminazione di un nodo (10)&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;bst&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;remove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Attraversamento in preordine dopo aver rimosso il 10:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;bst&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;inOrderTraversal&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>AlgoritmiTeoria - 6 - tree - binary tree</title><link>https://bacarotech.github.io/blog/2026/algoritmiteoria---6---tree---binary-tree/</link><pubDate>Wed, 25 Feb 2026 14:00:06 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/algoritmiteoria---6---tree---binary-tree/</guid><description>&lt;h1 id="struttura-dati-albero-binario" class="no-underline "&gt;
	&lt;a href="#struttura-dati-albero-binario"&gt;
		STRUTTURA DATI: ALBERO BINARIO
	&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;L&amp;rsquo;&lt;strong&gt;Albero Binario&lt;/strong&gt; è una struttura dati gerarchica formata da nodi,
dove ciascun nodo può avere al massimo &lt;strong&gt;due figli&lt;/strong&gt;:&lt;br&gt;
➡ un &lt;strong&gt;figlio sinistro&lt;/strong&gt; e un &lt;strong&gt;figlio destro&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;È ideale per rappresentare dati con relazioni gerarchiche e per
implementare altre strutture complesse (es. BST, Heap, Alberi Bilanciati).&lt;/p&gt;
&lt;h2 id="terminologia" class="no-underline "&gt;
	&lt;a href="#terminologia"&gt;
		TERMINOLOGIA
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Nodo&lt;/strong&gt; → elemento dell&amp;rsquo;albero contenente un valore e puntatori ai figli.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Radice (Root)&lt;/strong&gt; → il nodo principale, punto di partenza di tutte le operazioni.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Foglia (Leaf)&lt;/strong&gt; → nodo senza figli.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Padre (Parent)&lt;/strong&gt; → nodo che ha almeno un figlio.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Figlio (Child)&lt;/strong&gt; → nodo collegato a un padre.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fratelli (Siblings)&lt;/strong&gt; → nodi che condividono lo stesso padre.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sottoalbero (Subtree)&lt;/strong&gt; → albero derivato da un nodo specifico.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Albero Vuoto&lt;/strong&gt; → struttura senza nodi (radice nulla).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Profondità (Depth)&lt;/strong&gt; → distanza di un nodo dalla radice.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Altezza di un Nodo&lt;/strong&gt; → distanza fino alla foglia più lontana.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Livello (Level)&lt;/strong&gt; → insieme dei nodi alla stessa profondità.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Altezza dell&amp;rsquo;Albero&lt;/strong&gt; → percorso più lungo radice → foglia.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dimensione (Size)&lt;/strong&gt; → numero totale di nodi.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="operazioni-di-visita" class="no-underline "&gt;
	&lt;a href="#operazioni-di-visita"&gt;
		OPERAZIONI DI VISITA
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Pre-Ordine&lt;/strong&gt; → Nodo → Sottoalbero Sinistro → Sottoalbero Destro.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;In-Ordine&lt;/strong&gt; → Sottoalbero Sinistro → Nodo → Sottoalbero Destro.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Post-Ordine&lt;/strong&gt; → Sottoalbero Sinistro → Sottoalbero Destro → Nodo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Per Livelli (Level-Order)&lt;/strong&gt; → attraversamento livello per livello (con una coda).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="operazioni-principali" class="no-underline "&gt;
	&lt;a href="#operazioni-principali"&gt;
		OPERAZIONI PRINCIPALI
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;inserisci(valore)&lt;/code&gt; → aggiunge un nuovo nodo nell&amp;rsquo;albero.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cerca(valore)&lt;/code&gt; → verifica se un valore è presente.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;elimina(valore)&lt;/code&gt; → rimuove un nodo con valore specifico.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;visitaInOrdine()&lt;/code&gt; → restituisce i valori in ordine simmetrico.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;visitaPreOrdine()&lt;/code&gt; → attraversa prima il nodo, poi i sottoalberi.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;visitaPostOrdine()&lt;/code&gt; → attraversa prima i sottoalberi, poi il nodo.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;altezza()&lt;/code&gt; → calcola la profondità massima.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;contaNodi()&lt;/code&gt; → restituisce il numero totale di nodi.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="prestazioni" class="no-underline "&gt;
	&lt;a href="#prestazioni"&gt;
		PRESTAZIONI
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Alberi &lt;strong&gt;bilanciati&lt;/strong&gt;:&lt;br&gt;
• Inserimento → &lt;strong&gt;O(log n)&lt;/strong&gt;&lt;br&gt;
• Ricerca → &lt;strong&gt;O(log n)&lt;/strong&gt;&lt;br&gt;
• Eliminazione → &lt;strong&gt;O(log n)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Alberi &lt;strong&gt;sbilanciati&lt;/strong&gt;:&lt;br&gt;
• Tutte le operazioni possono degradare a &lt;strong&gt;O(n)&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;➡ L&amp;rsquo;efficienza dipende dal bilanciamento dell&amp;rsquo;albero.&lt;/p&gt;</description></item><item><title>AlgoritmiTeoria - 6 - tree - k-tree</title><link>https://bacarotech.github.io/blog/2026/algoritmiteoria---6---tree---k-tree/</link><pubDate>Wed, 25 Feb 2026 14:00:06 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/algoritmiteoria---6---tree---k-tree/</guid><description>&lt;h1 id="struttura-dati-k-ary-tree" class="no-underline "&gt;
	&lt;a href="#struttura-dati-k-ary-tree"&gt;
		STRUTTURA DATI: K-ARY TREE
	&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;Un &lt;strong&gt;K-Ary Tree&lt;/strong&gt; è una struttura dati gerarchica in cui ogni nodo può
avere al massimo &lt;strong&gt;K figli&lt;/strong&gt;.&lt;br&gt;
È una generalizzazione dell&amp;rsquo;albero binario (dove K=2) e viene usato in
contesti dove servono più di due rami di navigazione.&lt;/p&gt;
&lt;h2 id="quando-usarlo" class="no-underline "&gt;
	&lt;a href="#quando-usarlo"&gt;
		QUANDO USARLO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Implementazione di &lt;strong&gt;B-Tree&lt;/strong&gt; e &lt;strong&gt;B+ Tree&lt;/strong&gt; per database.&lt;/li&gt;
&lt;li&gt;File system gerarchici.&lt;/li&gt;
&lt;li&gt;rappresentazione di &lt;strong&gt;alberi di decisione&lt;/strong&gt; con più alternative.&lt;/li&gt;
&lt;li&gt;Strutture per &lt;strong&gt;trie&lt;/strong&gt; (alberi di prefissi).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="terminologia" class="no-underline "&gt;
	&lt;a href="#terminologia"&gt;
		TERMINOLOGIA
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;K&lt;/strong&gt; → numero massimo di figli per ogni nodo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Nodo&lt;/strong&gt; → contenitore del valore e array di figli.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Radice (Root)&lt;/strong&gt; → nodo principale dell&amp;rsquo;albero.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Foglia (Leaf)&lt;/strong&gt; → nodo senza figli.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Altezza&lt;/strong&gt; → percorso più lungo dalla radice a una foglia.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Profondità&lt;/strong&gt; → livello del nodo (radice = 0).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="operazioni-principali" class="no-underline "&gt;
	&lt;a href="#operazioni-principali"&gt;
		OPERAZIONI PRINCIPALI
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;inserisci(valore, parent)&lt;/code&gt; → aggiunge un nodo come figlio di parent.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cerca(valore)&lt;/code&gt; → verifica la presenza di un valore.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rimuovi(valore)&lt;/code&gt; → rimuove un nodo e i suoi discendenti.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;visitaLivelli()&lt;/code&gt; → attraversamento livello per livello.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;contaNodi()&lt;/code&gt; → numero totale di nodi.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;getProfondità()&lt;/code&gt; → profondità massima dell&amp;rsquo;albero.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="implementazione" class="no-underline "&gt;
	&lt;a href="#implementazione"&gt;
		IMPLEMENTAZIONE
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Ogni nodo ha un array &lt;code&gt;figli&lt;/code&gt; di dimensione massima K.&lt;/li&gt;
&lt;li&gt;L&amp;rsquo;inserimento fillows la prima posizione disponibile nell&amp;rsquo;array.&lt;/li&gt;
&lt;li&gt;La ricerca è tipicamente in ampiezza (BFS) o profondità (DFS).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="prestazioni" class="no-underline "&gt;
	&lt;a href="#prestazioni"&gt;
		PRESTAZIONI
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Inserimento → &lt;strong&gt;O(1)&lt;/strong&gt; (se c&amp;rsquo;è spazio nel parent), altrimenti ricerca.&lt;/li&gt;
&lt;li&gt;Ricerca → &lt;strong&gt;O(n)&lt;/strong&gt; (caso peggiore, bisogna visitare tutti i nodi).&lt;/li&gt;
&lt;li&gt;Attraversamento → &lt;strong&gt;O(n)&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="note" class="no-underline "&gt;
	&lt;a href="#note"&gt;
		NOTE
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Più flessibile dell&amp;rsquo;albero binario per rappresentare strutture complesse.&lt;/li&gt;
&lt;li&gt;L&amp;rsquo;efficienza dipende dalla scelta di K e dalla distribuzione dei figli.&lt;/li&gt;
&lt;li&gt;Spesso usato come base per algoritmi ottimizzati di ricerca.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="codice" class="no-underline "&gt;
	&lt;a href="#codice"&gt;
		CODICE
	&lt;/a&gt;
&lt;/h2&gt;


&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;KNode&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;T&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;value&lt;/span&gt;: &lt;span class="kt"&gt;T&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;children&lt;/span&gt;: &lt;span class="kt"&gt;KNode&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;T&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;[];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;: &lt;span class="kt"&gt;T&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;KTree&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;T&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;root&lt;/span&gt;: &lt;span class="kt"&gt;KNode&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;T&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;k&lt;/span&gt;: &lt;span class="kt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// massimo numero di figli
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;k&lt;/span&gt;: &lt;span class="kt"&gt;number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;k&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;k&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Inserisce un nodo come figlio di un nodo padre esistente
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param value valore del nuovo nodo
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param parentValue valore del nodo padre (se null, inserisce alla radice)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @returns true se l&amp;#39;inserimento è riuscito, false altrimenti
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;insert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;: &lt;span class="kt"&gt;T&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;parentValue&lt;/span&gt;: &lt;span class="kt"&gt;T&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;boolean&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;newNode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;KNode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Se non c&amp;#39;è radice, il primo nodo diventa radice
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;parentValue&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;newNode&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Se parentValue è null, inserisci alla radice
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;parentValue&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;k&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newNode&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Trova il padre e inserisci
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;insertNode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;parentValue&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;newNode&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Funzione ausiliaria ricorsiva per inserire un nodo
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;private&lt;/span&gt; &lt;span class="nx"&gt;insertNode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;: &lt;span class="kt"&gt;KNode&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;T&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;,&lt;/span&gt; &lt;span class="nx"&gt;parentValue&lt;/span&gt;: &lt;span class="kt"&gt;T&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;newNode&lt;/span&gt;: &lt;span class="kt"&gt;KNode&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;T&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;boolean&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;parentValue&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;k&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newNode&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Cerca nei figli
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;child&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;insertNode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;child&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;parentValue&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;newNode&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Cerca un valore nell&amp;#39;albero
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param value valore da cercare
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @returns true se trovato, false altrimenti
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;: &lt;span class="kt"&gt;T&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;boolean&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;searchNode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Funzione ausiliaria per la ricerca
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;private&lt;/span&gt; &lt;span class="nx"&gt;searchNode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;: &lt;span class="kt"&gt;KNode&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;T&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;,&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;: &lt;span class="kt"&gt;T&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;boolean&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;child&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;searchNode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;child&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Attraversamento livello per livello (BFS)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @returns array con i valori nell&amp;#39;ordine di visita
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;levelOrderTraversal&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;: &lt;span class="kt"&gt;T&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;queue&lt;/span&gt;: &lt;span class="kt"&gt;KNode&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;T&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;[]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;shift&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;child&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;child&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Conta il numero totale di nodi
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @returns numero di nodi
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;countNodes&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;number&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;countNodesRecursive&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Funzione ausiliaria per contare i nodi
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;private&lt;/span&gt; &lt;span class="nx"&gt;countNodesRecursive&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;: &lt;span class="kt"&gt;KNode&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;T&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;number&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;child&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;count&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;countNodesRecursive&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;child&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Calcola la profondità massima dell&amp;#39;albero
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @returns profondità massima
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;getDepth&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;number&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getDepthRecursive&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Funzione ausiliaria per calcolare la profondità
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;private&lt;/span&gt; &lt;span class="nx"&gt;getDepthRecursive&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;: &lt;span class="kt"&gt;KNode&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;T&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;number&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;maxDepth&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;child&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;maxDepth&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;maxDepth&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getDepthRecursive&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;child&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;maxDepth&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Esempio d&amp;#39;uso
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;kTree&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;KTree&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// K = 3
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;kTree&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;insert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Radice
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;kTree&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;insert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Figlio di 1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;kTree&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;insert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Figlio di 1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;kTree&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;insert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Figlio di 1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;kTree&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;insert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Figlio di 2
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;kTree&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;insert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Figlio di 2
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Attraversamento livello per livello:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;kTree&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;levelOrderTraversal&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Cerca 5:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;kTree&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Cerca 10:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;kTree&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Numero nodi:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;kTree&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;countNodes&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Profondità:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;kTree&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getDepth&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>AlgoritmiTeoria - 5 - map - map</title><link>https://bacarotech.github.io/blog/2026/algoritmiteoria---5---map---map/</link><pubDate>Wed, 25 Feb 2026 14:00:05 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/algoritmiteoria---5---map---map/</guid><description>&lt;h1 id="struttura-dati-mymap" class="no-underline "&gt;
	&lt;a href="#struttura-dati-mymap"&gt;
		STRUTTURA DATI: MYMAP
	&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;La &lt;strong&gt;MyMap&lt;/strong&gt; è una struttura dati che implementa il concetto di
&lt;strong&gt;mappa (o dizionario)&lt;/strong&gt;:&lt;br&gt;
➡ Consente di memorizzare e recuperare coppie &lt;strong&gt;chiave-valore&lt;/strong&gt;
in modo rapido ed efficiente.&lt;/p&gt;
&lt;p&gt;È ideale per scenari dove occorre associare un identificatore
a un valore, ad esempio:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;rubrica telefonica (nome → numero),&lt;/li&gt;
&lt;li&gt;cache di dati,&lt;/li&gt;
&lt;li&gt;configurazioni applicative.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="struttura-interna" class="no-underline "&gt;
	&lt;a href="#struttura-interna"&gt;
		STRUTTURA INTERNA
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Utilizza un &lt;strong&gt;array&lt;/strong&gt; come struttura sottostante.&lt;/li&gt;
&lt;li&gt;Una &lt;strong&gt;funzione di hash&lt;/strong&gt; converte la chiave in un indice dell&amp;rsquo;array.&lt;/li&gt;
&lt;li&gt;In caso di collisione (più chiavi con stesso indice), viene
utilizzato il &lt;strong&gt;chaining&lt;/strong&gt; → ogni bucket contiene una lista di coppie
&lt;code&gt;[chiave, valore]&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="operazioni-principali" class="no-underline "&gt;
	&lt;a href="#operazioni-principali"&gt;
		OPERAZIONI PRINCIPALI
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;set(key, value)&lt;/code&gt; → inserisce una nuova coppia o aggiorna il valore se la chiave esiste già.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;get(key)&lt;/code&gt; → restituisce il valore associato a una chiave, oppure &lt;code&gt;undefined&lt;/code&gt; se non trovata.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;has(key)&lt;/code&gt; → verifica se una chiave è presente nella mappa (true/false).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;delete(key)&lt;/code&gt; → rimuove una coppia chiave-valore, restituisce &lt;code&gt;true&lt;/code&gt; se eliminata, altrimenti &lt;code&gt;false&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;keys()&lt;/code&gt; → restituisce un array contenente tutte le chiavi.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;values()&lt;/code&gt; → restituisce un array contenente tutti i valori.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;size()&lt;/code&gt; → restituisce il numero totale di coppie presenti.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;clear()&lt;/code&gt; → rimuove tutte le coppie chiave-valore.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="prestazioni" class="no-underline "&gt;
	&lt;a href="#prestazioni"&gt;
		PRESTAZIONI
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;set&lt;/code&gt; → &lt;strong&gt;O(1)&lt;/strong&gt; in media, &lt;strong&gt;O(n)&lt;/strong&gt; in caso di collisioni estreme.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;get&lt;/code&gt; → &lt;strong&gt;O(1)&lt;/strong&gt; in media, &lt;strong&gt;O(n)&lt;/strong&gt; in caso di collisioni estreme.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;has&lt;/code&gt; → &lt;strong&gt;O(1)&lt;/strong&gt; in media.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;delete&lt;/code&gt; → &lt;strong&gt;O(1)&lt;/strong&gt; in media.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;keys&lt;/code&gt; / &lt;code&gt;values&lt;/code&gt; → &lt;strong&gt;O(n)&lt;/strong&gt; (serve attraversare tutti i bucket).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;➡ La mappa è molto efficiente per la maggior parte delle operazioni,
ma la qualità della funzione di hash influisce notevolmente sulle prestazioni.&lt;/p&gt;</description></item><item><title>AlgoritmiTeoria - 4 - queue - queue</title><link>https://bacarotech.github.io/blog/2026/algoritmiteoria---4---queue---queue/</link><pubDate>Wed, 25 Feb 2026 14:00:04 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/algoritmiteoria---4---queue---queue/</guid><description>&lt;h1 id="struttura-dati-queue-coda" class="no-underline "&gt;
	&lt;a href="#struttura-dati-queue-coda"&gt;
		STRUTTURA DATI: QUEUE (CODA)
	&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;La &lt;strong&gt;Queue&lt;/strong&gt; (coda) è una struttura dati lineare che segue il principio
&lt;strong&gt;FIFO (First In, First Out)&lt;/strong&gt;:&lt;br&gt;
➡ Il primo elemento inserito è anche il primo a essere rimosso.&lt;/p&gt;
&lt;p&gt;È ideale per gestire dati in ordine di arrivo, come:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;gestione delle richieste in un server,&lt;/li&gt;
&lt;li&gt;code di stampa,&lt;/li&gt;
&lt;li&gt;algoritmi di scheduling dei processi.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="struttura-interna" class="no-underline "&gt;
	&lt;a href="#struttura-interna"&gt;
		STRUTTURA INTERNA
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Gli elementi vengono &lt;strong&gt;inseriti in fondo&lt;/strong&gt; (enqueue).&lt;/li&gt;
&lt;li&gt;Gli elementi vengono &lt;strong&gt;rimossi dalla testa&lt;/strong&gt; (dequeue).&lt;/li&gt;
&lt;li&gt;L&amp;rsquo;ordine di arrivo viene sempre rispettato.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="operazioni-principali" class="no-underline "&gt;
	&lt;a href="#operazioni-principali"&gt;
		OPERAZIONI PRINCIPALI
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;enqueue(element)&lt;/code&gt; → inserisce un elemento in fondo alla coda.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dequeue()&lt;/code&gt; → rimuove e restituisce l&amp;rsquo;elemento in testa (oppure &lt;code&gt;undefined&lt;/code&gt; se vuota).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;peek()&lt;/code&gt; → restituisce l&amp;rsquo;elemento in testa senza rimuoverlo.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;isEmpty()&lt;/code&gt; → restituisce &lt;code&gt;true&lt;/code&gt; se la coda è vuota, &lt;code&gt;false&lt;/code&gt; altrimenti.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;size()&lt;/code&gt; → restituisce il numero di elementi nella coda.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;printQueue()&lt;/code&gt; → stampa tutti gli elementi dalla testa alla fine.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="prestazioni" class="no-underline "&gt;
	&lt;a href="#prestazioni"&gt;
		PRESTAZIONI
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;enqueue&lt;/code&gt; → &lt;strong&gt;O(1)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dequeue&lt;/code&gt; → &lt;strong&gt;O(1)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;peek&lt;/code&gt; → &lt;strong&gt;O(1)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;isEmpty&lt;/code&gt; → &lt;strong&gt;O(1)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;size&lt;/code&gt; → &lt;strong&gt;O(1)&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;➡ Tutte le operazioni principali sono in tempo costante.&lt;br&gt;
La coda è particolarmente efficiente per scenari di gestione in tempo reale.&lt;/p&gt;</description></item><item><title>AlgoritmiTeoria - 3 - stack - stack</title><link>https://bacarotech.github.io/blog/2026/algoritmiteoria---3---stack---stack/</link><pubDate>Wed, 25 Feb 2026 14:00:03 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/algoritmiteoria---3---stack---stack/</guid><description>&lt;h1 id="struttura-dati-stack-pila" class="no-underline "&gt;
	&lt;a href="#struttura-dati-stack-pila"&gt;
		STRUTTURA DATI: STACK (PILA)
	&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;Lo &lt;strong&gt;Stack&lt;/strong&gt; (pila) è una struttura dati lineare che segue il principio
&lt;strong&gt;LIFO (Last In, First Out)&lt;/strong&gt;:&lt;br&gt;
➡ L&amp;rsquo;ultimo elemento inserito è il primo a essere rimosso.&lt;/p&gt;
&lt;p&gt;È molto utile in contesti in cui i dati devono essere gestiti in ordine
inverso rispetto all&amp;rsquo;inserimento, ad esempio:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;gestione delle chiamate annidate (call stack),&lt;/li&gt;
&lt;li&gt;algoritmi di backtracking,&lt;/li&gt;
&lt;li&gt;undo/redo in editor di testo.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="struttura-interna" class="no-underline "&gt;
	&lt;a href="#struttura-interna"&gt;
		STRUTTURA INTERNA
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Gli elementi vengono inseriti e rimossi &lt;strong&gt;solo dalla cima&lt;/strong&gt; (top).&lt;/li&gt;
&lt;li&gt;Gli elementi sottostanti restano temporaneamente &lt;strong&gt;inaccessibili&lt;/strong&gt; finché
non si rimuove quello in cima.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="operazioni-principali" class="no-underline "&gt;
	&lt;a href="#operazioni-principali"&gt;
		OPERAZIONI PRINCIPALI
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;push(element)&lt;/code&gt; → inserisce un elemento in cima allo stack.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pop()&lt;/code&gt; → rimuove e restituisce l&amp;rsquo;elemento in cima (oppure &lt;code&gt;undefined&lt;/code&gt; se vuoto).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;peek()&lt;/code&gt; → restituisce l&amp;rsquo;elemento in cima senza rimuoverlo.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;isEmpty()&lt;/code&gt; → restituisce &lt;code&gt;true&lt;/code&gt; se la pila è vuota, &lt;code&gt;false&lt;/code&gt; altrimenti.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;size()&lt;/code&gt; → restituisce il numero di elementi nello stack.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;printStack()&lt;/code&gt; → stampa tutti gli elementi dallo &lt;strong&gt;top&lt;/strong&gt; alla &lt;strong&gt;base&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="prestazioni" class="no-underline "&gt;
	&lt;a href="#prestazioni"&gt;
		PRESTAZIONI
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;push&lt;/code&gt; → &lt;strong&gt;O(1)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pop&lt;/code&gt; → &lt;strong&gt;O(1)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;peek&lt;/code&gt; → &lt;strong&gt;O(1)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;isEmpty&lt;/code&gt; → &lt;strong&gt;O(1)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;size&lt;/code&gt; → &lt;strong&gt;O(1)&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;➡ Tutte le operazioni avvengono in tempo costante, poiché non richiedono
spostamenti o ridistribuzioni degli elementi.&lt;/p&gt;</description></item><item><title>AlgoritmiTeoria - 2 - list - linked list</title><link>https://bacarotech.github.io/blog/2026/algoritmiteoria---2---list---linked-list/</link><pubDate>Wed, 25 Feb 2026 14:00:02 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/algoritmiteoria---2---list---linked-list/</guid><description>&lt;h1 id="struttura-dati-lista-semplice" class="no-underline "&gt;
	&lt;a href="#struttura-dati-lista-semplice"&gt;
		STRUTTURA DATI: LISTA SEMPLICE
	&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;La &lt;strong&gt;Lista Semplice&lt;/strong&gt; è una struttura dati dinamica composta da nodi
collegati tra loro.&lt;br&gt;
A differenza degli array, non ha una dimensione fissa e permette di
inserire o rimuovere elementi senza dover ridimensionare l&amp;rsquo;intera
struttura.&lt;br&gt;
L&amp;rsquo;accesso agli elementi, però, è &lt;strong&gt;sequenziale&lt;/strong&gt;, poiché non esiste un
indice diretto.&lt;/p&gt;
&lt;h2 id="struttura-interna" class="no-underline "&gt;
	&lt;a href="#struttura-interna"&gt;
		STRUTTURA INTERNA
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Ogni &lt;strong&gt;nodo&lt;/strong&gt; della lista è composto da due campi:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;data&lt;/code&gt;: il valore contenuto nel nodo.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;next&lt;/code&gt;: riferimento al nodo successivo (oppure &lt;code&gt;null&lt;/code&gt; se è l&amp;rsquo;ultimo).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La lista è gestita tramite un puntatore alla &lt;strong&gt;testa&lt;/strong&gt; (head), che
rappresenta il primo nodo e consente di accedere all&amp;rsquo;intera struttura.&lt;/p&gt;</description></item><item><title>AlgoritmiTeoria - 1 - array - binary search</title><link>https://bacarotech.github.io/blog/2026/algoritmiteoria---1---array---binary-search/</link><pubDate>Wed, 25 Feb 2026 14:00:01 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/algoritmiteoria---1---array---binary-search/</guid><description>&lt;h1 id="algoritmo-ricerca-binaria" class="no-underline "&gt;
	&lt;a href="#algoritmo-ricerca-binaria"&gt;
		ALGORITMO: RICERCA BINARIA
	&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;La ricerca binaria è un algoritmo che consente di verificare se un
elemento è presente all&amp;rsquo;interno di un array ordinato.
Funziona dividendo progressivamente l&amp;rsquo;array a metà fino a trovare
l&amp;rsquo;elemento cercato o determinare che non esiste.&lt;/p&gt;
&lt;h2 id="quando-usarlo" class="no-underline "&gt;
	&lt;a href="#quando-usarlo"&gt;
		QUANDO USARLO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Vuoi cercare un elemento in un array &lt;strong&gt;ordinato&lt;/strong&gt; (crescente o decrescente).&lt;/li&gt;
&lt;li&gt;Vuoi ridurre i tempi di ricerca rispetto alla scansione sequenziale.&lt;/li&gt;
&lt;li&gt;Vuoi un algoritmo efficiente con complessità logaritmica.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="funzionamento" class="no-underline "&gt;
	&lt;a href="#funzionamento"&gt;
		FUNZIONAMENTO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Si considerano gli estremi dell&amp;rsquo;array (inizialmente 0 e n-1).&lt;/li&gt;
&lt;li&gt;Si calcola l&amp;rsquo;indice dell&amp;rsquo;elemento centrale.&lt;/li&gt;
&lt;li&gt;Si confronta l&amp;rsquo;elemento centrale con quello da cercare:&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Se uguale&lt;/strong&gt;, restituisce la posizione.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Se maggiore&lt;/strong&gt;, si ripete la ricerca nella prima metà.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Se minore&lt;/strong&gt;, si ripete la ricerca nella seconda metà.&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start="4"&gt;
&lt;li&gt;Il processo continua fino a trovare l&amp;rsquo;elemento o esaurire l&amp;rsquo;array.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="output" class="no-underline "&gt;
	&lt;a href="#output"&gt;
		OUTPUT
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Restituisce la posizione (tra 0 e n-1) se l&amp;rsquo;elemento è presente.&lt;/li&gt;
&lt;li&gt;Restituisce &lt;code&gt;-1&lt;/code&gt; se l&amp;rsquo;elemento non è stato trovato.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="complessità" class="no-underline "&gt;
	&lt;a href="#complessit%c3%a0"&gt;
		COMPLESSITÀ
	&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Caso peggiore:&lt;/strong&gt; O(log n)
a ogni passo la dimensione del problema si dimezza.&lt;/p&gt;</description></item><item><title>AlgoritmiTeoria - 1 - array - bubble sort</title><link>https://bacarotech.github.io/blog/2026/algoritmiteoria---1---array---bubble-sort/</link><pubDate>Wed, 25 Feb 2026 14:00:01 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/algoritmiteoria---1---array---bubble-sort/</guid><description>&lt;h1 id="algoritmo-bubble-sort" class="no-underline "&gt;
	&lt;a href="#algoritmo-bubble-sort"&gt;
		ALGORITMO: BUBBLE SORT
	&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;Il Bubble Sort è un algoritmo di ordinamento semplice che riordina un
array confrontando ripetutamente coppie di elementi adiacenti e
scambiandoli se sono nell&amp;rsquo;ordine sbagliato.
Il processo continua finché l&amp;rsquo;array non risulta ordinato.&lt;/p&gt;
&lt;p&gt;Visualizzazione:
&lt;a class="a-post interlink-script" href="https://en.wikipedia.org/wiki/Bubble_sort#/media/File:Bubble-sort-example-300px.gif" target="_blank"&gt;https://en.wikipedia.org/wiki/Bubble_sort#/media/File:Bubble-sort-example-300px.gif&amp;nbsp;&amp;nbsp;&lt;i class="fa-whiteboard fa-semibold fa-link"&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;h2 id="quando-usarlo" class="no-underline "&gt;
	&lt;a href="#quando-usarlo"&gt;
		QUANDO USARLO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Vuoi un algoritmo di ordinamento &lt;strong&gt;semplice da comprendere e implementare&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Stai lavorando con array di piccole dimensioni.&lt;/li&gt;
&lt;li&gt;Vuoi un algoritmo didattico per introdurre i concetti di ordinamento.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="funzionamento" class="no-underline "&gt;
	&lt;a href="#funzionamento"&gt;
		FUNZIONAMENTO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Si confrontano due elementi consecutivi:&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Se il primo ≤ il secondo&lt;/strong&gt;, non si fa nulla.
Esempio: (1, 3) → (1, 3)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Se il primo &amp;gt; il secondo&lt;/strong&gt;, si scambiano.
Esempio: (3, 2) → (2, 3)&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start="2"&gt;
&lt;li&gt;Questo confronto viene fatto per tutte le coppie di elementi.&lt;/li&gt;
&lt;li&gt;Una scansione completa dell&amp;rsquo;array si chiama &lt;strong&gt;passata&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Alla fine di ogni passata, l&amp;rsquo;elemento più grande &amp;ldquo;scivola&amp;rdquo; in fondo
all&amp;rsquo;array, nella sua posizione definitiva.&lt;/li&gt;
&lt;li&gt;L&amp;rsquo;algoritmo termina quando una passata non esegue alcuno scambio.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="output" class="no-underline "&gt;
	&lt;a href="#output"&gt;
		OUTPUT
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Restituisce l&amp;rsquo;array ordinato.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="complessità" class="no-underline "&gt;
	&lt;a href="#complessit%c3%a0"&gt;
		COMPLESSITÀ
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Caso migliore:&lt;/strong&gt; O(n)
(quando l&amp;rsquo;array è già ordinato, basta una sola passata).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Caso medio:&lt;/strong&gt; O(n²)
(numerosi scambi distribuiti tra le passate).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Caso peggiore:&lt;/strong&gt; O(n²)
(array ordinato al contrario, massimo numero di scambi).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="note" class="no-underline "&gt;
	&lt;a href="#note"&gt;
		NOTE
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;È un algoritmo &lt;strong&gt;semplice ma inefficiente&lt;/strong&gt; per array grandi.&lt;/li&gt;
&lt;li&gt;È stabile (non cambia l&amp;rsquo;ordine relativo di elementi uguali).&lt;/li&gt;
&lt;li&gt;Non è adatto a contesti pratici di ordinamento su grandi dataset.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="codice" class="no-underline "&gt;
	&lt;a href="#codice"&gt;
		CODICE
	&lt;/a&gt;
&lt;/h2&gt;


&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Ordina l&amp;#39;array seguendo le logiche del bubbleSort
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param arr array da ordinare
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @returns array ordinato
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;bblSort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;: &lt;span class="kt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;[])&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;j&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;j&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;				&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;temp&lt;/span&gt;: &lt;span class="kt"&gt;number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;				&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;				&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;temp&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Test sort
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;234&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;43&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;55&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;63&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;235&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;547&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;TEST DEL BUBBLESORT&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Pre ordinamento:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sorted&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;bblSort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Post ordinamento:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;sorted&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>AlgoritmiTeoria - 1 - array - counting sort</title><link>https://bacarotech.github.io/blog/2026/algoritmiteoria---1---array---counting-sort/</link><pubDate>Wed, 25 Feb 2026 14:00:01 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/algoritmiteoria---1---array---counting-sort/</guid><description>&lt;h1 id="algoritmo-counting-sort" class="no-underline "&gt;
	&lt;a href="#algoritmo-counting-sort"&gt;
		ALGORITMO: COUNTING SORT
	&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;Questo algoritmo permette di mettere in ordine un array in base agli elementi che lo compongono
visualizzazione: &lt;a class="a-post interlink-script" href="https://it.wikipedia.org/wiki/Counting_sort#/media/File:Counting_Sort_Animation.gif" target="_blank"&gt;https://it.wikipedia.org/wiki/Counting_sort#/media/File:Counting_Sort_Animation.gif&amp;nbsp;&amp;nbsp;&lt;i class="fa-whiteboard fa-semibold fa-link"&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Descrizione dell&amp;rsquo;algoritmo
Questo algoritmo presenta una &lt;strong&gt;precondizione fondamentale&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Gli elementi dell&amp;rsquo;array devono trovarsi in un intervallo compreso tra &lt;strong&gt;0&lt;/strong&gt; e &lt;strong&gt;K&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;La grandezza dell&amp;rsquo;intervallo determina anche la sua efficenza&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="funzionamento" class="no-underline "&gt;
	&lt;a href="#funzionamento"&gt;
		FUNZIONAMENTO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Creazione di un array di supporto:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Viene creato un array di supporto di dimensione &lt;strong&gt;K&lt;/strong&gt; chiamato &amp;ldquo;array delle occorrenze&amp;rdquo; (o &lt;code&gt;countArray&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Tutti i valori di questo array vengono inizializzati a &lt;strong&gt;0&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Conteggio delle occorrenze:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;L&amp;rsquo;algoritmo scorre l&amp;rsquo;array di partenza e utilizza ogni elemento come indice nell&amp;rsquo;array delle occorrenze.&lt;/li&gt;
&lt;li&gt;Incrementa il valore corrispondente in &lt;code&gt;countArray&lt;/code&gt; di 1.&lt;br&gt;
Esempio: se l&amp;rsquo;elemento è &lt;strong&gt;5&lt;/strong&gt;, viene eseguito &lt;code&gt;countArray[5]++&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Calcolo delle somme prefix:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Viene modificato l&amp;rsquo;array delle occorrenze per calcolare la somma cumulativa (o somma dei prefissi) per ogni indice.&lt;/li&gt;
&lt;li&gt;Ogni posizione di &lt;code&gt;countArray&lt;/code&gt; conterrà il numero totale di elementi minori o uguali a quell&amp;rsquo;indice.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ordinamento dell&amp;rsquo;array di partenza:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Utilizzando i prefissi calcolati nel passo precedente, l&amp;rsquo;algoritmo determina la posizione corretta di ogni elemento nell&amp;rsquo;array ordinato.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Questo processo garantisce un ordinamento stabile e rapido per array che soddisfano la precondizione iniziale.&lt;/p&gt;</description></item><item><title>AlgoritmiTeoria - 1 - array - insertion sort</title><link>https://bacarotech.github.io/blog/2026/algoritmiteoria---1---array---insertion-sort/</link><pubDate>Wed, 25 Feb 2026 14:00:01 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/algoritmiteoria---1---array---insertion-sort/</guid><description>&lt;h1 id="algoritmo-insertion-sort" class="no-underline "&gt;
	&lt;a href="#algoritmo-insertion-sort"&gt;
		ALGORITMO: INSERTION SORT
	&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;L&amp;rsquo;Insertion Sort è un algoritmo di ordinamento semplice e intuitivo, che
costruisce progressivamente una parte ordinata dell&amp;rsquo;array inserendo ogni
nuovo elemento nella posizione corretta.&lt;br&gt;
Funziona in modo simile al processo di ordinare manualmente le carte da
gioco in mano.&lt;/p&gt;
&lt;p&gt;Visualizzazione:&lt;br&gt;
&lt;a class="a-post interlink-script" href="https://it.wikipedia.org/wiki/Insertion_sort#/media/File:Sorting_insertion_sort_anim.gif" target="_blank"&gt;https://it.wikipedia.org/wiki/Insertion_sort#/media/File:Sorting_insertion_sort_anim.gif&amp;nbsp;&amp;nbsp;&lt;i class="fa-whiteboard fa-semibold fa-link"&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;h2 id="quando-usarlo" class="no-underline "&gt;
	&lt;a href="#quando-usarlo"&gt;
		QUANDO USARLO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;L&amp;rsquo;array ha &lt;strong&gt;piccole dimensioni&lt;/strong&gt; o è già &lt;strong&gt;quasi ordinato&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Vuoi un algoritmo semplice da implementare e stabile.&lt;/li&gt;
&lt;li&gt;È utile come parte di algoritmi più complessi (es. &lt;strong&gt;Shell Sort&lt;/strong&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="funzionamento" class="no-underline "&gt;
	&lt;a href="#funzionamento"&gt;
		FUNZIONAMENTO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Si assume che il primo elemento sia già ordinato.&lt;/li&gt;
&lt;li&gt;Per ogni elemento successivo (dal secondo fino all&amp;rsquo;ultimo):
&lt;ul&gt;
&lt;li&gt;Si confronta l&amp;rsquo;elemento con quelli nella parte ordinata.&lt;/li&gt;
&lt;li&gt;Se l&amp;rsquo;elemento è maggiore del massimo ordinato → viene posto in
fondo alla parte ordinata.&lt;/li&gt;
&lt;li&gt;Altrimenti, si spostano (shift) gli elementi più grandi di lui per
fare spazio e inserirlo nella posizione corretta.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;La parte ordinata cresce progressivamente di un elemento per volta,
fino a includere l&amp;rsquo;intero array.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="output" class="no-underline "&gt;
	&lt;a href="#output"&gt;
		OUTPUT
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Restituisce l&amp;rsquo;array ordinato.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="complessità" class="no-underline "&gt;
	&lt;a href="#complessit%c3%a0"&gt;
		COMPLESSITÀ
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Caso migliore:&lt;/strong&gt; O(n)&lt;br&gt;
(array già ordinato → basta un confronto per elemento).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Caso medio:&lt;/strong&gt; O(n²)&lt;br&gt;
(inserimenti distribuiti con vari spostamenti).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Caso peggiore:&lt;/strong&gt; O(n²)&lt;br&gt;
(array ordinato in senso opposto, massimo numero di spostamenti).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="note" class="no-underline "&gt;
	&lt;a href="#note"&gt;
		NOTE
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;È un algoritmo &lt;strong&gt;stabile&lt;/strong&gt; (mantiene l&amp;rsquo;ordine relativo di elementi uguali).&lt;/li&gt;
&lt;li&gt;Funziona bene su insiemi &lt;strong&gt;piccoli o quasi ordinati&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Per array grandi non è efficiente rispetto a QuickSort, MergeSort, ecc.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="codice" class="no-underline "&gt;
	&lt;a href="#codice"&gt;
		CODICE
	&lt;/a&gt;
&lt;/h2&gt;


&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Ordina l&amp;#39;array seguendo le logiche del insertionSort
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param arr array da ordinare
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @returns array ordinato
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;insertionSort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;: &lt;span class="kt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;[])&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;j&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="c1"&gt;// Sposta gli elementi maggiori di &amp;#34;key&amp;#34; una posizione avanti
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="nx"&gt;j&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;j&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Test sort
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;13&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;TEST DELL&amp;#39;INSERTIONSORT&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Pre ordinamento:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sorted&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;insertionSort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Post ordinamento:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;sorted&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>AlgoritmiTeoria - 1 - array - linear search</title><link>https://bacarotech.github.io/blog/2026/algoritmiteoria---1---array---linear-search/</link><pubDate>Wed, 25 Feb 2026 14:00:01 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/algoritmiteoria---1---array---linear-search/</guid><description>&lt;h1 id="algoritmo-ricerca-lineare" class="no-underline "&gt;
	&lt;a href="#algoritmo-ricerca-lineare"&gt;
		ALGORITMO: RICERCA LINEARE
	&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;La ricerca lineare è un algoritmo che consente di verificare se un
elemento è presente all&amp;rsquo;interno di un array.&lt;br&gt;
Non richiede che l&amp;rsquo;array sia ordinato: controlla gli elementi uno a uno
fino a trovare il valore cercato oppure fino alla fine dell&amp;rsquo;array.&lt;/p&gt;
&lt;h2 id="quando-usarlo" class="no-underline "&gt;
	&lt;a href="#quando-usarlo"&gt;
		QUANDO USARLO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Vuoi cercare un elemento in un array &lt;strong&gt;non ordinato&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;L&amp;rsquo;array è di piccole dimensioni, quindi la semplicità conta più
dell&amp;rsquo;efficienza.&lt;/li&gt;
&lt;li&gt;Non hai bisogno di strutture dati avanzate o logiche di ricerca complesse.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="funzionamento" class="no-underline "&gt;
	&lt;a href="#funzionamento"&gt;
		FUNZIONAMENTO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Si scorre l&amp;rsquo;array dall&amp;rsquo;inizio alla fine.&lt;/li&gt;
&lt;li&gt;Per ogni elemento si confronta con quello da cercare:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Se uguale&lt;/strong&gt;, restituisce la posizione e termina.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Se diverso&lt;/strong&gt;, continua con l&amp;rsquo;elemento successivo.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Se si arriva alla fine senza trovare l&amp;rsquo;elemento, l&amp;rsquo;algoritmo restituisce &lt;code&gt;-1&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="output" class="no-underline "&gt;
	&lt;a href="#output"&gt;
		OUTPUT
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Restituisce la posizione (tra 0 e n-1) se l&amp;rsquo;elemento è presente.&lt;/li&gt;
&lt;li&gt;Restituisce &lt;code&gt;-1&lt;/code&gt; se l&amp;rsquo;elemento non è stato trovato.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="complessità" class="no-underline "&gt;
	&lt;a href="#complessit%c3%a0"&gt;
		COMPLESSITÀ
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Caso migliore:&lt;/strong&gt; O(1)&lt;br&gt;
(se l&amp;rsquo;elemento si trova subito all&amp;rsquo;inizio).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Caso medio:&lt;/strong&gt; O(n)&lt;br&gt;
(in media deve scorrere metà dell&amp;rsquo;array).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Caso peggiore:&lt;/strong&gt; O(n)&lt;br&gt;
(se l&amp;rsquo;elemento è alla fine o non è presente).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="codice" class="no-underline "&gt;
	&lt;a href="#codice"&gt;
		CODICE
	&lt;/a&gt;
&lt;/h2&gt;


&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Ricerca di un elmento all&amp;#39;interno dell&amp;#39;array tramite scansione lineare
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param arr array sul quale dobbiamo fare la ricerca
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param x elemento da cercare
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @returns posizione dell&amp;#39;elemento all&amp;#39;interno dell&amp;#39;array se esiste, altrimenti -1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;linearSearch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;array&lt;/span&gt;: &lt;span class="kt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt;: &lt;span class="kt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;number&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Visualizza array:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Ricerca all&amp;#39;interno dell&amp;#39;array dell&amp;#39;elemento 8, indice:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;linearSearch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Ricerca all&amp;#39;interno dell&amp;#39;array dell&amp;#39;elemento 28, indice:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;linearSearch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;28&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>AlgoritmiTeoria - 1 - array - merge sort</title><link>https://bacarotech.github.io/blog/2026/algoritmiteoria---1---array---merge-sort/</link><pubDate>Wed, 25 Feb 2026 14:00:01 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/algoritmiteoria---1---array---merge-sort/</guid><description>&lt;h2 id="sortmergesortts" class="no-underline "&gt;
	&lt;a href="#sortmergesortts"&gt;
		sort/mergesort.ts
	&lt;/a&gt;
&lt;/h2&gt;
&lt;h1 id="algoritmo-merge-sort" class="no-underline "&gt;
	&lt;a href="#algoritmo-merge-sort"&gt;
		ALGORITMO: MERGE SORT
	&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;Il Merge Sort è un algoritmo di ordinamento basato sul paradigma
&lt;strong&gt;Divide et Impera&lt;/strong&gt;.&lt;br&gt;
Divide ricorsivamente l&amp;rsquo;array in parti sempre più piccole, le ordina e
poi le ricompone fino a ottenere l&amp;rsquo;array ordinato completo.&lt;/p&gt;
&lt;p&gt;Visualizzazione:&lt;br&gt;
&lt;a class="a-post interlink-script" href="https://it.wikipedia.org/wiki/Merge_sort#/media/File:Merge_sort_animation2.gif" target="_blank"&gt;https://it.wikipedia.org/wiki/Merge_sort#/media/File:Merge_sort_animation2.gif&amp;nbsp;&amp;nbsp;&lt;i class="fa-whiteboard fa-semibold fa-link"&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;h2 id="quando-usarlo" class="no-underline "&gt;
	&lt;a href="#quando-usarlo"&gt;
		QUANDO USARLO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;L&amp;rsquo;array è di &lt;strong&gt;grandi dimensioni&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Vuoi un algoritmo &lt;strong&gt;stabile&lt;/strong&gt; e con complessità garantita O(n log n).&lt;/li&gt;
&lt;li&gt;È utile quando serve un ordinamento prevedibile, indipendente dalla disposizione iniziale dei dati.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="funzionamento" class="no-underline "&gt;
	&lt;a href="#funzionamento"&gt;
		FUNZIONAMENTO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Divisione:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;L&amp;rsquo;array viene suddiviso ricorsivamente in due metà fino a ottenere
micro-array di un solo elemento.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ricombinazione ordinata (Merge):&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Due micro-array vengono uniti confrontando i loro elementi e
inserendoli in ordine crescente in un array temporaneo.&lt;/li&gt;
&lt;li&gt;Questo processo si ripete risalendo la ricorsione, fino a
ricomporre l&amp;rsquo;intero array ordinato.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="output" class="no-underline "&gt;
	&lt;a href="#output"&gt;
		OUTPUT
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Restituisce l&amp;rsquo;array ordinato sfruttando dei sottoarray&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="complessità" class="no-underline "&gt;
	&lt;a href="#complessit%c3%a0"&gt;
		COMPLESSITÀ
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Caso migliore:&lt;/strong&gt; O(n log n)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Caso medio:&lt;/strong&gt; O(n log n)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Caso peggiore:&lt;/strong&gt; O(n log n)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Nota di merito alla complessità spaziale aggiuntiva, che in questo caso è O(n) in quanto ho bisogno di un array di supporto grande quanto quello di input&lt;/p&gt;</description></item><item><title>AlgoritmiTeoria - 1 - array - quick sort</title><link>https://bacarotech.github.io/blog/2026/algoritmiteoria---1---array---quick-sort/</link><pubDate>Wed, 25 Feb 2026 14:00:01 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/algoritmiteoria---1---array---quick-sort/</guid><description>&lt;h1 id="algoritmo-quick-sort" class="no-underline "&gt;
	&lt;a href="#algoritmo-quick-sort"&gt;
		ALGORITMO: QUICK SORT
	&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;Il Quick Sort è un algoritmo di ordinamento &lt;strong&gt;Divide et Impera&lt;/strong&gt; che
suddivide ricorsivamente l&amp;rsquo;array intorno a un elemento chiamato &lt;strong&gt;pivot&lt;/strong&gt;.&lt;br&gt;
Gli elementi minori del pivot vengono posizionati a sinistra, quelli
maggiori a destra, e il processo viene ripetuto su entrambe le sotto-sezioni.&lt;/p&gt;
&lt;p&gt;Visualizzazione:&lt;br&gt;
&lt;a class="a-post interlink-script" href="https://en.wikipedia.org/wiki/Quicksort#/media/File:Sorting_quicksort_anim.gif" target="_blank"&gt;https://en.wikipedia.org/wiki/Quicksort#/media/File:Sorting_quicksort_anim.gif&amp;nbsp;&amp;nbsp;&lt;i class="fa-whiteboard fa-semibold fa-link"&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;h2 id="quando-usarlo" class="no-underline "&gt;
	&lt;a href="#quando-usarlo"&gt;
		QUANDO USARLO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Vuoi un algoritmo di ordinamento &lt;strong&gt;rapido&lt;/strong&gt; e con buona performance media.&lt;/li&gt;
&lt;li&gt;L&amp;rsquo;array è di grandi dimensioni.&lt;/li&gt;
&lt;li&gt;Puoi tollerare casi peggiori rari (O(n²)) con scelte di pivot non ottimali.&lt;/li&gt;
&lt;li&gt;È utile quando serve un algoritmo in-place (senza array aggiuntivi significativi).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="funzionamento" class="no-underline "&gt;
	&lt;a href="#funzionamento"&gt;
		FUNZIONAMENTO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Scelta del pivot:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Si seleziona un elemento dell&amp;rsquo;array (spesso primo, ultimo o centrale).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Partizionamento:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Gli elementi minori del pivot vengono spostati a sinistra.&lt;/li&gt;
&lt;li&gt;Gli elementi maggiori del pivot vengono spostati a destra.&lt;/li&gt;
&lt;li&gt;Il pivot viene posizionato nella sua posizione finale.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ricorsione:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;La procedura viene applicata ricorsivamente alla sotto-sezione sinistra e destra del pivot.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;L&amp;rsquo;array diventa ordinato quando tutte le sotto-sezioni sono ordinate.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="output" class="no-underline "&gt;
	&lt;a href="#output"&gt;
		OUTPUT
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Restituisce l&amp;rsquo;array ordinato come &lt;strong&gt;side effect&lt;/strong&gt; (modifica in-place).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="complessità" class="no-underline "&gt;
	&lt;a href="#complessit%c3%a0"&gt;
		COMPLESSITÀ
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Caso migliore:&lt;/strong&gt; O(n log n)&lt;br&gt;
(pivot divide sempre in modo bilanciato).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Caso medio:&lt;/strong&gt; O(n log n)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Caso peggiore:&lt;/strong&gt; O(n²)&lt;br&gt;
(pivot scelto male, ad esempio array già ordinato e pivot sempre massimo/minimo).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="note" class="no-underline "&gt;
	&lt;a href="#note"&gt;
		NOTE
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;È un algoritmo &lt;strong&gt;non stabile&lt;/strong&gt; (l&amp;rsquo;ordine relativo di elementi uguali può cambiare).&lt;/li&gt;
&lt;li&gt;Molto efficiente in media e con poca memoria aggiuntiva.&lt;/li&gt;
&lt;li&gt;L&amp;rsquo;uso di strategie di pivot migliori (es. pivot casuale) riduce il rischio di caso peggiore.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="codice" class="no-underline "&gt;
	&lt;a href="#codice"&gt;
		CODICE
	&lt;/a&gt;
&lt;/h2&gt;


&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Funzione ausiliaria del quickSort per individuare e posizionare correttamente il pivot
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param arr array da ordinare
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param low estremo sx dell&amp;#39;array
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param high estremo dx dell&amp;#39;array
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @returns la posizione del pivot una volta ordinato
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;partition&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;: &lt;span class="kt"&gt;any&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;low&lt;/span&gt;: &lt;span class="kt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;high&lt;/span&gt;: &lt;span class="kt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;number&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pivot&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;high&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt; &lt;span class="c1"&gt;// pivot finale
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;low&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;j&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;low&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;j&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="nx"&gt;high&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;pivot&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;// nessun !
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;high&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;high&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Ordina l&amp;#39;array seguendo le logiche del quickSort
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param arr array da ordinare
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param low estremo sx dell&amp;#39;array, valore di partenza 0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param high estremo dx dell&amp;#39;array, valore di partenza &amp;#34;dimensione dell&amp;#39;array - 1&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @returns array ordinato
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;quickSort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;: &lt;span class="kt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt; &lt;span class="nx"&gt;low&lt;/span&gt;: &lt;span class="kt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;high&lt;/span&gt;: &lt;span class="kt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;low&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;high&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pi&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;partition&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;low&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;high&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="nx"&gt;quickSort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;low&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;pi&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="nx"&gt;quickSort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;pi&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;high&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Test
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;TEST DEL QUICKSORT&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Pre ordinamento:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sorted&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;quickSort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Post ordinamento:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;sorted&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>AlgoritmiTeoria - 1 - array - radix sort</title><link>https://bacarotech.github.io/blog/2026/algoritmiteoria---1---array---radix-sort/</link><pubDate>Wed, 25 Feb 2026 14:00:01 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/algoritmiteoria---1---array---radix-sort/</guid><description>&lt;h1 id="algoritmo-radix-sort" class="no-underline "&gt;
	&lt;a href="#algoritmo-radix-sort"&gt;
		ALGORITMO: RADIX SORT
	&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;Il Radix Sort è un algoritmo di ordinamento &lt;strong&gt;non basato sui confronti&lt;/strong&gt; che
ordina i numeri considerando le loro cifre, dalla meno significativa
alla più significativa (LSD – Least Significant Digit).&lt;br&gt;
È molto efficiente quando gli elementi hanno un numero limitato di cifre.&lt;/p&gt;
&lt;p&gt;Visualizzazione:&lt;br&gt;
&lt;a class="a-post interlink-script" href="https://it.wikipedia.org/wiki/Radix_sort#/media/File:Radix.JPG" target="_blank"&gt;https://it.wikipedia.org/wiki/Radix_sort#/media/File:Radix.JPG&amp;nbsp;&amp;nbsp;&lt;i class="fa-whiteboard fa-semibold fa-link"&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;h2 id="quando-usarlo" class="no-underline "&gt;
	&lt;a href="#quando-usarlo"&gt;
		QUANDO USARLO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Gli elementi sono &lt;strong&gt;numeri interi non negativi&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Le cifre dei numeri si trovano in un intervallo limitato &lt;strong&gt;[0, K]&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Vuoi un ordinamento stabile e più efficiente di O(n log n) per insiemi di numeri con range limitato.&lt;/li&gt;
&lt;li&gt;Utile come base per algoritmi più complessi di ordinamento di grandi dataset.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="funzionamento" class="no-underline "&gt;
	&lt;a href="#funzionamento"&gt;
		FUNZIONAMENTO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Si considerano tutti i numeri dell&amp;rsquo;array.&lt;/li&gt;
&lt;li&gt;Si ordina ogni numero &lt;strong&gt;cifra per cifra&lt;/strong&gt;, partendo dalla cifra meno significativa (unità) fino alla più significativa:
&lt;ul&gt;
&lt;li&gt;Esempio: Array iniziale: 142, 456, 228
&lt;ul&gt;
&lt;li&gt;Passo 1: ordino le cifre meno significative → 142, 228, 456&lt;/li&gt;
&lt;li&gt;Passo 2: ordino le cifre successive → 142, 228, 456&lt;/li&gt;
&lt;li&gt;Passo 3: ordino le cifre più significative → 142, 228, 456&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Dopo l&amp;rsquo;ultima iterazione, l&amp;rsquo;array risulta completamente ordinato.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="output" class="no-underline "&gt;
	&lt;a href="#output"&gt;
		OUTPUT
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Restituisce l&amp;rsquo;array ordinato in modo &lt;strong&gt;stabile&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="complessità" class="no-underline "&gt;
	&lt;a href="#complessit%c3%a0"&gt;
		COMPLESSITÀ
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Caso migliore:&lt;/strong&gt; O(m(n + K))&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Caso medio:&lt;/strong&gt; O(m(n + K))&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Caso peggiore:&lt;/strong&gt; O(m(n + K))&lt;br&gt;
Dove:
&lt;ul&gt;
&lt;li&gt;m = numero di elementi nell&amp;rsquo;array&lt;/li&gt;
&lt;li&gt;n = numero di cifre di ciascun elemento&lt;/li&gt;
&lt;li&gt;K = valore massimo possibile delle cifre&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="note" class="no-underline "&gt;
	&lt;a href="#note"&gt;
		NOTE
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;È un algoritmo &lt;strong&gt;stabile&lt;/strong&gt;, quindi mantiene l&amp;rsquo;ordine relativo di elementi uguali.&lt;/li&gt;
&lt;li&gt;Non utilizza confronti diretti tra numeri.&lt;/li&gt;
&lt;li&gt;Particolarmente efficiente per grandi array di numeri con cifre limitate.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="codice" class="no-underline "&gt;
	&lt;a href="#codice"&gt;
		CODICE
	&lt;/a&gt;
&lt;/h2&gt;


&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Calcola la cifra di un numero in una certa posizione
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param num numero di partenza
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param place posizione di cui si vuole sapere la cifra
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @returns la cifra in posizione &amp;#34;place&amp;#34; del numero &amp;#34;num&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;getDigit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;num&lt;/span&gt;: &lt;span class="kt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;place&lt;/span&gt;: &lt;span class="kt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;abs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;num&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;place&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Calcola il numero di cifre totali di un numero
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param num numero di partenza
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @returns totale delle cifre del numero &amp;#34;num&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;digitCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;num&lt;/span&gt;: &lt;span class="kt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;num&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log10&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;abs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;num&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Calcola quall&amp;#39;è il numero con piu cifre in assoluto di un array
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param nums array di numeri
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @returns quante cifre ha il numero con più cifre all&amp;#39;interno di &amp;#34;nums&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;mostDigits&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nums&lt;/span&gt;: &lt;span class="kt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;[])&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;maxDigits&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="nx"&gt;maxDigits&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;maxDigits&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;digitCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;maxDigits&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Ordina l&amp;#39;array seguendo le logiche del radicSort
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param arr array da ordinare
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @returns array ordinato
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;radixSort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;: &lt;span class="kt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;[])&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;maxDigitCount&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;mostDigits&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;k&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;k&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;maxDigitCount&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;k&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;digitBuckets&lt;/span&gt;: &lt;span class="kt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;[][]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kr"&gt;from&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;length&lt;/span&gt;: &lt;span class="kt"&gt;10&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;num&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;digit&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;getDigit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;num&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;k&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;digitBuckets&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;digit&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;// controllo
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;				&lt;span class="nx"&gt;digitBuckets&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;digit&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;num&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="c1"&gt;// Ricostruisci l&amp;#39;array in base ai buckets
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="nx"&gt;arr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;([]&lt;/span&gt; &lt;span class="kr"&gt;as&lt;/span&gt; &lt;span class="kt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;[]).&lt;/span&gt;&lt;span class="nx"&gt;concat&lt;/span&gt;&lt;span class="p"&gt;(...&lt;/span&gt;&lt;span class="nx"&gt;digitBuckets&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Test sort
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;33&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;444&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;TEST DEL RADICSORT&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Pre ordinamento:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sorted&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;radixSort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Post ordinamento:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;sorted&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>AlgoritmiTeoria - 1 - array - selection sort</title><link>https://bacarotech.github.io/blog/2026/algoritmiteoria---1---array---selection-sort/</link><pubDate>Wed, 25 Feb 2026 14:00:01 +0000</pubDate><guid>https://bacarotech.github.io/blog/2026/algoritmiteoria---1---array---selection-sort/</guid><description>&lt;h1 id="algoritmo-selection-sort" class="no-underline "&gt;
	&lt;a href="#algoritmo-selection-sort"&gt;
		ALGORITMO: SELECTION SORT
	&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;Il Selection Sort è un algoritmo di ordinamento semplice che funziona
selezionando ripetutamente il &lt;strong&gt;minimo elemento&lt;/strong&gt; da un sotto-array non
ordinato e scambiandolo con il primo elemento non ordinato.&lt;br&gt;
Ripetendo questo processo, l&amp;rsquo;array diventa ordinato.&lt;/p&gt;
&lt;p&gt;Visualizzazione:&lt;br&gt;
&lt;a class="a-post interlink-script" href="https://en.wikipedia.org/wiki/Selection_sort#/media/File:Selection-Sort-Animation.gif" target="_blank"&gt;https://en.wikipedia.org/wiki/Selection_sort#/media/File:Selection-Sort-Animation.gif&amp;nbsp;&amp;nbsp;&lt;i class="fa-whiteboard fa-semibold fa-link"&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;h2 id="quando-usarlo" class="no-underline "&gt;
	&lt;a href="#quando-usarlo"&gt;
		QUANDO USARLO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;L&amp;rsquo;array è di piccole dimensioni.&lt;/li&gt;
&lt;li&gt;Vuoi un algoritmo semplice da implementare.&lt;/li&gt;
&lt;li&gt;Non hai necessità di stabilità nell&amp;rsquo;ordinamento.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="funzionamento" class="no-underline "&gt;
	&lt;a href="#funzionamento"&gt;
		FUNZIONAMENTO
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Si individua l&amp;rsquo;elemento minimo nell&amp;rsquo;array o sotto-array corrente.&lt;/li&gt;
&lt;li&gt;Si scambia il minimo con il primo elemento non ordinato.&lt;/li&gt;
&lt;li&gt;Si ripete la procedura sul sotto-array che va dalla posizione successiva
fino alla fine dell&amp;rsquo;array.&lt;/li&gt;
&lt;li&gt;L&amp;rsquo;array è ordinato quando tutti gli elementi sono stati posizionati.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="output" class="no-underline "&gt;
	&lt;a href="#output"&gt;
		OUTPUT
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Restituisce l&amp;rsquo;array ordinato.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="complessità" class="no-underline "&gt;
	&lt;a href="#complessit%c3%a0"&gt;
		COMPLESSITÀ
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Caso migliore:&lt;/strong&gt; O(n²)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Caso medio:&lt;/strong&gt; O(n²)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Caso peggiore:&lt;/strong&gt; O(n²)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="note" class="no-underline "&gt;
	&lt;a href="#note"&gt;
		NOTE
	&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;È un algoritmo &lt;strong&gt;non stabile&lt;/strong&gt; (l&amp;rsquo;ordine relativo degli elementi uguali può cambiare).&lt;/li&gt;
&lt;li&gt;Funziona bene su array piccoli ma inefficiente su array grandi.&lt;/li&gt;
&lt;li&gt;Ha il vantaggio di fare un numero minimo di scambi rispetto ad altri algoritmi O(n²).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="codice" class="no-underline "&gt;
	&lt;a href="#codice"&gt;
		CODICE
	&lt;/a&gt;
&lt;/h2&gt;


&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Ordina l&amp;#39;array seguendo le logiche del selectionSort
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @param arr array da ordinare
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @returns array ordinato
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;selectionSort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;: &lt;span class="kt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;[])&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;arrToSort&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[...&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt; &lt;span class="c1"&gt;// copia locale
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;arrToSort&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;min&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;j&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;j&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arrToSort&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;arrToSort&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;min&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;arrToSort&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;arrToSort&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;min&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;				&lt;span class="nx"&gt;min&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;min&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;arrToSort&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;arrToSort&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;min&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;tmp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;arrToSort&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="nx"&gt;arrToSort&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;arrToSort&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;min&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="nx"&gt;arrToSort&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;min&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;tmp&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;arrToSort&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Test sort
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;: &lt;span class="kt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;234&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;43&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;55&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;63&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;235&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;547&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;TEST DEL SELECTIONSORT&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Pre ordinamento:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sorted&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;selectionSort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Post ordinamento:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;sorted&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item></channel></rss>