<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Deotyma</title>
    <description>The latest articles on Forem by Deotyma (@deotyma).</description>
    <link>https://forem.com/deotyma</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F148955%2F3a0b218e-3085-4c55-ba0c-e7589b6f3035.png</url>
      <title>Forem: Deotyma</title>
      <link>https://forem.com/deotyma</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/deotyma"/>
    <language>en</language>
    <item>
      <title>Starting June 2025, the European Accessibility Act makes digital accessibility legally mandatory across the EU. Developers must comply with WCAG 2.1 AA for websites, apps, and digital services—or risk audits, fines, and legal issues.</title>
      <dc:creator>Deotyma</dc:creator>
      <pubDate>Thu, 24 Apr 2025 10:13:04 +0000</pubDate>
      <link>https://forem.com/deotyma/starting-june-2025-the-european-accessibility-act-makes-digital-accessibility-legally-mandatory-11l2</link>
      <guid>https://forem.com/deotyma/starting-june-2025-the-european-accessibility-act-makes-digital-accessibility-legally-mandatory-11l2</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/deotyma/from-june-2025-accessibility-becomes-mandatory-across-the-eu-heres-what-developers-need-to-know-533n" class="crayons-story__hidden-navigation-link"&gt;From June 2025, Accessibility Becomes Mandatory Across the EU – Here’s What Developers Need to Know&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/deotyma" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F148955%2F3a0b218e-3085-4c55-ba0c-e7589b6f3035.png" alt="deotyma profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/deotyma" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Deotyma
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Deotyma
                
              
              &lt;div id="story-author-preview-content-2429515" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/deotyma" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F148955%2F3a0b218e-3085-4c55-ba0c-e7589b6f3035.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Deotyma&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/deotyma/from-june-2025-accessibility-becomes-mandatory-across-the-eu-heres-what-developers-need-to-know-533n" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Apr 24 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/deotyma/from-june-2025-accessibility-becomes-mandatory-across-the-eu-heres-what-developers-need-to-know-533n" id="article-link-2429515"&gt;
          From June 2025, Accessibility Becomes Mandatory Across the EU – Here’s What Developers Need to Know
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag crayons-tag--filled  " href="/t/news"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;news&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/webdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;webdev&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/a11y"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;a11y&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/design"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;design&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/deotyma/from-june-2025-accessibility-becomes-mandatory-across-the-eu-heres-what-developers-need-to-know-533n" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;2&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/deotyma/from-june-2025-accessibility-becomes-mandatory-across-the-eu-heres-what-developers-need-to-know-533n#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              1&lt;span class="hidden s:inline"&gt; comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            4 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>webdev</category>
      <category>a11y</category>
      <category>design</category>
      <category>news</category>
    </item>
    <item>
      <title>From June 2025, Accessibility Becomes Mandatory Across the EU – Here’s What Developers Need to Know</title>
      <dc:creator>Deotyma</dc:creator>
      <pubDate>Thu, 24 Apr 2025 10:11:19 +0000</pubDate>
      <link>https://forem.com/deotyma/from-june-2025-accessibility-becomes-mandatory-across-the-eu-heres-what-developers-need-to-know-533n</link>
      <guid>https://forem.com/deotyma/from-june-2025-accessibility-becomes-mandatory-across-the-eu-heres-what-developers-need-to-know-533n</guid>
      <description>&lt;p&gt;If you’re building digital products for the European market, &lt;strong&gt;June 28, 2025&lt;/strong&gt; is a date you need to highlight in red on your calendar.&lt;/p&gt;

&lt;p&gt;That’s when the &lt;strong&gt;European Accessibility Act (EAA)&lt;/strong&gt; officially takes effect, making &lt;strong&gt;digital accessibility legally required&lt;/strong&gt; for a wide range of consumer-facing digital services—not just public institutions, but &lt;strong&gt;private companies too&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  📜 The Legal Framework
&lt;/h2&gt;

&lt;p&gt;Here’s how the law evolved over time.&lt;/p&gt;

&lt;p&gt;First, the &lt;strong&gt;Directive 2016/2102 (EU)&lt;/strong&gt; came into force in 2018. It only applied to public sector websites and apps.&lt;/p&gt;

&lt;p&gt;Now, the &lt;strong&gt;Directive 2019/882 (European Accessibility Act)&lt;/strong&gt; will take effect on &lt;strong&gt;June 28, 2025&lt;/strong&gt;, extending accessibility obligations to the &lt;strong&gt;private sector&lt;/strong&gt; across all EU member states.&lt;/p&gt;

&lt;p&gt;This means that if you’re developing digital products—websites, apps, SaaS—that target EU consumers, they’ll need to be &lt;strong&gt;accessible according to WCAG 2.1 (AA level)&lt;/strong&gt;, no matter when they were launched.&lt;/p&gt;

&lt;p&gt;Even services released before the 2025 deadline must be updated if they’re still publicly available.&lt;/p&gt;

&lt;h2&gt;
  
  
  🚨 Who Is Affected?
&lt;/h2&gt;

&lt;p&gt;The EAA applies to a wide range of digital services.&lt;/p&gt;

&lt;p&gt;If you operate an e-commerce site, an online booking platform, a banking or financial application, an e-book or e-learning platform, or any software with a user interface, you are affected.&lt;/p&gt;

&lt;p&gt;In short, if your product is &lt;strong&gt;consumer-facing&lt;/strong&gt; and operates in the EU, it falls under this law—regardless of the launch date.&lt;/p&gt;

&lt;h2&gt;
  
  
  ✅ What Are the Technical Requirements?
&lt;/h2&gt;

&lt;p&gt;To comply, your product must meet the criteria defined in &lt;strong&gt;WCAG 2.1 Level AA&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Every image, logo, or icon must include alt text so that screen readers can interpret the visuals for users with visual impairments.&lt;/p&gt;

&lt;p&gt;Text color and background must maintain a minimum contrast ratio of 4.5:1 for normal text and 3:1 for large text, ensuring legibility for people with low vision.&lt;/p&gt;

&lt;p&gt;All functionalities must be accessible using only a keyboard. That means every menu, button, and form must respond to inputs like Tab, Enter, Space, and ESC.&lt;/p&gt;

&lt;p&gt;HTML must be structured with semantic headings such as &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;h2&amp;gt;&lt;/code&gt;, and appropriate ARIA attributes. This allows assistive technologies to interpret and navigate the content more effectively.&lt;/p&gt;

&lt;p&gt;Forms must include clear labels and error messages. Messages like "Invalid data" are not enough—users need to know exactly what went wrong and where.&lt;/p&gt;

&lt;p&gt;Finally, the interface must remain usable when zoomed in up to 200%, and adapt well to all screen sizes, including mobile devices.&lt;/p&gt;

&lt;h2&gt;
  
  
  🇫🇷 Who Will Enforce This in France?
&lt;/h2&gt;

&lt;p&gt;Several national authorities will be responsible for enforcing accessibility compliance in France.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ARCOM&lt;/strong&gt; will handle digital content and audiovisual services. &lt;strong&gt;DGCCRF&lt;/strong&gt; will oversee commercial and consumer-facing digital services such as e-commerce and financial platforms. &lt;strong&gt;ARCEP&lt;/strong&gt; will regulate telecom and electronic communication services.&lt;/p&gt;

&lt;p&gt;Users will have the right to report accessibility issues. Once a complaint is filed, authorities may initiate audits. Companies will have &lt;strong&gt;30 days&lt;/strong&gt; to fix violations before facing penalties.&lt;/p&gt;

&lt;h2&gt;
  
  
  💣 What Are the Risks?
&lt;/h2&gt;

&lt;p&gt;Non-compliance may lead to financial penalties. For repeated offenses, fines can reach &lt;strong&gt;€15,000&lt;/strong&gt; for legal entities.&lt;/p&gt;

&lt;p&gt;In addition, companies may receive public reprimands, potentially damaging their reputation. If the product was funded through public programs or grants, the company could lose eligibility or funding entirely.&lt;/p&gt;

&lt;h2&gt;
  
  
  👨‍💻 Developer &amp;amp; Tech Team Responsibilities
&lt;/h2&gt;

&lt;p&gt;If you’re a &lt;strong&gt;freelancer&lt;/strong&gt;, and your contract includes language about legal compliance, you’re legally obligated to deliver an accessible product. Clients may even withhold payment if the product doesn't comply.&lt;/p&gt;

&lt;p&gt;To protect yourself, make sure your contract specifies whether accessibility compliance is included or not—and always inform the client clearly.&lt;/p&gt;

&lt;p&gt;If you're working in &lt;strong&gt;B2B or agency&lt;/strong&gt; settings, your employer or the agency technically holds the legal liability. However, if you’re aware of the law and knowingly deliver a non-compliant product, the agency or client may hold you accountable under "regression" liability.&lt;/p&gt;

&lt;p&gt;The safest route is to notify your manager or product owner and document the communication in tools like Jira or email.&lt;/p&gt;

&lt;p&gt;As a &lt;strong&gt;CTO, founder, or product owner&lt;/strong&gt;, you bear full responsibility. If your product is flagged for inaccessibility, you may have to pay for retroactive fixes, face user complaints or legal action, and risk product suspension if it's deemed critical (e.g., banking or public service apps).&lt;/p&gt;

