I marziani hanno tre dita in una mano e solo un dito nell’altra.
I marziani maschi hanno le loro tre dita sulla mano sinistra, mentre le femmine hanno le loro tre dita sulla mano destra. Ciò rende più semplice ballare il valzer.

Come gli esseri umani ed altre specie intelligenti, i Marziani hanno incominciato a contare usando le loro dita ed avendo solo quattro dita hanno sviluppato un sistema numerico posizionale in base quattro.


Le quattro cifre che usano sono:

  • Θ  (xip), il loro zero
  • ∫   (foo), l’unità
  •  ∩   (bar), due
  •  ≡   (bas), tre

In un numero marziano il peso di ciascuna cifra è specificato da un suffisso. I suffissi seguono la seguente logica:

  • “by” per le cifre che hanno peso 4
  • “bity” per le cifre che hanno peso 4*4
  • “bidity” per le cifre che hanno peso 4*4*4
  • “bididity” per le cifre che hanno peso 4*4*4*4
  • e cosi via “bidi…di…dity” per le cifre che hanno peso 4*4*…*4*…*4*4

quindi, ad esempio:
∫ = 1 (foo),
∫Θ = 1*4 + 0 = 4 (fooby)
∫ΘΘ = 1*4*4 + 0*4 + 0 = 16 (foobity)
∫ΘΘΘΘΘ = 1*4*4*4*4*4 = 1024 (foobidididity)
∩Θ = 2*4 + 0 = 8 (barby)
≡∩∫ = 3*4*4 + 2*4 + 1 = 57 (basbity barby foo)
≡Θ∩∫ = 3*4*4*4 + 0*4*4 + 2*4 +1 = 201 (basbidity barby foo)

Esercizio
Come utile esercizio, si scriva una funzione che sia in grado di tradurre un numero terrestre in uno marziano e ne riporti la pronuncia.

Segue una possibile soluzione in PHP, che opportunamente inclusa in una pagina web (ad esempio questa), permette la traduzione dei numeri in marziano.

/**
 * Traduce un numero terrestre in marziano
 *
 * @param int
 * @return string
 */
function martianize($n) {
// corrispondenze tra cifre terrestri e marziane
$traduzione = array(
'0' => 'xip',
'1' => 'foo',
'2' => 'bar',
'3' => 'bas'
);

$s='';
$r=0;
$out='';

/*
* Convertiamo il numero $n in base 4
* e memorizziamo ogni cifra in una stringa $s
*/
while ($n > 3){
$r = $n % 4; //resto intero della divisione
$n = (int)($n / 4); //quoziente intero della divisione
$s = (string)$r . $s;
}
$s = (string)$n .$s;

/*
* Adesso convertiamo la stringa $s in marziano
*/
$len = strlen($s);
for ($i = 0; $i < $len; $i++ ){
$char = $s[$i];
$peso = $len-$i-1;
/* gli zeri di un numero non si pronunciano, ammeno che non sia proprio lo zero */
if ($char == '0' && $len > 1) continue;
$martian = $traduzione[$char];
/* se ilpeso è zero, allora la cifra corrisponde con la traduzione */
if ($peso == 0) $out.= $martian;
/* se il peso è 1 allora la cifra è pronunciata con il suffisso "by"*/
else if ($peso == 1) $out .= $martian . 'by';
/* se il peso è 2, il suffiso "bity",
se invece il peso è x allora il suffisso è "bi..di..di..ty"*/
else {
$di = '';
for($j=0; $j < $peso-2; $j++) $di .= 'di'; // con "di" che si ripete x-2 volte
$out.= $martian."bi{$di}ty";
}
/*separiamo la pronuncia delle cifre aggiungendo uno spazio*/
$out .= ' ';
}

return $out;
}