#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
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:Beh togliere gli spazi etc.. Non significa "accorciare" lo script :asd:
Ma si certo, però son sempre due righe in meno :D
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 »

Xeryan ha scritto:Switch ? Pff dilettanti :asd:

Codice: Seleziona tutto

var String = "", pos, binary, number, dec = string(argument0);

for (var i=1; i<=string_length(dec); i++) {
    number = real(string_char_at(dec, i));
    binary = "0000";
    pos = 0;
    
    while (number > 0) {
        binary = string_set_byte_at(binary, 4-pos, ord(string(number mod 2)));
        number = number div 2;
        pos++;
    }
    
    String += binary;   
}

return String;
Io ho creato lo script con gm8.1 e vedo che in gm8.1 la funzione "string_set_byte_at" non c'è :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:
Xeryan ha scritto:Switch ? Pff dilettanti :asd:

Codice: Seleziona tutto

var String = "", pos, binary, number, dec = string(argument0);

for (var i=1; i<=string_length(dec); i++) {
    number = real(string_char_at(dec, i));
    binary = "0000";
    pos = 0;
    
    while (number > 0) {
        binary = string_set_byte_at(binary, 4-pos, ord(string(number mod 2)));
        number = number div 2;
        pos++;
    }
    
    String += binary;   
}

return String;
Io ho creato lo script con gm8.1 e vedo che in gm8.1 la funzione "string_set_byte_at" non c'è :asd:
Eh infatti, qui la competizione si divide, chi lo ha fatto con versioni precedenti a Studio e chi con Studio :asd:

Edit:
Ora che leggo bene il codice hai praticamente usato l'algoritmo classico di conversione però secondo me il tuo codice è più lento, sono comunque due cicli...
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
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:Settimanalmente vi proporrò un semplice problema e dovrete implementarlo in uno script e ne verrà testata la velocità
Come verrà testata la velocità?
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!"

Nix
GMI Advanced
Messaggi: 2437
Iscritto il: 26/12/2008, 18:14
Uso: GM:Studio 2
Contatta:

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

Messaggio da Nix »

Xeryan ha scritto:Switch ? Pff dilettanti :asd:
Il tuo è probabilmente il più lento di tutti...

Avatar utente
guidox
GMI Honor
Messaggi: 5765
Iscritto il: 26/07/2009, 17:23
Specialità: programmazione
Uso: GM:Studio 1.4 Android
Località: Marche
Contatta:

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

Messaggio da guidox »

Un altro modo ;)

Codice: Seleziona tutto

var N,s,n;
N=argument0;
s="";
while(N>0) {
n=N mod 10;
s=string(n div 8 mod 2)+string(n div 4 mod 2)+string(n div 2 mod 2)+string(n mod 2)+s;
N=N div 10;
}
return(s);
Immagine

Immagine

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 »

guidox ha scritto:Un altro modo ;)

Codice: Seleziona tutto

var N,s,n;
N=argument0;
s="";
while(N>0) {
n=N mod 10;
s=string(n div 8 mod 2)+string(n div 4 mod 2)+string(n div 2 mod 2)+string(n mod 2)+s;
N=N div 10;
}
return(s);
Qualcosa mi dice che guidox per ora è in testa :sisisi:
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 »

guidox ha scritto:Un altro modo ;)

Codice: Seleziona tutto

var N,s,n;
N=argument0;
s="";
while(N>0) {
n=N mod 10;
s=string(n div 8 mod 2)+string(n div 4 mod 2)+string(n div 2 mod 2)+string(n mod 2)+s;
N=N div 10;
}
return(s);
A a a a a se inserisco 0 non funziona :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
aironenero
GMI Guru
Messaggi: 2612
Iscritto il: 02/05/2012, 14:56
Specialità: Unity 3D
Uso: GM:Studio 1.4 Pro
Località: Ispica
Contatta:

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

Messaggio da aironenero »

Ah beh per me lo switch è il più veloce e comodo. (oltre che il più semplice da ideare), dato che la competizione è sulla velocità..
Unity Developer
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 »

aironenero ha scritto:Ah beh per me lo switch è il più veloce e comodo. (oltre che il più semplice da ideare), dato che la competizione è sulla velocità..
Sono d'accordo :hum:
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
civic71
GMI Advanced
Messaggi: 2210
Iscritto il: 23/10/2003, 17:31
Specialità: Risotto con zucchine
Uso: GM:Studio 1.4 Pro
Località: Jesolo (venezia)
Contatta:

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

Messaggio da civic71 »

bravi :D , io non conosco ste cose e funzioni come mod ma mi piace vedere sti codici .

Nix
GMI Advanced
Messaggi: 2437
Iscritto il: 26/12/2008, 18:14
Uso: GM:Studio 2
Contatta:

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

Messaggio da Nix »

guidox ha scritto:Un altro modo ;)

Codice: Seleziona tutto

var N,s,n;
N=argument0;
s="";
while(N>0) {
n=N mod 10;
s=string(n div 8 mod 2)+string(n div 4 mod 2)+string(n div 2 mod 2)+string(n mod 2)+s;
N=N div 10;
}
return(s);
Potresti renderlo ancora più veloce usando chr invece di string e &/>> invece di div/mod (cioè chr(48 + ((n & (1 << cifra)) >> cifra), al posto di 1 << cifra si può mettere 1, 2, 4 come hai fatto nel codice, in quel caso 2, 4, 8​).
Ah beh per me lo switch è il più veloce e comodo. (oltre che il più semplice da ideare), dato che la competizione è sulla velocità..
Se questo sia più veloce o più lento di quello di doom dipende più da GM che dall'algoritmo in sè. Gli switch possono essere implementati in modo molto efficiente nei linguaggi compilati (per esempio con le jump tables), ma probabilmente in quel caso GM compara le stringhe 10 volte, e dunque potrebbe essere più lento di quello di guifus.

Avatar utente
guidox
GMI Honor
Messaggi: 5765
Iscritto il: 26/07/2009, 17:23
Specialità: programmazione
Uso: GM:Studio 1.4 Android
Località: Marche
Contatta:

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

Messaggio da guidox »

Molto intelligente Nix! :D
Oppure ancora... Ma credo che sia nettamente più lento...

Codice: Seleziona tutto

var N,s,n;
N=argument0;
s="";
while(N>0) {
n=N mod 10;
s=string_replace_all(string_format(((n & 8) >> 3)*1000+((n & 4) >> 2)*100+((n & 2) >> 1)*10+(n & 1),4,0)," ","0")+s;
N=N div 10;
}
return(s);
Comunque ragazzi suvvia! Questa "competizione" non serve per decretare un vincitore, ma per imparare qualcosa! Quindi cercate di assimilare nuove nozioni invece di fossilizzarvi sul vostro switch . :asd:

@civic71: Allora impara subito che vuol dire: serve a restituire il resto della divisione per interi. Come quando facevi le divisioni alle elementari.
34 / 5 = 6 resto 4
5 / 3 = 1 resto 2
quindi...
34 mod 5 = 4
5 mod 3 = 2
Tutto qui, poi le applicazioni sono più interessanti ;)
Per esempio è utile per creare un timer minuti:secondi.
Invece di creare due variabili "minuti" e "secondi", ne creo una sola "seconditot". Poi per ricavare le altre due mi basterà fare:
minuti = seconditot div 60;
secondi = seconditot mod 60;
Lascia a te capire a cosa serve div ;)
Immagine

Immagine

Avatar utente
Bombertoman
Membro super
Messaggi: 595
Iscritto il: 14/07/2014, 18:35
Specialità: Programmazione
Uso: GM:Studio 1.4 Standard
Località: Manfredonia (FG)
Contatta:

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

Messaggio da Bombertoman »

doom13 ha scritto:
guidox ha scritto:Un altro modo ;)

Codice: Seleziona tutto