&lt;p&gt;Now is the right time to start preparing. You don’t need a huge budget to begin. Free tools like &lt;a href="https://www.deque.com/axe/" rel="noopener noreferrer"&gt;axe&lt;/a&gt;, &lt;a href="https://wave.webaim.org/" rel="noopener noreferrer"&gt;WAVE&lt;/a&gt;, and Chrome's Lighthouse can help you start identifying accessibility gaps.&lt;/p&gt;

&lt;h2&gt;
  
  
  🚀 What You Can Do Today
&lt;/h2&gt;

&lt;p&gt;Start by learning the WCAG 2.1 (AA) guidelines—there are tons of resources online.&lt;/p&gt;

&lt;p&gt;Raise awareness within your team, especially if you're working in agile environments. Accessibility often gets overlooked unless someone advocates for it.&lt;/p&gt;

&lt;p&gt;Talk to your clients or product stakeholders. They might not even know that the law applies to them.&lt;/p&gt;

&lt;p&gt;Include accessibility in your contracts and proposals. This can protect you legally, and helps clients understand the importance of compliance.&lt;/p&gt;

&lt;p&gt;Plan an accessibility audit for your current products and workflows. Build accessibility into your next sprint, code review, or QA checklist.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;Digital accessibility is no longer just a “nice to have.” It’s becoming a &lt;strong&gt;legal obligation&lt;/strong&gt;—and an ethical imperative.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you're a developer, designer, or digital founder working with EU users, don’t wait until 2025. Start integrating accessibility into your dev workflows now.&lt;/p&gt;




</description>
      <category>webdev</category>
      <category>a11y</category>
      <category>design</category>
      <category>news</category>
    </item>
    <item>
      <title>The Luhn Algorithm — Validating Numbers the Smart Way</title>
      <dc:creator>Deotyma</dc:creator>
      <pubDate>Thu, 10 Apr 2025 10:16:08 +0000</pubDate>
      <link>https://forem.com/deotyma/the-luhn-algorithm-validating-numbers-the-smart-way-48gn</link>
      <guid>https://forem.com/deotyma/the-luhn-algorithm-validating-numbers-the-smart-way-48gn</guid>
      <description>&lt;p&gt;When applying for jobs as a junior developer, one of the common algorithm questions you might encounter is the Luhn Algorithm. It’s simple, clever, and widely used in the real world, especially in banking and telecommunication. Understanding this algorithm not only helps you sharpen your logic skills but also gives you insight into how some real systems validate important information like credit card numbers.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is the Luhn Algorithm?
&lt;/h2&gt;

&lt;p&gt;The Luhn algorithm, also called the "modulus 10" algorithm or "mod 10", is a checksum formula. It was developed in 1954 by Hans Peter Luhn, an engineer at IBM. The main purpose of this algorithm is to verify whether a sequence of numbers is valid, usually for identification or payment purposes.&lt;/p&gt;

&lt;p&gt;While it does not protect against fraud (it’s not encryption), it helps to catch simple human errors such as a single digit mistyped or digits swapped by accident. This is extremely useful when working with long strings of numbers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where is it used?
&lt;/h2&gt;

&lt;p&gt;The Luhn algorithm is widely used in real-life applications. It is used by credit card companies (Visa, Mastercard, American Express), in mobile phone IMEI numbers, and even in some national ID numbers. Whenever a form tells you “this card number is invalid” before you even click submit, it is probably using Luhn to validate it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Problem Statement
&lt;/h2&gt;

&lt;p&gt;You are given a string that represents a card number. The number may include spaces or dashes. Your task is to write a function that verifies whether this number is valid using the Luhn algorithm.&lt;/p&gt;

&lt;p&gt;The function should return true if the number is valid and false otherwise.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pseudocode
&lt;/h2&gt;

&lt;p&gt;Before jumping into real code, let's write down the logic of the Luhn algorithm in plain pseudocode:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function isValidLuhn(number):
    clean the input by removing spaces and dashes
    reverse the cleaned number
    initialize total to 0

    for each digit in the reversed number:
        if the digit is in an even position (starting from 0):
            add the digit to total as is
        if the digit is in an odd position:
            double it
            if the result is greater than 9:
                subtract 9 from the result
            add that result to total

    if total modulo 10 is 0:
        return true (number is valid)
    else:
        return false (number is invalid)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This pseudocode captures the essence of the algorithm and will guide us when implementing it in real programming languages.&lt;/p&gt;

&lt;h2&gt;
  
  
  Python:
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;verify_card_number&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;card_number&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;sum_of_odd_digits&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="n"&gt;card_number_reversed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;card_number&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 class="n"&gt;odd_digits&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;card_number_reversed&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="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;digit&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;odd_digits&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;sum_of_odd_digits&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nf"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;digit&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;sum_of_even_digits&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="n"&gt;even_digits&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;card_number_reversed&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;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;digit&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;even_digits&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;digit&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&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;number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;number&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 class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;number&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 class="n"&gt;sum_of_even_digits&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt;

    &lt;span class="n"&gt;total&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sum_of_odd_digits&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;sum_of_even_digits&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;total&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;card_number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;4111-1111-4555-1141&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
    &lt;span class="n"&gt;cleaned&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;card_number&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;-&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;''&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt; &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;''&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;verify_card_number&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cleaned&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;VALID!&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&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 class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;INVALID!&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  JavaScript:
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function verifyCardNumber(cardNumber) {
    const cleaned = cardNumber.replace(/[\s-]/g, '');
    const reversed = cleaned.split('').reverse();
    let total = 0;

    for (let i = 0; i &amp;lt; reversed.length; i++) {
        let digit = parseInt(reversed[i]);

        if (i % 2 === 1) {
            digit *= 2;
            if (digit &amp;gt; 9) digit -= 9;
        }

        total += digit;
    }

    return total % 10 === 0;
}

console.log(verifyCardNumber("4111-1111-4555-1141") ? "VALID!" : "INVALID!");
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Java:
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;LuhnCheck&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;boolean&lt;/span&gt; &lt;span class="nf"&gt;verifyCardNumber&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;cardNumber&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;cleaned&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cardNumber&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;replaceAll&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"[\\s-]"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;""&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;total&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;;&lt;/span&gt;
        &lt;span class="kt"&gt;boolean&lt;/span&gt; &lt;span class="n"&gt;doubleDigit&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="o"&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="n"&gt;cleaned&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&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;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&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="o"&gt;{&lt;/span&gt;
            &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;digit&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Character&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getNumericValue&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cleaned&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;charAt&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="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;doubleDigit&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;digit&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="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;digit&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="n"&gt;digit&lt;/span&gt; &lt;span class="o"&gt;-=&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
            &lt;span class="o"&gt;}&lt;/span&gt;
            &lt;span class="n"&gt;total&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;digit&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
            &lt;span class="n"&gt;doubleDigit&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;doubleDigit&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;total&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;10&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;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"4111-1111-4555-1141"&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;verifyCardNumber&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="s"&gt;"VALID!"&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"INVALID!"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Real-World Applications
&lt;/h2&gt;

&lt;p&gt;The Luhn algorithm is not just an exercise. It is used in many systems that need to validate identifiers quickly and reliably. Credit cards are the most famous example. Before a payment is even processed, the system checks whether the card number could be valid using the Luhn algorithm.&lt;/p&gt;

&lt;p&gt;Phone manufacturers also use it to validate IMEI numbers, which are unique to each mobile device. Some government-issued identification numbers use similar validation techniques to reduce human error during registration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Going Further
&lt;/h2&gt;

&lt;p&gt;To go deeper into this topic, here are some interesting questions you can try to answer:&lt;/p&gt;

&lt;p&gt;What changes would you make to generate a valid card number instead of just checking it?&lt;br&gt;
Can you adapt this algorithm to detect other types of errors, like swapped digits?&lt;br&gt;
What are other checksum algorithms used in the real world, and how do they compare to Luhn?&lt;br&gt;
Can you implement the algorithm in a functional programming style using languages like Haskell or Scala?&lt;br&gt;
How would you optimize your implementation for verifying millions of numbers quickly in a database?&lt;/p&gt;

&lt;p&gt;The Luhn algorithm is a perfect example of how a small piece of logic can have a big impact in real systems. By practicing it, you’re not only preparing for coding interviews but also learning how developers build safer and more reliable applications.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>javascript</category>
      <category>java</category>
      <category>python</category>
    </item>
    <item>
      <title>Loglan'82, a historical informatic language, introduced advanced object-oriented programming, secure memory management, and built-in concurrency. Though forgotten, it could be an inspiration for new solutions in modern programming languages.</title>
      <dc:creator>Deotyma</dc:creator>
      <pubDate>Thu, 20 Mar 2025 19:22:04 +0000</pubDate>
      <link>https://forem.com/deotyma/loglan82-a-historical-informatic-language-introduced-advanced-object-oriented-programming-3o1d</link>
      <guid>https://forem.com/deotyma/loglan82-a-historical-informatic-language-introduced-advanced-object-oriented-programming-3o1d</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/deotyma" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F148955%2F3a0b218e-3085-4c55-ba0c-e7589b6f3035.png" alt="deotyma"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/deotyma/loglan82-a-forgotten-programming-language-ahead-of-its-time-5g2k" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Loglan'82: A Forgotten Programming Language Ahead of Its Time&lt;/h2&gt;
      &lt;h3&gt;Deotyma ・ Mar 20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#programming&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#opensource&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#coding&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>programming</category>
      <category>opensource</category>
      <category>coding</category>
    </item>
    <item>
      <title>Loglan'82: A Forgotten Programming Language Ahead of Its Time</title>
      <dc:creator>Deotyma</dc:creator>
      <pubDate>Thu, 20 Mar 2025 16:18:47 +0000</pubDate>
      <link>https://forem.com/deotyma/loglan82-a-forgotten-programming-language-ahead-of-its-time-5g2k</link>
      <guid>https://forem.com/deotyma/loglan82-a-forgotten-programming-language-ahead-of-its-time-5g2k</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;On March 15, 2025, I had the opportunity to present a six-minute talk as part of Les Conférences Éclair during the Assemblée Générale of APRIL, the French association dedicated to the defense of open source software. My talk focused on Loglan'82, a forgotten but pioneering programming language developed in the 1980s at the Institute of Informatics, University of Warsaw.&lt;/p&gt;

