Distintas formas de invertir una cadena de texto en Linux.

Vamos a hablar un poco más sobre programar scripts en Linux y veamos cómo podemos invertir una cadena con distintos métodos:

Empezamos con lo más sencillo, usar la función rev:

echo holiii | rev

Usando el comando sed dos veces, junto con tac, también podemos hacerlo:

echo holiii | sed 's/./&\n/g' | tac | sed -e :a -e 'N;s/\n//g;ta'

Ya os podéis imaginar que si podemos hacerlo con sed es que también podemos hacerlo con awk, en este caso con la función substr() y un bucle for con el que recorreremos la cadena de fin a principio pintando cada letra:

echo holiii | awk '{ for(i=length;i!=0;i--)x=x substr($0,i,1);}END{print x}'

Y no podría faltar el tradicional script de shell. El principio es el mismo que con awk: recorrer la cadena del final hacia el inicio pintando cada elemento

#!/bin/bash
a="holiii"
len=`echo ${#a}`
while [ $len -ne 0 ]
do
        b=$b`echo $a | cut -c $len`
        ((len--))
done
echo $b

Anuncios

Introducción al álgebra booleana: ¿Qué es?

El álgebra booleana es una estructura algebraica que esquematiza las operaciones lógicas, tomando su nombre de George Boole quien fue el primero en definirla como parte de un sistema lógico en 1847, en un intento de utilizar las técnicas algebraicas para tratar expresiones de la lógica proposicional.

El Álgebra de Boole es un conjunto “A”, provisto de dos operaciones binarias AND, OR, una operación unaria NOT y dos elementos 0 (Falso) y 1 (Verdadero), de forma que para todos los elementos a, b y c del conjunto A, se cumplen los siguientes axiomas:

Asociatividad:
a OR ( b OR c ) = ( a OR b ) OR c
a AND ( b AND c ) = ( a AND b ) AND c

Conmutatividad:
a OR b = b OR a
a AND b = b AND a

Absorción:
a OR (a AND b)=a
a AND (a OR b)=a

Distribuitividad:
a OR (b AND c)=(a OR b) AND (a OR c)
a AND (b OR c)=(a AND b) OR (a AND c)

Complementación:
a OR NOT a = 1
a AND NOT a = 0

Como en una computadora digital hay sólo dos posibilidades, usar el 0 o bien el 1 para representar el objeto más pequeño e indivisible, el álgebra booleana se convierte en una de las herramientas fundamentales de la computación y de la electrónica. Todos los datos se reducen finalmente a combinaciones de bits y los circuitos electrónicos permiten que estos recursos de almacenamiento se comuniquen entre sí. Un bit en una parte de un circuito se transmite a otra como voltaje. Por ello se necesitan dos niveles de voltaje: un voltaje alto que comunique el 1 y un voltaje bajo que comunique el 0. Fue Claude Shannon, en 1938, el primero en darle esta utilidad para simplificar circuitos conmutadores.

Operación AND.
La operación AND es exactamente igual a una multiplicación normal por lo cual sus reglas son las siguientes:

  1. Solamente si todas las entradas son 1 la salida será 1.
  2. Cuando una o más entradas sean 0 la salida será 0.

En el caso de una compuerta AND en un circuito electrónico esta opera en tal forma que su salida es ALTA sólo cuando todas sus entradas son ALTAS. En todos los otros casos la salida de la compuerta AND es BAJA.

Operación OR:
La operación OR es básicamente una suma y sus reglas son las siguientes:

  1. Produce un resultado de 1 cuando cualquiera de las variables de entrada es 1.
  2. Produce un resultado de 0 solo cuando todas las variables de entrada son 0.

En el caso de una compuerta OR opera en tal forma que su salida es ALTA si la entrada A, B o ambas están en un nivel lógico 1. La salida de la compuerta OR será BAJA si todas sus entradas están en el nivel lógico 0.

Operación NOT:
La operación NOT también se conoce como inversión o complementación, básicamente nos devuelve el valor complementario al que tengamos. Es decir, si A es igual a 0 entonces NOT A sería uno 1.

En el caso de un circuito electrónico NOT este siempre tiene una sola entrada y su nivel lógico de salida es contrario al nivel lógico de esta entrada.

Calculadora de Ohm en Javascript

La ley de Ohm fue postulada por el físico y matemático Georg Simon Ohm, es una ley básica de los circuitos eléctricos. Nos dice que la diferencia de potencial V que aplicamos entre los extremos de un conductor es proporcional a la intensidad de la corriente I que circula por él. Introduce la noción de resistencia eléctrica R: el factor de proporcionalidad que aparece en la relación entre diferencia potencial e intensidad.