var N,s,n;
N=argument0;
s="";
while(N>0) {
n=N mod 10;
s=string(n div 8 mod 2)+string(n div 4 mod 2)+string(n div 2 mod 2)+string(n mod 2)+s;
N=N div 10;
}
return(s);
A a a a a se inserisco 0 non funziona :asd:

Codice: Seleziona tutto

var N,s,n;
N=argument0;
if (N=0)
  s="0000"
else
{
 s="";
 while(N>0) {
   n=N mod 10;
   s=string(n div 8 mod 2)+string(n div 4 mod 2)+string(n div 2 mod 2)+string(n mod 2)+s;
   N=N div 10;
   }
}
return(s);
Fixed! :mrgreen:
Project GG... vediamo se riesco a finire un gioco per una volta...

Avatar utente
civic71
GMI Advanced
Messaggi: 2210
Iscritto il: 23/10/2003, 17:31
Specialità: Risotto con zucchine
Uso: GM:Studio 1.4 Pro
Località: Jesolo (venezia)
Contatta:

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

Messaggio da civic71 »

minuti = seconditot div 60;
secondi = seconditot mod 60;
Lascia a te capire a cosa serve div
Ha, capito e bello ed utile .

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 »

Uhm si però è più figo lo switch :asd:

A parte gli scherzi, magari è più veloce lo script di guidox però a mio parere, non voglio fare il grande, il codice come lo ho impostato io è più pulito e capisci subito quello che fa.. Non conta anche questo per un buon script?
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
aironenero
GMI Guru
Messaggi: 2612
Iscritto il: 02/05/2012, 14:56
Specialità: Unity 3D
Uso: GM:Studio 1.4 Pro
Località: Ispica
Contatta:

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

Messaggio da aironenero »

guidox ha scritto:Molto intelligente Nix! :D
Oppure ancora... Ma credo che sia nettamente più lento...

Codice: Seleziona tutto

var N,s,n;
N=argument0;
s="";
while(N>0) {
n=N mod 10;
s=string_replace_all(string_format(((n & 8) >> 3)*1000+((n & 4) >> 2)*100+((n & 2) >> 1)*10+(n & 1),4,0)," ","0")+s;
N=N div 10;
}
return(s);
Comunque ragazzi suvvia! Questa "competizione" non serve per decretare un vincitore, ma per imparare qualcosa! Quindi cercate di assimilare nuove nozioni invece di fossilizzarvi sul vostro switch . :asd:

@civic71: Allora impara subito che vuol dire: serve a restituire il resto della divisione per interi. Come quando facevi le divisioni alle elementari.
34 / 5 = 6 resto 4
5 / 3 = 1 resto 2
quindi...
34 mod 5 = 4
5 mod 3 = 2
Tutto qui, poi le applicazioni sono più interessanti ;)
Per esempio è utile per creare un timer minuti:secondi.
Invece di creare due variabili "minuti" e "secondi", ne creo una sola "seconditot". Poi per ricavare le altre due mi basterà fare:
minuti = seconditot div 60;
secondi = seconditot mod 60;
Lascia a te capire a cosa serve div ;)
umh, avevo dimenticato dell'esistenda del mod... (che poi dovrebbe stare per modulo)...
Unity Developer
Immagine
Immagine

Avatar utente
Bombertoman
Membro super
Messaggi: 595
Iscritto il: 14/07/2014, 18:35
Specialità: Programmazione
Uso: GM:Studio 1.4 Standard
Località: Manfredonia (FG)
Contatta:

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

Messaggio da Bombertoman »

Il mod sarebbe il classico % nel javascript e nel c++... il div invece mi è nuovo, non sapevo esistesse una funzione che restituisce il risultato intero di una divisione senza il resto...
Project GG... vediamo se riesco a finire un gioco per una volta...

Nix
GMI Advanced
Messaggi: 2437
Iscritto il: 26/12/2008, 18:14
Uso: GM:Studio 2
Contatta:

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

Messaggio da Nix »

Bombertoman ha scritto:non sapevo esistesse una funzione che restituisce il risultato intero di una divisione senza il resto...
È come floor(x / y), soltanto più efficiente.

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 5 ospiti