Experimentalia

Appunti raminghi

Golf Programming: Paroliamo

with 6 comments

L’ultima prova della serie anagrammi si è rivelata particolarmente semplice. Complichiamola appena un pò modificando l’algoritmo in modo da costringerci a modificare l’approccio al problema.

Le Regole

Le regole del contest:

  1. Scrivere un programma, il più breve possibile, che risolva il problema enunciato prima e riportato meglio qui sotto;
  2. per ogni linguaggio utilizzato è considerato vincitore il programma scritto usando meno caratteri;
  3. l’efficienza dell’algoritmo non è un fattore fondamentale ma il programma deve terminare senza errori;
  4. si può optare, se più concisa, per una funzione, piuttosto che un programma intero;
  5. ovviamente non di vince niente se non la soddisfazione di aver accettato una sfida ed averla vinta.

L’algoritmo

Anche la funzione di questo mese, come quella del mese scorso,  prende in input due stringhe ma restituisce/stampa vero se con le lettere che compongono il primo parametro è possibile comporre il secondo. A differenza del programma sugli anagrammi, non è necessario utilizzare tutte le lettere della prima parola per comporre la seconda.

Ad esempio, con la parola MANAGER è possibile (e quindi la funzione deve restituire vero) comporre, tra le altre, le parole RANA, RAME, GARA o GRANE.

L’ordine dei parametri è importante. Con la parola MANAGER non è possibile costruire GERMANIA, mentre è vero il contrario.

La parola OSTE, poi, non può essere usata per comporre TESTO, le lettere ci sono tutte ma manca una T. Di conseguenza la funzione dovrebbe restituire falso.

Al solito posterò la mia soluzione come commento alla fine della settimana entrante, per dare il tempo a chi vuole partecipare di scatenare la propria fantasia.

Written by Eineki

settembre 30, 2009 a 4:36 am

Pubblicato su golf

6 Risposte

Subscribe to comments with RSS.

  1. Ecco la mia soluzione in ruby

    a=ARGV[0].scan(/./)
    r=1
    ARGV[1].scan(/./).each do |e|
    (p=a.index(e)).nil? ? r=0 : a.delete_at(p)
    end
    p r

    Davide

    settembre 30, 2009 at 9:52 am

  2. ecco la mia in python

    129 caratteri🙂
    —-
    import sys

    a, b = map(list, sys.argv[1:])

    for x in b:
    if x in a: a.pop(a.index(x))
    else: print ‘no’; exit()

    print ‘ok’
    —-

    patrick

    ottobre 3, 2009 at 20:24 pm

  3. Avevo sprecato caratteri🙂

    ora sono 121
    —-
    import sys

    a, b = map(list, sys.argv[1:])

    for x in b:
    if x in a: a.pop(a.index(x))
    else: exit(‘no’)

    print ‘ok’
    —-

    patrick

    ottobre 3, 2009 at 20:26 pm

  4. E’ passata una settimana (circa)
    ed è tempo di mostrare la mia soluzione
    (156 caratteri effettivi).

    function i($a){
    while($a[$i])$x[$a[$i++]]++;return $x;
    }
    function c($a,$b){
    foreach($b as $k=>$v)if($v>$a[$k])$r=1;return 1-$r;
    }
    echo c(i($argv[1]),i($argv[2]));

    eineki

    ottobre 8, 2009 at 21:06 pm

  5. la mia modifica alla versione python di patrick

    import sys
    a,b=map(list,sys.argv[1:])
    try:[a.remove(x) for x in b];print ‘ok’
    except:print ‘no’

    gg

    ottobre 19, 2009 at 16:18 pm

  6. Oggi mi sono imbattuto nella funzione php count_chars e ne ho approfittato per riscrivere la soluzione in php che adesso conta 124 caratteri:

    function c($a,$b,$i){
    return $i>255?1:($b[$i]>$a[$i]?0:c($a,$b,$i+1));
    }
    $c=’count_chars’;
    echo c($c($argv[1]),$c($argv[2]),0);

    eineki

    dicembre 20, 2009 at 20:50 pm


Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger cliccano Mi Piace per questo: