TMK

WindowsMobile5は言うこと聞かないね

目次

Blog 利用状況

ニュース

参加コミュニティ

書庫

日記カテゴリ

シャッフル(汎用性なし

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;
}

 

投稿日時 : 2007年5月25日 0:05

コメントを追加

No comments posted yet.
タイトル
名前
URL
コメント