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 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 | //Alex Silva copyright (c) 2013 import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.Scanner; public class puzzle2Driver { //DRIVER FIELDS private static Scanner scn; private static ArrayList<Song> arrInput; private static String[] tokens; private static String strIn; private static int nSongs; private static int nSelects; //MAIN METHOD public static void main(String[] args) throws IOException { scn = null; try { scn = new Scanner(System.in); //accept first line of input //split and parse entries; add to values to variables if(scn.hasNext()){ strIn = scn.nextLine(); tokens = strIn.split(" "); nSongs = parseToInt(tokens[0].trim()); nSelects = parseToInt(tokens[1].trim()); arrInput = new ArrayList<Song>(nSongs); } //accept and record first song info in input array if(scn.hasNext()){ strIn = scn.nextLine(); tokens = strIn.split(" "); //add first song to array arrInput.add((new Song(parseToInt(tokens[0].trim()), tokens[1].trim(), 0))); //set quality value to 1 arrInput.get(0).setnQuality(1.0); //if first song has 0 plays if(arrInput.get(0).getnPlayNum()==0){ arrInput.get(0).setnPlayNum(1); } } //if only one song is added if(nSongs==1){ System.out.println(arrInput.get(0).getSongName()); } //otherwise, proceed: else{ Song songIn; double tempQ; int i=1; while (scn.hasNext()) { strIn = scn.nextLine(); tokens = strIn.split(" "); //create and add song to array songIn = new Song(parseToInt(tokens[0].trim()), tokens[1].trim(), i+2); arrInput.add(songIn); //calculate quality using: //q(i) = song(i).plays / (song(0).plays / i ) tempQ = (double)arrInput.get(i).getnPlayNum() / ((double)arrInput.get(0).getnPlayNum() / (double)(i+1)); //set Quality value to current song arrInput.get(i).setnQuality(tempQ); i++; if(i==nSongs){ break; } } //sort array of songs by quality value Collections.sort(arrInput); //prints only the number of songs defined earlier for (i = 0; i < nSelects; i++) { System.out.println(arrInput.get(i).getSongName()); } } } catch(Exception e){ System.out.println("Exception caught"); System.out.println(e.getStackTrace()); } finally { if (scn != null) { scn.close(); } } } //helper method for parsing from String to integer private static int parseToInt(String strIn) { int nRes = -1; try{ nRes = Integer.parseInt(strIn.trim()); } catch(NumberFormatException nfe){ System.out.println("Error parsing to Integer"); } return nRes; } //PRIVATE SONG UTILITY CLASS private static class Song implements Comparable<Song> { //Song Fields private int nPlayNum; private String songName; private int nTrackNum; private double nQuality; //Song constructor public Song(int nPlayNum, String songName, int nTrackNum){ this.nPlayNum = nPlayNum; this.songName = songName; this.nTrackNum = nTrackNum; } @Override public int compareTo(Song o) { if(getnQuality() > o.getnQuality()){ return -1; } if(o.getnQuality() > getnQuality()){ return 1; } //if quality values are equal, put songs with lower track numbers first if(getnTrackNum() < o.getnTrackNum()){ return -1; } return 1; //note: no way to return 0, since songs can't have the same track number } //GETTERS SETTERS public int getnPlayNum() { return nPlayNum; } public void setnPlayNum(int nPlays) { nPlayNum = nPlays; } public String getSongName() { return songName; } public double getnQuality() { return nQuality; } public void setnQuality(double nQuality) { this.nQuality = nQuality; } public int getnTrackNum() { return nTrackNum; } } /* comment */ } |
Ly9BbGV4IFNpbHZhIGNvcHlyaWdodCAoYykgMjAxMyAKCmltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwppbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKaW1wb3J0IGphdmEudXRpbC5TY2FubmVyOwoKcHVibGljIGNsYXNzIHB1enpsZTJEcml2ZXIgewoKICAgIC8vRFJJVkVSIEZJRUxEUwoJcHJpdmF0ZSBzdGF0aWMgU2Nhbm5lciBzY247Cglwcml2YXRlIHN0YXRpYyBBcnJheUxpc3Q8U29uZz4gYXJySW5wdXQ7Cglwcml2YXRlIHN0YXRpYyBTdHJpbmdbXSB0b2tlbnM7Cglwcml2YXRlIHN0YXRpYyBTdHJpbmcgc3RySW47Cglwcml2YXRlIHN0YXRpYyBpbnQgblNvbmdzOwoJcHJpdmF0ZSBzdGF0aWMgaW50IG5TZWxlY3RzOwoJCgkvL01BSU4gTUVUSE9ECglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgSU9FeGNlcHRpb24gewoJCQoJCXNjbiA9IG51bGw7CgogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHNjbiA9IG5ldyBTY2FubmVyKFN5c3RlbS5pbik7CiAgICAgICAgICAgIAogICAgCQkvL2FjY2VwdCBmaXJzdCBsaW5lIG9mIGlucHV0CiAgICAgICAJCS8vc3BsaXQgYW5kIHBhcnNlIGVudHJpZXM7IGFkZCB0byB2YWx1ZXMgdG8gdmFyaWFibGVzCiAgICAgICAgICAgIGlmKHNjbi5oYXNOZXh0KCkpewogICAgICAgICAgICAJc3RySW4gPSBzY24ubmV4dExpbmUoKTsKICAgICAgICAJCXRva2VucyA9IHN0ckluLnNwbGl0KCIgIik7CiAgICAgICAgCQluU29uZ3MgPSBwYXJzZVRvSW50KHRva2Vuc1swXS50cmltKCkpOwogICAgICAgIAkJblNlbGVjdHMgPSBwYXJzZVRvSW50KHRva2Vuc1sxXS50cmltKCkpOyAKICAgICAgICAJCWFycklucHV0ID0gbmV3IEFycmF5TGlzdDxTb25nPihuU29uZ3MpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgCQkvL2FjY2VwdCBhbmQgcmVjb3JkIGZpcnN0IHNvbmcgaW5mbyBpbiBpbnB1dCBhcnJheQogICAgICAgICAgICBpZihzY24uaGFzTmV4dCgpKXsKCSAgICAgICAgICAgIHN0ckluID0gc2NuLm5leHRMaW5lKCk7CgkgICAgCQl0b2tlbnMgPSBzdHJJbi5zcGxpdCgiICIpOwoJICAgIAkJLy9hZGQgZmlyc3Qgc29uZyB0byBhcnJheQoJICAgIAkJYXJySW5wdXQuYWRkKChuZXcgU29uZyhwYXJzZVRvSW50KHRva2Vuc1swXS50cmltKCkpLCB0b2tlbnNbMV0udHJpbSgpLCAwKSkpOwoJICAgIAkJLy9zZXQgcXVhbGl0eSB2YWx1ZSB0byAxCgkgICAgCQlhcnJJbnB1dC5nZXQoMCkuc2V0blF1YWxpdHkoMS4wKTsKCSAgICAJCS8vaWYgZmlyc3Qgc29uZyBoYXMgMCBwbGF5cwoJICAgIAkJaWYoYXJySW5wdXQuZ2V0KDApLmdldG5QbGF5TnVtKCk9PTApewoJICAgIAkJCWFycklucHV0LmdldCgwKS5zZXRuUGxheU51bSgxKTsKICAgIAkJCX0KICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgLy9pZiBvbmx5IG9uZSBzb25nIGlzIGFkZGVkCiAgICAgICAgICAgIGlmKG5Tb25ncz09MSl7CiAgICAgICAgICAgIAlTeXN0ZW0ub3V0LnByaW50bG4oYXJySW5wdXQuZ2V0KDApLmdldFNvbmdOYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICAvL290aGVyd2lzZSwgcHJvY2VlZDoKICAgICAgICAgICAgZWxzZXsKICAgICAgICAgICAgCgkgICAgCQlTb25nIHNvbmdJbjsKCSAgICAJCWRvdWJsZSB0ZW1wUTsKCSAgICAJCWludCBpPTE7CgkgICAgICAgICAgICB3aGlsZSAoc2NuLmhhc05leHQoKSkgewoJICAgICAgICAgICAgCXN0ckluID0gc2NuLm5leHRMaW5lKCk7CgkgICAgCQkJdG9rZW5zID0gc3RySW4uc3BsaXQoIiAiKTsKCSAgICAJCQkvL2NyZWF0ZSBhbmQgYWRkIHNvbmcgdG8gYXJyYXkKCSAgICAJCQlzb25nSW4gPSBuZXcgU29uZyhwYXJzZVRvSW50KHRva2Vuc1swXS50cmltKCkpLCB0b2tlbnNbMV0udHJpbSgpLCBpKzIpOwoJICAgIAkJCWFycklucHV0LmFkZChzb25nSW4pOwoJICAgIAkJCS8vY2FsY3VsYXRlIHF1YWxpdHkgdXNpbmc6CgkgICAgCQkJLy9xKGkpID0gc29uZyhpKS5wbGF5cyAvIChzb25nKDApLnBsYXlzIC8gaSApCgkgICAgCQkJdGVtcFEgPSAoZG91YmxlKWFycklucHV0LmdldChpKS5nZXRuUGxheU51bSgpIC8gKChkb3VibGUpYXJySW5wdXQuZ2V0KDApLmdldG5QbGF5TnVtKCkgLyAoZG91YmxlKShpKzEpKTsKCSAgICAJCQkvL3NldCBRdWFsaXR5IHZhbHVlIHRvIGN1cnJlbnQgc29uZwoJICAgIAkJCWFycklucHV0LmdldChpKS5zZXRuUXVhbGl0eSh0ZW1wUSk7CgkgICAgCQkJaSsrOwoJICAgIAkJCWlmKGk9PW5Tb25ncyl7CgkgICAgCQkJCWJyZWFrOwoJICAgIAkJCX0KCSAgICAgICAgICAgIH0KCSAgICAgICAgICAgIAoJICAgIAkJLy9zb3J0IGFycmF5IG9mIHNvbmdzIGJ5IHF1YWxpdHkgdmFsdWUKCSAgICAJCUNvbGxlY3Rpb25zLnNvcnQoYXJySW5wdXQpOwoJICAgIAkJCgkgICAgCQkvL3ByaW50cyBvbmx5IHRoZSBudW1iZXIgb2Ygc29uZ3MgZGVmaW5lZCBlYXJsaWVyCgkgICAgCQlmb3IgKGkgPSAwOyBpIDwgblNlbGVjdHM7IGkrKykgewoJICAgIAkJCVN5c3RlbS5vdXQucHJpbnRsbihhcnJJbnB1dC5nZXQoaSkuZ2V0U29uZ05hbWUoKSk7CgkgICAgCQl9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgY2F0Y2goRXhjZXB0aW9uIGUpewogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4Y2VwdGlvbiBjYXVnaHQiKTsKICAgICAgICAJU3lzdGVtLm91dC5wcmludGxuKGUuZ2V0U3RhY2tUcmFjZSgpKTsKCiAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgaWYgKHNjbiAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICBzY24uY2xvc2UoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCgl9CgkKCS8vaGVscGVyIG1ldGhvZCBmb3IgcGFyc2luZyBmcm9tIFN0cmluZyB0byBpbnRlZ2VyCglwcml2YXRlIHN0YXRpYyBpbnQgcGFyc2VUb0ludChTdHJpbmcgc3RySW4pIHsKCQlpbnQgblJlcyA9IC0xOwoJCXRyeXsKCQkJblJlcyA9IEludGVnZXIucGFyc2VJbnQoc3RySW4udHJpbSgpKTsKCQl9CgkJY2F0Y2goTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSl7CgkJCVN5c3RlbS5vdXQucHJpbnRsbigiRXJyb3IgcGFyc2luZyB0byBJbnRlZ2VyIik7CgkJfQoJCXJldHVybiBuUmVzOwoJfQoJCgkvL1BSSVZBVEUgU09ORyBVVElMSVRZIENMQVNTCglwcml2YXRlIHN0YXRpYyBjbGFzcyBTb25nIGltcGxlbWVudHMgQ29tcGFyYWJsZTxTb25nPiB7CgkJCgkJLy9Tb25nIEZpZWxkcwoJCXByaXZhdGUgaW50IG5QbGF5TnVtOwoJCXByaXZhdGUgU3RyaW5nIHNvbmdOYW1lOwoJCXByaXZhdGUgaW50IG5UcmFja051bTsKCQlwcml2YXRlIGRvdWJsZSBuUXVhbGl0eTsKCQkKCQkvL1NvbmcgY29uc3RydWN0b3IgCgkJcHVibGljIFNvbmcoaW50IG5QbGF5TnVtLCBTdHJpbmcgc29uZ05hbWUsIGludCBuVHJhY2tOdW0pewoJCQl0aGlzLm5QbGF5TnVtID0gblBsYXlOdW07CgkJCXRoaXMuc29uZ05hbWUgPSBzb25nTmFtZTsKCQkJdGhpcy5uVHJhY2tOdW0gPSBuVHJhY2tOdW07CgkJfQoJCQoJCUBPdmVycmlkZQoJCXB1YmxpYyBpbnQgY29tcGFyZVRvKFNvbmcgbykgewogICAgICAgICAgICAKCQkJaWYoZ2V0blF1YWxpdHkoKSA+IG8uZ2V0blF1YWxpdHkoKSl7CgkJCQlyZXR1cm4gLTE7CgkJCX0KCQkJCgkJCWlmKG8uZ2V0blF1YWxpdHkoKSA+IGdldG5RdWFsaXR5KCkpewoJCQkJcmV0dXJuIDE7CgkJCX0KCQkJCgkJCS8vaWYgcXVhbGl0eSB2YWx1ZXMgYXJlIGVxdWFsLCBwdXQgc29uZ3Mgd2l0aCBsb3dlciB0cmFjayBudW1iZXJzIGZpcnN0IAoJCQlpZihnZXRuVHJhY2tOdW0oKSA8IG8uZ2V0blRyYWNrTnVtKCkpewoJCQkJcmV0dXJuIC0xOwoJCQl9CgkJCQoJCQlyZXR1cm4gMTsKCQkJCgkJCS8vbm90ZTogbm8gd2F5IHRvIHJldHVybiAwLCBzaW5jZSBzb25ncyBjYW4ndCBoYXZlIHRoZSBzYW1lIHRyYWNrIG51bWJlcgoJCQkKCQl9CgkJCgkJLy9HRVRURVJTIFNFVFRFUlMKCQlwdWJsaWMgaW50IGdldG5QbGF5TnVtKCkgewoJCQlyZXR1cm4gblBsYXlOdW07CgkJfQoJCQoJCXB1YmxpYyB2b2lkIHNldG5QbGF5TnVtKGludCBuUGxheXMpIHsKCQkJblBsYXlOdW0gPSBuUGxheXM7CgkJfQoJCQoJCXB1YmxpYyBTdHJpbmcgZ2V0U29uZ05hbWUoKSB7CgkJCXJldHVybiBzb25nTmFtZTsKCQl9CgkJCgkJcHVibGljIGRvdWJsZSBnZXRuUXVhbGl0eSgpIHsKCQkJcmV0dXJuIG5RdWFsaXR5OwoJCX0KCgkJcHVibGljIHZvaWQgc2V0blF1YWxpdHkoZG91YmxlIG5RdWFsaXR5KSB7CgkJCXRoaXMublF1YWxpdHkgPSBuUXVhbGl0eTsKCQl9CgoJCXB1YmxpYyBpbnQgZ2V0blRyYWNrTnVtKCkgewoJCQlyZXR1cm4gblRyYWNrTnVtOwoJCX0KCX0KCS8qIGNvbW1lbnQgKi8gCgoKfQo=
Main.java:8: error: class puzzle2Driver is public, should be declared in a file named puzzle2Driver.java
public class puzzle2Driver {
^
1 error
-
result: Compilation error (maybe you wish to see an example for Java)
15 3 197812 re_hash 78906 5_4 189518 tomorrow_comes_today 39453 new_genious 210492 clint_eastwood 26302 man_research 22544 punk 19727 sound_check 17535 double_bass 18782 rock_the_house 198189 19_2000 13151 latin_simone 12139 starshine 11272 slow_country 10521 m1_a1


