CSE305 Assignment 1

Write a program in each of the following languages: (60 points - 30 per language)

  1. Python or Java
  2. SML

Your program will consist of a function that accepts two strings. Each string is the name of a file. The first is the name of an input file and the second is the name of an output file. Name the function hw1. (Note that your program can also make use of other helper functions. Just make sure function hw1 takes as arguments the input file and output file that are specified in the program)

A pangram is a sentence that contains all the letters of the English alphabet at least once. For example, the quick brown fox jumps over the lazy dog is a pangram. The program you are to write must read in an input file (input.txt - a plain text file which contains 5 sentences), line by line and check if the line read is a pangram or not. If the sentence read is a pangram, it writes true to the output file. If it is not, it writes false to the output file. For example, if input.txt contains:

we promptly judged antique ivory buckles for the next prize. how quickly daft jumping zebras vex. pottery is an art. crazy fredrick bought many very exquisite opal jewels.

  1. dumbledore is a funny name for a dog.

Then your program must output the following to the output.txt:

true true false true false

NOTE: Output is case sensitive – please use all lower case in the output file. The example provided here is formatted for human readability. Please look at the sample input output files to see the precise formatting.

You can assume that input.txt contains exactly 5 sentences and all the letters are in lower case. Please use the sample test cases provided to test your code on your local machine and verify you solution by using autolab. For the purpose of this assignment you do not need to do any specific error checking on the files. Your program can assume that the files exist (for the input file) or can be created or overwritten (for the output file).

Put your answers for Python, Java and SML in files named, respectively:

  1. py
  2. java
  3. sml

Python Specific Instructions

Your code should be written in hw1.py. Create a hw1 function that takes in two strings as arguments: the first for the name of input file and second for the name of output file. Skeleton Code:

def hw1(input, output):

# read input file line by line

# for every line in input file, check if it contains all alphabets

# store result (true/false) in a variable

# write result to output file

Do not include this in your submission but use this line to test your code

hw1(‘input.txt’, ‘output.txt’)

Python Resources

Refer to these for additional help: Section 7.2 – Reading and Writing Files – https://docs.python.org/2/tutorial/inputoutput.html

For loops, Lists in Python – http://learnpythonthehardway.org/book/ex32.html Additional resources for Python can be found on Piazza.

SML Specific Instructions

Your code should be written in hw1.sml. Create a hw1 function that takes in two strings as arguments: the first for the name of input file and second for the name of output file. Skeleton Code:

fun hw1(inFile : string, outFile : string) =

(* Open input and output file streams, read first input line from the input file stream *)

(* To read subsequent lines, use of a helper function – see resources on SML File Stream *)

(* Convert the string type of the lines read and alphabet string to list type*)

(* Perform alphabet checks on these lists *)

(* Write the result, true or false, to the output file *)

(* Remember to flush the outStream, refer resources on TestIO. *)

Do not include this in your submission but use this line to test your code val = hw1(”input.txt”, ”output.txt”)

SML Resources

You can use TextIO.openIn and TextIO.openOut for the file stream input and output. To read each line from a file, you can use the TextIO.inputLine function. This function returns a string option type. (Note that ”string” type and ”string option” type are different). The options it returns are either NONE or SOME(c) depending on content of the line read. If a line is read successfully, it returns SOME(c) and if there is no more data to read, it returns NONE. So to keep reading the file line by line, your code has to keep reading as long as there is SOME(c). To see how it works, refer to the last example in the following link: http://www.cs.cornell.edu/courses/cs312/2006fa/recitations/rec09.html (See the last Example using TextIO)

Resources on Strings and Chars: http://sml-family.org/Basis/string.html#SIG:STRING.char:TY

Java Specific Instructions

Your code should be written in hw1.java. Create a hw1 class with a static method hw1 that takes in two strings as arguments: the first for the name of input file and second for the name of output file.

You should have another class with a main method to test your code in a separate file. This file should not be submitted – it is for your testing purposes only. Skeleton Code:

Define hw1.java as: public class hw1 {
public static void hw1(inFile, outFile){
//function defintion here
}
}
Define Tester.java as: (this is a separate file) public class Tester{ public static void main(String[] args){
..
String input = ”input.txt”;
String output = ”output.txt”;
/* You can also read input and output as command line arguments*/ hw1.hw1(input, output);
}
}

If you are using Eclipse or any other IDE make sure you do not create any packages since this will not work with autolab. To test your code on Timberlake, you can use the following commands:

javac Tester.java (This should create a class file in the directory called Tester.class.)