giovedì 23 maggio 2013

Problema di Eulero 4


Il quarto problema del Progetto Eulero e' cosi' formulato
------------------------------------------------------
A palindromic number reads the same both ways. The largest palindrome made from the product of two 2-digit numbers is 9009 = 91 ×99.
Find the largest palindrome made from the product of two 3-digit numbers.
------------------------------------------------------

Francamente non sono riuscito a trovare un metodo per capire se un numero e' palindromo senza utilizzare le proprieta' delle stringhe o comunque la posizione del carattere nella stringa

Il programma per il calcolo e' stato il seguente (utilizza una funzione per l'inversione dell'ordine della stringa)
Ovviamente la soluzione e' sovrabbondante in quanto vengono trovati tutti i risultati palindromi per due fattori a tre cifre.
Se si usano come limite 100-999 il tempo di calcolo e' di circa 5 secondi mentre utilizzando  900-999 (senza modificare il risultato finale) il calcolo e' di 0.2 secondi

------------------------------------------------------
#include <iostream>

#include <sstream>
#include <string>

using namespace std;

string reverse(string src) { return string(src.rbegin(), src.rend()); }

int main()
{
    double max = 0;
    for (int t=100;t<1000;t++)
    {
        for (int s=100;s<1000;s++)
        {
            double prodotto = t*s;
            std::ostringstream os;
            os << prodotto;
            std::string str = os.str();
            string rovescia = reverse(str);
            if ((rovescia.compare(str) == 0) && (prodotto > max))
            {
                    max = prodotto;
            }
        }
    }
    cout << "Massimo : " << max << endl;
    return 0;
------------------------------------------------------

La soluzione e' 906609

martedì 21 maggio 2013

Router Telecom e Debian/Linux

Recentemente mi sono imbattuto in un problema curioso. Uno dei bar vicini a dove abito ha aperto la sua wireless lasciando l'access point senza password, in modo che i clienti possano navigare liberamente.Sbirciando sotto il bancone l'access point in questione e' il modello nell'immagine

Il servizio e' carino perche' copre una piazza piuttosto frequentata ed e' comodo per un rapido checkmail da Android.

Tutto ha funzionato bene fino a quando non ho provato a connettermi all'Access Point con una Debian Wheezy installata su un IBM X40. In pratica il portatile non riesce nemmeno ad intercettare l'SSID, le poche volte che aggancia la rete la connessione non fa passare dati

Provando con un mini laptop Samsung N150 Plus sempre con Debian Wheezy la situazione non cambia

Incredibilmente un IBM T61sempre con Debian Wheezy naviga senza nessun problema.

Leggendo su vari forum (per esempio questo) sembra che la colpa sia da attribuire al firmware dell'access point che genera pacchetti non standard e viene data una soluzione. In realta' nel mio caso, a parita' di sistema operativo montato, il problema non e' costante tra i vari portatili

Confrontando i vari moduli di Linux che gestiscono le schede wireless sui vari portatili si scopre che esistono profonde differenze

N150: brcm80211
X40: ipw2100
T61: iwlwifi

per cui, oltre alla gestione dei pacchetti non standard del router, probabilmente anche il modulo Linux che pilota il wireless del portatile puo' generare problemi

Problema di Eulero 3




Il terzo problema del Progetto Eulero e' cosi' formulato
---------------------------------------------

The prime factors of 13195 are 5, 7, 13 and 29.
What is the largest prime factor of the number 600851475143 ?
--------------------------------------------------------


Il codice che ho impiegato e' il seguente.
Cosa ho imparato: il programma veniva compilato ed eseguito correttamente (ma con risultati errati) anche sbagliando la definizione della variabile numero; infatti se si definisce long e non long long il programma funziona ma riporta risultati errati...leggere sempre prima il manuale di un linguaggio di programmazione che si conosce poco.
Un paio di trucchi
1) vengono presi in considerazione solo divisori non pari (per ovvi motivi)
2) il ciclo si interrompe a 775147 che e' circa la radice quadrata di 600851475143

------------------------------------------------------------------

#include <iostream>

using namespace std;

int main()
{
long long numero = 600851475143;

for (int t=3;t<775147;t+=2)
{
    if (numero%t == 0)
        {
            numero = numero/t;
            cout << t << endl;
        }
}
    return 0;
}

------------------------------------------------------------------
La soluzione e' 6857

lunedì 20 maggio 2013

Problema di Eulero 2


Il secondo problema del Progetto Eulero e' cosi' formulato
---------------------------------------------
Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...

By considering the terms in the Fibonacci sequence whose values do not exceed four million, find the sum of the even-valued terms.

----------------------------------------------

Il programma per il calcolo e' il seguente con soluzione 4613732
------------------------

#include <iostream>
#include <cstdlib>

using namespace std;

int main()
{
    int fibo_1 = 0;
    int fibo_2 = 1;
    int fibo = 0;
    int contatore = 1;
    int somma = 0;

    for (fibo = 1; fibo<4000000;fibo++)
    {
      fibo = fibo_1 + fibo_2;
      fibo_2 = fibo_1;
      fibo_1 = fibo;
      contatore++;
      cout << fibo << endl;
      if ((fibo%2)==0){
                            somma = somma + fibo;
                            //cout << "Pari " << contatore%2 << " " << fibo << " " << somma << endl;
                            }
      }

cout << "Somma " << somma << endl;
system("PAUSE");
return EXIT_SUCCESS;
}

Installare Oracle JDK in automatico su Debian

Per utilizzare Android Studio e' richiesto l'Oracle Java SDK

Su Debian l'installazione di questo componente di solito viene fatta in modo manuale


Frugando qua e la' ho trovato questo link che permette l'installazione di Oracle SdK in modo automatico sfruttando i repository PPA di Ubuntu

echo "deb http://ppa.launchpad.net/webupd8team/java/ubuntu precise main" | tee -a /etc/apt/sources.list
echo "deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu precise main" | tee -a /etc/apt/sources.list
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys EEA14886
apt-get update
apt-get install oracle-java7-installer

Non e' elegante ma a me ha funzionato

Problema di Eulero 1


Non so se avro' la costanza di continuare ... intanto per imparare un po' meglio C/C++ mi sono messo a cercare di risolvere i problemi di Eulero proposti dal sito http://projecteuler.net

Il problema e' cosi' formulato


If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.
Find the sum of all the multiples of 3 or 5 below 1000.


Il programma per la soluzione del primo problema e' banalmente il seguente
---------------------------------------------------------------
#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    int quanti = 0;
    for (int i=1;i<1000;i++)
    {
        if ((i%3 == 0) || (i%5 == 0)) quanti=quanti+i;
        }
    
    cout << quanti << endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}
----------------------------------------------------------------------------------------------

La soluzione e'  233168

C'e' anche una soluzione non ricorsiva ma, visto che lo scopo e' usare il calcolatore, non credo sia corretto usarla

sabato 18 maggio 2013

Android Studio su Linux





A differenza della versione per Windows, l'installazione di Android Studio su Debian e' nettamente piu' lineare. L'aspetto da sottolineare e' la richiesta di avere installato Oracle JDK e non OpenJDK

Debugger integrato ESP32S3

Aggiornamento In realta' il Jtag USB funziona anche sui moduli cinesi Il problema risiede  nell'ID USB della porta Jtag. Nel modulo...