some image

Month junio 2014

Las mejores frases de Steve Jobs, historias de un visionario

Etiquetas: Blog No comments

En momentos de inspiración, tristeza, frustración, triunfo, melancolia, impotencia, felicidad o anhelos, las personas suelen decir frases que les permiten plasmar sus sentimientos, de esta manera me he tomado el atrevimiento de recolectar una lista de las mejores frases de Steve Jobs según mi humilde punto de vista.

– “En ocasiones la vida te golpea con un ladrillo en la cabeza.  No pierdan la fe.  Estoy convencido que lo único que me permitió seguir fue que yo amaba lo que hacía. Tienen que encontrar eso que aman. Y eso es tan válido para su trabajo como para sus amores. Su trabajo va a llenar gran parte de sus vidas y la única manera de sentirse realmente satisfecho es hacer aquello que creen es un gran trabajo. Y la única forma de hacer un gran trabajo es amando lo que hacen.  Si todavía no lo han encontrado, sigan buscando. No se detengan. Al igual que con los asuntos del corazón, sabrán cuando lo encuentren. Y al igual que cualquier relación importante, mejora con el paso de los años. Así que sigan buscando hasta que lo encuentren. No se detengan.” … Ceremonia de graduación de la Universidad de Stanford, 12 de Junio de 2005..

– “Cuesta demasiado diseñar productos a partir de grupos cerrados. La mayoría de las veces la gente no sabe lo que quiere hasta que se lo enseñas”. :)

– “El recordar que estaré muerto pronto es la herramienta más importante que he encontrado para ayudarme a tomar las grandes decisiones en la vida. Porque casi todo — todas las expectativas externas, todo el orgullo, todo temor a la vergüenza o al fracaso— todas estas cosas simplemente desaparecen al enfrentar la muerte, dejando sólo lo que es verdaderamente importante. Recordar que uno va a morir es la mejor manera que conozco para evitar la trampa de pensar que hay algo por perder. Ya se está indefenso. No hay razón alguna para no seguir los consejos del corazón“. //Una de las mejores para mi.

– “Hay que decir no a mil cosas para estar seguro de que no te estás equivocando o que intentas abarcar demasiado”

– “Hoy vamos a hacer un poco de historia aquí”

– “La innovación es lo que distingue a un líder de los demás“. :)

– “La innovación no tiene nada que ver con cuantos dólares has invertido en I+D. Cuando Apple apareció con el Mac, IBM gastaba al menos 100 veces más en I+D. No es un tema de cantidades, sino de la gente que posees, cómo les guías y cuánto obtienes”.

– “Nadie ha intentado devorarnos desde que estoy aquí. Creo que tienen miedo de descubrir cómo sabemos”.

– “Ni siquiera la gente que quiere ir al cielo quiere morir para llegar ahí”.

– “No hemos sido los primeros, pero seremos los mejores”.

– “No puedo ir a preguntarle a los consumidores qué es lo que desean, porque durante el tiempo que este desarrollandolo ellos van a desear algo nuevo”. Excelente!!!

– “¿Quieres vender agua azucarada el resto de tu vida, o quieres hacer historia?“.  :)  //frase con la que Steve Jobs convenció a John Sculley (presidente de Pepsi-Cola) para trabajar en Apple.

– “Se podría discutir cuántos años tardará, se podría discutir qué compañías serán las ganadoras o perdedoras, pero no creo que ninguna persona racional discutiese que todos los ordenadores se usarán de esta forma algún día”.

– “Ser el más rico del cementerio no es lo que más me importa… Acostarme por la noche y pensar que he hecho algo genial. Eso es lo que más me importa“. :)

– “Si hoy fuese el último día de mi vida, ¿querría hacer lo que voy a hacer hoy? Si la respuesta es “No durante demasiados días seguidos”, sé que necesito cambiar algo”.

– “Si tú lo deseas puedes volar, sólo tienes que confiar mucho en ti y seguir, puedes contar conmigo te doy todo mi apoyo“.

