faultier #3925(2007/11/13 05:20 GMT) [ Objective-C ] Rating1/1=1.00
アレイのuniqと似てるなぁ。 ちなみにn < mだと全員当選します。
see: NSArray Class Reference
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
#import <Foundation/Foundation.h> #import <stdio.h> @interface NSArray (Random) - (NSArray *)objectsAtRandom:(int)number; @end @implementation NSArray (Random) - (NSArray *)objectsAtRandom:(int)m { int n = [self count]; id selected; if (m >= n) { selected = self; } else { srand(time(nil)); NSMutableDictionary* winnerTable = [NSMutableDictionary dictionary]; selected = [NSMutableArray array]; id winner; while ([selected count] < m) { winner = [self objectAtIndex:(rand()%n)]; if (![winnerTable objectForKey:winner]) { [winnerTable setObject:winner forKey:winner]; [selected addObject:winner]; } } } return selected; } @end int main(int argc, const char * argv[]) { NSAutoreleasePool* pool = [NSAutoreleasePool new]; if (argc < 3) { printf("Usage: %s n player1[,player2...]\n", argv[0]); return 1; } NSArray* players = [[NSString stringWithCString:argv[2] encoding:NSUTF8StringEncoding] componentsSeparatedByString:@","]; for (id winner in [players objectsAtRandom:atoi(argv[1])]) { printf("%s\n", [winner cStringUsingEncoding:NSUTF8StringEncoding]); } [pool release]; return 0; }
Rating1/1=1.00-0+
[ reply ]
faultier
#3925()
[
Objective-C
]
Rating1/1=1.00
see: NSArray Class Reference
Rating1/1=1.00-0+
[ reply ]