En este ejemplo vamos a hacer una función de Javascript que puede recibir tres parámetros y, según el que reciba vacío, devolverá un resultado u otro valiéndose de la fórmula general de la ley de Ohm, que resumimos en la fórmula V=R*I.

function calculadoraOhm(V,R,I){
  //si la diferencia potencial va vacía
  //en ese caso calculamos el voltaje.
  if(V==""){
    return parseFloat(R)*parseFloat(I);
  }
  //si la resistencia va vacía
  //en ese caso calculamos el voltaje.
  if(R==""){
    return parseFloat(V)/parseFloat(I);
  }
  //si la intensidad va vacía
  //es la que calculamos.
  if(I==""){
    return parseFloat(V)/parseFloat(R);
  }
  //si no va nada vacío devuelve una cadena vacía.
  return "";
}

Cómo hacer un Hello World! en distintos lenguajes de programación.

El Hello World es un ejercicio básico de programación. Casi en cualquier lenguaje de programación que estudies empezarás en la primera lección programando uno. Aquí te dejo diversos ejemplos en distintos lenguajes
, lo que además te permitirá ver algunas de las pequeñas diferencias que hay entre ellos.

ASP:

Response.Write "Hello World!" 

Script de Bash:

#!/bin/bash
echo "Hello, World!" 

C:

#include 
main(){
  printf ("Hello World!\n");
}

C++:

#include 
using namespace std;
void main(){
  cout << "Hello World!" << endl;
}

C#:

using System;
namespace HelloWorld
{
    class Hello 
    {
        static void Main() 
        {
            Console.WriteLine("Hello World!");            
        }
    }
}

Java:

class hellWorldJava{
  public static void main(String args[]){
    System.out.println("Hello World!");
  }
}

Javascript:

window.alert( 'Hello, world!' );

Objective C:

#import 

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        NSLog(@"Hello, World!");
    }
    return 0;
}

Perl:

#!/usr/bin/perl
print “Hello World.\n”;

PHP:

echo "Hello World!";

Script de Powershell:

$strString = "Hello World"
write-host $strString

Python:

print "Hello, World!"

R:

print("Hello World!", quote = FALSE)

Ruby:

puts 'Hello world'

Expresiones regulares en Javascript para validar fecha u hora.

Vamos con una entrada rápida en Javascript. Ya hace años que revisamos el tema de las expresiones regulares, pero hoy vamos a ver un ejemplo concreto ¿Cómo hago una expresión regular que me valide un formato de fecha dd/mm/aaaa?

Pues sería esta:
/^\d{1,2}\/\d{1,2}\/\d{2,4}$/

Ok ¿Y como valido un formato de hora tipo hh:mm:ss? Pues con esta:
/^(0[1-9]|1\d|2[0-3]):([0-5]\d):([0-5]\d)$/

Ordenación de burbuja en Javascript

El método del intercambio directo, también llamado ordenación de burbuja (bubble sort en inglés), es un algoritmo de ordenamiento extremadamente sencillo que suele ser un ejercicio clásico en los cursos de programación para entender el uso de los bucles anidados en otros bucles. Funciona revisando cada elemento de la lista que va a ser ordenada con el siguiente, intercambiándolos de posición si están en el orden equivocado. Esto hace necesario revisar varias veces toda la lista, hasta que no se necesiten más intercambios. Por ello se trata de un algoritmo lento y poco eficiente.

La implementación de dicho algoritmo en una función de Javascript que recibe un array desordenado sería la siguiente:

//la función recibe un array desordenado
function burbuja(arr) {
 //Primer bucle, recore todo el array
 for (var i = 0; i < arr.length; i++) {
   //segundo bucle, va ordenando los elementos.
   for(var j=0; j  arr[j + 1]) {
      var el1 = arr[j];      
      arr[j] = arr[j + 1];
      arr[j + 1] = el1;
     }
   }
  }
  //al acabar la ordenación devulve el array, 
  //ahora ordenado
  return arr;
}

Javascript: convertir una cadena CSV en un array.

Vamos con un tip rápido de Javascript ¿cómo convertimos en un array una cadena de valores separados por comas? (en una entrada antigua hicimos el proceso contrario) Es bastante sencillo lograrlo:

var sabbath = 'ozzy,iommi,bill,geezer';
var sabbath_array = sabbath.split(",")

Basta con usar la función split() pasándole la coma como parámetro para que cree un array con tantas posiciones como valores separados por coma haya en la cadena.