urlocura.c

Código

El motivo o disparador fue el encontrar, en julio de 2017, una valla publicitaria en un pueblo de Asturias en el que el error o el descuido habían dado en formar una dirección de dominio de Internet casi podríamos decir que aleatoria o, cuando menos, sorprendente.

Decidí crear 27 láminas únicas que contuviesen 27 URLs azarosamente creadas donde cada una de ellas correspondiese o fuese numerada por una letra del alfabeto marcando la letra en cuestión en un color rojizo: (RGB #a40f0f)


/*****************************************
urlocura.c

Programa para crear URLs que no tengan ningún sentido más que el azaroso.
Podría ocurrir que alguna de las así conformadas ya exista.

*****************************************/

#include <stdio.h>
#include <string.h>
#include <wchar.h>
#include <locale.h>

// En realidad, la longitud de la URL será de unos 27+7 caracteres
// pero me gusta el 81 (asumo esos cuantos bytes a mi cuenta)
#define LONGITUD_MAX 81
// Para realizar 27 URLs arbitrarias
#define NUM_URLS 27

main()
{
  setlocale(LC_CTYPE, ""); // Necesario para que funcionen las ñ
  
  int  i, j, letra, l_alfa, l_prot;
  // Un alfabeto de la a a la z pasando por la ñ
  wchar_t alfabeto[] = L"abcdefghijklmnñopqrstuvwxyz";
  wchar_t URL[LONGITUD_MAX];
  wchar_t protocolo[] = L"http://";

  l_alfa = wcslen(alfabeto);
  l_prot = wcslen(protocolo);
  wprintf(L"La longitud del alfabeto es %d\n", l_alfa);
  wprintf(L"El alfabeto es |%ls|\n", alfabeto);

  srand (time(NULL));

  for (j = 0; j < NUM_URLS; j++)
  {
    wmemset(URL, L'\0', LONGITUD_MAX);
    wcscpy(URL, protocolo); 
    for (i = 0; i < l_alfa; i++)
    {
      letra = rand() % l_alfa; // Obtenemos una letra al azar del diccionario
      // Aleatoriamente, si el anterior no era un punto ni una /, ni estamos al final de la URL, ponemos un punto.
      if ((!(rand()%3)) && (URL[l_prot+i-1] != L'.') && (URL[l_prot+i-1]!=L'/') && (i != (l_alfa-1))) URL[l_prot+i]=L'.';
      else URL[l_prot+i]=alfabeto[letra];
    };
    wprintf(L"|%ls|\n", URL);
  };
} // main()