Whiz Tools

Eina d'inversió de text

Introdueix o enganxa text a continuació per invertir automàticament l'ordre dels caràcters. El text invertit apareixerà a continuació mentre escrius.

Eina Inversora de Text

Introducció

La inversió de text és una tècnica de manipulació de cadenes simple però poderosa que inverteix l'ordre dels caràcters en un text donat. Aquest procés pren una seqüència de caràcters i retorna una nova seqüència amb els caràcters en ordre invers. Tot i que és conceptualment senzill, la inversió de text té nombroses aplicacions en informàtica, criptografia i anàlisi lingüística.

L'eina inversora de text que es proporciona aquí et permet invertir ràpidament qualsevol entrada de text. Simplement escriu o enganxa el teu text al camp d'entrada, i l'eina mostrarà automàticament el resultat invertit. Això pot ser útil per a una varietat de propòsits, des de crear missatges codificats simples fins a analitzar estructures palindròmiques.

Com Utilitzar Aquesta Eina

  1. Introdueix o enganxa el teu text al camp d'entrada.
  2. El text invertit apareixerà automàticament a la zona de resultats.
  3. Utilitza el botó de copiar per copiar el text invertit al teu porta-retalls.

L'eina processa la teva entrada en temps real, així que pots veure el resultat invertit a mesura que escrius.

Fórmula

El procés d'inversió de text es pot representar matemàticament com una funció de transformació que mapeja una cadena d'entrada a la seva forma invertida:

Per a una cadena SS de longitud nn amb caràcters S=c1c2c3...cnS = c_1c_2c_3...c_n, la cadena invertida SS' és:

S=cncn1cn2...c1S' = c_nc_{n-1}c_{n-2}...c_1

En termes algorítmics, això es pot implementar de diverses maneres:

  1. Inversió d'Array: Converteix la cadena en un array de caràcters, inverteix l'array i després uneix els caràcters de nou en una cadena.
  2. Tècnica de Dos Punts: Utilitza dos punts d'inici des de costats oposats de la cadena, intercanviant caràcters a mesura que es mouen cap al centre.
  3. Enfocament Basat en Pila: Empeny tots els caràcters a una pila i després treu-los per crear la cadena invertida.

La complexitat temporal de la inversió de text és O(n)O(n), on nn és la longitud de la cadena d'entrada, ja que cada caràcter ha de ser processat exactament una vegada. La complexitat espacial també és O(n)O(n) ja que necessitem emmagatzemar la cadena invertida.

Càlcul

L'algoritme d'inversió de text funciona recorrent la cadena d'entrada en ordre invers i construint una nova cadena amb els caràcters en la seqüència oposada. Aquí hi ha una explicació pas a pas de com funciona el procés:

  1. Inicialitza una cadena de resultat buida.
  2. Començant pel darrer caràcter de la cadena d'entrada, afegeix cada caràcter a la cadena de resultat.
  3. Continua fins que s'hagi processat el primer caràcter de la cadena d'entrada.
  4. Retorna la cadena de resultat.

Per exemple, donada l'entrada "Hola, món!", l'algoritme processaria de la següent manera:

  1. Comença amb una cadena de resultat buida: ""
  2. Processa el darrer caràcter "!": resultat = "!"
  3. Processa el següent caràcter "n": resultat = "!n"
  4. Processa el següent caràcter "ó": resultat = "!nó"
  5. Continua aquest procés per a cada caràcter
  6. Resultat final: "!nòm ,aloH"

L'algoritme maneja tot tipus de caràcters, incloent lletres, números, símbols i espais, preservant-los a la sortida invertida.

Casos Límit i Consideracions

L'algoritme d'inversió de text maneja diversos casos límit:

  1. Cadenes Buides: Si l'entrada és una cadena buida, la sortida també serà una cadena buida.
  2. Un Sol Caràcter: Si l'entrada només té un caràcter, la sortida serà idèntica a l'entrada.
  3. Caràcters i Símbols Especials: Tots els caràcters, incloent puntuació, símbols i espais, són preservats a la sortida invertida.
  4. Caràcters Unicode: L'algoritme maneja correctament els caràcters Unicode, incloent emojis i caràcters de scripts no llatins.
  5. Cadenes MOLT Llargues: Per a entrades extremadament llargues, l'algoritme pot estar limitat per la memòria disponible per emmagatzemar la cadena invertida.

