And a solution in Scala (Well nearly Java ;-))...
object AlienLanguage {
def main(args: Array[String]) = {
if (args.length == 0) {
throw new IllegalArgumentException("Could not find input file in
arguments")
}
val input = args(0)
val outputFile = new File((input substring (0, input lastIndexOf (".")))
+ ".out")
val reader = Source fromFile (input) getLines
val ar = reader nextIntArray
val (tokens, nrWords, nrProblems) = (ar(0), ar(1), ar(2))
val results = new Array[String](nrProblems)
val words = (1 to nrWords).map(x => reader.trimmedLine).toList
for (val i <- 1 to nrProblems) {
results(i - 1) = "Case #" + i + ": " + solveProblem(reader, words)
}
outputFile write results
}
/**
* Convert the pattern received from the aliens to a regex and match it
against the dictionary
*/
def solveProblem(reader: Iterator[String], words: List[String]): String =
{
val pattern = reader.trimmedLine
val regex = pattern.replaceAll("\\(", "[").replaceAll("\\)", "]").r
matchWords(regex, words.head, words.tail).toString
}
/**
* Recursive method to sum up all the matches
*/
def matchWords(regex: scala.util.matching.Regex, word: String, words:
List[String]): Int = {
words.isEmpty match {
case true => matchWord(regex, word)
case false => matchWord(regex, word) + matchWords(regex, words.head,
words.tail)
}
}
/**
* Return 1 for a match, 0 for none
*/
def matchWord(regex: scala.util.matching.Regex, word: String): Int = {
regex.findFirstIn(word) match {
case Some(x) => 1
case None => 0
}
}
}
On Fri, May 6, 2011 at 7:15 AM, Seydou TAPSOBA <[email protected]> wrote:
> This is my Solution in Java!!
>
>
> import java.io.File;
> import java.io.FileNotFoundException;
> import java.io.PrintWriter;
> import java.util.ArrayList;
> import java.util.List;
> import java.util.Scanner;
>
>
> public class alien {
>
> /**
> * @param args
> * @throws FileNotFoundException
> */
> public static void main(String[] args) throws FileNotFoundException {
>
> Scanner in = new Scanner(new File("aliens.in"));
> PrintWriter out = new PrintWriter(new File("aliens.out"));
>
> String[] data = in.nextLine().split(" ");
>
> int l = Integer.parseInt(data[0]);
> int d = Integer.parseInt(data[1]);
> int cas = Integer.parseInt(data[2]);
>
> String rawWord;
> int count = 0;
>
>
> String[] dico = new String[d];
>
> for (int i = 0; i < dico.length; i++) {
> dico[i] = in.nextLine();
> }
>
> for (int i = 1; i <= cas; i++) {
>
> rawWord = in.nextLine();
>
> List<String> cases = new ArrayList<String>();
> String mot = "";
> char currentDictionnaryChar;
> String letters = "";
>
> cases = getTokens(rawWord);
>
>
>
>
> // on traite chaque mot du dico pour vérifier si oui ou non il
> peut
> // être construit avec la chaine reçue
> for (int j = 0; j < dico.length; j++) {
>
> mot = dico[j];
>
> boolean found = true;
>
> for (int k = 0; k < l; k++) {
>
>
> currentDictionnaryChar = mot.charAt(k);
>
> letters = cases.get(k);
> if(letters.indexOf(""+currentDictionnaryChar) ==
> -1){
> found = false;
> break;
> }
>
> }
> if(found) count++;
> } // tous les mots du dico sont traités
>
> out.print("Case #"+ i +": "+count);
> count = 0;
> if(in.hasNext()) out.println();
> }
> out.close();
>
>
> }
>
> public static List<String> getTokens(String raw) {
>
> List<String> temp = new ArrayList<String>();
> StringBuffer rawTemp = new StringBuffer(raw);
>
> int i = 0, j = 0;
> while(rawTemp.capacity() != 0){
> i = rawTemp.indexOf("(") ;
> j = rawTemp.indexOf(")") ;
> switch(i) {
> case 0:
>
> temp.add("" + rawTemp.substring(i+1, j));
> rawTemp = rawTemp.delete(i, j+1);
> break;
> case -1 :
>
> for (int j2 = 0; j2 < rawTemp.length(); j2++) {
> temp.add("" + rawTemp.charAt(j2));
> }
>
> rawTemp = rawTemp.delete(0, rawTemp.length());
> break;
> default :
>
> for (int j2 = 0; j2 < i; j2++) {
> temp.add("" + rawTemp.charAt(j2));
> }
> rawTemp = rawTemp.delete(0, i);
> break;
> }
>
>
>
> rawTemp.trimToSize();
>
> }
> return temp;
>
> }
>
>
>
>
>
> }
>
>
>
>
>
>
> 2011/5/6 이홍일 <[email protected]>
>
>> You can get source code on scoreboard.
>> That is not difficult problem.
>> You can get solution if you think little more.
>>
>> 2011/5/6 Matty <[email protected]>
>>
>>> Does anybody have a solution code for this problem written in Java?
>>> I'm stuck...
>>>
>>> Thanks in advance,
>>>
>>> Matt
>>>
>>> --
>>> You received this message because you are subscribed to the Google Groups
>>> "google-codejam" group.
>>> To post to this group, send email to [email protected].
>>> To unsubscribe from this group, send email to
>>> [email protected].
>>> For more options, visit this group at
>>> http://groups.google.com/group/google-code?hl=en.
>>>
>>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "google-codejam" group.
>> To post to this group, send email to [email protected].
>> To unsubscribe from this group, send email to
>> [email protected].
>> For more options, visit this group at
>> http://groups.google.com/group/google-code?hl=en.
>>
>
> --
> You received this message because you are subscribed to the Google Groups
> "google-codejam" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected].
> For more options, visit this group at
> http://groups.google.com/group/google-code?hl=en.
>
--
You received this message because you are subscribed to the Google Groups
"google-codejam" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/google-code?hl=en.