Decimal to Roman

Scripts e snippets scritti in GameMaker Language (gml)
Rispondi
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:

Decimal to Roman

Messaggio da Xxshark888xX »

Salve :cappa: .

Come da titolo, questo script converte i numeri decimali nel sistema numerico romano.
Ho creato questo script giusto per vedere se ci riuscivo :asd: (forse a qualcuno sarà utile).

Codice: Seleziona tutto

///decimal_to_roman(decimal);

/*****************\
* Script v1.0 by *
*  Adriano Mutu  *
* (Xxshark888xX) *
*   Last edit    *
*   09.08.2015   *
/*****************/


var _dec = argument0, _roman = ""; 

if (_dec >= 1 && _dec <= 4999) {
    if (_dec >= 1000) { for (var i = _dec; i >= 1000; i -= 1000) { _roman += "M"; _dec -= 1000; } }
    if (_dec >= 900) { for (var i = _dec; i >= 900; i -= 900) { _roman += "CM"; _dec -= 900; } }
    if (_dec >= 500) { for (var i = _dec; i >= 500; i -= 500) { _roman += "D"; _dec -= 500; } }
    if (_dec >= 400) { for (var i = _dec; i >= 400; i -= 400) { _roman += "CD"; _dec -= 400; } }
    if (_dec >= 100) { for (var i = _dec; i >= 100; i -= 100) { _roman += "C"; _dec -= 100; } }
    if (_dec >= 90) { for (var i = _dec; i >= 90; i -= 90) { _roman += "XC"; _dec -= 90; } }
    if (_dec >= 50) { for (var i = _dec; i >= 50; i -= 50) { _roman += "L"; _dec -= 50; } }
    if (_dec >= 40) { for (var i = _dec; i >= 40; i -= 40) { _roman += "XL"; _dec -= 40; } }
    if (_dec >= 10) { for (var i = _dec; i >= 10; i -= 10) { _roman += "X"; _dec -= 10; } }
    if (_dec >= 9) { for (var i = _dec; i >= 9; i -= 9) { _roman += "IX"; _dec -= 9; } }
    if (_dec >= 5) { for (var i = _dec; i >= 5; i -= 5) { _roman += "V"; _dec -= 5; } }
    if (_dec >= 4) { for (var i = _dec; i >= 4; i -= 4) { _roman += "IV"; _dec -= 4; } }
    if (_dec >= 1) { for (var i = _dec; i >= 1; i -= 1) { _roman += "I"; _dec -= 1; } }
} else { _roman = "-1"; }

return _roman;
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: Decimal to Roman

Messaggio da doom13 »

Metodo ignorante ma compatto (mi piace), io avevo risolto in un altro modo che ha l'unico vantaggio di poter inserire qualunque numero. Dopo se vuoi te lo posto, ah è in c++.
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: Decimal to Roman

Messaggio da Xxshark888xX »

doom13 ha scritto:Metodo ignorante ma compatto (mi piace), io avevo risolto in un altro modo che ha l'unico vantaggio di poter inserire qualunque numero. Dopo se vuoi te lo posto, ah è in c++.
Posta posta. In che senso qualunque numero?
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: Decimal to Roman

Messaggio da doom13 »

Xxshark888xX ha scritto:
doom13 ha scritto:Metodo ignorante ma compatto (mi piace), io avevo risolto in un altro modo che ha l'unico vantaggio di poter inserire qualunque numero. Dopo se vuoi te lo posto, ah è in c++.
Posta posta. In che senso qualunque numero?
Maggiore di 4999
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: Decimal to Roman

Messaggio da Xxshark888xX »

doom13 ha scritto:
Xxshark888xX ha scritto:
doom13 ha scritto:Metodo ignorante ma compatto (mi piace), io avevo risolto in un altro modo che ha l'unico vantaggio di poter inserire qualunque numero. Dopo se vuoi te lo posto, ah è in c++.
Posta posta. In che senso qualunque numero?
Maggiore di 4999
Beh, anche io potrei farlo, ad esempio 'MMMMM' = 5000, ma non è corretto. V con una linea sopra è corretto. Ma vedo che GM (e anche il sito) non supporta questi caratteri...
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: Decimal to Roman

Messaggio da doom13 »

Xxshark888xX ha scritto: Beh, anche io potrei farlo, ad esempio 'MMMMM' = 5000, ma non è corretto. V con una linea sopra è corretto. Ma vedo che GM (e anche il sito) non supporta questi caratteri...
Si esatto infatti anche io faccio scrivere varie M anche se non corretto, comunque ecco il programmino:
Spoiler