– “Siempre dije que si llegara el día en que no pudiera cumplir con mis deberes y expectativas como CEO de Apple, sería el primero en hacerselos saber. Lamentablemente, ese día ha llegado”. :(

– “Tu tiempo es limitado, de modo que no lo malgastes viviendo la vida de alguien distinto. No quedes atrapado en el dogma, que es vivir como otros piensan que deberías vivir. No dejes que los ruidos de las opiniones de los demás acallen tu propia voz interior. Y, lo que es más importante, ten el coraje para hacer lo que te dicen tu corazón y tu intuición. Ellos ya saben de algún modo en qué quieres convertirte realmente. Todo lo demás es secundario“. // Esta sin duda es la mejor :)

– “Una computadora es para mí la herramienta más sorprendente que hayamos ideado. Es el equivalente a una bicicleta para nuestras mentes“. // Me recuerda mi amada Athena :)

Solucionando : Odd

Etiquetas: , Blog, Challenges No comments

Bien, este fue uno de los problemas que más me puso a echar cabeza jejeje. primero porque no encontraba una forma adecuada de plantear la solución y segundo porque en los primeros 3 envios obtenia un error del tipo Time Limit Exceeded.

Basicamente el problema consistia en hallar la última potencia de 2, antes de un número dado. Ejemplo :
Número : 5
2, 4 = 4 Es la potencia de dos antes del número 5 (Porque la siguiente potencia es 8)

Número : 12
2, 4, 8 = 8 Es la potencia de dos antes del número 12 (Porque la siguiente potencia es 16)

Consideraciones a tener en cuenta

+ Para optimizar código que requiere mucho proceso con números, es mejor buscar alguna formula que sea equivalente a la solución y reduzca el proceso de la aplicación.

+ Para optimizar la respuesta de un programa que maneja bucles, es mucho mejor almacenar la respuesta en un Objeto, por ejemplo
StringBuilder y luego del bucle hacer la impresión de los resultados, ya que se consume mucha más memoria
procesar e imprimir en cada iteración.

Solución

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Odd {
	public static void main(String[] args) throws IOException{
		//Objeto para la lectura de datos por teclado
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		//Cantidad de entradas a procesar en el programa
		int lines = Integer.parseInt(br.readLine());
		//Objeto para almacenar los resultados
		StringBuilder sb = new StringBuilder();
		//Ingreso de todas las entradas y almacenamiento de la respuesta
		for (int i = 0; i < lines; i++) {
			int members = Integer.parseInt(br.readLine());
			sb.append(getCrewMember(members)).append("\n");
		}
		//Impresión del resultado
		System.out.println(sb);
	}
	
	/**
	 *  Metodo que se encarga de obtener la última potencia de 2, antes de un número dado
	 **/
	public static int getCrewMember(int m){
		int member = 2;
		while(member * 2 <= m){
			member *= 2;
		}
		return member;
	}
}

Solucionando : ATM

Etiquetas: , Blog, Challenges No comments

Bien este es otro de los ejercicios de practica de codechef, en esta ocación el ejercicio a resolver trata de una operación realizada al momento de retirar dinero de un cajero.

Consideraciones a tener en cuenta

+ Para definir el formato numerico en la salida de un resultado,  es muy util utilizar las clases DecimalFormat y DecimalFormatSymbols.

+ Cuando se utiliza una operación del tipo : variable -= cosa1 – cosa2, se aplica ley de signos, por lo tanto puede cambiar el resultado de la operación. Asi que en este caso lo que se hace es utilizar la operación de la forma : variable = variable – cosa1 – cosa2.

 

import java.util.Scanner;
class ATM {
	public static void main(String[] args){
		//Objeto para la lectura de datos
		Scanner sc = new Scanner(System.in);		
		//Variables del programa
		int amount = sc.nextInt();
		float balance = sc.nextFloat();
		//Condicion del multiplo de 5 y de que exista dinero suficiente
		if((amount % 5 == 0) && balance >= (amount + 0.5) ){
			balance = (float) (balance - amount - 0.5);
		}
		System.out.println(balance);
		
	}
}

Solucionando : Enormous Input

Etiquetas: , Blog, Challenges No comments

Este es uno de los ejercicios de optimización, que a uno lo llevan a sacar conclusiones para el tratamiento de los datos luego de hacer el primer envio y obtener como respuesta : Time Limit Exceeded.  Luego de leer un FAQ proporcionado por la pagina de codechef existe una serie de consideraciones.

Consideraciones a tener en cuenta

+ La clase BufferedReader es mucho más rápida procesando Streams que la clase Scanner.

+ Utilizar variables que ocupen menos espacio en memoria para que la aplicación se ejecute más rápido. Ejemplo : Si el ejercicio se presta para utilizar Integer (int), en vez de Long (long), es preferieble darle la prioridad a los enteros más pequeños.

+ La clase StringTokenizer es de gran utilidad para trabajar con datos que vienen separados por algún espacio, coma, etc… en vez de utilizar el método split() de la clase String.

Solución

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
class EnormousInput {
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String input = br.readLine();
		StringTokenizer st = new StringTokenizer(input);		
		// Lines in the input
		int lines = Integer.parseInt(st.nextToken());
		int k = Integer.parseInt(st.nextToken());
		// Times that k is divisible by t
		int times = 0;
		for(int i = 0; i < lines; i++){
			if(Integer.parseInt(br.readLine())%k == 0){
				times++;
			}
		}
		System.out.println(times);
	}
}

Salu2

Solucionando : Turbo Sort

Etiquetas: , Blog, Challenges No comments

Luego de 2 intentos y echarle cabeza para hallar la forma más rápida de obtener un ordenamiento de números e imprimirlo, llegue a esta solución.

Consideraciones a tener en cuenta :

+ La clase Arrays con su metodo sort() ordena un arreglo ascendentemente de forma eficaz.

+ La clase StringBuilder, procesa los streams mucho más rápido que un simple objeto String.

Solución

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
class TurboSort {
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		//Number of lines
		int lines = Integer.parseInt(br.readLine());
		int[] n = new int[lines];
		//Get the nums
		for (int i = 0; i < n.length; i++) {
			n[i] = Integer.parseInt(br.readLine());
		}
		//Sort the nums
		Arrays.sort(n);
		//Show the nums
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < n.length; i++) {
			sb.append(n[i] + "\n");
		}
		System.out.println(sb);
	}
}