&lt;p&gt;In this short presentation, I highlighted how Loglan'82 introduced advanced object-oriented programming, secure memory management, and built-in concurrency support—features that were revolutionary at the time and are still relevant today. Despite its technical strengths, the language remained largely confined to academia and never gained widespread industry adoption. My goal was to shed light on this overlooked language and spark interest in its innovative approach to software design, particularly within the free software community.&lt;/p&gt;

&lt;p&gt;This article expands on my talk, providing a deeper look into the history, key features, and legacy of Loglan'82.&lt;/p&gt;

&lt;h2&gt;
  
  
  Origins and Development
&lt;/h2&gt;

&lt;p&gt;The story of Loglan'82 begins with the creation of the &lt;strong&gt;MERA-400&lt;/strong&gt;, one of the first Polish minicomputers. The research team, led by &lt;strong&gt;Elżbieta Jezierska-Ziemkiewicz&lt;/strong&gt;, initially considered using Fortran but found it unsuitable for their needs. Inspired by &lt;strong&gt;Simula 67&lt;/strong&gt;, the team decided to create a new language that could fully leverage object-oriented programming and concurrent execution.&lt;/p&gt;

&lt;p&gt;Key contributors to Loglan'82 include &lt;strong&gt;Andrzej Salwicki&lt;/strong&gt;, &lt;strong&gt;Hanna Oktaba&lt;/strong&gt;, &lt;strong&gt;Wiesława Bartol&lt;/strong&gt;, and &lt;strong&gt;Antoni Kreczmar&lt;/strong&gt;, among others. The project was ambitious, incorporating features that would later be seen in Java and modern concurrent programming paradigms.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Features of Loglan'82
&lt;/h2&gt;

&lt;p&gt;Loglan'82 was &lt;strong&gt;decades ahead of its time&lt;/strong&gt;, offering functionalities that even today’s languages struggle to implement efficiently.&lt;/p&gt;

&lt;p&gt;Object-oriented programming in Loglan'82 was more advanced than in Java, which enforces single inheritance. Loglan'82 allowed multiple inheritance, deep multi-level inheritance, and inheritance within functions and modules. This flexibility provided a more powerful way of structuring software systems.&lt;/p&gt;

&lt;p&gt;Memory management in Loglan'82 was particularly innovative. It introduced safe object deallocation through the &lt;code&gt;kill(x)&lt;/code&gt; instruction, which ensured that once an object was deleted, all references to it were automatically set to &lt;code&gt;none&lt;/code&gt;, preventing dangling references. This provided an alternative to garbage collection, offering direct memory management without the risk of memory leaks.&lt;/p&gt;

&lt;p&gt;Parallel and distributed computing were integral to Loglan'82. The language was designed with processes as first-class objects, enabling true parallel execution. It supported coroutines with built-in suspend and resume functionality, allowing seamless concurrency. A major breakthrough was the &lt;strong&gt;Alien Call&lt;/strong&gt; mechanism, which enabled inter-process communication in a way that was both simpler and more efficient than Java RMI or CORBA.&lt;/p&gt;

&lt;p&gt;Exception handling was another key feature, providing structured error recovery. The concurrent programming model in Loglan'82 eliminated common pitfalls like race conditions and deadlocks by enforcing structured inter-process communication.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example Code in Loglan'82
&lt;/h2&gt;

&lt;p&gt;The syntax of Loglan'82 was similar to Pascal, making it relatively easy to learn for those familiar with structured programming. The following is a simple example of a &lt;strong&gt;"Hello, World!"&lt;/strong&gt; program:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;program HelloWorld&lt;span class="p"&gt;;&lt;/span&gt;

begin
    write&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Hello, World!"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
end.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Loglan'82 is a Typed Language
&lt;/h2&gt;

&lt;p&gt;Loglan'82 is a &lt;strong&gt;strongly typed&lt;/strong&gt; programming language, meaning that every variable must be explicitly declared with a specific type before it can be used. This ensures &lt;strong&gt;type safety&lt;/strong&gt;, reducing errors related to unintended type conversions or misuse of data. Unlike dynamically typed languages where variables can hold values of different types at runtime, Loglan'82 enforces &lt;strong&gt;strict type rules at compile-time&lt;/strong&gt;, preventing operations between incompatible types.&lt;/p&gt;

&lt;h3&gt;
  
  
  Types in Loglan'82
&lt;/h3&gt;

&lt;p&gt;According to the provided documentation, Loglan'82 supports the following &lt;strong&gt;primitive types&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;int&lt;/code&gt; (integer)&lt;/strong&gt; – Represents whole numbers, similar to &lt;code&gt;int&lt;/code&gt; in C or Java.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;real&lt;/code&gt; (floating-point number)&lt;/strong&gt; – Used for decimal numbers, equivalent to &lt;code&gt;float&lt;/code&gt; or &lt;code&gt;double&lt;/code&gt; in modern languages.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;char&lt;/code&gt; (character)&lt;/strong&gt; – Represents a single character, similar to &lt;code&gt;char&lt;/code&gt; in C.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;bool&lt;/code&gt; (boolean)&lt;/strong&gt; – Can hold the values &lt;code&gt;true&lt;/code&gt; or &lt;code&gt;false&lt;/code&gt;, used for logical operations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;string&lt;/code&gt; (string of characters)&lt;/strong&gt; – Only constant strings are allowed, meaning they cannot be modified at runtime.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Complex Types and Data Structures
&lt;/h3&gt;

&lt;p&gt;In addition to basic types, Loglan'82 also provides &lt;strong&gt;more complex types and structured data representation&lt;/strong&gt;, allowing programmers to create &lt;strong&gt;modular and object-oriented designs&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;arrayof &amp;lt;type&amp;gt;&lt;/code&gt;&lt;/strong&gt; – Defines an array of a given type, supporting multidimensional and dynamic arrays with runtime-determined bounds.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;unit &amp;lt;name&amp;gt; : class&lt;/code&gt;&lt;/strong&gt; – Defines a class, which can have attributes and methods. This is an extension of the record-based structures seen in Pascal.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;process&lt;/code&gt;&lt;/strong&gt; – A special type used for concurrent programming, where each process is treated as an object.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;coroutine&lt;/code&gt;&lt;/strong&gt; – A specialized construct that allows execution to be suspended and resumed, enabling cooperative multitasking.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Type Checking and Safety
&lt;/h3&gt;

&lt;p&gt;Loglan'82 enforces &lt;strong&gt;strong type checking&lt;/strong&gt; at both &lt;strong&gt;compile-time and runtime&lt;/strong&gt;. This means that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Every variable must be declared with a type before it is used.&lt;/li&gt;
&lt;li&gt;Functions and procedures must have clearly defined &lt;strong&gt;parameter types and return types&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Operations between different types (e.g., adding an &lt;code&gt;int&lt;/code&gt; to a &lt;code&gt;real&lt;/code&gt;) require &lt;strong&gt;explicit type conversion&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Type safety is guaranteed when handling &lt;strong&gt;memory allocation and deallocation&lt;/strong&gt;, particularly with &lt;strong&gt;the &lt;code&gt;kill(x)&lt;/code&gt; instruction&lt;/strong&gt;, which prevents dangling references.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;program SumTwoVariables&lt;span class="p"&gt;;&lt;/span&gt;

const a &lt;span class="o"&gt;=&lt;/span&gt; 1&lt;span class="p"&gt;;&lt;/span&gt;
var b, &lt;span class="nb"&gt;sum&lt;/span&gt;: real&lt;span class="p"&gt;;&lt;/span&gt;

begin
    b :&lt;span class="o"&gt;=&lt;/span&gt; 2.5&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nb"&gt;sum&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; a + b&lt;span class="p"&gt;;&lt;/span&gt;
    write&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Result: "&lt;/span&gt;, &lt;span class="nb"&gt;sum&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
end.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Comparison with Java
&lt;/h2&gt;

&lt;p&gt;Loglan'82 introduced many features that Java adopted years later but in a more structured and efficient manner. Unlike Java, which relies on single inheritance and interfaces, Loglan'82 supported multiple and deep inheritance, providing more flexibility in designing software architectures.&lt;/p&gt;

&lt;p&gt;Memory management in Loglan'82 was safer, as the kill(x) instruction ensured objects were properly deallocated, whereas Java relies on garbage collection, which can lead to performance issues.&lt;/p&gt;

