package algorithms ;
import java.io.IOException ;
import java.util.Arrays ;
import java.util.List ;
/**
* @author m1st
*/
public class AlgorithmsStarter {
/**
* Problem 1.
* Given array a of N elements transpose it as follows
* {a[N-1], a[N-2],…, a[0]}
* Memory consumption (not including the space for array) – O(1)
* Running time – O(N)
*/
Object [ ] array
= { 1 ,
5 ,
2 ,
9 ,
0 } ; AlgorithmsSolver.transposeArray ( array) ;
AlgorithmsSolver.
println ( "Problem 1: " + Arrays .
asList ( array
) ) ;
/**
* Problem 2.
* Given sorted arrays a of n elements and b of m elements produce sorted array c of n+m elements that consists of all elements from arrays a and b.
* Program reads and stores the arrays in files a, b and c one number per line.
* Memory consumption – O(1)
* Running time – O(n+m)
*/
AlgorithmsSolver.produceSortedArray ( "C:\\ a.txt" , "C:\\ b.txt" , "C:\\ c.txt" ) ;
AlgorithmsSolver.println ( "Problem 2: see stored file 'c.txt'" ) ;
/**
* Problem 3.
* The following function double rand() returns a random floating point number evenly distributed over interval [0;1).
* Write an expression (or a function) that returns
*/
//a) a random integer N so that 7 <= N <= 23
AlgorithmsSolver.println ( "Problem 3 (a random integer N so that 7 <= N <= 23): " + AlgorithmsSolver.randInt ( 7 , 23 ) ) ;
//b) a random number N from set {3.5, 4.5, 5.5, …, 13.5}
List
< Float
> numbers
= Arrays .
asList ( 3.5f, 4.5f, 5.5f, 6.5f, 7.5f, 8.5f, 9.5f, 10.5f, 11.5f, 12.5f, 13.5f
) ; AlgorithmsSolver.println ( "Problem 3 (a random number N from set {3.5, 4.5, 5.5, …, 13.5}): " + AlgorithmsSolver.randFloat ( numbers) ) ;
//c) a random string from set { “asdf”, “a”, “jkl;”, “cc”, “zaxd” }
List
< String
> strings
= Arrays .
asList ( "asdf" ,
"a" ,
"jkl;" ,
"cc" ,
"zaxd" ) ; AlgorithmsSolver.println ( "Problem 3 (a random string from set { “asdf”, “a”, “jkl;”, “cc”, “zaxd” }): " + AlgorithmsSolver.randString ( strings) ) ;
/**
* Problem 4.
* Given array a of N (N > 1) elements and integer K (0 < K <= N-1) transpose the array as follows
* {a[K], …, a[N-1], a[0],…, a[K-1]}
* Memory consumption (not including the space for array) – O(1)
* Running time – O(N).
*
* What data structure(s) can be used to implement the mini-framework for this problem effectively?
*/
// todo code & answer here
AlgorithmsSolver.println ( "Problem 4: todo" ) ;
/**
* Problem 5.
* Write a program that prints all permutations (in any order) of sequence {1, 2, 3, …, N}.
* Hint: there are N! permutations.
*/
// Could be initialized with N elements and it generates all permutations
AlgorithmsSolver.println ( "Problem 5 (start):" ) ;
AlgorithmsSolver.permutations ( 1 , 2 , 3 ) ;
AlgorithmsSolver.println ( "Problem 5 (end)." ) ;
/**
* Problem 6.
* Write a program that takes a string as a parameter and prints out all substrings of the following format: <tag>some text</tag>.
* Here ‘tag’ can be any alphanumeric character string.
* The input string is assumed not to have nested tags.
* Hint: regular expressions should be used for string matching
*
* What updates will be required in your program in case of nested tags?
*/
// Enchantments: Takes a file as a parameter. The case of nested tags resolved also.
AlgorithmsSolver.println ( "Problem 6 (start):" ) ;
AlgorithmsSolver.allSubstringsOfNestedTags ( "C:\\ nested_tags.html" ) ; // However, I think that regular expressions are not the best answer here. I'd use XPath to find elements I'm interested in.
AlgorithmsSolver.println ( "Problem 6 (end)." ) ;
}
}
cGFja2FnZSBhbGdvcml0aG1zOwoKaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CmltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwppbXBvcnQgamF2YS51dGlsLkxpc3Q7CgovKioKICogQGF1dGhvciBtMXN0CiAqLwpwdWJsaWMgY2xhc3MgQWxnb3JpdGhtc1N0YXJ0ZXIgewogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIElPRXhjZXB0aW9uIHsKLyoqCiAqIFByb2JsZW0gMS4KICogR2l2ZW4gYXJyYXkgYSBvZiBOIGVsZW1lbnRzIHRyYW5zcG9zZSBpdCBhcyBmb2xsb3dzCiAqIHthW04tMV0sIGFbTi0yXSzigKYsIGFbMF19CiAqIE1lbW9yeSBjb25zdW1wdGlvbiAobm90IGluY2x1ZGluZyB0aGUgc3BhY2UgZm9yIGFycmF5KSDigJMgTygxKQogKiBSdW5uaW5nIHRpbWUg4oCTIE8oTikKICovCiAgICAgICAgT2JqZWN0W10gYXJyYXkgPSB7MSwgNSwgMiwgOSwgMH07CiAgICAgICAgQWxnb3JpdGhtc1NvbHZlci50cmFuc3Bvc2VBcnJheShhcnJheSk7CiAgICAgICAgQWxnb3JpdGhtc1NvbHZlci5wcmludGxuKCJQcm9ibGVtIDE6ICIgKyBBcnJheXMuYXNMaXN0KGFycmF5KSk7CgovKioKICogUHJvYmxlbSAyLgogKiBHaXZlbiBzb3J0ZWQgYXJyYXlzIGEgb2YgbiBlbGVtZW50cyBhbmQgYiBvZiBtIGVsZW1lbnRzIHByb2R1Y2Ugc29ydGVkIGFycmF5IGMgb2YgbittIGVsZW1lbnRzIHRoYXQgY29uc2lzdHMgb2YgYWxsIGVsZW1lbnRzIGZyb20gYXJyYXlzIGEgYW5kIGIuCiAqIFByb2dyYW0gcmVhZHMgYW5kIHN0b3JlcyB0aGUgYXJyYXlzIGluIGZpbGVzIGEsIGIgYW5kIGMgb25lIG51bWJlciBwZXIgbGluZS4KICogTWVtb3J5IGNvbnN1bXB0aW9uIOKAkyBPKDEpCiAqIFJ1bm5pbmcgdGltZSDigJMgTyhuK20pCiAqLwogICAgICAgIEFsZ29yaXRobXNTb2x2ZXIucHJvZHVjZVNvcnRlZEFycmF5KCJDOlxcYS50eHQiLCAiQzpcXGIudHh0IiwgIkM6XFxjLnR4dCIpOwogICAgICAgIEFsZ29yaXRobXNTb2x2ZXIucHJpbnRsbigiUHJvYmxlbSAyOiBzZWUgc3RvcmVkIGZpbGUgJ2MudHh0JyIpOwoKLyoqCiAqIFByb2JsZW0gMy4KICogVGhlIGZvbGxvd2luZyBmdW5jdGlvbiBkb3VibGUgcmFuZCgpIHJldHVybnMgYSByYW5kb20gZmxvYXRpbmcgcG9pbnQgbnVtYmVyIGV2ZW5seSBkaXN0cmlidXRlZCBvdmVyIGludGVydmFsIFswOzEpLgogKiBXcml0ZSBhbiBleHByZXNzaW9uIChvciBhIGZ1bmN0aW9uKSB0aGF0IHJldHVybnMKICovCiAgICAgICAgLy9hKSAgICBhIHJhbmRvbSBpbnRlZ2VyIE4gc28gdGhhdCA3IDw9IE4gPD0gMjMKICAgICAgICBBbGdvcml0aG1zU29sdmVyLnByaW50bG4oIlByb2JsZW0gMyAoYSByYW5kb20gaW50ZWdlciBOIHNvIHRoYXQgNyA8PSBOIDw9IDIzKTogIiArIEFsZ29yaXRobXNTb2x2ZXIucmFuZEludCg3LCAyMykpOwoKICAgICAgICAvL2IpICAgIGEgcmFuZG9tIG51bWJlciBOIGZyb20gc2V0IHszLjUsIDQuNSwgNS41LCDigKYsIDEzLjV9CiAgICAgICAgTGlzdDxGbG9hdD4gbnVtYmVycyA9IEFycmF5cy5hc0xpc3QoMy41ZiwgNC41ZiwgNS41ZiwgNi41ZiwgNy41ZiwgOC41ZiwgOS41ZiwgMTAuNWYsIDExLjVmLCAxMi41ZiwgMTMuNWYpOwogICAgICAgIEFsZ29yaXRobXNTb2x2ZXIucHJpbnRsbigiUHJvYmxlbSAzIChhIHJhbmRvbSBudW1iZXIgTiBmcm9tIHNldCB7My41LCA0LjUsIDUuNSwg4oCmLCAxMy41fSk6ICIgKyBBbGdvcml0aG1zU29sdmVyLnJhbmRGbG9hdChudW1iZXJzKSk7CgogICAgICAgIC8vYykgICAgYSByYW5kb20gc3RyaW5nIGZyb20gc2V0IHsg4oCcYXNkZuKAnSwg4oCcYeKAnSwg4oCcamtsO+KAnSwg4oCcY2PigJ0sIOKAnHpheGTigJ0gfQogICAgICAgIExpc3Q8U3RyaW5nPiBzdHJpbmdzID0gQXJyYXlzLmFzTGlzdCgiYXNkZiIsICJhIiwgImprbDsiLCAiY2MiLCAiemF4ZCIpOwogICAgICAgIEFsZ29yaXRobXNTb2x2ZXIucHJpbnRsbigiUHJvYmxlbSAzIChhIHJhbmRvbSBzdHJpbmcgZnJvbSBzZXQgeyDigJxhc2Rm4oCdLCDigJxh4oCdLCDigJxqa2w74oCdLCDigJxjY+KAnSwg4oCcemF4ZOKAnSB9KTogIiArIEFsZ29yaXRobXNTb2x2ZXIucmFuZFN0cmluZyhzdHJpbmdzKSk7CgovKioKICogUHJvYmxlbSA0LgogKiBHaXZlbiBhcnJheSBhIG9mIE4gKE4gPiAxKSBlbGVtZW50cyBhbmQgaW50ZWdlciBLICgwIDwgSyA8PSBOLTEpIHRyYW5zcG9zZSB0aGUgYXJyYXkgYXMgZm9sbG93cwogKiB7YVtLXSwg4oCmLCBhW04tMV0sIGFbMF0s4oCmLCBhW0stMV19CiAqIE1lbW9yeSBjb25zdW1wdGlvbiAobm90IGluY2x1ZGluZyB0aGUgc3BhY2UgZm9yIGFycmF5KSDigJMgTygxKQogKiBSdW5uaW5nIHRpbWUg4oCTIE8oTikuCiAqCiAqIFdoYXQgZGF0YSBzdHJ1Y3R1cmUocykgY2FuIGJlIHVzZWQgdG8gaW1wbGVtZW50IHRoZSBtaW5pLWZyYW1ld29yayBmb3IgdGhpcyBwcm9ibGVtIGVmZmVjdGl2ZWx5PwogKi8KICAgICAgICAvLyB0b2RvIGNvZGUgJiBhbnN3ZXIgaGVyZQogICAgICAgIEFsZ29yaXRobXNTb2x2ZXIucHJpbnRsbigiUHJvYmxlbSA0OiB0b2RvIik7CgovKioKICogUHJvYmxlbSA1LgogKiBXcml0ZSBhIHByb2dyYW0gdGhhdCBwcmludHMgYWxsIHBlcm11dGF0aW9ucyAoaW4gYW55IG9yZGVyKSBvZiBzZXF1ZW5jZSB7MSwgMiwgMywg4oCmLCBOfS4KICogSGludDogdGhlcmUgYXJlIE4hIHBlcm11dGF0aW9ucy4KICovCiAgICAgICAgLy8gQ291bGQgYmUgaW5pdGlhbGl6ZWQgd2l0aCBOIGVsZW1lbnRzIGFuZCBpdCBnZW5lcmF0ZXMgYWxsIHBlcm11dGF0aW9ucwogICAgICAgIEFsZ29yaXRobXNTb2x2ZXIucHJpbnRsbigiUHJvYmxlbSA1IChzdGFydCk6Iik7CiAgICAgICAgQWxnb3JpdGhtc1NvbHZlci5wZXJtdXRhdGlvbnMoMSwgMiwgMyk7CiAgICAgICAgQWxnb3JpdGhtc1NvbHZlci5wcmludGxuKCJQcm9ibGVtIDUgKGVuZCkuIik7CgovKioKICogUHJvYmxlbSA2LgogKiBXcml0ZSBhIHByb2dyYW0gdGhhdCB0YWtlcyBhIHN0cmluZyBhcyBhIHBhcmFtZXRlciBhbmQgcHJpbnRzIG91dCBhbGwgc3Vic3RyaW5ncyBvZiB0aGUgZm9sbG93aW5nIGZvcm1hdDogPHRhZz5zb21lIHRleHQ8L3RhZz4uCiAqIEhlcmUg4oCYdGFn4oCZIGNhbiBiZSBhbnkgYWxwaGFudW1lcmljIGNoYXJhY3RlciBzdHJpbmcuCiAqIFRoZSBpbnB1dCBzdHJpbmcgaXMgYXNzdW1lZCBub3QgdG8gaGF2ZSBuZXN0ZWQgdGFncy4KICogSGludDogcmVndWxhciBleHByZXNzaW9ucyBzaG91bGQgYmUgdXNlZCBmb3Igc3RyaW5nIG1hdGNoaW5nCiAqCiAqIFdoYXQgdXBkYXRlcyB3aWxsIGJlIHJlcXVpcmVkIGluIHlvdXIgcHJvZ3JhbSBpbiBjYXNlIG9mIG5lc3RlZCB0YWdzPwogKi8KICAgICAgICAvLyBFbmNoYW50bWVudHM6IFRha2VzIGEgZmlsZSBhcyBhIHBhcmFtZXRlci4gVGhlIGNhc2Ugb2YgbmVzdGVkIHRhZ3MgcmVzb2x2ZWQgYWxzby4KICAgICAgICBBbGdvcml0aG1zU29sdmVyLnByaW50bG4oIlByb2JsZW0gNiAoc3RhcnQpOiIpOwogICAgICAgIEFsZ29yaXRobXNTb2x2ZXIuYWxsU3Vic3RyaW5nc09mTmVzdGVkVGFncygiQzpcXG5lc3RlZF90YWdzLmh0bWwiKTsgLy8gSG93ZXZlciwgSSB0aGluayB0aGF0IHJlZ3VsYXIgZXhwcmVzc2lvbnMgYXJlIG5vdCB0aGUgYmVzdCBhbnN3ZXIgaGVyZS4gSSdkIHVzZSBYUGF0aCB0byBmaW5kIGVsZW1lbnRzIEknbSBpbnRlcmVzdGVkIGluLgogICAgICAgIEFsZ29yaXRobXNTb2x2ZXIucHJpbnRsbigiUHJvYmxlbSA2IChlbmQpLiIpOwogICAgfQp9Cg==