#1 [2014-12-07] Mini Contest di programmazione - to_bin

Algoritmi, discussioni sulle possibili implementazioni, matematica, fisica e tutti gli argomenti correlati alla programmazione
Avatar utente
Tizzio
GMI Honor
Messaggi: 5836
Iscritto il: 29/06/2010, 23:43
Specialità: programmazione
Contatta:

#1 [2014-12-07] Mini Contest di programmazione - to_bin

Messaggio da Tizzio »

Contest Successivo >>

Settimanalmente vi proporrò un semplice problema e dovrete implementarlo in uno script e ne verrà testata la velocità

Sarà accessibile a tutti, anche chi è agli inizi con la programmazione (e vi invito ad approfittarne e partecipare) in generale, ma che potrebbe far riflettere su un problema o vederlo da un altro punto di vista anche chi programma da anni, dato che dopo si discuterà il codice della gente che ha consegnato

Non volevo fossero progetti che richiedono giorni o settimane, ma piuttosto incentrarci sull'ottimizzazione di piccole cose.

Regolamento
Postate lo script dentro al tag Code, ad esempio

Codice: Seleziona tutto

if(argument0 == argument1)
    return 1;
return 0;
(entro la data di scadenza scritta nel titolo del topic)

Cosa si vince?
Un sacco di conoscenza

CONTEST DI QUESTA SETTIMANA
Implementa script to_bin(number) che prende come argument0 un numero intero e ritorna una stringa rappresentante le singole cifre convertite in binario e concatenate
esempio: script to_bin(302) restituirà una stringa "001100000010" (dato che 3="0011" 0="0000" e 2 = "0010" )
Puoi utilizzare anche più script

Contest Successivo >>

Avatar utente
doom13
Moderatore
Messaggi: 2093
Iscritto il: 31/08/2012, 15:40
Specialità: Programmazione
Uso: GM:Studio 2
Contatta:

Re: [2014-12-07] Mini Contest di programmazione

Messaggio da doom13 »

Bel contest, bell'idea :sisisi:
Ma non ho capito una cosa, se oggi faccio lo script lo pubblico subito? Gli altri potrebbero prendere spunto :asd:
Immagine
Spoiler
Maze [sospeso]
Isom (titolo provvisorio) (Windows & Android) [sospeso]
Keep Calm & Jump (Android) [In corso]
The Graywall (Windows) [Completo]
DTB (Windows & Android) [Completo]
The Last Spell (Windows) [Completo]
Dukenstein: Return to the house (Windows) [Completo]
DMSystem (Windows) [Completo]
"Things get hard sometimes guys... But remember, dicks get hard too, but they don't stay hard forever. Don't give up!"

Avatar utente
Xxshark888xX
Membro d'elite
Messaggi: 1497
Iscritto il: 30/05/2012, 19:17
Specialità: Un poco di tutto
Uso: GM:Studio 1.4 Pro
Località: Earth
Contatta:

Re: [2014-12-07] Mini Contest di programmazione

Messaggio da Xxshark888xX »

doom13 ha scritto:Bel contest, bell'idea :sisisi:
Ma non ho capito una cosa, se oggi faccio lo script lo pubblico subito? Gli altri potrebbero prendere spunto :asd:
:asd: esatto

Ma aspetta, 302 non dovrebbe restituire "00110011 00110000 00110010 "? :fapensare:
Contatti
Steam
Facebook

Gif
Spoiler
Immagine
Immagine
Immagine
Immagine

OnABa
Membro
Messaggi: 67
Iscritto il: 25/04/2014, 14:22
Uso: GameMaker 8
Contatta:

Re: [2014-12-07] Mini Contest di programmazione

Messaggio da OnABa »

Xxshark888xX ha scritto:
doom13 ha scritto:Bel contest, bell'idea :sisisi:
Ma non ho capito una cosa, se oggi faccio lo script lo pubblico subito? Gli altri potrebbero prendere spunto :asd:
:asd: esatto

Ma aspetta, 302 non dovrebbe restituire "00110011 00110000 00110010 "? :fapensare:
in realtà se trasformiamo il decimale in binario ci troveremo 100101110
mentre se trasformiamo l'esadecimale a binario ci troveremo 001100000010 :asd:

