Sono al college e di recente ho iniziato a gareggiare nella programmazione di gare con i miei amici. Queste competizioni implicano la risoluzione rapida di problemi algoritmici. È molto divertente, ma c'è un problema: sono costretto a usare Java. (I miei compagni di squadra usano Java.)
Sfondo: sono un programmatore JavaScript autodidatta e mi fa male scrivere codice Java. Lo trovo molto prolisso e inflessibile e mi sento rallentato quando devo dichiarare i tipi e decidere quale delle 80 strutture di dati dell'elenco utilizzare. Sono anche frustrato per la mancanza di funzionalità di programmazione funzionale e per l'aspetto prolisso che utilizza espressioni, array e dizionari regolari.
Ad esempio, considera il problema di trovare la lunghezza della stringa più lunga di caratteri consecutivi in una determinata stringa. Quindi la stringa XX22BBBBccXX222
darebbe 4
, per la stringa di quattro B
s. In Java, dovrei scorrere e contare manualmente i caratteri e tenere traccia manualmente del massimo. (Questo è almeno per quanto ne so - non ho familiarità con Java come con JavaScript.) In JavaScript, lo troverei in questo modo:
var max = Math.max.apply(Math, str.match(/(.)*/g).map(function (s) { return s.length; }));
Molto più semplice e veloce, nel mio libro.
La domanda: quali sono alcune caratteristiche, tecniche o modelli Java ben adattati per una codifica algoritmica veloce?