Visualizza messaggi
|
|
Pagine: [1] 2 3 ... 131
|
|
1
|
Programmazione Web / JavaScript/AJAX / Re: Pari o dispari
|
inserita:: Maggio 15, 2013, 06:56:43 pm
|
Probabilmente l'autore ha voluto creare un nome inutilmente complesso per una funzione ancora più inutilmente complessa, giudicando la via della sanità mentale troppo ovvia e noiosa, e finendo per non capirci più niente lui stesso ("is Not UnEven", vuol dire " non è non-pari", quindi semplicemente "è pari". Ma l'implementazione della funzione verifica se è dispari!). Scrivere funzioni del genere senza usare triple negazioni, confronti booleani assurdi e if inutili, del resto, è davvero immediato: isEven = function(n) { return n % 2 == 0; }
o anche: isOdd = function(n) { return n % 2 != 0; //o ancor meglio: n & 1 == 1; }
Fra i numerosi errori dell'articolo l'unico che vale veramente la pena di segnalare è che non si ribadisce mai abbastanza che con l'operatore modulo bisogna stare attenti ai numeri negativi. Implementare isOdd come (n%2 == 1) fa sì che numeri come -5 vengano considerati "pari". In genere non mi piace affatto il gioco al massacro sul lavoro altrui (si apprezza sempre lo sforzo, quantomeno), ma fatico a non farmi cadere le braccia, vedendo il numero di errori (logici, stilistici e linguistici) stipati in un articolo tanto breve e in così poche righe di codice. E' un'ennesima dimostrazione di quanto i tutorial su Internet finiscano troppo spesso per essere una fonte di disinformazione e di quanto sia importante affidare chi inizia a risorse valide e di qualità riconosciuta. Lasciato questo monito, da tenere in considerazione la prossima volta che qualcuno chiederà: "mi date un sito con un tutorial gratuito in italiano su X?", chiudo il thread per evitare che si trasformi in un tiro a segno sulla Croce Rossa, che è l'esatto opposto dello spirito costruttivo che anima questo forum.
|
|
|
|
|
2
|
Varie ed Eventuali / Concetti, idee, algoritmi / Re: Creazione coppie di numeri
|
inserita:: Maggio 09, 2013, 12:54:06 pm
|
Quando ho letto il problema ho avuto un forte déjà vu, ma non riuscivo bene a ricordare da dove venisse. Ora mi è venuto in mente: abbiamo già trattato esattamente la stessa cosa molti anni fa, su questo stesso forum, in uno storico e bellissimo thread che è stato ripreso anche dalla rivista stessa. Lo trovi qui. In quel caso, che forse è anche il tuo, la ragione di questo giochino era la creazione di un calendario di incontri per un torneo. Sono saltate fuori diverse implementazioni, fra cui una con backtracking e un'elegante soluzione con matrice tabù da parte di M.A.W. 1968.
|
|
|
|
|
4
|
Varie ed Eventuali / Concetti, idee, algoritmi / Re: Creazione coppie di numeri
|
inserita:: Maggio 09, 2013, 12:11:31 am
|
E' un bel problema di ottimizzazione combinatoria, in stile sudoku. La soluzione apparentemente non è banalissima: un semplice ciclo di riempimento che badi solo a soddisfare i vincoli (come quello che ho abbozzato velocemente qui, in javascript) non basta: occorre popolare le celle in modo da precludere il meno possibile l'inserimento dei valori nelle celle successive. Infatti la soluzione banale funziona bene per potenze di 2 (n=8, 16, 32...), ma non per altri casi (n=6, 10, etc...). Non è da escludere che una soluzione, in alcuni casi, semplicemente non esista. Una soluzione adeguata richiede un riempimento più "intelligente" sfalsando il ciclo secondo quale criterio ben congegnato, o seguendo un'euristica (ad esempio assegnando una priorità diversa alle coppie a seconda della quantità di numeri rimasti per ciascuna delle colonne), o con backtracking, o con una commistione di queste tre cose. In attesa di verificare una di queste soluzioni, sposto il thread in Concetti, Idee, Algoritmi, in modo da dargli più visibilità. Posso chiedere, per mia curiosità personale, da quale necessità pratica viene questo "giochino"? O è solo un divertimento matematico?
|
|
|
|
|
6
|
Linguaggi di programmazione / Ambienti di programmazione / Re: Consiglio per sviluppare su WEB
|
inserita:: Aprile 30, 2013, 12:04:06 pm
|
Mi conviene provare con MVC o Razor? Non direi. Visto che sei agli inizi, il percorso obbligato è iniziare: 1) SOLO con html e css, studiati bene. 2) Quindi con javascript, studiato bene 3) Librerie lato client, tipo jquery e qualche libreria MVC (tipo backbone/ember/angular. Sceglierai quando sarai arrivato a questo punto). 4) Una soluzione lato server (la scelta naturale è asp.net, ma sceglierai quando sarai arrivato a questo punto) 5) Volendo, uno o più framework MVC lato server. Tipo asp.net MVC / razor. Ci sono anche altre soluzioni, ovviamente, ma i primi 3 punti sono indispensabili e non cambiano, quindi comincia da quelli. L'IDE è assolutamente irrilevante, pertanto ti consiglio di usare VS stesso, o se proprio vuoi partire da qualcosa di più masochistico, Notepad(magari ++, o simili, per avere almeno uno straccio di syntax highlighting e bracket matching).
|
|
|
|
|
7
|
Linguaggi di programmazione / Ambienti di programmazione / Re: Consiglio per sviluppare su WEB
|
inserita:: Aprile 29, 2013, 09:07:18 pm
|
la scelta migliore per te è certamente usare ASP.Net, e quindi Visual Studio Appoggio in pieno il suggerimento. A meno che tu, secks, non abbia specifici vincoli per valutare alternative. Quelli che hai posto finora sembrano strani: uso almeno sei IDE diversi quotidianamente (VS, MonoDevelop, XCode, Eclipse, Aptana e Komodo), e Visual Studio è secondo me innegabilmente il migliore. Il fatto che non ti sembri "agevole" per il web dipende probabilmente dal fatto che hai poca esperienza (ci sono anche soluzioni come MVC, razor, eccetera, che semplificano le cose ancora di più). Il vincolo dei sistemi operativi multipli è anch'esso strano (di solito è più un problema per lo sviluppo desktop: un sito web è comunque accessibile da qualunque browser su qualunque piattaforma). Anche se è molto masochistico scrivere un sito in asp.net per poi farlo girare su una macchina linux, potresti valutare anche l'uso di mono... 
|
|
|
|
|
8
|
Linguaggi di programmazione / C/C++ / Re: La matematica
|
inserita:: Aprile 29, 2013, 08:55:21 pm
|
La libreria <math.h> (o <cmath>, se stai sviluppando in C++), ha tutto l'occorrente. Per le parentesi dovrai complicare un po' la tua calcolatrice, introducendo la gestione di uno stack per memorizzare i risultati con diversi gradi di priorità.
|
|
|
|
|
10
|
Microsoft Office / Excel / Re: colore sfondo cella in base a valore di un'altra cella
|
inserita:: Aprile 25, 2013, 11:44:45 am
|
Con Vba una soluzione potrebbe essere questa: La soluzione è buona e giusta, ma il codice di "validazione" è orripilante. Molto più indicato sarebbe usare una ricerca in una stringa, o ancor meglio una regex, o ancor più semplicemente lasciar fare a vba stesso e catturare l'eventuale eccezione: Sub coloraCella(cellaDaColorare as Range, colore as Long) On Error GoTo errHandler Dim red As Byte, green As Byte, blue As Byte red = CByte("&h" & Left(colore, 2)) green = CByte("&h" & Mid(colore, 3, 2)) blue = CByte("&h" & Right(colore, 2)) cellaDaColorare.Interior.Color = RGB(red, green, blue) Exit Sub errHandler: MsgBox ("dati non corretti") End Sub
Vale la pena di notare che per la stramaledetta endianness war vba interpreta i colori RGB al contrario rispetto al formato HTML (cioè &HBBGGRR al posto di #RRGGBB), il che è un peccato, perché altrimenti si sarebbe potuta evitare la suddivisione in RGB scrivendo semplicemente: Sub coloraCella(cellaDaColorare as Range, colore as Long) On Error GoTo errHandler cellaDaColorare.Interior.Color = Clng("&h" & colore) Exit Sub errHandler: MsgBox ("dati non corretti") End Sub
|
|
|
|
|
11
|
Programmazione Web / PHP / Re: PHP per videogame
|
inserita:: Aprile 22, 2013, 12:54:07 pm
|
Io mi appoggerei ad una funzione di criptatura MD5, SHA1, SHA2 o una fatta da me stesso se avessi voglia di cimentarmi Memorizzare un hash nella pagina può essere un modo semplice per risolvere il problema dell'utente che vede la risposta nel sorgente, se GFG non ha grandi pretese di sicurezza per il suo gioco. Ma per un browser game serio l'unica via è quella suggerita da MatrixTeo, dato che qualunque iniziativa presa lato client può essere facilmente aggirata semplicemente alterando il codice in corsa (oggi cmd+alt+i sanno usarlo anche i bambini). Nei browser game reali tutti i controlli si fanno lato server e il client serve solo a visualizzare le risposte del server e inviare dati via ajax. I dati possono avere una pre-validazione, ma devono essere necessariamente ricontrollati lato server, dato che i furboni sono sempre in agguato. E soprattutto, nessun dato sensibile (tipo risposte) dev'essere ospitato sul client. In questo caso specifico: l'utente scrive la risposta sul suo browser, il browser la invia al server, il server controlla e restituisce l'esito, sotto forma di una pagina a cui andare, o di html da iniettare nella pagina corrente. Meglio evitare che il browser faccia un semplice "if (rispostaServer == 'ok') {...} else {...}", altrimenti siamo daccapo (nulla vieta al furbone di alterare il contenuto di rispostaServer, rendendolo 'ok' un attimo prima del controllo). Inutile dire che eventuali punteggi e variabili di progressivo (tipo risposteGiusteDateFinora) non vanno assolutamente passate, ma tenute solo lato server (si presuppone ovviamente un meccanismo di session).
|
|
|
|
|
12
|
Varie ed Eventuali / Concetti, idee, algoritmi / Re: Formula per matrice riempita secondo diagonali
|
inserita:: Aprile 18, 2013, 01:39:11 pm
|
Se vuoi sapere tutto sulle pizze sessagesimali, leggi questo thread e soprattutto questo. Ah, i tempi d'oro del forum e della rivista  Speriamo assolutamente di no:
Magari aprirei un'altra sezione: "Come sono arrivato alla soluzione di un algoritmo efficiente quand'anche si tratti di una reimplementazione asincrona ed estemporanea". Eh, magari un giorno, in un blog tipo "le mie memorie"  Nel qual caso, ti avvertirò aggiungendoci un: "ah, i tempi d'oro del forum e della rivista..."
|
|
|
|
|
13
|
Linguaggi di programmazione / C/C++ / Re: Problema con lista di interi C++
|
inserita:: Aprile 18, 2013, 12:27:38 pm
|
|
Hai provato a debuggare? E' una pratica che ti consiglio di considerare parte integrante della programmazione, soprattutto finché non sviluppi la capacità di compilare ed eseguire mentalmente il codice C++.
Così ad occhio, il programma fallisce perché nel caso dell'inserimento in testa, quando la lista è vuota, non imposti il successore a 0. Il nodo successivo si trova quindi in una locazione casuale di memoria, che viene richiamata al secondo inserimento, causando il crash dell'applicazione.
|
|
|
|
|
14
|
Varie ed Eventuali / Concetti, idee, algoritmi / Re: Formula per matrice riempita secondo diagonali
|
inserita:: Aprile 14, 2013, 04:06:37 am
|
@Dev La differenza coi risultati di un dilettante si vede parecchio. Vedi che non mi so spiegare? Il dilettante in questione sono io, che ci ho messo un post di 50 righe per spiegare qualcosa che un divulgatore migliore avrebbe spiegato più chiaramente e formalmente in 5! Ti ringrazio invece ancora per l'intervento. Questo spazio è per fornire soluzioni diverse con diversi gradi di complessità. Ogni intervento sensato (e il tuo lo era, eccome) arricchisce la discussione ed è il benvenuto. PS: Ho aggiornato il post con la soluzione completa (comprendendo l'altra sottomatrice). Così ora al posto di 50 righe sono 60...  Non avevo considerato l'impiego di memoria basandomi, di fatto, esclusivamente sul 4x4 da te esposto. Considera che ho usato le formule in questo thread in un'applicazione reale questa notte (descrivere il problema sarebbe bello, perché è un impiego molto interessante e inaspettato di una cosa che sembra solo un divertimento matematico, ma ci vorrebbe un altro post chilometrico e credo che annoierei chiunque. Finirà nella lista delle "soluzioni bellissime che potrò raccontare solo a me stesso"  ). Alla fine, comunque, la matriciona misurava 2 16 * 2 16 = 2 32 = 4294967296 elementi! Senza le formule in O(1) descritte in questo thread, non avrei avuto alcuna possibilità di cavarmela e avrei dovuto accontentarmi di una pessima alternativa.
|
|
|
|
|
15
|
Varie ed Eventuali / Concetti, idee, algoritmi / Re: Formula per matrice riempita secondo diagonali
|
inserita:: Aprile 13, 2013, 11:48:57 pm
|
In sostanza, abbiamo quindi: n= (-1+sqrt(8*v+1))/2 Ammirazione e pizze sessagesimali. Sia per la formula, che per l'effetto "Sherlock" che c'è sempre quando posti una soluzione: - Ma Holmes! Come ha potuto sapere che [...]? - Ma mio caro Watson, è bastato [...] - Beh, a ben pensarci ci si poteva arrivare [sappiamo tutti di no  ] Grazie ancora.
|
|
|
|
|