Skip to content

Commit 1a0e8f6

Browse files
committed
add redis add delete stub
1 parent 9524759 commit 1a0e8f6

File tree

1 file changed

+92
-3
lines changed

1 file changed

+92
-3
lines changed

Solution.java

Lines changed: 92 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,68 @@
99
* Platform : Codeforces/Codejam
1010
* Ref : N/A
1111
*/
12+
class Entry {
13+
String value;
14+
long expiredAt;
15+
16+
public Entry(String value, long expiredAt){
17+
this.value = value;
18+
this.expiredAt = expiredAt;
19+
}
20+
21+
@Override
22+
public String toString(){
23+
return "Entry{ value:" + value + ", expiredAt: " + expiredAt + "}";
24+
}
25+
}
26+
27+
class InMemoryDB {
28+
29+
HashMap<String, HashMap<String, Entry>> cache = new HashMap<>();
30+
31+
InMemoryDB(){
32+
}
33+
34+
void addEntry(long timestamp, String key, String field, String value, long ttl){
35+
long expiredAt = timestamp + ttl;
36+
var entries = new HashMap<String, Entry>();
37+
if (cache.containsKey(key)) {
38+
entries = (HashMap<String, Entry>)cache.get(key);
39+
}
40+
entries.put(field, new Entry(value, expiredAt));
41+
cache.put(key, entries);
42+
}
43+
44+
void evictIfExpired(long timestamp, String key, String field) {
45+
var entries = (HashMap<String, Entry>)cache.get(key);
46+
Entry entry = (Entry) entries.get(field);
47+
if (entry.expiredAt <= timestamp){
48+
entries.remove(field);
49+
cache.put(key, entries);
50+
}
51+
}
52+
53+
boolean deleteEntry(long timestamp, String key, String field){
54+
if (cache.containsKey(key)) {
55+
var entries = (HashMap<String, Entry>)cache.get(key);
56+
evictIfExpired(timestamp, key, field);
57+
if(entries.containsKey(field)){
58+
entries.remove(field);
59+
cache.put(key, entries);
60+
return true;
61+
}else {
62+
return false;
63+
}
64+
}
65+
return false;
66+
}
67+
68+
List<Entry> scan(long timestamp, String key){
69+
// similarly O(N) iterate and evictIfExpired and return values
70+
return null;
71+
}
72+
73+
}
1274

1375
public class Solution{
1476

@@ -34,15 +96,42 @@ public Solution(boolean stdIO)throws FileNotFoundException{
3496
in = new FastReader(inputStream);
3597
out = new PrintWriter(outputStream);
3698
}
37-
3899
void run()throws Exception {
39100
int tests = i();
40101
test:
41102
for(int testId = 1; testId <= tests; testId++){
42103
// Codejam / Hackercup formatting
43104
// out.write("Case #" + testId + ": ");
44-
long ans = 0;
45-
out.write(ans + "\n");
105+
Random rng = new Random();
106+
InMemoryDB database = new InMemoryDB();
107+
108+
for(int operations = 1; operations <= 1000; operations++){
109+
long timestamp = operations * operations;
110+
switch(rng.nextInt(4)){
111+
// add
112+
case 0: {
113+
long ttl = rng.nextLong((int)1e9);
114+
String key = "key_" + rng.nextInt(100);// random key
115+
String field = "field_" + rng.nextInt(100);// random field
116+
String value = "value_" + rng.nextInt(100);// random field
117+
118+
database.addEntry(timestamp, key, field, value, ttl);
119+
break;
120+
}
121+
// delete
122+
case 1: {
123+
String key = "key_" + rng.nextInt(100);// random key
124+
String field = "field_" + rng.nextInt(100);// random field
125+
database.deleteEntry(timestamp, key, field);
126+
break;
127+
}
128+
// TODO: Scan disctionary
129+
default: {
130+
break;
131+
}
132+
}
133+
}
134+
// out.write(ans + "\n");
46135
}
47136
}
48137

0 commit comments

Comments
 (0)