Codice: Seleziona tutto

#include <iostream>
#include <string.h>
using namespace std;

//PROTOTIPI
void FunzOutput();
void SetVar();

//VARIABILI GLOBALI
string res;
int M; //Mille
int D; //Cinquecento
int C; //Cento
int L; //Cinquanta
int X; //Dieci
int V; //Cinque
int I; //Uno
 

int main()
{
 int num;   //Numero decimale
 char scelta;
 
 do
 {
 //SETTA LE VARIABILI A 0
 SetVar();
 
 //INPUT
 cout << "\nInserisci un numero: ";
 cin >> num;
 
 //CONTEGGIO
 for (; num >= 1000; num = num -1000)
  M = M +1;
 for (; num >= 500; num = num -500)
  D = D +1;
 for (; num >= 100; num = num -100)
  C = C +1;
 for (; num >= 50; num = num -50)
  L = L +1;
 for (; num >= 10; num = num -10)
  X = X +1;
 for (; num >= 5; num = num -5)
  V = V +1;
 for (; num >= 1; num = num -1)
  I = I +1;
 
 //CREA STRINGA
 for (; M >= 0; M = M -1)
 {
  if (M != 0)
   res = res + "M";
  if (C == 4 && M == 0 && D != 0)
  {
   res = res + "CM";
   D = D -1;
   C = C -4;
  }
 }

 if (D == 1)
 {
  res = res + "D";
 }
 else
 {
  if (C == 4)
  {
   res = res + "CD";
   C = C -4;
  }
 }
 
 for (; C >= 0; C = C -1)
 {
  if (C != 0)
   res = res + "C";
  if (X == 4 && C == 0 && L != 0)
  {
   res = res + "XC";
   L = L -1;
   X = X -4;
  }
 }

 if (L == 1)
 {
  res = res + "L";
 }
 else
 {
  if (X == 4)
  {
   res = res + "XL";
   X = X -4;
  }
 }
 
 for (; X >= 0; X = X -1)
 {
  if (X != 0)
   res = res + "X";
  if (I == 4 && X == 0 && V != 0)//L == 0
  {
   res = res + "IX";
   V = V -1;
   I = I -4;
  }
 }
 
 if (V == 1)
 {
  res = res + "V";
 }
 else
 {
  if (I == 4)
  {
   res = res + "IV";
   I = I -4;
  }
 }
 
 for (; I > 0; I = I -1)
 {
  res = res + "I";
 }
  

 //OUTPUT
 cout << "\nNumero romano: " << res << endl;
 cout << "\n\n_____________________________\n\n";
 cout << "\nVuoi continuare? (y/n)\nby Davide Modenese"<<endl;
 cin >> scelta;
 }while(scelta == 'y');
 
 return 0;
}

void SetVar()
{
 M = 0; //Mille
 D = 0; //Cinquecento
 C = 0; //Cento
 L = 0; //Cinquanta
 X = 0; //Dieci
 V = 0; //Cinque
 I = 0; //Uno
 res = "";
}
Ti dirò, lo ricordavo fatto meglio, comunque è di 4 anni fa :?

Edit:
A sto punto meglio il tuo, in 30 righe te la sbrighi :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: Decimal to Roman

Messaggio da Xxshark888xX »

doom13 ha scritto:
Xxshark888xX ha scritto: Beh, anche io potrei farlo, ad esempio 'MMMMM' = 5000, ma non è corretto. V con una linea sopra è corretto. Ma vedo che GM (e anche il sito) non supporta questi caratteri...
Si esatto infatti anche io faccio scrivere varie M anche se non corretto, comunque ecco il programmino:
Spoiler

Codice: Seleziona tutto

#include <iostream>
#include <string.h>
using namespace std;

//PROTOTIPI
void FunzOutput();
void SetVar();

//VARIABILI GLOBALI
string res;
int M; //Mille
int D; //Cinquecento
int C; //Cento
int L; //Cinquanta
int X; //Dieci
int V; //Cinque
int I; //Uno
 

int main()
{
 int num;   //Numero decimale
 char scelta;
 
 do
 {
 //SETTA LE VARIABILI A 0
 SetVar();
 
 //INPUT
 cout << "\nInserisci un numero: ";
 cin >> num;
 
 //CONTEGGIO
 for (; num >= 1000; num = num -1000)
  M = M +1;
 for (; num >= 500; num = num -500)
  D = D +1;
 for (; num >= 100; num = num -100)
  C = C +1;
 for (; num >= 50; num = num -50)
  L = L +1;
 for (; num >= 10; num = num -10)
  X = X +1;
 for (; num >= 5; num = num -5)
  V = V +1;
 for (; num >= 1; num = num -1)
  I = I +1;
 
 //CREA STRINGA
 for (; M >= 0; M = M -1)
 {
  if (M != 0)
   res = res + "M";
  if (C == 4 && M == 0 && D != 0)
  {
   res = res + "CM";
   D = D -1;
   C = C -4;
  }
 }

 if (D == 1)
 {
  res = res + "D";
 }
 else
 {
  if (C == 4)
  {
   res = res + "CD";
   C = C -4;
  }
 }
 
 for (; C >= 0; C = C -1)
 {
  if (C != 0)
   res = res + "C";
  if (X == 4 && C == 0 && L != 0)
  {
   res = res + "XC";
   L = L -1;
   X = X -4;
  }
 }

 if (L == 1)
 {
  res = res + "L";
 }
 else
 {
  if (X == 4)
  {
   res = res + "XL";
   X = X -4;
  }
 }
 
 for (; X >= 0; X = X -1)
 {
  if (X != 0)
   res = res + "X";
  if (I == 4 && X == 0 && V != 0)//L == 0
  {
   res = res + "IX";
   V = V -1;
   I = I -4;
  }
 }
 
 if (V == 1)
 {
  res = res + "V";
 }
 else
 {
  if (I == 4)
  {
   res = res + "IV";
   I = I -4;
  }
 }
 
 for (; I > 0; I = I -1)
 {
  res = res + "I";
 }
  

 //OUTPUT
 cout << "\nNumero romano: " << res << endl;
 cout << "\n\n_____________________________\n\n";
 cout << "\nVuoi continuare? (y/n)\nby Davide Modenese"<<endl;
 cin >> scelta;
 }while(scelta == 'y');
 
 return 0;
}

void SetVar()
{
 M = 0; //Mille
 D = 0; //Cinquecento
 C = 0; //Cento
 L = 0; //Cinquanta
 X = 0; //Dieci
 V = 0; //Cinque
 I = 0; //Uno
 res = "";
}
Ti dirò, lo ricordavo fatto meglio, comunque è di 4 anni fa :?
Anche se non conosco bene il C++ mi sembra abbastanza macchinoso e lunghino come codice. Comunque good job :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: Decimal to Roman

Messaggio da doom13 »

Xxshark888xX ha scritto:
doom13 ha scritto:
Xxshark888xX ha scritto: Beh, anche io potrei farlo, ad esempio 'MMMMM' = 5000, ma non è corretto. V con una linea sopra è corretto. Ma vedo che GM (e anche il sito) non supporta questi caratteri...
Si esatto infatti anche io faccio scrivere varie M anche se non corretto, comunque ecco il programmino:
Spoiler

Codice: Seleziona tutto

#include <iostream>
#include <string.h>
using namespace std;

//PROTOTIPI
void FunzOutput();
void SetVar();

//VARIABILI GLOBALI
string res;
int M; //Mille
int D; //Cinquecento
int C; //Cento
int L; //Cinquanta
int X; //Dieci
int V; //Cinque
int I; //Uno
 

int main()
{
 int num;   //Numero decimale
 char scelta;
 
 do
 {
 //SETTA LE VARIABILI A 0
 SetVar();
 
 //INPUT
 cout << "\nInserisci un numero: ";
 cin >> num;
 
 //CONTEGGIO
 for (; num >= 1000; num = num -1000)
  M = M +1;
 for (; num >= 500; num = num -500)
  D = D +1;
 for (; num >= 100; num = num -100)
  C = C +1;
 for (; num >= 50; num = num -50)
  L = L +1;
 for (; num >= 10; num = num -10)
  X = X +1;
 for (; num >= 5; num = num -5)
  V = V +1;
 for (; num >= 1; num = num -1)
  I = I +1;
 
 //CREA STRINGA
 for (; M >= 0; M = M -1)
 {
  if (M != 0)
   res = res + "M";
  if (C == 4 && M == 0 && D != 0)
  {
   res = res + "CM";
   D = D -1;
   C = C -4;
  }
 }

 if (D == 1)
 {
  res = res + "D";
 }
 else
 {
  if (C == 4)
  {
   res = res + "CD";
   C = C -4;
  }
 }
 
 for (; C >= 0; C = C -1)
 {
  if (C != 0)
   res = res + "C";
  if (X == 4 && C == 0 && L != 0)
  {
   res = res + "XC";
   L = L -1;
   X = X -4;
  }
 }

 if (L == 1)
 {
  res = res + "L";
 }
 else
 {
  if (X == 4)
  {
   res = res + "XL";
   X = X -4;
  }
 }
 
 for (; X >= 0; X = X -1)
 {
  if (X != 0)
   res = res + "X";
  if (I == 4 && X == 0 && V != 0)//L == 0
  {
   res = res + "IX";
   V = V -1;
   I = I -4;
  }
 }
 
 if (V == 1)
 {
  res = res + "V";
 }
 else
 {
  if (I == 4)
  {
   res = res + "IV";
   I = I -4;
  }
 }
 
 for (; I > 0; I = I -1)
 {
  res = res + "I";
 }
  

 //OUTPUT
 cout << "\nNumero romano: " << res << endl;
 cout << "\n\n_____________________________\n\n";
 cout << "\nVuoi continuare? (y/n)\nby Davide Modenese"<<endl;
 cin >> scelta;
 }while(scelta == 'y');
 
 return 0;
}

void SetVar()
{
 M = 0; //Mille
 D = 0; //Cinquecento
 C = 0; //Cento
 L = 0; //Cinquanta
 X = 0; //Dieci
 V = 0; //Cinque
 I = 0; //Uno
 res = "";
}
Ti dirò, lo ricordavo fatto meglio, comunque è di 4 anni fa :?
Anche se non conosco bene il C++ mi sembra abbastanza macchinoso e lunghino come codice. Comunque good job :sisisi:
Confermo, devo controllare se ho una versione fatta meglio.
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: Decimal to Roman

Messaggio da Nix »

In realtà è corretto fino a 3999, perché 4000 non è MMMM, ma Mv (v = V con una riga sopra). Lo stesso vale per tutti gli altri numeri maggiori di 3999.
Ho provato a farne uno in una (orribile) riga di Haskell:
roman x = let r = zip [0 .. 18] $ zip "IVXLCDMvxlcdmωχλψδμ" [u * f | f <- iterate (* 10) 1, u <- [1, 5]] in fst $ foldr (\(li, (l, ln)) (s, n) -> let nr = div (ln * (9 - 5 * mod li 2)) (10 - 5 * mod li 2); (s', n') = if n >= ln then (s ++ replicate (div n ln) l, mod n ln) else (s, n) in if n' >= nr && li > 0 then (s' ++ [fst (fromJust $ lookup (li - 2 + mod li 2) r), l], n' - nr) else (s', n')) ("", x) r
Usa le lettere minuscole per indicare la lettera corrispondente * 1000, e quelle greche per * 1000000. È corretto fino a 3999999999, ma può essere facilmente esteso all'infinito, aggiungendo lettere alla fine della stringa IVXLCDMvxlcdmωχλψδμ e sommando a 18 il numero di lettere aggiunte.

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: Decimal to Roman

Messaggio da Xxshark888xX »

Nix ha scritto:In realtà è corretto fino a 3999, perché 4000 non è MMMM, ma Mv (v = V con una riga sopra). Lo stesso vale per tutti gli altri numeri maggiori di 3999.
Ho provato a farne uno in una (orribile) riga di Haskell:
roman x = let r = zip [0 .. 18] $ zip "IVXLCDMvxlcdmωχλψδμ" [u * f | f <- iterate (* 10) 1, u <- [1, 5]] in fst $ foldr (\(li, (l, ln)) (s, n) -> let nr = div (ln * (9 - 5 * mod li 2)) (10 - 5 * mod li 2); (s', n') = if n >= ln then (s ++ replicate (div n ln) l, mod n ln) else (s, n) in if n' >= nr && li > 0 then (s' ++ [fst (fromJust $ lookup (li - 2 + mod li 2) r), l], n' - nr) else (s', n')) ("", x) r
Usa le lettere minuscole per indicare la lettera corrispondente * 1000, e quelle greche per * 1000000. È corretto fino a 3999999999, ma può essere facilmente esteso all'infinito, aggiungendo lettere alla fine della stringa IVXLCDMvxlcdmωχλψδμ e sommando a 18 il numero di lettere aggiunte.
Scusa, su Wikipedia dice che 4000 = MMMM. E ho sempre saputo che 4000 si scrive con 4 M. Dove hai sentito questa cosa? Perché V con una riga sopra significa 5000
Contatti
Steam
Facebook

Gif
Spoiler
Immagine
Immagine
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: Decimal to Roman

Messaggio da Xxshark888xX »

Xeryan ha scritto:Immagine
:asd: tu IV con una riga sopra. Probabilmente ci sono più "versioni", così anche come per l'11 che si utilizzava (anche se raro) O invece di XI...
Contatti
Steam
Facebook

Gif
Spoiler
Immagine
Immagine
Immagine
Immagine

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

Re: Decimal to Roman

Messaggio da Nix »

Io mi baso sulle regole di base, "MMMM" non è consistente se ammettiamo l'esistenza della V con la linea sopra, perché ripete quattro volte la stessa lettera. È simile al 4, non scrivi "IIII", ma "IV" (lettera successiva - lettera con prima cifra 1 precedente). Ma ovviamente, se non avessimo la V, scriveremmo "IIII", "IIIII", e così via. Quindi per me o il tuo algoritmo è giusto all'infinito (escludendo la V con la linea), o è giusto fino a 3999, ma non ha senso limitarlo a 4999. Comunque, secondo me, la forma in cui solo la lettera V è con la linea sopra è l'estensione più naturale, perché le varie lettere con la linea sopra sono semplicemente quelle successive, non va aggiunta o tolta nessuna regola. Comunque esistono sicuramente molte varianti, questo sito usa la forma che ho usato io (al posto di V con la linea sopra usa _V), che ha senso anche basandosi sulla regola postata da Xeryan, perché, se mettere la riga sopra vuol dire moltiplicare per mille, Mv è 5 * 1000 - 1000 = 4000.

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: Decimal to Roman

Messaggio da Xxshark888xX »

Nix ha scritto:Io mi baso sulle regole di base, "MMMM" non è consistente se ammettiamo l'esistenza della V con la linea sopra, perché ripete quattro volte la stessa lettera. È simile al 4, non scrivi "IIII", ma "IV" (lettera successiva - lettera con prima cifra 1 precedente). Ma ovviamente, se non avessimo la V, scriveremmo "IIII", "IIIII", e così via. Quindi per me o il tuo algoritmo è giusto all'infinito (escludendo la V con la linea), o è giusto fino a 3999, ma non ha senso limitarlo a 4999. Comunque, secondo me, la forma in cui solo la lettera V è con la linea sopra è l'estensione più naturale, perché le varie lettere con la linea sopra sono semplicemente quelle successive, non va aggiunta o tolta nessuna regola. Comunque esistono sicuramente molte varianti, questo sito usa la forma che ho usato io (al posto di V con la linea sopra usa _V), che ha senso anche basandosi sulla regola postata da Xeryan, perché, se mettere la riga sopra vuol dire moltiplicare per mille, Mv è 5 * 1000 - 1000 = 4000.
Sì, seguendo la regola di base hai ragione. Però vedo che c'è buona parte che dice che è corretto MMMM e l'altra parte con IV con la linea sopra, sinceramente lascio lo script così, se qualcuno vuole limitarlo a 3999 può farlo da solo molto semplicemente...
Contatti
Steam
Facebook

Gif
Spoiler
Immagine
Immagine
Immagine
Immagine

Avatar utente
pacmino
GMI Guru
Messaggi: 2569
Iscritto il: 03/06/2009, 16:38
Specialità: Scazzato cronico
Uso: GM:Studio 2
Località: Seconda stella a destra questo è il cammino e poi dritto, fino al mattino...
Contatta:

Re: Decimal to Roman

Messaggio da pacmino »

dato che sopra a 3999 si deve (o dovrebbe mettere il segnetto) si potrebbe aggiungere uno script in maniera che un numero tipo 4567 venga scomposto in 4000 e 567, 4000 mila lo rappresenti con IV più un segno sopra e 567 seguirebbe lo script originario

si potrebbe creare un font aggiuntivo tramite uno sprite che incorpori già il segnetto con http://docs.yoyogames.com/source/dadios ... e_ext.html

tra l'altro qui sembra che il segnetto (che indica le migliaia) vada sotto e non sopra

http://www.legionxxiv.org/numerals/
Immagine

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti