Python: Determinar si una grafica tiene un Circuito Euleriano, un Camino Euleriano o ninguno de los dos


Dado el conjunto de vértices y pares de vértices asociados a los bordes de una grafica, encuentre el grado en-grado y fuera-de-grado cada vértice, y indique si el gráfico tiene un circuito Euleriano, un camino Euleriano, o ninguno de los dos. El programa esta dirigido a graficas directas.

Ejemplo de una entrada (desde el teclado):

Conjunto de vértices: a, b, c
Bordes: (a, b), (a, c), (b, a), (b, c)

El codigo siguiente es la solucion a este problema utilizando Python:


def EulerianoCNN():
    print("Introduzca cada entrada separada por coma (,) \n")
    print("Ex: \nConjunto de vértices: a,b,c \nBordes: (a,b),(a,c),(b,a),(b,c) \n")

    sov = input("Conjunto de vértices: ")  # Obtener letras de vértice de entrada
    Ssov = sov.split(",")       # Obtener los vértices de entrada delimitados por comas y ponerlos en el array

    edg = input("Bordes: ")
    edg1 = edg.replace(",", "")     # Borrar todas las comas (,) de la entrada Bordes
    edg2 = edg1.replace("(", "")    # Borrar todos los parentesis de apertura de la entrada Bordes
    edg3 = edg2.replace(")", "")    # Borrar todos los parentesis de cierre de la entrada Bordes
   
    outdeg = []     # Creación de lista de fuera de grado vacía
    indeg = []      # Creación de una lista en grados vacía

    odCounter = 0   # Declarar contador de-grado de salida igual a 0
    idCounter = 0   # Declarar contador fuera-de-grado de salida igual a 0

    equalDegrees = 0     # Variable para acumular cuando los grados en-grado y fuera-de-grado son iguales
    notEqualDegrees = 0

    EPEequalDegrees = 0  # Variable para acumular todos los vértices pares
    EPOequalDegrees = 0

    ECreason = 0        # Variable por la razón de no tener un motivo del circuito Euleriano
    EPreason = 0        # Variable por la razón de no tener una razón Camini Euleriano


    eulerPath = False
    ep1 = 0
    ep2 = 0

    eulerCircuit = False
    ec = 0

    forCounter = 0

    for j in Ssov:  ## Iterar a través de cada vértice

        ## Ver si el vértice es igual a outdegree

        ## Fuera-de-grado
        for i in range(0, len(edg3), 2):
            op, code = edg3[i:i+2]  ## Obtener Bordes 2 por 2 de la lista Bordes y asignar la primera letra a op y la segunda a code
                                    ## op comparará el grado de salida. El código se comparará en grado

            if j == op:  ## Si el vértice actual es igual a los primeros anuncios de ocurrencia de outdegree en el contador
                odCounter = odCounter + 1  ## Añadir un outdegree a un vértice

        outdeg.append(odCounter)  ## Añada la cantidad de ocurrencias de un vértice en la lista de salida
        odCounter = 0; ## Establecer odCounter igual a 0

        ## En-grado
        ## Repetir todos los pasos desde En-grado hasta Fuera-de-grado
        for i in range(0, len(edg3), 2):
            op, code = edg3[i:i+2]

           
            if j == code:
                odCounter = odCounter + 1

        indeg.append(odCounter)
        odCounter = 0;

    for j,o,i in zip(Ssov,outdeg,indeg):
        print(str('deg-('),j,str(')= '),o, str(', deg+('),j,str(')= '),i,  str('\n')) # Printing the values for every vertex letter and corresponding in and out degrees


    ## Chequear por circuito Euleriano
       
        if (o == i):
            equalDegrees = equalDegrees + 1 ## Cada vez que un En-grado y Fuera-de-grado sean iguales, anadir al contador
        else:
            notEqualDegrees = notEqualDegrees + 1   ## Cada vez que un vertice Fuera-de-grado y En-grado no sean iguales, anadir al contador
           
           
        if (notEqualDegrees == 0): ## Si los vertices nunca fueron no iguales, entoces tenemos un circuito Euleriano
            eulerCircuit = True
        else:
            eulerCircuit = False
            ECreason = 2
         

    ## Chequear por un camino Euleriano
        if ((o-i) == 1):
            ep1 = ep1 + 1

        if ((i-o) == 1):
            ep2 = ep2 + 1
       

        ##  Verificar que uno si y uno no de cada vertex tenga En-grado =Fuera-de-grado
        if ((forCounter%2) == 0):
            if (o == i):
                EPEequalDegrees = EPEequalDegrees + 1
        else:
            if (o == i):
                EPOequalDegrees = EPOequalDegrees + 1
        forCounter = forCounter +1

    ## End for

 
   
    if (EPEequalDegrees >= 1 or EPOequalDegrees >= 1):
        if (ep1 == 1 and ep2 == 1):
            eulerPath = True
        else:
            eulerPath = False
            EPreason = 1
    else:
        EPreason = 2

   
    print(str('Circuito Euleriano: '),eulerCircuit)  
    print(str('Camino Euleriano: '),eulerPath)

    if (eulerCircuit == True):
        print("La grafica no tiene un Circuito Euleriano")
    else:
        if (ECreason == 2):
            print("La grafica no tiene un circuito euleriano porque el En-grado y Fuera-de-grado de cada vertice no son iguales")

    if (eulerPath == True):
        print("La grafica tiene un camino Euleriano")
    else:
        if (EPreason == 1):
            print("La grafica no tiene un camino Euleriano porque ni a lo más un vértice tiene (fuera-de-grado) - (en-grado) = 1, tampoco tiene como mucho un vértice que tenga (en-grado) - (fuera-de-grado) = 1")
        elif(EPreason == 2):
            print("La grafica no tiene un camino Euleriano porque cada otro vértice no tiene en-grado = fuera-de-grado")


EulerianoCNN()


PHP: Revertir orden de palabras desde un archivo

El proposito de este programa es revertir el orden de las palabras en cada oracion que se escriba en un archivo txt. Para lograr esto se Deben seguir los siguientes pasos:

1. Crear dos archivos, uno input.txt y otro index.php, ambos en la misma locacion.
2. En el archivo input.txt escribir varias oraciones una en cada linea.
3. En el archivo index.php escribir el siguiente codigo:


<?php
$fh = fopen("input.txt", "r");
while (!feof($fh)) {
 
$test = trim(fgets($fh));
 echo (nl2br(reversed($test) . "\n"));
     if (empty($test) == true) {
            break;      
    }
}
function reversed($test) {

$words = explode(" ", $test);
$reversed = array_reverse($words);
return $testResult = implode(" ", $reversed);
}
fclose($fh);
?>


El codigo de arriba dara el siguiente resultado:

Entrada
Hola mundo!

Salida
mundo! Hola








Java: Suma de los primeros n numeros enteros impares positivos

Escribir un programa que determine la suma de los primero n numeros enteros impares positivos. Por ejemplo, si n es igual a 5, deberias determinar  + 1 + 3 + 5 + 7 + 9.

El siguiente es le codigo:

public static void sumNPositiveOddIntegers() {
            System.out.println("Escriba un numero entero...");
            Scanner kb = new Scanner(System.in);
            int n = kb.nextInt();
           
                        int x = 1;
                        int sum = 0;
                        for(int i = 0; i < n; i++)
                        {
                        sum += x;
                        x += 2;
                        System.out.println(x);
                        }
                        System.out.println("The sum of first " + n + " positive odd integers is: " + sum);
                       

                        }




Explicacion del codigo: 

public static void sumNPositiveOddIntegers(): Como vamos a imprimir el resultado utilizamos void. 

 Scanner kb = new Scanner(System.in): Declaramos la variable kb con el metodo Scanner para leer desde el teclado.

int n = kb.nextInt(): Asignamos a la variable n el valor entero desde el teclado.

 int x = 1, sum = 0: Inicializamos las variable x y sum.

 for(int i = 0; i < n; i++): Este ciclo inicializa la variable i con el valor 0. Luego dice mientras i sea menor que n, entonces el valor de i hira aumentando.

sum += x: La variable suma almacenara el valor de x durante el ciclo.

x += 2: x aumentara de dos en dos para filtrar los numeros impares. Por eso la inicializamos en 1.

