Pagina 2 di 2

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

Inviato: 01/12/2014, 13:26
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

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

Inviato: 01/12/2014, 13:48
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:

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

Inviato: 01/12/2014, 13:50
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...

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

Inviato: 01/12/2014, 14:11
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à?

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

Inviato: 01/12/2014, 14:15
da Nix
Xeryan ha scritto:Switch ? Pff dilettanti :asd:
Il tuo è probabilmente il più lento di tutti...

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

Inviato: 01/12/2014, 15:15
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);

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

Inviato: 01/12/2014, 15:37
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:

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

Inviato: 01/12/2014, 16:05
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:

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

Inviato: 01/12/2014, 16:26
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à..

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

Inviato: 01/12/2014, 16:30
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:

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

Inviato: 01/12/2014, 21:41
da civic71
bravi :D , io non conosco ste cose e funzioni come mod ma mi piace vedere sti codici .

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

Inviato: 01/12/2014, 22:02
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.

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

Inviato: 02/12/2014, 11:24
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 ;)

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

Inviato: 02/12/2014, 14:56
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:

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

Inviato: 02/12/2014, 18:03
da civic71
minuti = seconditot div 60;
secondi = seconditot mod 60;
Lascia a te capire a cosa serve div
Ha, capito e bello ed utile .

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

Inviato: 02/12/2014, 18:35
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?

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

Inviato: 02/12/2014, 18:38
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)...

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

Inviato: 02/12/2014, 20:36
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...

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

Inviato: 02/12/2014, 20:55
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.