epistemeさんところの5/21日記
http://blogs.wankuma.com/episteme/archive/2007/05/21/77545.aspxのコメントを見て・・・
同じ(ような)結果を得るだけのプログラム。
list構造を組み立てなければ、ほーらCでも長くないよ~(^^;
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char** argv)
{
char cards[] = "A23456789XJQK";
size_t card_count = strlen(cards);
int shuffles = (argc > 1)? atoi(*++argv): 10;
srand(time(NULL));
while ( shuffles-- > 0 )
{
char* begin = cards + rand() % card_count;
char* end = cards + rand() % card_count;
if ( begin > end ){ char* tmp = begin; begin = end; end = tmp; }
printf("%s --> ('%c' to '%c' move to top) --> ", cards, *begin, *end);
{
size_t picked_count = (end - begin + 1);
char* new_cards = (char*)malloc(card_count * sizeof(char)); /* この辺がすごくもったいない気がする */
strncpy(new_cards, begin, picked_count);
*begin = new_cards[picked_count] = '\0';
strcat(new_cards, cards);
strcat(new_cards, end + 1);
strcpy(cards, new_cards);
free(new_cards);
}
puts(cards);
}
return 0;
}