System.out.println(x): Imprimira el valor de x que son los numeros enteros positivos impares. 

Finalmente, la ultima linea de codigo imprime la suma de los sumeros anteriores. 






Java: Determinar si un numero es divisible por otro numero

Un numero x es divisible por y si al dividirlos el residuo es cero. Escribe un programa que determine si un numero es disible por otro numero. Leer ambos numeros del teclado. 


public static void divisible() {

            Scanner kb = new Scanner(System.in);
            System.out.println("Entrar un numero x...");
            int x = kb.nextInt();
            System.out.println("Entrar un numero y...");
            int y = kb.nextInt();

            if (x % y == 0) {

                  System.out.println(x + " es divisible por " + y);

            } else {

                  System.out.println(x + " es divisible por " + y);
            }

      }



Explicacion del codigo:

public static void divisible(): Aqui el metodo es void porque no va a retornar ninguna variable, sino a imprimir un resultado mediante System.out.println. 

Scanner kb = new Scanner(System.in): en este programa vamos a leer dos numeros del teclado. Scanner sirve para lograr ese objetivo. Nota: para poder utilizar Scanner hay que importarla libreria de Scanner al programa mediante la siguente linea de codigo: import java.util.Scanner;

System.out.println("Entrar un numero x..."): System.out.println imprime un mensaje en la consola. En este caso le da instrucciones al usuario.

int x = kb.nextInt(): Aqui declaramos la variable x de tipo int que va a ser igual a la variable kb que declaramos en Scanner. Es punto nextInt() porque va a tomar el siguente numero entero que inserte el usuario al techado y se va a almacenar en x. 

Luego se repite el proceso para la variable y.

if (x % y == 0): Para obtener el residio de la division entre dos numeros utilizamos el metodo Mod. En Java es representado por el simbolo de porciento (%). 


El resto del codigo imprime que x es divisible por y si el residuo es cero, o de lo contrario imprime que no es divisible. 













Tamaño de archivo en Visual Basic 6.0

El siguiente programa tomara un archivo de su computadora y dira el tamaño en bytes del mismo.

Para realizar este programa debemos crear un formulario con un command button en este caso lo llame cmdcalcular.

A continucacion escribir el siguiente codigo en el boton calcular:



Option Explicit

Private Sub cmdcalcular_Click()

Dim tamano As Long
If Dir$("C:\bueno.jpg") <> vbNullString Then
   tamano = FileLen("C:\bueno.jpg")
   MsgBox tamano & " bytes"
Else
   MsgBox "El archivo no existe"
End If

End Sub



* Tener en cuenta que en donde dice "C:\bueno.jpg" pondras la direccion en donde se encuentra el archivo al que quieres medir el tamaño.



Photo Play by AmputeeWrecks


Como hacer el efecto bokeh con tu camara

En este tutorial les mostrare como hacer el efecto bokeh con luces redondeadas en el fondo.

¿Que es el Bokeh?
En fotografia "bokeh" es desenfoque de una imagen o la forma en la que el lente hace puntos de luz fuera de foco.

¿Que necesitas?
Luces de navidad
Un objeto
Una camara profesional y un lente

Detalles de la foto
Exposure time: 1/10 seg
Apertura : f/5.6
Focal lenght: 55.0mm

Camara usada: Canon eos Rebel T3
Lente usado: EF-S 18-55mm


¿Como lograrlo?

Para lograr este efecto debes establecer una apertura baja en los settings de tu camara, en mi caso como ya mencione anteriormente una de f/5.6. Mientras mas pequeno sea el numero de la apertura mas se abrira el lente de tu camara permitiendo entrar mas luz al mismo y por ende esto ayudara a conseguir el efecto.

Tambien debes cambiar el ISO a 1600 para aumentar la sensibilidad de mi camara a la luz como lo hice en mi caso para lograr el efecto.

Para este tutorial necesitaras unas luces navidenas ordinarias. Para lograr este efecto es necesario poner una distancia del objeto a enfocar y las luces de aproximadamente un metro (en mi caso las luces se encuentran colgadas en la pared a un metro detras del objeto).  El truco esta en acercar el lente lo mas posible al objeto, en mi caso un frasco de helado y enfocarlo con el lente. El resultado: La imagen de arriba.