Bogusław Kempny

strfry()

×
Autor English
Początek HC-SR04 LCD Kamera fork() sms strfry() GPIO impulsy Klawiatura Brama GPIO PWM SG90 RFID Grafolog RCP Shutdown Temperatura ....











Teraz trochę zabawy.

W bibliotece GNU C jest taka funkcja strfry().

Niewielu o niej słyszało, jeszcze mniej osób jej używa. Co robi? Ano miesza literki w tekście. Robi anagram.

Tekst "Ala ma kota" może przerobić na:

"a  Aalakomt"
" oa lkaamAt"
"A mk oaltaa"
"omAaaal tk "

Wydaje się, że to taka funkcja "z przymrużeniem oka" i chyba jej twórcy też tak ją traktowali, napisali dla zabawy. Występuje jedynie w bibliotece GNU C.

No bo do czego, oprócz układania łamigłówek słownych może się przydać? Przecież nie do szyfrowania!

A jednak może się przydać, dla programisty może być świetną zabawą, a w dodatku wyprodukować coś pożytecznego.

Przed laty dla zabawy napisałem w C programik lotto.c. Prosty, tylko 38 linijek kodu, ale korzystał w dwuwymiarowej tablicy, generatora liczb pseudolosowych, sortu. Trochę pracy w jego napisanie i uruchomienie trzeba było włożyć.

Ostatnio, też dla zabawy, napisałem jego nową wersję używając strfry().

Robi to samo, ale skurczył się do 12 linijek kodu a samo generowanie szczęśliwej szóstki do jednej linijki:
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
  unsigned char buf[50];
  buf[50] = 0x00;
  int i;

  for(i=0;i<49;i++)
    buf[i]=i+1;
  buf[49] = 0x00;
  strfry(buf);
  for(i=0;i<6;i++)
    printf("%2d  ", buf[i]);
    printf("\n");
}
A więc jeśli grywasz w lotto, skopiuj program lotto.c,

skompiluj:

cc lotto.s -o lotto

Uruchom:

./lotto

I przegrywaj!