Avatar utente
doom13
Moderatore
Messaggi: 2093
Iscritto il: 31/08/2012, 15:40
Specialità: Programmazione
Uso: GM:Studio 2
Contatta:

Re: [2014-12-07] Mini Contest di programmazione

Messaggio da doom13 »

L'esempio è giusto, c'è scritto esplicitamente che lo script prende un numero e per ogni cifra di questo numero viene restituito il suo equivalente in binario. Tutti i risultati li appiccichi quindi insieme.
Tocca usare 4 bit perché sennò l'8 e il 9 non sono rappresentabili.
Immagine
Spoiler
Maze [sospeso]
Isom (titolo provvisorio) (Windows & Android) [sospeso]
Keep Calm & Jump (Android) [In corso]
The Graywall (Windows) [Completo]
DTB (Windows & Android) [Completo]
The Last Spell (Windows) [Completo]
Dukenstein: Return to the house (Windows) [Completo]
DMSystem (Windows) [Completo]
"Things get hard sometimes guys... But remember, dicks get hard too, but they don't stay hard forever. Don't give up!"

OnABa
Membro
Messaggi: 67
Iscritto il: 25/04/2014, 14:22
Uso: GameMaker 8
Contatta:

Re: [2014-12-07] Mini Contest di programmazione

Messaggio da OnABa »

doom13 ha scritto:L'esempio è giusto, c'è scritto esplicitamente che lo script prende un numero e per ogni cifra di questo numero viene restituito il suo equivalente in binario. Tutti i risultati li appiccichi quindi insieme.
Tocca usare 4 bit perché sennò l'8 e il 9 non sono rappresentabili.
ok ok ora mi è tutto più chiaro :asd:

Avatar utente
Tizzio
GMI Honor
Messaggi: 5836
Iscritto il: 29/06/2010, 23:43
Specialità: programmazione
Contatta:

Re: [2014-12-07] Mini Contest di programmazione

Messaggio da Tizzio »

Non è un contest dove si vince qualcosa, è giusto un "a chi riesce a risolvere il problema in modo più pulito e/o prestante" e discutere le varie soluzioni
Oltre al fatto di imparare roba nuova e creare materiale per altra gente che si limiterà solo a leggere magari...

Avatar utente
Xxshark888xX
Membro d'elite
Messaggi: 1497
Iscritto il: 30/05/2012, 19:17
Specialità: Un poco di tutto
Uso: GM:Studio 1.4 Pro
Località: Earth
Contatta:

Re: [2014-12-07] Mini Contest di programmazione

Messaggio da Xxshark888xX »

Il mio (è molto semplice :asd: )

dec_to_bin(NUMBER);
Spoiler

Codice: Seleziona tutto

/* USE -> dec_to_bin(NUMBER);
   EXAMPLE -> ntb = dec_to_bin(2359);
   
   EXPLAIN: The script return the result in the variable "ntb"
*/

var i,r; r = "";
for (i = 0; i <= string_length(string(argument0)); i += 1;) {

    if (string_char_at(string(argument0),i) == "0") {
        r += "0000 ";
    }
    
    if (string_char_at(string(argument0),i) == "1") {
        r += "0001 ";
    }
    
    if (string_char_at(string(argument0),i) == "2") {
        r += "0010 ";
    }
    
    if (string_char_at(string(argument0),i) == "3") {
        r += "0011 ";
    }
    
    if (string_char_at(string(argument0),i) == "4") {
        r += "0100 ";
    }
    
    if (string_char_at(string(argument0),i) == "5") {
        r += "0101 ";
    }
    
    if (string_char_at(string(argument0),i) == "6") {
        r += "0110 ";
    }
    
    if (string_char_at(string(argument0),i) == "7") {
        r += "0111 ";
    }
    
    if (string_char_at(string(argument0),i) == "8") {
        r += "1000 ";
    }
    
    if (string_char_at(string(argument0),i) == "9") {
        r += "1001 ";
    }
}