Casos d'Ús

La inversió de text té diverses aplicacions pràctiques en diferents camps:

  1. Criptografia i Codificació: La inversió de text simple es pot utilitzar com una tècnica de codificació bàsica o com a part de més complexos algorismes de xifrat.

  2. Programació i Algorismes:

    • Comprovant palíndroms (paraules o frases que es llegeixen igual cap enrere que cap endavant)
    • Exercicis i reptes de manipulació de cadenes
    • Implementant estructures de dades de pila
  3. Jocs de Paraules i Trencaclosques:

    • Creant trencaclosques de paraules on els jugadors han d'identificar paraules invertides
    • Generant "parla a l'inrevés" per a jocs o escriptura creativa
  4. Anàlisi de Text:

    • Estudiant patrons lingüístics en text invertit
    • Analitzant simetria en el llenguatge escrit
  5. Eines Educatives:

    • Ensenyant conceptes bàsics de manipulació de cadenes
    • Demostrant pensament algorítmic
  6. Escriptura Creativa:

    • Creant escriptura en mirall o text invertit per a fins artístics
    • Generant diàlegs a l'inrevés per a personatges de ficció

Alternatives

Si bé la inversió caràcter per caràcter és la forma més comuna d'inversió de text, hi ha enfocaments alternatius que podrien ser més adequats per a aplicacions específiques:

  1. Inversió de Paraules: Invertir l'ordre de les paraules mentre es manté l'ordre dels caràcters dins de cada paraula.

    • Exemple: "Hola món" → "món Hola"
  2. Inversió de Frases: Invertir l'ordre de les frases mentre es manté l'ordre de les paraules dins de cada frase.

    • Exemple: "Hola món. Com estàs?" → "Com estàs? Hola món."
  3. Inversió Parcial: Invertir només porcions específiques de text basades en certs criteris.

    • Exemple: Invertir només vocals, només consonants, o només paraules d'una certa longitud
  4. Inversió Fonètica: Invertir els sons fonètics en comptes dels caràcters escrits (utilitzat en estudis lingüístics).

  5. Inversió a Nivell de Bits: Invertir la representació binària del text (utilitzat en algunes aplicacions criptogràfiques).

Història

El concepte d'inversió de text té una rica història que abasta diverses cultures i disciplines:

Orígens Antics

La inversió de text s'ha practicat durant milers d'anys. Civilitzacions antigues com els egipcis i els grecs de vegades escrivien en estil "boustrophedon", on les línies alternades de text es movien en direccions oposades. Leonardo da Vinci va utilitzar famosament l'escriptura en mirall (una forma d'inversió de text) als seus quaderns, possiblement com una forma de codificació o simplement perquè era esquerrà.

Era de la Informàtica

En els primers dies de la informàtica, les operacions de manipulació de cadenes com la inversió eren exercicis fonamentals de programació. A mesura que els llenguatges de programació evolucionaven, les funcions integrades per a la inversió de cadenes es convertien en característiques comunes a les biblioteques estàndard.

El concepte d'inversió de text va guanyar una importància particular amb el desenvolupament d'estructures de dades de pila en ciència de la computació durant els anys 50 i 60. El comportament de darrera entrada-primer sortida (LIFO) d'una pila produeix naturalment una sortida invertida, fent que sigui una solució elegant per a problemes d'inversió de text.

Aplicacions Modernes

En la informàtica moderna, els algorismes d'inversió de text s'utilitzen en diverses aplicacions:

  1. Compiladors i Intèrprets: Utilitzats en l'anàlisi de sintaxi i parsing.
  2. Compressió de Dades: Alguns algorismes de compressió utilitzen tècniques d'inversió.
  3. Criptografia: Com a components de més complexos esquemes de xifrat.
  4. Processament del Llenguatge Natural: Per analitzar patrons i estructures lingüístiques.

La simplicitat i utilitat de la inversió de text han assegurat la seva continuïtat rellevància en la informàtica i el processament del llenguatge.

Exemples

Aquí hi ha exemples de codi que demostren la inversió de text en diversos llenguatges de programació:

' Funció VBA d'Excel per a la inversió de text
Function InvertText(inputText As String) As String
    Dim i As Integer
    Dim result As String
    
    result = ""
    For i = Len(inputText) To 1 Step -1
        result = result & Mid(inputText, i, 1)
    Next i
    
    InvertText = result
