284Fermer286
BiHiLe 24/10/2003 à 22:06
meuzozobu

Moi je sais pas j'ai fait un petit programme en C...
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void shadok(unsigned int n)
{
  char *output, *tmp;
  int size;
  
  size = (int)(floor(log(n)/log(4)) + 1);
  output = malloc(size*3 + 1); // 3 caractères pour 'meu'
  if(!output)
    return;
  tmp = output + size*3;
  *tmp-- = '\0';
  
  while(n) {
    switch(n%4) {
      case 0: // ga
        *tmp-- = 'a';
        *tmp-- = 'g';
        break;
      case 1: // bu
        *tmp-- = 'u';
        *tmp-- = 'b';
        break;
      case 2: // zo
        *tmp-- = 'o';
        *tmp-- = 'z';
        break;
      case 3: // meu
        *tmp-- = 'u';
        *tmp-- = 'e';
        *tmp-- = 'm';
        break;
      default:
        break;
    }
    n /= 4;
  }
  printf("%s\n", ++tmp);
  free(output);
}

unsigned int humain(char *chaine)
{
  unsigned int n;
  char c;
  
  n = 0;
  while((c = *chaine)) {
    n *= 4;
    switch(c) {
      case 'g': // ga
        if(*(chaine+1) != 'a')
          goto error;
        break;
      case 'b': // bu
        if(*(chaine+1) == 'u')
          n += 1;
        else
          goto error;
        break;
      case 'z': // zo
        if(*(chaine+1) == 'o')
          n += 2;
        else
          goto error;
        break;
      case 'm':
        if(*(chaine+1) == 'e' &&
           *(chaine+2) == 'u') {
          n += 3;
          chaine++;
        }
        else
          goto error;
        break;
      default: error:
        fprintf(stderr, "[Erreur] C'est pas du shadok : %s", chaine);
        exit(-1);
    }
    chaine += 2;
  }
  return n;
}
int main(int argc, char *argv[])
{
//  stuff1(argc, argv);
  char *a;
  
  a = malloc(1024);
  if(!a) {
    fprintf(stderr, "Pas assez de mémoire! :|");
    exit(-2);
  }
  a[1023] = '\0';
  if(argc < 2) {
    printf("Renvoie le nombre suivant en shadok: ");
    fscanf(stdin, "%s", a);
  }
  else // argc >= 2
    strncpy(a, argv[1], 1023);
  shadok(humain(a) + 1);
  system("Pause");
  return 0;
}


Enfin ça doit être mal codé, mais bon ça marche... chez moi en tout cas.
Enfin le plus simple au lieu d'utiliser un programme c'est de réfléchir directement dans la base ga-bu-zo-meu, c'est pas beaucoup plus compliqué que de le faire en base 10, c'est exactement le même principe. neutral