return r;
Ultima modifica di Xxshark888xX il 01/12/2014, 12:35, modificato 2 volte in totale.
Contatti
Steam
Facebook

Gif
Spoiler
Immagine
Immagine
Immagine
Immagine

Avatar utente
doom13
Moderatore
Messaggi: 2093
Iscritto il: 31/08/2012, 15:40
Specialità: Programmazione
Uso: GM:Studio 2
Contatta:

Re: [2014-12-07] Mini Contest di programmazione

Messaggio da doom13 »

Xxshark888xX ha scritto:Il mio (è molto semplice :asd: )

dec_to_bin(NUMBER);
Spoiler

Codice: Seleziona tutto

/* USE -> dec_to_bin(NUMBER);
   EXAMPLE -> ntb = dec_to_bin(2359);
   
   EXPLAIN: The script return the result in the variable "ntb"
*/

var i,r; r = "";
for (i = 0; i <= string_length(argument0); i += 1;) {

    if (string_char_at(argument0,i) == "0") {
        r += "00110000 ";
    }
    
    if (string_char_at(argument0,i) == "1") {
        r += "00110001 ";
    }
    
    if (string_char_at(argument0,i) == "2") {
        r += "00110010 ";
    }
    
    if (string_char_at(argument0,i) == "3") {
        r += "00110011 ";
    }
    
    if (string_char_at(argument0,i) == "4") {
        r += "00110100 ";
    }
    
    if (string_char_at(argument0,i) == "5") {
        r += "00110101 ";
    }
    
    if (string_char_at(argument0,i) == "6") {
        r += "00110110 ";
    }
    
    if (string_char_at(argument0,i) == "7") {
        r += "00110111 ";
    }
    
    if (string_char_at(argument0,i) == "8") {
        r += "00111000 ";
    }
    
    if (string_char_at(argument0,i) == "9") {
        r += "00111001 ";
    }
}

return r;
Perché ste stringone di bit?
Immagine
Spoiler
Maze [sospeso]
Isom (titolo provvisorio) (Windows & Android) [sospeso]
Keep Calm & Jump (Android) [In corso]
The Graywall (Windows) [Completo]
DTB (Windows & Android) [Completo]
The Last Spell (Windows) [Completo]
Dukenstein: Return to the house (Windows) [Completo]
DMSystem (Windows) [Completo]
"Things get hard sometimes guys... But remember, dicks get hard too, but they don't stay hard forever. Don't give up!"

Avatar utente
Xxshark888xX
Membro d'elite
Messaggi: 1497
Iscritto il: 30/05/2012, 19:17
Specialità: Un poco di tutto
Uso: GM:Studio 1.4 Pro
Località: Earth
Contatta:

Re: [2014-12-07] Mini Contest di programmazione

Messaggio da Xxshark888xX »

doom13 ha scritto:
Xxshark888xX ha scritto:Il mio (è molto semplice :asd: )

dec_to_bin(NUMBER);
Spoiler

Codice: Seleziona tutto

/* USE -> dec_to_bin(NUMBER);
   EXAMPLE -> ntb = dec_to_bin(2359);
   
   EXPLAIN: The script return the result in the variable "ntb"
*/

var i,r; r = "";
for (i = 0; i <= string_length(argument0); i += 1;) {

    if (string_char_at(argument0,i) == "0") {
        r += "00110000 ";
    }
    
    if (string_char_at(argument0,i) == "1") {
        r += "00110001 ";
    }
    
    if (string_char_at(argument0,i) == "2") {
        r += "00110010 ";
    }
    
    if (string_char_at(argument0,i) == "3") {
        r += "00110011 ";
    }
    
    if (string_char_at(argument0,i) == "4") {
        r += "00110100 ";
    }
    
    if (string_char_at(argument0,i) == "5") {
        r += "00110101 ";
    }
    
    if (string_char_at(argument0,i) == "6") {
        r += "00110110 ";
    }
    
    if (string_char_at(argument0,i) == "7") {
        r += "00110111 ";
    }
    
    if (string_char_at(argument0,i) == "8") {
        r += "00111000 ";
    }
    
    if (string_char_at(argument0,i) == "9") {
        r += "00111001 ";
    }
}

