This is the Clemson ACM Repo. We are the local chapter of the Association for Computing Machinery at Clemson University in Clemson, South Carolina. We do cool computing stuff for cool computing people!
This repository contains resources developed to aid with doing cool stuff in Computer Science. The main projects are as follows:
- the Hackpack is a concise and extensive cheatsheet/guide designed to be used during ACM style programming comptetions. If you already know your data structures and algorithms, go here.
- The Hackpack++ is an extensive guide that includes all of the great info from the hackpack, but also includes a bit more detail so that you could use it as a learning tool for the different techniques.
In addition to the Hackpack, we put on a series of educational seminars throughout the year. They cover neat topics and tools in CS. We currently have presentations for the following:
- Linux is Scary - a basic introduction to linux for new folks
- Git Thee to a Version Control System - A introduction to version control and git
- Vim - An advanced seminar on how to get more out of vim
Depending on what you are doing you will need different tools:
git- for tracking changesg++- all code samples are in C++98 with C++11 listed as notedpdflatex- The Hackpack body is written in LaTeXmake- Make is to automate compilation and testing of the documents
git- for tracking changespandoc- convert markdown files to reveal.jsFirefoxorChrome- any modern web browser really. See reveal.js for more documentation
For all projects and improvements:
- Clone the repo
- Choose an issue from the issue tracker
- Checkout a new branch with the topic as the name
- Push the branch to the repo
- When the branch is complete, create a pull request in Bitbucket
- When the pull request is reviewed and approved, the code will be merged by one of the admins into master.
If you have any questions related to the issues in the tracker, comment on the issues and CC one of the admins.
All examples assume a topic called foo and a sample problem bar:
-
All file names should be lowercase with
-(hyphens) separating the words in a file. For example,ten-commandments.texinstead ofTenCommandments.tex -
All sample contest problems should be in a subdirectory called
problemsand in a further subdirectory based on the problem name. For example if the topicfoohas a problembarthe path to the code sample could befoo/problems/bar/bar.cpp. -
In the rare circumstance that your finished product is one
texfile, place it ingeneralinstead -
See how the
setmaterial is laid out for reference. It is instructures/set -
foothe name of the branch wherefoois being worked on -
foo.texthe hackpack documentation on the algorithm -
foo.cppreference code for the foo data structure in C++ if applicable -
bar.insample input for foo.cpp if applicable -
bar.outsample output for foo.cpp if applicable -
bar.exeuntracked compiled binary DO NOT ADD THIS. It makes it easier to spot in the.gitignore. -
bar.pya version offoo.cppin python if applicable. Alternate versions of algorithms in languages other than C++ should be written after the C++ code is written -
bar.examplefiles such as.vimrcthat do not have an extension normally -
bar-test.cppAn automated unit test written in cpp -
bar-test.inData for the automated unit test -
bar-test.outExpected output for the automated unit test
For each item in the Hackpack, please include the following in clearly delineated subsections:
- Name and Brief Description of the topic
- Data structures should have a "Reference" section with a code sample of only commonly used functions
- A list of possible uses and applications
- 2-3 possible contest problems; preferably of varying difficulty
- Sample code that answers one of the contest problems
- Please use the
\acmlistingfor code listings. A caption and label should be specified. If applicable, line ranges should be specified to limit the amount of text displayed. - It would be preferred if each set of sample code had some lessons learned to point out some key elements of the implementation
- References using BibTeX where applicable
- Should be "compiled" properly by pdflatex and the make
- Each sentence must be on a separate line.
Code Must meet the following standards:
- Code should be indented with tabs and not exceed 80 characters per line.
- Code must compile under contest conditions:
g++ -g -O2 -std=gnu++0x -static $* - Code must be delivered with the passing unit tests.
- Code must be commented with detailed explanations and asymptotic notation where applicable
- Code must be concise but not at the expense of readability
- Source code must solve a problem: It should solve a specific problem and include all relevant IO and supporting code. The algorithm should not be in a vacuum.
All code must have tests that meet the following requirements
- Test at least the upper and lower boundaries of the allowed inputs.
- Testing files should be postfixed by
-testprior to the extension. For example,foo.cpptest files should be calledfoo-test.cppandfoo-test.inrespectively - Tests should be runnable by calling
make testin the directory of the source
If you have a good presentation let us know. We will use reveal.js and markdown for presentations. If you have an improvement, follow the procedure above.
Contact acm@cs.clemson.edu with any questions