3 * Copyright (c) 2007-2008, Blue Static <http://www.bluestatic.org>
5 * This program is free software; you can redistribute it and/or modify it under the terms of the GNU
6 * General Public License as published by the Free Software Foundation; either version 2 of the
7 * License, or (at your option) any later version.
9 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
10 * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 * General Public License for more details.
13 * You should have received a copy of the GNU General Public License along with this program; if not,
14 * write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
17 #import "AppController.h"
20 @implementation AppController
23 * Initializes the application and loads the dictionary archive
27 if (self = [super init
])
29 NSString
*path
= [NSString stringWithFormat
:@
"%@/dictionary.txt", [[NSBundle mainBundle
] resourcePath
]];
30 NSString
*file
= [NSString stringWithContentsOfFile
:path
];
31 NSArray
*strings
= [file componentsSeparatedByString
:@
"\n"];
33 dictionary
= [[NSMutableArray alloc
] init
];
34 for (int i
= 0; i
< [strings count
]; i
++)
36 NSString
*str
= [strings objectAtIndex
:i
];
37 Word
*word
= [[Word alloc
] initWithWord
:str
];
38 [dictionary addObject
:word
];
63 * Action that filters through all the words with the given tiles and then produces
66 - (IBAction
)findWords
:(id)sender
68 [wordlist removeObjects
:[wordlist arrangedObjects
]];
70 Word
*temp
= [[Word alloc
] initWithWord
:[tilesField stringValue
]];
71 NSString
*tiles
= [temp alphagram
];
74 NSRange wildRange
= [tiles rangeOfString
:@
"?" options
:NSBackwardsSearch
];
75 int numWild
= (wildRange.location
== NSNotFound ?
0 : wildRange.length
+ wildRange.location
);
76 int length
= [tiles length
];
78 for (int i
= 0; i
< [dictionary count
]; i
++)
80 Word
*word
= [dictionary objectAtIndex
:i
];
81 int wildCounter
= numWild
;
83 if ([word length
] > length
)
89 int j
= 0, k
= numWild
;
90 while (k
< length
&& j
< [word length
])
92 unichar charW
= [[word alphagram
] characterAtIndex
:j
];
93 unichar charT
= [tiles characterAtIndex
:k
];
99 else if (charW
< charT
)
118 if (j
< [word length
] && j
+ wildCounter
< [word length
])
125 [wordlist addObject
:word
];
131 [wordlistView setSortDescriptors
:nil];
132 [wordlistView setSortDescriptors
:[NSArray arrayWithObject
:[[NSSortDescriptor alloc
] initWithKey
:@
"length" ascending
:NO
]]];
133 [wordlistView deselectAll
:nil];