End Function
' Ús en una cel·la:
' =InvertText("Hola, món!")
def invert_text(input_text):
    """Inverteix l'ordre dels caràcters en una cadena."""
    return input_text[::-1]

# Exemple d'ús:
original_text = "Hola, món!"
inverted_text = invert_text(original_text)
print(f"Original: {original_text}")
print(f"Invertit: {inverted_text}")

# Maneig de caràcters Unicode
unicode_text = "こんにちは世界! 🌍"
inverted_unicode = invert_text(unicode_text)
print(f"Original Unicode: {unicode_text}")
print(f"Invertit Unicode: {inverted_unicode}")
function invertText(inputText) {
  return inputText.split('').reverse().join('');
}

// Exemple d'ús:
const originalText = "Hola, món!";
const invertedText = invertText(originalText);
console.log(`Original: ${originalText}`);
console.log(`Invertit: ${invertedText}`);

// Maneig de cadenes buides
console.log(`Cadena buida invertida: "${invertText("")}"`);

// Maneig de Unicode
const unicodeText = "こんにちは世界! 🌍";
console.log(`Original Unicode: ${unicodeText}`);
console.log(`Invertit Unicode: ${invertText(unicodeText)}`);
public class TextInverter {
    public static String invertText(String inputText) {
        return new StringBuilder(inputText).reverse().toString();
    }
    
    public static void main(String[] args) {
        String originalText = "Hola, món!";
        String invertedText = invertText(originalText);
        
        System.out.println("Original: " + originalText);
        System.out.println("Invertit: " + invertedText);
        
        // Maneig de caràcters Unicode
        String unicodeText = "こんにちは世界! 🌍";
        String invertedUnicode = invertText(unicodeText);
        System.out.println("Original Unicode: " + unicodeText);
        System.out.println("Invertit Unicode: " + invertedUnicode);
    }
}
invert_text <- function(input_text) {
  # Converteix a vector de caràcters, inverteix i concatena
  paste(rev(strsplit(input_text, "")[[1]]), collapse = "")
}

# Exemple d'ús
original_text <- "Hola, món!"
inverted_text <- invert_text(original_text)
cat("Original:", original_text, "\n")
cat("Invertit:", inverted_text, "\n")
function invertedText = invertText(inputText)
    % Funció per a invertir l'ordre dels caràcters en una cadena
    invertedText = inputText(end:-1:1);
end

% Exemple d'ús
originalText = 'Hola, món!';
invertedText = invertText(originalText);
fprintf('Original: %s\n', originalText);
fprintf('Invertit: %s\n', invertedText);
#include <iostream>
#include <string>
#include <algorithm>

std::string invertText(const std::string& inputText) {
    std::string result = inputText;
    std::reverse(result.begin(), result.end());
    return result;
}

int main() {
    std::string originalText = "Hola, món!";
    std::string invertedText = invertText(originalText);
    
    std::cout << "Original: " << originalText << std::endl;
    std::cout << "Invertit: " << invertedText << std::endl;
    
    // Maneig de cadenes buides
    std::cout << "Cadena buida invertida: \"" << invertText("") << "\"" << std::endl;
    
    return 0;
}
def invert_text(input_text)
  input_text.reverse
end

# Exemple d'ús
original_text = "Hola, món!"
inverted_text = invert_text(original_text)
puts "Original: #{original_text}"
puts "Invertit: #{inverted_text}"

# Maneig de caràcters Unicode
unicode_text = "こんにちは世界! 🌍"
inverted_unicode = invert_text(unicode_text)
puts "Original Unicode: #{unicode_text}"
puts "Invertit Unicode: #{inverted_unicode}"
<?php
function invertText($inputText) {
    return strrev($inputText);
}

// Exemple d'ús
$originalText = "Hola, món!";
$invertedText = invertText($originalText);
echo "Original: $originalText\n";
echo "Invertit: $invertedText\n";

// Maneig de caràcters Unicode
$unicodeText = "こんにちは世界! 🌍";
$invertedUnicode = invertText($unicodeText);
echo "Original Unicode: $unicodeText\n";
echo "Invertit Unicode: $invertedUnicode\n";
?>
fn invert_text(input_text: &str) -> String {
    input_text.chars().rev().collect()
}

fn main() {
    let original_text = "Hola, món!";
    let inverted_text = invert_text(original_text);
    
    println!("Original: {}", original_text);
    println!("Invertit: {}", inverted_text);
    
    // Maneig de caràcters Unicode
    let unicode_text = "こんにちは世界! 🌍";
    let inverted_unicode = invert_text(unicode_text);
    println!("Original Unicode: {}", unicode_text);
    println!("Invertit Unicode: {}", inverted_unicode);
}
using System;

class TextInverter
{
    public static string InvertText(string inputText)
    {
        char[] charArray = inputText.ToCharArray();
        Array.Reverse(charArray);
        return new string(charArray);
    }
    
    static void Main()
    {
        string originalText = "Hola, món!";
        string invertedText = InvertText(originalText);
        
        Console.WriteLine($"Original: {originalText}");
        Console.WriteLine($"Invertit: {invertedText}");
        
        // Maneig de cadenes buides
        Console.WriteLine($"Cadena buida invertida: \"{InvertText("")}\"");
        
        // Maneig de caràcters Unicode
        string unicodeText = "こんにちは世界! 🌍";
        string invertedUnicode = InvertText(unicodeText);
        Console.WriteLine($"Original Unicode: {unicodeText}");
        Console.WriteLine($"Invertit Unicode: {invertedUnicode}");
    }
}
package main

import (
    "fmt"
)

func invertText(inputText string) string {
    runes := []rune(inputText)
    for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 {
        runes[i], runes[j] = runes[j], runes[i]
    }
    return string(runes)
}

func main() {
    originalText := "Hola, món!"
    invertedText := invertText(originalText)
    
    fmt.Printf("Original: %s\n", originalText)
    fmt.Printf("Invertit: %s\n", invertedText)
    
    // Maneig de caràcters Unicode
    unicodeText := "こんにちは世界! 🌍"
    invertedUnicode := invertText(unicodeText)
    fmt.Printf("Original Unicode: %s\n", unicodeText)
    fmt.Printf("Invertit Unicode: %s\n", invertedUnicode)
}
func invertText(_ inputText: String) -> String {
    return String(inputText.reversed())
}

// Exemple d'ús
let originalText = "Hola, món!"
let invertedText = invertText(originalText)

print("Original: \(originalText)")
print("Invertit: \(invertedText)")

// Maneig de caràcters Unicode
let unicodeText = "こんにちは世界! 🌍"
let invertedUnicode = invertText(unicodeText)
print("Original Unicode: \(unicodeText)")
print("Invertit Unicode: \(invertedUnicode)")

Consideracions de Rendiment

Quan es treballa amb la inversió de text, hi ha diverses consideracions de rendiment a tenir en compte:

  1. Ús de Memòria: Per a cadenes molt llargues, crear una còpia invertida requereix memòria addicional proporcional a la longitud de l'entrada.

  2. Inversió en Lloc: Alguns llenguatges permeten la inversió en lloc d'arrays de caràcters, cosa que pot ser més eficient en termes de memòria, però pot no ser aplicable per a tipus de cadena immutables.

  3. Maneig de Unicode: Invertir cadenes amb caràcters Unicode de múltiples bytes requereix un maneig acurat per evitar la corrupció de les codificacions de caràcters.

  4. Streaming vs. Buffering: Per a textos extremadament llargs, un enfocament de streaming que processi i mostri caràcters de manera incremental pot ser més eficient que emmagatzemar tota l'entrada.

  5. Paral·lelització: Per a cadenes molt llargues, es poden emprar tècniques de processament paral·lel per accelerar el procés d'inversió, tot i que això introdueix complexitat addicional.

Referències

  1. Knuth, D. E. (1997). The Art of Computer Programming, Volume 1: Fundamental Algorithms (3a ed.). Addison-Wesley Professional.

  2. Sedgewick, R., & Wayne, K. (2011). Algorithms (4a ed.). Addison-Wesley Professional.

  3. "String (computer science)." Wikipedia, Wikimedia Foundation, https://en.wikipedia.org/wiki/String_(computer_science). Accedit el 2 d'agost de 2024.

  4. "Palindrome." Wikipedia, Wikimedia Foundation, https://en.wikipedia.org/wiki/Palindrome. Accedit el 2 d'agost de 2024.

  5. "Mirror writing." Wikipedia, Wikimedia Foundation, https://en.wikipedia.org/wiki/Mirror_writing. Accedit el 2 d'agost de 2024.

Feedback