return r;
Perché ste stringone di bit?
Guarda, ho usato un convertitore online e mi sono copiato i risultati mano mano e ho creato questo script che non fa altro che leggersi argument0 e rimpiazzare i numeri con quei valori (tutti i convertitori che ho utilizzato mi hanno dato questi numeri in binario...)
Contatti
Steam
Facebook

Gif
Spoiler
Immagine
Immagine
Immagine
Immagine

Avatar utente
doom13
Moderatore
Messaggi: 2093
Iscritto il: 31/08/2012, 15:40
Specialità: Programmazione
Uso: GM:Studio 2
Contatta:

Re: [2014-12-07] Mini Contest di programmazione

Messaggio da doom13 »

Xxshark888xX ha scritto:Guarda, ho usato un convertitore online e mi sono copiato i risultati mano mano e ho creato questo script che non fa altro che leggersi argument0 e rimpiazzare i numeri con quei valori (tutti i convertitori che ho utilizzato mi hanno dato questi numeri in binario...)
Devi eliminare quel 0011 all'inizio
Immagine
Spoiler
Maze [sospeso]
Isom (titolo provvisorio) (Windows & Android) [sospeso]
Keep Calm & Jump (Android) [In corso]
The Graywall (Windows) [Completo]
DTB (Windows & Android) [Completo]
The Last Spell (Windows) [Completo]
Dukenstein: Return to the house (Windows) [Completo]
DMSystem (Windows) [Completo]
"Things get hard sometimes guys... But remember, dicks get hard too, but they don't stay hard forever. Don't give up!"

Avatar utente
Xxshark888xX
Membro d'elite
Messaggi: 1497
Iscritto il: 30/05/2012, 19:17
Specialità: Un poco di tutto
Uso: GM:Studio 1.4 Pro
Località: Earth
Contatta:

Re: [2014-12-07] Mini Contest di programmazione

Messaggio da Xxshark888xX »

doom13 ha scritto:
Xxshark888xX ha scritto:Guarda, ho usato un convertitore online e mi sono copiato i risultati mano mano e ho creato questo script che non fa altro che leggersi argument0 e rimpiazzare i numeri con quei valori (tutti i convertitori che ho utilizzato mi hanno dato questi numeri in binario...)
Devi eliminare quel 0011 all'inizio
Mah, allora perché gli altri convertitori mettono quel "0011" d'avanti? Comunque gli ho tolti...
Contatti
Steam
Facebook

Gif
Spoiler
Immagine
Immagine
Immagine
Immagine

Avatar utente
doom13
Moderatore
Messaggi: 2093
Iscritto il: 31/08/2012, 15:40
Specialità: Programmazione
Uso: GM:Studio 2
Contatta:

Re: [2014-12-07] Mini Contest di programmazione

Messaggio da doom13 »

Xxshark888xX ha scritto:
doom13 ha scritto:
Xxshark888xX ha scritto:Guarda, ho usato un convertitore online e mi sono copiato i risultati mano mano e ho creato questo script che non fa altro che leggersi argument0 e rimpiazzare i numeri con quei valori (tutti i convertitori che ho utilizzato mi hanno dato questi numeri in binario...)
Devi eliminare quel 0011 all'inizio
Mah, allora perché gli altri convertitori mettono quel "0011" d'avanti? Comunque gli ho tolti...
Sinceramente non lo so ma se ti leggi l'algoritmo di conversione di un numero decimale a binario vedrai che il risultato lo trovi con 4 bit.
Se vuoi fare il contrario, da binario a decimale, basta che leggi la stringa da destra verso sinistra, ogni bit è un multiplo di 2 partendo da 0, quindi il primo varrà 1, il secondo 2, il terzo 4, il quarto 8 e così via, se c'è uno zero non lo consideri, alla fine sommi tutti questi valori ed hai il risultato.
Se da quelle stringhe che hai preso tu con il convertitore togli i primi 4 bit e poi fai la conversione a decimale come descritto qua sopra ti accorgi che sono esatti, lo 0 è 0000, l'1 è 0001, il 2 è 0010 ecc.
Fai un paio di prove ;)