&lt;p&gt;Concurrency was a fundamental part of Loglan'82. Instead of Java's threads and complex concurrency models requiring frameworks like Spring Cloud or Kubernetes for distributed computing, Loglan'82 included built-in support for processes and coroutines. The Alien Call mechanism provided a more efficient way of handling inter-process communication compared to Java RMI or gRPC.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Characteristic&lt;/th&gt;
&lt;th&gt;Loglan'82&lt;/th&gt;
&lt;th&gt;Java&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Object Model&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Multiple and hierarchical inheritance&lt;/td&gt;
&lt;td&gt;Single inheritance with interfaces&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Memory Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;kill(x)&lt;/code&gt;, secure object deletion&lt;/td&gt;
&lt;td&gt;Automatic Garbage Collector, no manual deletion&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Concurrent Programming&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Object-based processes, native coroutines&lt;/td&gt;
&lt;td&gt;Threads (Thread, ExecutorService), coroutines possible with Kotlin&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Distributed Programming&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Built-in support (Alien Call)&lt;/td&gt;
&lt;td&gt;Requires external tools (Spring Cloud, RMI, gRPC)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Inter-process Communication&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Simple, via Alien Call&lt;/td&gt;
&lt;td&gt;Complex, via RMI, CORBA, gRPC&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Why Did Loglan'82 Fade into Obscurity?
&lt;/h2&gt;

&lt;p&gt;Despite its technical superiority, Loglan'82 did not achieve widespread adoption. One of the main reasons was the lack of industry support. Unlike Java, which was backed by Sun Microsystems, Loglan'82 remained an academic project.&lt;/p&gt;

&lt;p&gt;The limited availability of hardware was another factor. The MERA-400 minicomputer, for which Loglan'82 was initially developed, was not widely accessible outside Poland, making it difficult for the language to gain traction.&lt;/p&gt;

&lt;p&gt;Another reason for its decline was the rise of C++ and Java in the 1990s. These languages gained traction with strong corporate backing and extensive developer communities, while Loglan'82 remained confined to academia.&lt;/p&gt;

&lt;h2&gt;
  
  
  Legacy and Influence
&lt;/h2&gt;

&lt;p&gt;Although Loglan'82 is no longer actively used, many of its concepts have influenced modern programming languages. The Alien Call mechanism remains a point of interest in distributed computing, and its memory safety model could still offer insights for future programming languages.&lt;/p&gt;

&lt;p&gt;The ideas behind Loglan'82 have resurfaced in recent years, especially in languages like Kotlin and Rust, which emphasize safety, concurrency, and structured object-oriented programming. The systematic approach Loglan'82 took toward multi-level inheritance, coroutines, and inter-process communication shows that its designers were decades ahead of their time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Loglan'82 was a visionary language, pioneering object-oriented programming, safe memory management, and distributed computing long before they became industry standards. While it may not be widely known, its influence can be seen in modern programming paradigms. For those interested in programming history, Loglan'82 remains an underrated gem worth exploring.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bibliography on Loglan Language
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Wasielewska, Karolina&lt;/strong&gt; - &lt;em&gt;Cyfrodziewczyny&lt;/em&gt;. Krytyka Polityczna Publishing, 2016.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bartol, Wiesława Maria, et al.&lt;/strong&gt; - &lt;em&gt;Report on the Loglan 82 Programming Language&lt;/em&gt;. &lt;a href="https://lem12.uksw.edu.pl/wiki/Loglan%2782" rel="noopener noreferrer"&gt;Read online&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ciesielski, Bolesław J.&lt;/strong&gt; - &lt;em&gt;Alien Call - A Synchronization Mechanism for Distributed Processes&lt;/em&gt;. &lt;a href="https://lem12.uksw.edu.pl/wiki/Loglan%2782" rel="noopener noreferrer"&gt;Read online&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kreczmar, Antoni&lt;/strong&gt; - &lt;em&gt;A Micro-Manual of the Programming Language LOGLAN-82&lt;/em&gt;. &lt;a href="https://lem12.uksw.edu.pl/wiki/Loglan%2782" rel="noopener noreferrer"&gt;Read online&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Salwicki, Andrzej&lt;/strong&gt; - &lt;em&gt;Loglan Project: Yesterday, Today, Tomorrow&lt;/em&gt;. &lt;a href="https://lem12.uksw.edu.pl/wiki/Loglan%2782" rel="noopener noreferrer"&gt;Read online&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Salwicki, Andrzej&lt;/strong&gt; - &lt;em&gt;Which Parallel Virtual Machine? - PVM/MPI, Java RMI, ... or PVLM&lt;/em&gt;. &lt;a href="https://lem12.uksw.edu.pl/wiki/Loglan%2782" rel="noopener noreferrer"&gt;Read online&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Salwicki, Andrzej&lt;/strong&gt; - &lt;em&gt;Invitation to Collaborate: Loglan and LEM'12&lt;/em&gt;. &lt;a href="https://lem12.uksw.edu.pl/wiki/Loglan%2782" rel="noopener noreferrer"&gt;Read online&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Institute of Informatics, University of Warsaw&lt;/strong&gt; - &lt;em&gt;LOGLAN'82 User’s Guide&lt;/em&gt;. &lt;a href="https://lem12.uksw.edu.pl/wiki/Loglan%2782" rel="noopener noreferrer"&gt;Read online&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Various Authors&lt;/strong&gt; - &lt;em&gt;LOGLAN'82 Quick Reference Card&lt;/em&gt;. &lt;a href="https://lem12.uksw.edu.pl/wiki/Loglan%2782" rel="noopener noreferrer"&gt;Read online&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Comparison of Object-Oriented Languages&lt;/strong&gt; - &lt;em&gt;Comparison of Loglan'82 with other Object-Oriented Languages&lt;/em&gt;. &lt;a href="https://lem12.uksw.edu.pl/wiki/Loglan%2782" rel="noopener noreferrer"&gt;Read online&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>programming</category>
      <category>opensource</category>
      <category>coding</category>
    </item>
    <item>
      <title>Triangle of Differences - Simple Algorithms for Programmers Looking for a Job: Part three</title>
      <dc:creator>Deotyma</dc:creator>
      <pubDate>Fri, 21 Feb 2025 14:01:45 +0000</pubDate>
      <link>https://forem.com/deotyma/triangle-of-differences-simple-algorithms-for-programmers-looking-for-a-job-part-three-12pd</link>
      <guid>https://forem.com/deotyma/triangle-of-differences-simple-algorithms-for-programmers-looking-for-a-job-part-three-12pd</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Introduction&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;I have always been fascinated by mathematical structures, and one of the most intriguing ones I have explored is the &lt;strong&gt;Triangle of Differences&lt;/strong&gt;. This construct involves iteratively computing the absolute differences between consecutive elements to form a triangular pattern. The process follows a &lt;strong&gt;bottom-up dynamic programming approach&lt;/strong&gt;, where each row is derived using previously computed values. &lt;/p&gt;

&lt;p&gt;The algorithm is related to &lt;strong&gt;finite difference methods&lt;/strong&gt; commonly used in numerical analysis for interpolation and sequence prediction. It also shares similarities with &lt;strong&gt;grid-based structure generation algorithms&lt;/strong&gt;, where patterns emerge through recursive computation. Additionally, it can be seen as a &lt;strong&gt;greedy algorithm&lt;/strong&gt;, as each step only considers local differences without an overarching optimization strategy. Some applications of this approach also use &lt;strong&gt;recursive formulations&lt;/strong&gt;, particularly in higher-order differences, making it a versatile computational tool.&lt;/p&gt;

&lt;p&gt;Understanding the principles behind the Triangle of Differences not only improves algorithmic thinking but also opens doors to a variety of problem-solving techniques found in combinatorics, numerical methods, and data transformation.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Problem Statement&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Given an array of integers as the last row of a triangle, construct the &lt;strong&gt;Triangle of Differences&lt;/strong&gt;, where each row is formed by computing the absolute difference between consecutive elements of the previous row, until only one element remains at the top.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Pseudocode&lt;/strong&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FUNCTION generate_triangle(height):
    GENERATE a last row with 'height' random numbers
    STORE this as the last row of the triangle

    FOR i FROM height - 1 DOWNTO 1:
        CREATE an empty new row
        FOR j FROM 0 TO i - 1:
            COMPUTE absolute difference between adjacent elements
            APPEND result to the new row
        INSERT new row at the start of the triangle

    RETURN the complete triangle

FUNCTION print_triangle(triangle):
    DETERMINE max width for formatting
    FOR EACH row IN triangle:
        PRINT row centered based on max width
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;Implementations&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Python&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;random&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;generate_triangle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;last_row&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;randint&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;20&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
    &lt;span class="n"&gt;triangle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;last_row&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;height&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="mi"&gt;0&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 class="n"&gt;new_row&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;abs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;triangle&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="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="n"&gt;triangle&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="n"&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="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&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;triangle&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;insert&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="n"&gt;new_row&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;triangle&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;print_triangle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;triangle&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;max_width&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt; &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;triangle&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 class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;row&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;triangle&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt; &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;row&lt;/span&gt;&lt;span class="p"&gt;)).&lt;/span&gt;&lt;span class="nf"&gt;center&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_width&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="c1"&gt;# Test with height = 6
&lt;/span&gt;&lt;span class="n"&gt;triangle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;generate_triangle&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="nf"&gt;print_triangle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;triangle&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;JavaScript&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;generateTriangle&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="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;triangle&lt;/span&gt; &lt;span class="o"&gt;=&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;lastRow&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="k"&gt;from&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;length&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="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&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="nf"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;20&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 class="nx"&gt;triangle&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;lastRow&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&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="nx"&gt;height&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;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;--&lt;/span&gt;&lt;span class="p"&gt;)&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;newRow&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&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;i&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 class="nx"&gt;newRow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&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="nf"&gt;abs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;triangle&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;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;triangle&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;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="p"&gt;}&lt;/span&gt;
        &lt;span class="nx"&gt;triangle&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;unshift&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newRow&lt;/span&gt;&lt;span class="p"&gt;);&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;triangle&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;printTriangle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;triangle&lt;/span&gt;&lt;span class="p"&gt;)&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;maxWidth&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;triangle&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;triangle&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 class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="dl"&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="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;row&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;triangle&lt;/span&gt;&lt;span class="p"&gt;)&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;rowString&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;row&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="dl"&gt;"&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;padding&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;repeat&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;maxWidth&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;rowString&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="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="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;padding&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;rowString&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&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;triangle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;generateTriangle&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="nf"&gt;printTriangle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;triangle&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Java&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;java.util.Random&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;TriangleOfDifferences&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;height&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;[][]&lt;/span&gt; &lt;span class="n"&gt;triangle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;generateTriangle&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;printTriangle&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;triangle&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;[][]&lt;/span&gt; &lt;span class="nf"&gt;generateTriangle&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;Random&lt;/span&gt; &lt;span class="n"&gt;random&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Random&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
        &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;[][]&lt;/span&gt; &lt;span class="n"&gt;triangle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="o"&gt;][];&lt;/span&gt;

        &lt;span class="n"&gt;triangle&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;height&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="o"&gt;];&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="o"&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="o"&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;height&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="o"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;triangle&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;height&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&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="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;nextInt&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;

        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="o"&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="n"&gt;height&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;i&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;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;--)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;triangle&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="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="kt"&gt;int&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="o"&gt;];&lt;/span&gt;
            &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="o"&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="o"&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;i&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="o"&gt;++)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;triangle&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="n"&gt;j&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Math&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;abs&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;triangle&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="o"&gt;][&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;triangle&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="o"&gt;][&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;1&lt;/span&gt;&lt;span class="o"&gt;]);&lt;/span&gt;
            &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;triangle&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;printTriangle&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;[][]&lt;/span&gt; &lt;span class="n"&gt;triangle&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;height&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;triangle&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;row&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;triangle&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;num&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;row&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
                &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;print&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;num&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;" "&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="o"&gt;}&lt;/span&gt;
            &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Real-World Applications&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The Triangle of Differences has practical applications in various domains, ranging from data science to cryptography and procedural generation. &lt;/p&gt;

&lt;p&gt;In &lt;strong&gt;financial analysis&lt;/strong&gt;, this algorithm helps in detecting patterns in stock prices and predicting trends by analyzing successive variations. It is useful in &lt;strong&gt;time-series forecasting&lt;/strong&gt;, where detecting sudden changes in value helps in understanding market shifts or anomalies in sensor data. &lt;/p&gt;

&lt;p&gt;In &lt;strong&gt;data compression&lt;/strong&gt;, techniques such as delta encoding rely on storing differences rather than absolute values, reducing redundancy. This is widely used in image and video compression algorithms like MPEG and PNG formats. Similarly, &lt;strong&gt;error detection&lt;/strong&gt; mechanisms in communication protocols apply successive difference calculations to identify transmission errors. &lt;/p&gt;

&lt;p&gt;In &lt;strong&gt;cryptography&lt;/strong&gt;, obfuscating data through recursive numerical transformations makes it harder to decipher, providing an additional layer of security. This concept is particularly relevant in hashing algorithms and encryption techniques. &lt;/p&gt;

&lt;p&gt;In &lt;strong&gt;computer graphics&lt;/strong&gt;, procedural generation of terrains and fractals is influenced by recursive difference calculations, enabling the creation of natural-looking landscapes in video games and simulations. Algorithms for &lt;strong&gt;edge detection in image processing&lt;/strong&gt; also leverage differences between pixel intensities to identify boundaries and objects within an image. &lt;/p&gt;

&lt;p&gt;Lastly, in &lt;strong&gt;bioinformatics&lt;/strong&gt;, analyzing genetic sequences through difference-based calculations helps in identifying mutations and evolutionary changes over generations. This is particularly useful in comparative genomics, where analyzing the differences in DNA sequences aids in evolutionary studies and disease research.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Further Exploration&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Implement the Triangle of Differences with &lt;strong&gt;recursion&lt;/strong&gt; instead of iteration.&lt;/li&gt;
&lt;li&gt;Explore how the structure relates to &lt;strong&gt;numerical interpolation&lt;/strong&gt; and &lt;strong&gt;error detection algorithms&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Modify the algorithm to compute &lt;strong&gt;higher-order differences&lt;/strong&gt; and analyze sequences.&lt;/li&gt;
&lt;li&gt;Apply the concept in &lt;strong&gt;image processing&lt;/strong&gt; to detect edges and patterns in pixel data.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By mastering the construction of the Triangle of Differences, programmers can gain insights into &lt;strong&gt;pattern recognition, data structures, and efficient algorithm design&lt;/strong&gt;, making this an essential problem-solving tool in both theoretical and practical computing scenarios.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>beginners</category>
      <category>algorithms</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Improve your algorithmic thinking with my new article on Dev.to! Discover the Latin Square, a simple but useful algorithm for technical interviews. 🔥 Ready for the challenge?</title>
      <dc:creator>Deotyma</dc:creator>
      <pubDate>Thu, 13 Feb 2025 16:59:49 +0000</pubDate>
      <link>https://forem.com/deotyma/improve-your-algorithmic-thinking-with-my-new-article-on-devto-discover-the-latin-square-a-jk5</link>
      <guid>https://forem.com/deotyma/improve-your-algorithmic-thinking-with-my-new-article-on-devto-discover-the-latin-square-a-jk5</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/deotyma" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F148955%2F3a0b218e-3085-4c55-ba0c-e7589b6f3035.png" alt="deotyma"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/deotyma/simple-algorithms-for-programmers-looking-for-a-job-part-two-latin-square-4p33" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Simple Algorithms for Programmers Looking for a Job: Part Two - Latin Square&lt;/h2&gt;
      &lt;h3&gt;Deotyma ・ Feb 13&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#beginners&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#algorithms&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#tutorial&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>beginners</category>
      <category>algorithms</category>
      <category>tutorial</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Latin Square - Simple Algorithms for Programmers Looking for a Job: Part Two</title>
      <dc:creator>Deotyma</dc:creator>
      <pubDate>Thu, 13 Feb 2025 16:14:39 +0000</pubDate>
      <link>https://forem.com/deotyma/simple-algorithms-for-programmers-looking-for-a-job-part-two-latin-square-4p33</link>
      <guid>https://forem.com/deotyma/simple-algorithms-for-programmers-looking-for-a-job-part-two-latin-square-4p33</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;I have always been fascinated by the elegance of mathematical structures, and one of the most intriguing ones I have come across is the Latin Square. During a visit to the Bibliothèque Nationale de France, I stumbled upon a book by René Descombes titled Les carrés magiques, and I was completely fascinated by it. The Latin Square is an  array filled with  different symbols, each appearing exactly once in each row and column. This concept has been studied for centuries, and I love discovering its real-world applications in statistics, scheduling, and even cryptography.&lt;/p&gt;

&lt;p&gt;One of the most fascinating applications of Latin squares is in experimental design. Researchers use them to control variations in two directions, making experiments more reliable in fields like agriculture, medicine, and industry. I also find their use in time planners particularly practical—Latin squares can help organize tasks and personnel schedules to prevent redundancy and conflicts.&lt;/p&gt;

&lt;p&gt;Latin squares also pop up in error-correcting codes, Sudoku puzzles, and round-robin tournament schedules. Their structured beauty makes them a great tool for solving problems requiring balanced arrangements.&lt;/p&gt;

&lt;p&gt;What truly excites me is the connection between Latin squares and art. At Gonville and Caius College in Cambridge, there's a stained glass window designed by Sir Roland Fischer, depicting a Latin square in seven distinct colors. I would love to visit Cambridge one day and see this masterpiece in person. The idea that something as abstract as a mathematical concept can be transformed into a visually stunning piece of art is inspiring.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7zexytsoxvtocpf2jl6z.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7zexytsoxvtocpf2jl6z.jpg" alt="glass window of Gonville and Caius College in Cambridge" width="351" height="465"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Problem Statement
&lt;/h2&gt;

&lt;p&gt;Given an integer ( n ), construct an ( n \times n ) Latin square where each row and each column contains the numbers from ( 1 ) to ( n ) exactly once.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pseudocode
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FUNCTION generate_latin_square(n)
    CREATE a matrix 'square' of size (n x n) filled with zeros

    FOR i from 0 to n - 1 DO
        FOR j from 0 to n - 1 DO
            COMPUTE the value for cell (i, j) using the formula:
                square[i][j] = (i + j) MOD n + 1
        END FOR
    END FOR

    RETURN the 'square' matrix
END FUNCTION
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Implementations
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Python
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;numpy&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;generate_latin_square&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;square&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;zeros&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;dtype&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
            &lt;span class="n"&gt;square&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="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;j&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;square&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;print_latin_square&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;square&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;row&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;square&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt; &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;row&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Your latin square have to be between 3 and 7 : &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="k"&gt;break&lt;/span&gt;
            &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Give me a number between 3 and 7.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;ValueError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Wrong entry. Give me a number between 3 and 7.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;latin_square&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;generate_latin_square&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;latin square generated:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print_latin_square&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;latin_square&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  JavaScript
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;generateLatinSquare&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)&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;square&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="k"&gt;from&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;n&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="nc"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;fill&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="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 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;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 class="nx"&gt;square&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;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;i&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 class="o"&gt;%&lt;/span&gt; &lt;span class="nx"&gt;n&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="p"&gt;}&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;square&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;printLatinSquare&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;square&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;square&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;row&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;row&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)));&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&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 class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&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 class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;parseInt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Your Latin square must be between 3 and 7: &lt;/span&gt;&lt;span class="dl"&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="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nf"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Give me a number between 3 and 7.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&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;latinSquare&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;generateLatinSquare&lt;/span&gt;&lt;span class="p"&gt;(&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;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Latin square generated:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nf"&gt;printLatinSquare&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;latinSquare&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;})();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Java
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;java.util.Scanner&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;LatinSquare&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;[][]&lt;/span&gt; &lt;span class="nf"&gt;generateLatinSquare&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;[][]&lt;/span&gt; &lt;span class="n"&gt;square&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;][&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;];&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="o"&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="o"&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;n&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="o"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="o"&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="o"&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;n&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="o"&gt;++)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;square&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="n"&gt;j&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&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="n"&gt;j&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
            &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;square&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;printLatinSquare&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;[][]&lt;/span&gt; &lt;span class="n"&gt;square&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;row&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;square&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;num&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;row&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
                &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;print&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;num&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;" "&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="o"&gt;}&lt;/span&gt;
            &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;Scanner&lt;/span&gt; &lt;span class="n"&gt;scanner&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Scanner&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;in&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;print&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Your Latin square must be between 3 and 7: "&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;scanner&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;nextInt&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
            &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Give me a number between 3 and 7."&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;

        &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;[][]&lt;/span&gt; &lt;span class="n"&gt;latinSquare&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;generateLatinSquare&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Latin square generated:"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;printLatinSquare&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;latinSquare&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;scanner&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;close&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Further Exploration
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Implement Latin squares using different methods, such as backtracking for more complex constraints.&lt;/li&gt;
&lt;li&gt;Explore applications of orthogonal Latin squares in statistical experiments.&lt;/li&gt;
&lt;li&gt;Modify the algorithm to generate randomized Latin squares instead of deterministic ones.&lt;/li&gt;
&lt;li&gt;Study how Latin squares relate to other combinatorial structures like magic squares and Sudoku puzzles.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By mastering the construction of Latin squares, programmers can improve their problem-solving skills and prepare for algorithmic coding interviews where combinatorial logic is tested. Understanding these structures opens doors to practical applications in various domains, making them a valuable topic to explore.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>algorithms</category>
      <category>tutorial</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Palindrome - Simple Algorithms for Programmers Looking for a Job: Part One</title>
      <dc:creator>Deotyma</dc:creator>
      <pubDate>Tue, 11 Feb 2025 14:56:46 +0000</pubDate>
      <link>https://forem.com/deotyma/simple-algorithms-for-programmers-looking-for-a-job-part-one-3mjj</link>
      <guid>https://forem.com/deotyma/simple-algorithms-for-programmers-looking-for-a-job-part-one-3mjj</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;h2&gt;
  
  
  What is an Algorithm?
&lt;/h2&gt;

&lt;p&gt;An &lt;strong&gt;algorithm&lt;/strong&gt; is a step-by-step procedure or a set of rules for solving a specific problem. In programming, algorithms are essential as they provide structured ways to process data, perform computations, and solve complex challenges efficiently. Whether sorting numbers, searching for information, or performing mathematical calculations, algorithms form the foundation of software development.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Are Algorithms Important in Programming?
&lt;/h2&gt;

&lt;p&gt;Algorithms help &lt;strong&gt;optimize performance, reduce computational complexity,&lt;/strong&gt; and ensure that software applications run efficiently. Mastering common algorithms is crucial for programmers, especially those preparing for &lt;strong&gt;technical job interviews.&lt;/strong&gt; Many companies evaluate candidates based on their ability to implement and analyze fundamental algorithms.&lt;/p&gt;




&lt;h1&gt;
  
  
  Why This Cycle?
&lt;/h1&gt;

&lt;p&gt;Many recruiters want to test the &lt;strong&gt;skill level of a programmer&lt;/strong&gt; who will join their team. Finding a job requires knowing how to translate &lt;strong&gt;requirements into working code.&lt;/strong&gt; In this series, I would like to present some fundamental algorithms and their implementation in different programming languages. I will showcase one or two solutions, but there are often multiple approaches to solving a problem.&lt;/p&gt;




&lt;h1&gt;
  
  
  The Reversed Version of a Given String
&lt;/h1&gt;

&lt;p&gt;The first algorithm I would like to introduce is one that &lt;strong&gt;returns the reversed version of a given string.&lt;/strong&gt; This type of algorithm falls under &lt;strong&gt;string manipulation algorithms,&lt;/strong&gt; specifically a &lt;strong&gt;reversal algorithm.&lt;/strong&gt; It is a &lt;strong&gt;deterministic, linear-time algorithm (O(n))&lt;/strong&gt; that transforms a given string by reversing its order. In programming, it can be classified as a &lt;strong&gt;text processing algorithm&lt;/strong&gt;, as it modifies character sequences, or as an &lt;strong&gt;in-place algorithm&lt;/strong&gt;, since certain implementations allow the reversal without using extra memory. Additionally, it can be implemented either &lt;strong&gt;iteratively using loops&lt;/strong&gt; or &lt;strong&gt;recursively through function calls.&lt;/strong&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  Use Cases
&lt;/h1&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Palindrome Checking&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;A string is reversed and compared with its original form to determine if it reads the same forward and backward. This is useful in word games such as &lt;strong&gt;"Wordament" and "Bananagrams,"&lt;/strong&gt; where players must quickly identify palindromes to gain points. In linguistic tests, applications like &lt;strong&gt;"Duolingo" and "Memrise"&lt;/strong&gt; use palindrome detection to reinforce language learning through pattern recognition. &lt;strong&gt;Educational tools&lt;/strong&gt; such as &lt;strong&gt;"Scratch"&lt;/strong&gt; allow students to experiment with text-based algorithms, including string reversal.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Cryptography&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;String reversal is sometimes used as part of &lt;strong&gt;encoding methods&lt;/strong&gt;, particularly in simple &lt;strong&gt;obfuscation techniques&lt;/strong&gt; or as a step in &lt;strong&gt;more complex encryption processes.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Bioinformatics&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Detecting &lt;strong&gt;palindromic sequences in DNA&lt;/strong&gt; is critical for understanding &lt;strong&gt;restriction enzymes&lt;/strong&gt;, which play a crucial role in &lt;strong&gt;genetic engineering and medical research.&lt;/strong&gt; For instance, bioinformatics software such as &lt;strong&gt;"BLAST" and "BioPython"&lt;/strong&gt; use sequence analysis to identify key genetic patterns.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;File Recovery&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;When a file becomes corrupted, forensic tools like &lt;strong&gt;"Scalpel" and "Recuva"&lt;/strong&gt; may attempt to read data &lt;strong&gt;in reverse&lt;/strong&gt; to reconstruct missing information. Similarly, in &lt;strong&gt;data compression algorithms,&lt;/strong&gt; reversing strings can be a step in &lt;strong&gt;encoding and decoding processes.&lt;/strong&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  Problem Statement:
&lt;/h1&gt;

&lt;p&gt;Write a function that &lt;strong&gt;takes a string as input and returns the reversed version&lt;/strong&gt; of that string. Additionally, provide a &lt;strong&gt;real-life use case&lt;/strong&gt; for this algorithm.&lt;/p&gt;




&lt;h1&gt;
  
  
  Real-World Use Case: Palindrome Detection
&lt;/h1&gt;

&lt;p&gt;Imagine an application that &lt;strong&gt;checks whether a word or phrase is a palindrome.&lt;/strong&gt; This functionality can be useful in &lt;strong&gt;word games, linguistic tests, or educational applications.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Pseudo-Code Implementation:&lt;/strong&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FUNCTION reverse_string(string)
    RETURN string reversed
END FUNCTION

FUNCTION is_palindrome(string)
    SET string TO lowercase version of string
    REMOVE spaces, commas, and apostrophes from string
    RETURN string EQUALS reverse_string(string)
END FUNCTION

// Example usage
SET word TO "Kayak"
PRINT "Is the word 'word' a palindrome? ", is_palindrome(word)

SET phrase TO "Was it a car or a cat I saw"
PRINT "Is the phrase 'phrase' a palindrome? ", is_palindrome(phrase)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This pseudocode represents the &lt;strong&gt;logic in a simplified way,&lt;/strong&gt; making it easy to translate into different programming languages.&lt;/p&gt;




&lt;h1&gt;
  
  
  Example Implementations
&lt;/h1&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Python Implementation:&lt;/strong&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;reverse_string&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;string&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;string&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 class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;is_palindrome&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;string&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;string&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;string&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt; &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;,&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"'"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;string&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nf"&gt;reverse_string&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Example usage
&lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Kayak&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Is the word &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt; a palindrome? &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;is_palindrome&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;phrase&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Was it a car or a cat I saw&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Is the phrase &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;phrase&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt; a palindrome? &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;is_palindrome&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;phrase&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  &lt;strong&gt;JavaScript Implementation:&lt;/strong&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;reverseString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&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;string&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;reverse&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;isPalindrome&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toLowerCase&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="se"&gt;[\s&lt;/span&gt;&lt;span class="sr"&gt;,'&lt;/span&gt;&lt;span class="se"&gt;]&lt;/span&gt;&lt;span class="sr"&gt;/g&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Remove spaces, commas, and apostrophes&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nf"&gt;reverseString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Example usage&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;word&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Kayak&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Is the word '&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;word&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;' a palindrome? &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nf"&gt;isPalindrome&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;word&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="s2"&gt;`&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;phrase&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Was it a car or a cat I saw&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Is the phrase '&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;phrase&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;' a palindrome? &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nf"&gt;isPalindrome&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;phrase&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  &lt;strong&gt;Java Implementation:&lt;/strong&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;PalindromeChecker&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="nf"&gt;reverseString&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;string&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;StringBuilder&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;string&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;reverse&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;toString&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;boolean&lt;/span&gt; &lt;span class="nf"&gt;isPalindrome&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;string&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;string&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;string&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;toLowerCase&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;replace&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;" "&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;""&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;replace&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;","&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;""&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;replace&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"'"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;""&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;string&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;equals&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;reverseString&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;string&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;word&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Kayak"&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Is the word '"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;word&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;"' a palindrome? "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;isPalindrome&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;

        &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;phrase&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Was it a car or a cat I saw"&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Is the phrase '"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;phrase&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;"' a palindrome? "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;isPalindrome&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;phrase&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Want to Go Further? 🎯
&lt;/h1&gt;

&lt;p&gt;To further solidify your understanding of string reversal and palindrome detection, try the following exercises:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Rewrite the palindrome checking algorithm using &lt;strong&gt;an iterative approach&lt;/strong&gt; instead of slicing or built-in functions.&lt;/li&gt;
&lt;li&gt;Implement the algorithm using &lt;strong&gt;recursion&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Modify the function to &lt;strong&gt;ignore case sensitivity and special characters&lt;/strong&gt; but consider diacritical marks (e.g., accents in words like &lt;strong&gt;"résumé"&lt;/strong&gt;).&lt;/li&gt;
&lt;li&gt;Extend the algorithm to work with &lt;strong&gt;numeric palindromes&lt;/strong&gt;, checking if a number reads the same forward and backward.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is &lt;strong&gt;part one&lt;/strong&gt; of a series on simple algorithms that can help &lt;strong&gt;junior developers&lt;/strong&gt; prepare for &lt;strong&gt;technical job interviews.&lt;/strong&gt; Stay tuned for more!&lt;/p&gt;

</description>
      <category>programming</category>
      <category>algorithms</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Spring boot REST- API - configurations (Part 1)</title>
      <dc:creator>Deotyma</dc:creator>
      <pubDate>Sun, 20 Nov 2022 11:58:58 +0000</pubDate>
      <link>https://forem.com/deotyma/spring-rest-api-configurations-part-1-3n83</link>
      <guid>https://forem.com/deotyma/spring-rest-api-configurations-part-1-3n83</guid>
      <description>&lt;p&gt;Hello. I've just started a new work-study formation and I learn Java and Spring. &lt;br&gt;
I will use Spring 2.4.7 with Java 11 and Eclipse for this tutorial and I work on MacBook with macOS Monterey version 12.&lt;/p&gt;

&lt;h2&gt;
  
  
  1). Creating a new workspace:
&lt;/h2&gt;

&lt;p&gt;I open my Eclipse editor and I create a new workspace: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyf3l8clp5xitm85ks3fh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyf3l8clp5xitm85ks3fh.png" alt="creation of new workspace" width="800" height="568"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After tapping on switch workspace I browse where I want to create my new workspace:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0dpl3vndnam0q08tnp6c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0dpl3vndnam0q08tnp6c.png" alt="browse a new espace" width="632" height="293"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;and I create a new folder where I will create a new workspace: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftddu7mmjp5tn7bofd3uu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftddu7mmjp5tn7bofd3uu.png" alt="new space" width="797" height="569"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fki3h6fy84thnypnwkbhr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fki3h6fy84thnypnwkbhr.png" alt="new workspace browsed" width="618" height="273"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now I restart Eclipse:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fod3sqrqhtxr42pmos810.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fod3sqrqhtxr42pmos810.png" alt="new workspace created" width="800" height="599"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2)Eclipse configuration for this workspace:
&lt;/h2&gt;

&lt;p&gt;I open preferences on Eclipse (if you have Windows the preferences ai in the window tab) &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkkvc954sskj9p53a6w52.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkkvc954sskj9p53a6w52.png" alt="preferences 1" width="800" height="428"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsjkzqvqnvjsml3am9cl1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsjkzqvqnvjsml3am9cl1.png" alt="preferences 2" width="636" height="562"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I will use Java 11 this time so I configure my JRE:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9mcfizzrwmxe7cfpgai3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9mcfizzrwmxe7cfpgai3.png" alt="JRE" width="800" height="655"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To continue I apply this change and I adapt its environment:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb9vy5p1awpvjodtr06cx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb9vy5p1awpvjodtr06cx.png" alt="JRE" width="800" height="645"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In input I write foramtter  - this is a plugin that helps to format a code, after I chose Code style formatter and  Java Conventions and I edit it:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fojarspjqqarv9bb647ui.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fojarspjqqarv9bb647ui.png" alt="preferences formatter" width="772" height="573"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I change the ligne wrapping from 120 to 60:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9gmvg1uhnmy69yi0vqzs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9gmvg1uhnmy69yi0vqzs.png" alt="ligne wrapping" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;and I change a Java Conventions [built-in] to Java Conventions custom&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsng9yiqtcjcs4iqthw1n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsng9yiqtcjcs4iqthw1n.png" alt="Java Conventions custom" width="291" height="36"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;and I press OK.&lt;/p&gt;

&lt;p&gt;Next, I write save in input: to format save actions: and I check this and I press Configure...: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgti0wd4us12vs7r8u1od.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgti0wd4us12vs7r8u1od.png" alt="save options" width="767" height="541"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And I change the use of parentheses in expressions:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9se5rxfl37bc6xvpi6fk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9se5rxfl37bc6xvpi6fk.png" alt="parentheses" width="800" height="749"&gt;&lt;/a&gt;&lt;br&gt;
and I press OK.&lt;/p&gt;

&lt;p&gt;After that I change the configuration of Javadoc and uncheck it:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1rado415hy1ampz4yg85.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1rado415hy1ampz4yg85.png" alt="javadoc" width="767" height="632"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And the last change is the spelling which can pollute the work if is always active so I uncheck it also:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feu5461sy4eo0hdljklqv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feu5461sy4eo0hdljklqv.png" alt="spelling uncheck" width="800" height="643"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I apply all these changes and now I can start a new spring project. &lt;/p&gt;

&lt;p&gt;See you in the next part. &lt;/p&gt;

</description>
      <category>programming</category>
    </item>
    <item>
      <title>How to customized Bootstrap 5.2 checks and radios</title>
      <dc:creator>Deotyma</dc:creator>
      <pubDate>Fri, 28 Oct 2022 00:25:53 +0000</pubDate>
      <link>https://forem.com/deotyma/how-to-customized-bootstrap-52-checks-and-radios-25g2</link>
      <guid>https://forem.com/deotyma/how-to-customized-bootstrap-52-checks-and-radios-25g2</guid>
      <description>&lt;p&gt;Bootstrap is one of the more known and used UI frameworks. It is completely free and open source. Bootstrap 5 is based on HTML, CSS, and vanilla JavaScript. It permits the build of quickly fully responsive sites and is very customizable. &lt;/p&gt;

&lt;p&gt;However, some elements like radios, checks, and switches are complicated to personalize. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://getbootstrap.com/docs/5.2/forms/checks-radios/" rel="noopener noreferrer"&gt;Here&lt;/a&gt; there is documentation of Bootstrap checks and radios.&lt;/p&gt;

&lt;p&gt;But how to customize those elements? &lt;br&gt;
There is a pure design of checks and radios with Bootstrap 5.2&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffcj31kvew2bu3ovlaawc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffcj31kvew2bu3ovlaawc.png" alt="non customized bootstrap radios and checks" width="304" height="159"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To examine how it is stylized it is necessary to inspect a website.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn02s5nq3phm77ikx60jj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn02s5nq3phm77ikx60jj.png" alt="bootstrap radio css" width="690" height="242"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks to this analysis we see that circle in the middle of the radio input is an image. The same is for the checkbox and switch. We can see which class is necessary to change the background color of a checked element. &lt;/p&gt;

&lt;p&gt;To change an element in the middle of the radio or checkbox I downloaded some images. Now I can change a css of each element: &lt;br&gt;
This is a CSS for a switch box:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.form-switch .form-check-input {
  background-image: url(/ball-147676_640.png);
  background-color: yellow;
}

.form-switch .form-check-input:checked {
  background-image: url(/ball-147676_640.png);
  background-color: red;
  border-color: red;
}

.form-switch .form-check-input:focus {
  background-image: url(/ball-147676_640.png);
  box-shadow: 0 0 4px 4px violet;
  border-color: violet;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;switchbox:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fieukv5vqvi2kzhd58vzh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fieukv5vqvi2kzhd58vzh.png" alt="switchbox" width="275" height="39"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;focused switchbox:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frm9a8x3gk4cb821l9xit.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frm9a8x3gk4cb821l9xit.png" alt="focused switchbox" width="283" height="29"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;active switchbox:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2xi5zj4e1j3lo86yise3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2xi5zj4e1j3lo86yise3.png" alt="Image description" width="279" height="30"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To personalize a radio we do the same:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.form-check-input:checked[type=radio] {
  background-image: url(/colors-155896_640.png);
  background-color: aquamarine;
  border-color: aquamarine;
}
.form-check-input:focus[type=radio] {
  box-shadow: 0 0 4px 4px aquamarine
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;and this is a result:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu3fmgsvb9y47vmpe2yno.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu3fmgsvb9y47vmpe2yno.png" alt="customized radio button " width="170" height="57"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It is time to see how it works for the checkbox:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.form-check-input:checked[type=checkbox]{
  background-image: url(/bootstrap.jpeg);
}

.form-check-input:focus[type=checkbox] {
  box-shadow: 0 0 4px 4px violet;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5scjk0smieozew1lowfc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5scjk0smieozew1lowfc.png" alt="customised checkbox" width="182" height="59"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Although it is not obvious, it is possible to customize even those elements.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgw9onzygnf8b5420eqck.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgw9onzygnf8b5420eqck.png" alt="customised elements" width="299" height="145"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;div class="ltag__stackexchange--container"&gt;
  &lt;div class="ltag__stackexchange--title-container"&gt;
    
      &lt;div class="ltag__stackexchange--title"&gt;
        &lt;div class="ltag__stackexchange--header"&gt;
          &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fstackoverflow-logo-b42691ae545e4810b105ee957979a853a696085e67e43ee14c5699cf3e890fb4.svg" alt=""&gt;
          &lt;a href="https://stackoverflow.com/questions/74227208/how-to-personalize-a-switch-checkbox-in-bootstrap-5/74227209#74227209" rel="noopener noreferrer"&gt;
            &lt;span class="title-flare"&gt;answer&lt;/span&gt; re: How to personalize a switch checkbox in Bootstrap 5
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="ltag__stackexchange--post-metadata"&gt;
          &lt;span&gt;Oct 27 '22&lt;/span&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;a class="ltag__stackexchange--score-container" href="https://stackoverflow.com/questions/74227208/how-to-personalize-a-switch-checkbox-in-bootstrap-5/74227209#74227209" rel="noopener noreferrer"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fstackexchange-arrow-up-eff2e2849e67d156181d258e38802c0b57fa011f74164a7f97675ca3b6ab756b.svg" alt=""&gt;
        &lt;div class="ltag__stackexchange--score-number"&gt;
          1
        &lt;/div&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fstackexchange-arrow-down-4349fac0dd932d284fab7e4dd9846f19a3710558efde0d2dfd05897f3eeb9aba.svg" alt=""&gt;
      &lt;/a&gt;
    
  &lt;/div&gt;
  &lt;div class="ltag__stackexchange--body"&gt;
    
&lt;p&gt;The circle inside is an SVG so to change it I need to use a new SVG&lt;/p&gt;
&lt;p&gt;This is a basic switch checkbox Bootstrap code:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; &amp;lt;div class="form-check form-switch back"&amp;amp;gt
        &amp;lt;input class="form-check-input" type="checkbox" role="switch" id="flexSwitchCheckDefault"&amp;gt;
        &amp;lt;label class="form-check-label" for="flexSwitchCheckDefault"&amp;gt;Default switch checkbox input&amp;lt;/label&amp;gt;
 &amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I downloaded an image to the local repository
&lt;a href="https://i.sstatic.net/OdUQr.png" rel="nofollow noreferrer noopener"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.sstatic.net%2FOdUQr.png" alt="image to replace a circle"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And…&lt;/p&gt;
    
  &lt;/div&gt;
  &lt;div class="ltag__stackexchange--btn--container"&gt;
    &lt;a href="https://stackoverflow.com/questions/74227208/how-to-personalize-a-switch-checkbox-in-bootstrap-5/74227209#74227209" class="ltag__stackexchange--btn" rel="noopener noreferrer"&gt;Open Full Answer&lt;/a&gt;
  &lt;/div&gt;
&lt;/div&gt;



</description>
      <category>beginners</category>
      <category>css</category>
      <category>bootstrap</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>5 recruitment tasks with Python</title>
      <dc:creator>Deotyma</dc:creator>
      <pubDate>Sat, 13 Aug 2022 01:07:00 +0000</pubDate>
      <link>https://forem.com/deotyma/5-recruitment-tasks-with-python-3i26</link>
      <guid>https://forem.com/deotyma/5-recruitment-tasks-with-python-3i26</guid>
      <description>&lt;p&gt;At this moment I'm seeking a work-study job (alternance in french) as a programmer so I have to pass lots of tests each day and I decided to show you some of them this time with Python. Here This is only one solution, there is lots of solution for each of those problems so try your own solution. &lt;/p&gt;

&lt;p&gt;1) Write a function that will print even numbers:&lt;/p&gt;

&lt;p&gt;Solution 1 - while loop:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def evenNumbers(number):
    n=0
    while n &amp;lt; number:
        n += 1
        if n % 2 == 0:
            print(n, end="\t")

evenNumbers(10)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Solution 2 - for loop:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def evenNumbers2(number):
    numbers = range(0, number+1)
    for n in numbers:
        if n % 2 == 1:
            continue
        print(n, end="\t")

evenNumbers2(10)

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frouf0so7sg2b9uc1go6k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frouf0so7sg2b9uc1go6k.png" alt="Solution 1" width="500" height="68"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2) Find a prime number:&lt;/p&gt;

&lt;p&gt;Solution:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def isPrimeNumber(number):
    if number &amp;gt; 1:
        for i in range(2,number):
            if number % i == 0:
                #print(f"{i} times {number//i} is {number}")
                #print(f"{number} is not a prime number")
                return False    
        return True
    else:
        return False    

print("7 is prime", isPrimeNumber(7))
print("9 is prime", isPrimeNumber(9))

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw5lqrvdyobthazqs9blq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw5lqrvdyobthazqs9blq.png" alt="is prime number function" width="560" height="39"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So we know how to find if a number is prime we can use it to find a prime number in a range:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def allPrimeNumbers(num):
    for i in range(num + 1):
        if isPrimeNumber(i):
            print(i, end = ", ")


print("prime numbers to 100")
allPrimeNumbers(100)

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foa9134orvxqr4g5bvb3f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foa9134orvxqr4g5bvb3f.png" alt="all prime numbers in a range of 100" width="696" height="53"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3) How to know if a number is a palindrome:&lt;br&gt;
Solution:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def palindrome_number (number):
    number_str = str(number) # it is necessary to change the number to string to compare each digit
    number2_str = number_str[::-1] # number2_str is renversed by [::–1] slice which starts from last sign

    if number_str == number2_str:
        print(f"{number} this is a palindrome")
    else:
        print(f"{number} isn't a palindrome")  

palindrome_number(123321)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmazztuzd7yks1kof1h5i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmazztuzd7yks1kof1h5i.png" alt="function palindrome number" width="397" height="35"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4) Fizz Buzz is one of most favorite exercises given to juniors and not only:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def fizz_buzz(number):
    for i in range(1, number+1):
        if i % 3 == 0 and i % 5 == 0:
            print("fizzBuzz",end=", ")
        elif i % 3 == 0:
            print ("fizz",end=", ")
        elif i % 5 == 0:
            print ("buzz",end=", ")
        else:
            print (i,end=", ")

fizz_buzz(20) 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqk2syutd6bz1t7314a5g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqk2syutd6bz1t7314a5g.png" alt="fizz_buzz function" width="704" height="30"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Yes,  I know it is better and proper to use "return" than "print" 😉&lt;/p&gt;

&lt;p&gt;5) This exercise was more difficult for me to understand: Fibonacci. Here I will show you 3 solutions:&lt;/p&gt;

&lt;p&gt;Solution 1 - recursive function:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def fib_r(n):
    assert n&amp;gt;=0
    if n&amp;lt;=1: 
        return n
    else:
        return fib_r(n-1)+fib_r(n-2)

print(fib_r(10))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Solution 2 - iterative function&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def fib_i(num):
    a, b = 0,1 

    for i in range(0, num):
        a, b = b, a + b
        print(a, end= ", ")

print(fib_i(10))

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxkzg3sztq7q3t73v3jtu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxkzg3sztq7q3t73v3jtu.png" alt="iterative function fibonacci" width="235" height="27"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Solution 3 - function with generator&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def fib_g():
    yield 0
    a=0
    b=1
    while True:
        yield b
        a,b = b,a+b

g=fib_g()

for i in range (11): 
    print( next(g), end = ", ")

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These are just 5 tasks that I encountered during various recruitment tests and are only examples of solutions. If you have other suggestions, don't hesitate to leave a comment. &lt;/p&gt;

</description>
      <category>python</category>
      <category>recruitmant</category>
      <category>testdev</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