PS
Ho scritto tutto sto papocchio ma magari lo sai già fare.. anche se hai usato il convertitore, boh :?
Immagine
Spoiler
Maze [sospeso]
Isom (titolo provvisorio) (Windows & Android) [sospeso]
Keep Calm & Jump (Android) [In corso]
The Graywall (Windows) [Completo]
DTB (Windows & Android) [Completo]
The Last Spell (Windows) [Completo]
Dukenstein: Return to the house (Windows) [Completo]
DMSystem (Windows) [Completo]
"Things get hard sometimes guys... But remember, dicks get hard too, but they don't stay hard forever. Don't give up!"

Avatar utente
Tizzio
GMI Honor
Messaggi: 5836
Iscritto il: 29/06/2010, 23:43
Specialità: programmazione
Contatta:

Re: [2014-12-07] Mini Contest di programmazione

Messaggio da Tizzio »

string_length(argument0) ?
ma argument0 è un numero

Avatar utente
doom13
Moderatore
Messaggi: 2093
Iscritto il: 31/08/2012, 15:40
Specialità: Programmazione
Uso: GM:Studio 2
Contatta:

Re: [2014-12-07] Mini Contest di programmazione

Messaggio da doom13 »

Tizzio ha scritto:string_length(argument0) ?
ma argument0 è un numero
string_length(string(argument0))
e ha risolto
Immagine
Spoiler
Maze [sospeso]
Isom (titolo provvisorio) (Windows & Android) [sospeso]
Keep Calm & Jump (Android) [In corso]
The Graywall (Windows) [Completo]
DTB (Windows & Android) [Completo]
The Last Spell (Windows) [Completo]
Dukenstein: Return to the house (Windows) [Completo]
DMSystem (Windows) [Completo]
"Things get hard sometimes guys... But remember, dicks get hard too, but they don't stay hard forever. Don't give up!"

Avatar utente
Xxshark888xX
Membro d'elite
Messaggi: 1497
Iscritto il: 30/05/2012, 19:17
Specialità: Un poco di tutto
Uso: GM:Studio 1.4 Pro
Località: Earth
Contatta:

Re: [2014-12-07] Mini Contest di programmazione

Messaggio da Xxshark888xX »

Tizzio ha scritto:string_length(argument0) ?
ma argument0 è un numero
Sì, ho dimenticato di convertire argument0 in stringa :asd:
Contatti
Steam
Facebook

Gif
Spoiler
Immagine
Immagine
Immagine
Immagine

Avatar utente
doom13
Moderatore
Messaggi: 2093
Iscritto il: 31/08/2012, 15:40
Specialità: Programmazione
Uso: GM:Studio 2
Contatta:

Re: [2014-12-07] Mini Contest di programmazione

Messaggio da doom13 »

Codice: Seleziona tutto

r = "";
for (i = 1; i <= string_length(string(argument0)); i += 1;)
{
    c = string_char_at(string(argument0),i)
    switch(c)
    {
        case "0": r += "0000"; break;
        case "1": r += "0001"; break;
        case "2": r += "0010"; break;
        case "3": r += "0011"; break;
        case "4": r += "0100"; break;
        case "5": r += "0101"; break;
        case "6": r += "0110"; break;
        case "7": r += "0111"; break;
        case "8": r += "1000"; break;
        case "9": r += "1001"; break;
    };
}
return r;
Ho dovuto inizializzare i a 1 sennò mi sballava string_char_at mah
Comunque questo è il codice più corto che sono riuscito a scrivere sarei proprio curioso di sapere se qualcuno riuscirà a trovare un metodo migliore :sisisi:
Immagine
Spoiler
Maze [sospeso]
Isom (titolo provvisorio) (Windows & Android) [sospeso]
Keep Calm & Jump (Android) [In corso]
The Graywall (Windows) [Completo]
DTB (Windows & Android) [Completo]
The Last Spell (Windows) [Completo]
Dukenstein: Return to the house (Windows) [Completo]
DMSystem (Windows) [Completo]
"Things get hard sometimes guys... But remember, dicks get hard too, but they don't stay hard forever. Don't give up!"

Avatar utente
Xxshark888xX
Membro d'elite
Messaggi: 1497
Iscritto il: 30/05/2012, 19:17
Specialità: Un poco di tutto
Uso: GM:Studio 1.4 Pro
Località: Earth
Contatta:

Re: [2014-12-07] Mini Contest di programmazione

Messaggio da Xxshark888xX »

doom13 ha scritto:

Codice: Seleziona tutto

r = "";
for (i = 1; i <= string_length(string(argument0)); i += 1;)
{
    c = string_char_at(string(argument0),i)
    switch(c)
    {
        case "0": r += "0000"; break;
        case "1": r += "0001"; break;
        case "2": r += "0010"; break;
        case "3": r += "0011"; break;
        case "4": r += "0100"; break;
        case "5": r += "0101"; break;
        case "6": r += "0110"; break;
        case "7": r += "0111"; break;
        case "8": r += "1000"; break;
        case "9": r += "1001"; break;
    };
}
return r;
Ho dovuto inizializzare i a 1 sennò mi sballava string_char_at mah
Comunque questo è il codice più corto che sono riuscito a scrivere sarei proprio curioso di sapere se qualcuno riuscirà a trovare un metodo migliore :sisisi:
Cavolo! Non mi era proprio venuto in mente di utilizzare uno switch :asd:
Contatti
Steam
Facebook

Gif
Spoiler
Immagine
Immagine
Immagine
Immagine

Avatar utente
doom13
Moderatore
Messaggi: 2093
Iscritto il: 31/08/2012, 15:40
Specialità: Programmazione
Uso: GM:Studio 2
Contatta:

Re: [2014-12-07] Mini Contest di programmazione

Messaggio da doom13 »

Xxshark888xX ha scritto:
doom13 ha scritto:

Codice: Seleziona tutto

r = "";
for (i = 1; i <= string_length(string(argument0)); i += 1;)
{
    switch(string_char_at(string(argument0),i))
    {
        case "0": r += "0000"; break;
        case "1": r += "0001"; break;
        case "2": r += "0010"; break;
        case "3": r += "0011"; break;
        case "4": r += "0100"; break;
        case "5": r += "0101"; break;
        case "6": r += "0110"; break;
        case "7": r += "0111"; break;
        case "8": r += "1000"; break;
        case "9": r += "1001"; break;
    };
}
return r;
Ho dovuto inizializzare i a 1 sennò mi sballava string_char_at mah
Comunque questo è il codice più corto che sono riuscito a scrivere sarei proprio curioso di sapere se qualcuno riuscirà a trovare un metodo migliore :sisisi:
Cavolo! Non mi era proprio venuto in mente di utilizzare uno switch :asd:
E ora che ci penso si potrebbe accorciare il codice di una riga :) (fatto nel quote)
E volendo si potrebbe accorciare ancora rivedendo le parentesi graffe ma non lo faccio perchè mi piacciono così :asd:
Immagine
Spoiler
Maze [sospeso]
Isom (titolo provvisorio) (Windows & Android) [sospeso]
Keep Calm & Jump (Android) [In corso]
The Graywall (Windows) [Completo]
DTB (Windows & Android) [Completo]
The Last Spell (Windows) [Completo]
Dukenstein: Return to the house (Windows) [Completo]
DMSystem (Windows) [Completo]
"Things get hard sometimes guys... But remember, dicks get hard too, but they don't stay hard forever. Don't give up!"

Avatar utente
Xxshark888xX
Membro d'elite
Messaggi: 1497
Iscritto il: 30/05/2012, 19:17
Specialità: Un poco di tutto
Uso: GM:Studio 1.4 Pro
Località: Earth
Contatta:

Re: [2014-12-07] Mini Contest di programmazione

Messaggio da Xxshark888xX »

Beh togliere gli spazi etc.. Non significa "accorciare" lo script :asd:
Contatti
Steam
Facebook

Gif
Spoiler
Immagine
Immagine
Immagine
Immagine

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti