From 2039626f2d10844e10a976c0a799afcf6618c83c Mon Sep 17 00:00:00 2001 From: maryamSoli Date: Mon, 1 May 2023 11:03:16 -0700 Subject: [PATCH 1/4] second one done --- .../executionHistory/executionHistory.bin | Bin 40151 -> 40151 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 17 bytes .gradle/7.5.1/fileHashes/fileHashes.bin | Bin 20347 -> 20997 bytes .gradle/7.5.1/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../7.5.1/fileHashes/resourceHashesCache.bin | Bin 19143 -> 19347 bytes .../buildOutputCleanup.lock | Bin 17 -> 17 bytes .gradle/buildOutputCleanup/outputFiles.bin | Bin 19325 -> 19667 bytes .gradle/file-system.probe | Bin 8 -> 8 bytes .idea/.gitignore | 3 + src/main/java/sbu/cs/FindMultiples.java | 77 +++++++++++++++++- 10 files changed, 77 insertions(+), 3 deletions(-) create mode 100644 .idea/.gitignore diff --git a/.gradle/7.5.1/executionHistory/executionHistory.bin b/.gradle/7.5.1/executionHistory/executionHistory.bin index 69d19e678295c51070fc0de456fde229675ecc60..1b0fc5dcba8f1f21e60009984d952ace56492209 100644 GIT binary patch delta 741 zcmcb_WAhS5Uz9vH)9?cuvdWuLtYuZbsjooS&n?c?8LgHj~?eR7E$r z#g)H4k)L#X#q!OkRNki^y>jC4-^mApr0Nw8gnQ*%D7oBP`&s?mO7C6AKr#k**cqp} zW#*;$mgbaX7UZNBs~GAf=Oh*vGYIq@zTDt#E+z5f%}pE2K%IukFRlPJ++;=9UfQ0z&dWRPL9hJ zm#CV#&9TLBt7w+#-gE1wc{9xcORf-^+?%T;;mkT?{#W04o$H7ETpl-E*!dmon?szF zkLN1am$-^sl`=hgy!}<~Hu;TPoxXu3KX5Zn2`x_b%qvMPDk?1~DTcX%!L6@j;U&}U z{?8gzBwob${QxU(Vq<0yc(6V%_?dmdiINZbCgti|f`CH(A$)~1B5%IiX5&}LxcNyW zQ0UaXGas4u`u_TTo?H2L$|gp!$@(dpoR5$qM|<+T;3Up#C?bBT@{=<|3^^a5h)xLA mms9dpGfR+o;~;X?Al)|Xz?mhGfMjN2WMJSD+U#G@p#uQRq(Q9! delta 493 zcmcbP61_-d3Y~Z_vrzgxc zDA?2AFWxZTV)J|7NlYv)hI$s06C*_-j5z_>Ow6w)Gln=%&d<^m`r%pkLHuek*OA4_ zuiDEN?qHlXc|xxUn_gC8St3l8=w!BR5drU(QY-oEJAYdl++5sGsNN2AB1-@=RWnEi?IQlE>tLKu$q{r82zghxbgLD0p|enGRbXi6>LvqVSX)}`?FSBBTmbH0hcFm>~f-v%pL7^h4wEEbkx5a>VbZhc~{N!GUG zwug%D*m7I~D>%YFxjt81!X(Q~?#``idiS^NT@*4|VB!_9vEMOcI?pitnAw= zy0m_mP0A_5kALSj{rPP$g?;jiT;=-Li_<=w+0psyf|$CtnQNrgAF$*bPR1#r#i^co zC8^bu4=u~;2(6x^*9ZO%XV@Usg=ypr{r$V4mGV`g)8-(osHGa8!;F0 diff --git a/.gradle/7.5.1/executionHistory/executionHistory.lock b/.gradle/7.5.1/executionHistory/executionHistory.lock index 74fe4a6b80696503d62916808af46f500f2ac555..37d34b45bdace3cf14d51c766a038c9df8108b70 100644 GIT binary patch literal 17 UcmZSHvO;ss+Bc$`86dzN06F>u-2eap literal 17 UcmZSHvO;ss+Bc$`86dzM06FRe%>V!Z diff --git a/.gradle/7.5.1/fileHashes/fileHashes.bin b/.gradle/7.5.1/fileHashes/fileHashes.bin index b8a9c92457490aa40570b309b1d9be60e390413e..27e271f24a933a03c48bdd80dedc8c578746b35b 100644 GIT binary patch delta 957 zcmex8kFj+L;|3E6Mx)855*`AR<2d?VoW++jfI*<`&1QFo3SORkRPu*_*H!nA>%taIh6-{|-YR9G5qo;A z$5iHxb`U}TYM851wod0;^i#(VA|4<(`KeTfK*7G4Ye~nMHb51xo$M+dpi!x_=x4k8 zK6$9hQkV%<7Rgx^eBW}R;x{MvN^3E(9Neh*Lwut_gz#oZ4=eV`N4@#$6B1;(wtZU{ z?)&FRezIB^0|R6G4fiMuh(5MmKw8fjNN57FA_xnVJlt9H#bmns+62XNv*Q~?z&c8e zVt|rB!2JtIpy}AV!#Hqd%Z@j58E%_P3YafKwxgbbf$K1)mQ8MP<*!fVC*5ALeDf)l z_o-klMOv;PD;OA|bx7WYQ-6p?rs}od98AJ=~2TUyt zZhajKFPU!lf7YNP@gfG8Ho*a00nxz>bSAn-lzi395+vR@h+H*Dw+%aR2I>(Nhz>?@ G_yPcnEej<8 delta 71 zcmZo&!uWe0;|3E6M%Brt5+0MMN=Qt;3#4r&4JNlrCQSYd#HCUnCf7e*T2hS7$D#R06;e*T2hS7$9Ia06+}|s{jB1 diff --git a/.gradle/7.5.1/fileHashes/resourceHashesCache.bin b/.gradle/7.5.1/fileHashes/resourceHashesCache.bin index ae668839f972f4e829b3c70c93d5e82e8485fcc4..0022e4dc57505661098d7de71c50dd34df7ed559 100644 GIT binary patch delta 366 zcmX>;m2vWP#tkMCjFOX0B@6^Q=Tvx>C46sV00VFT$*~d&8tW3~&$@N<_%x^>_kSqZ z*ZSMY@@VCLh`86w$)yqs0+&i+pB#2UIgXm^Qk2a=yW1y@g5DS8^K)|X!K}r!@DouWW z%wxIIdk82fhpJ-9@zC?L4lj`Y|L99cG3S?Om?}D*LL@4y%9s3o8JOn5_>mb?g~N;e zM&6HDtDLQV_=a#T-w=qYgzZ3T@Tfo#tkMCjKY&mB@8ClN=QsT3dCO}R!rV1Ibm|Flob=>&5epb#5Wo^h;4TC HXk!8ZumAu6 diff --git a/.gradle/buildOutputCleanup/outputFiles.bin b/.gradle/buildOutputCleanup/outputFiles.bin index 813a0936e87362d6c73158731fc885e41206d560..55371bd0a5edefbc8a58177cab0d7b1d42197d28 100644 GIT binary patch delta 481 zcmex6jq&nK#tkMCjE<8{B|bRJwKWxOsA|q=LYST#u`Br|pNT^pT%DRWguYkv-S& z^?_8V!t0ao0u|mWpBLNDf8_+!s`SZUB`pMA3MKFAaP=043U*Icl~NG+)@7?EJ)_kC zs=a@*tyF*j^VN=1)v*rup(>pxw@Nkg@6k!X%J41xTdvotpu57~OrLq%v{zCx+154sY#UJ7u4R#1`cJ#1e1^^*rCgK19 diff --git a/.gradle/file-system.probe b/.gradle/file-system.probe index d6b69584d203a1d6e61bfe469dafbbbf6dfdcab1..459411e163015b3563978356faca7368f9a815bc 100644 GIT binary patch literal 8 PcmZQzU~Iopq_GbG2z3Iv literal 8 PcmZQzU~J#dbJ8CG2eJZe diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/src/main/java/sbu/cs/FindMultiples.java b/src/main/java/sbu/cs/FindMultiples.java index 5467003..cf28470 100644 --- a/src/main/java/sbu/cs/FindMultiples.java +++ b/src/main/java/sbu/cs/FindMultiples.java @@ -19,6 +19,11 @@ Use the tests provided in the test folder to ensure your code works correctly. */ +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Scanner; +import java.util.Set; + public class FindMultiples { @@ -29,14 +34,80 @@ public class FindMultiples The getSum function should be called at the start of your program. New Threads and tasks should be created here. */ - public int getSum(int n) { - int sum = 0; - // TODO + public ArrayList dividends = new ArrayList(); + public static int n; + int temp = 0; + public synchronized void increment(){ + dividends.add(temp); + } + Thread divisibleBy3 = new Thread(new Runnable() { + @Override + public void run() { + for (int i=1 ; i<=n ; i++){ + if (i%3==0){ + temp=i; + increment(); + } + } + } + }); + + Thread divisibleBy5 = new Thread(new Runnable() { + @Override + public void run() { + for (int i=1 ; i<=n ; i++){ + if (i%5==0){ + temp=i; + increment(); + } + } + } + }); + + Thread divisibleBy7 = new Thread(new Runnable() { + @Override + public void run() { + for (int i=1 ; i<=n ; i++){ + if (i%7==0){ + temp=i; + increment(); + } + } + } + }); + + + public int getSum() { + int sum = 0; + Set set = new HashSet<>(dividends); + dividends.clear(); + dividends.addAll(set); + + for (int i : dividends){ + sum+=i; + } return sum; } public static void main(String[] args) { + Scanner input = new Scanner(System.in); + n = input.nextInt(); + FindMultiples obj = new FindMultiples(); + obj.divisibleBy3.start(); + obj.divisibleBy5.start(); + obj.divisibleBy7.start(); + try { + obj.divisibleBy3.join(); + obj.divisibleBy5.join(); + obj.divisibleBy7.join(); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + + System.out.println(obj.getSum()); + } + } From c03d3c0db8068789f94b044a87042c935e050f78 Mon Sep 17 00:00:00 2001 From: maryamSoli Date: Mon, 1 May 2023 14:55:36 -0700 Subject: [PATCH 2/4] problem with 2 testcases in the second one --- .../executionHistory/executionHistory.bin | Bin 40151 -> 57568 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 17 bytes .gradle/7.5.1/fileHashes/fileHashes.bin | Bin 20997 -> 21997 bytes .gradle/7.5.1/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../7.5.1/fileHashes/resourceHashesCache.bin | Bin 19347 -> 21115 bytes .../buildOutputCleanup.lock | Bin 17 -> 17 bytes .gradle/buildOutputCleanup/outputFiles.bin | Bin 19667 -> 19865 bytes .gradle/file-system.probe | Bin 8 -> 8 bytes .../classes/sbu.cs.FindMultiplesTest.html | 96 +++++++++++++++ .../test/TEST-sbu.cs.FindMultiplesTest.xml | 7 ++ src/main/java/sbu/cs/FindMultiples.java | 114 +++++++++++++----- src/main/java/sbu/cs/UseInterrupts.java | 23 ++++ 12 files changed, 212 insertions(+), 28 deletions(-) create mode 100644 build/reports/tests/test/classes/sbu.cs.FindMultiplesTest.html create mode 100644 build/test-results/test/TEST-sbu.cs.FindMultiplesTest.xml diff --git a/.gradle/7.5.1/executionHistory/executionHistory.bin b/.gradle/7.5.1/executionHistory/executionHistory.bin index 1b0fc5dcba8f1f21e60009984d952ace56492209..57d5319ce9ac637f8197338f10f0ebc5d6d3ed8b 100644 GIT binary patch delta 5814 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 Gw0{A-EOtBq delta 839 zcmaEGkoo#frU@c~j0|Al3nV%20tv;9fhWW#Cg@C-l+a=dy*t@e!i}l1eRHqG7GDiD z1_mzH*@Z=^rCG&kCaG14Wf^(K#wkhpW+ujEg%!CFqZooF8~ElQZX0&s%o0c_F|zaOgTTMIl6NAJj!!Jq9~|1*@y@exUell728$pHjDb<(mI;g}#-Ec7Dy=dx*)%UDKiRmlDixBjn93Q}Ob+xCojm^t$KT4V%$xttxWxu-2eap diff --git a/.gradle/7.5.1/fileHashes/fileHashes.bin b/.gradle/7.5.1/fileHashes/fileHashes.bin index 27e271f24a933a03c48bdd80dedc8c578746b35b..c45ae878bd503557b212612095f173362102d1c0 100644 GIT binary patch delta 1786 zcmZo&!uWPI;|3E6Mz_hP5*`8*1?DC8KQmKg0E1w|$)yqs8q+jRH;R-V7l8-?)#M7_Qn0Rop*$uG9ko-%H61 zQ8DjQp{D+yTq+%)5&Og5O>tp8G;~5cVJ0Lk+*?02F^FB z7Mwg;Rwj^NwqrY6@7l=_u~5~?sWM$mYzsFk{t(}2P$9V4(W8nzh@;iCZT1Hy?f!s} z=j`e3i3|*k?KfQmrb9Fdv;%29V<4dk#Gsf~6o}+hlzQ?}eUjq^GaJhe4M&iU8{e`{ z10{ig_swM905z7IBGYXqn+NFC0~z)Z8Rk1c8qKW3Uas|3^AFiXt&sZ1pSmjwY`e&G zZ>SD2OdU1F#x+r=D?%)frgGeP)o!y zEs^w`TJnV3YHt7MuJ=N$2@}9NTm#J@Iyl`ib%>u`R^iG$S#0}~Sv&unPP2pB5myh< z!UBp!G{4W#%nIuHnwcW$b^l7v3)c*&mRN`m)(@CEWY{)5JiaYYNFkzX`jXUz|DZY& zAUasuFm-s<@Ao_=YNj(g!L6Qs#))m)p+2#MXkoI()bie{Hs$2sf0HYBsPs;=P(BOu z2}B2L9j1;u25vlUdv9mnwUU1La2MAqs19&u1^S=05>v~yoGXEsUI>{z-2a&2^U^~f zL0WFOM|nUjVFzV?w9sn$+8Dmq;ArW!=KSWi#9m;IN7lj0j;Z5cV83Qez0kiDzZDOo z&lw4VgX_kRuL~iTZ~_Ay-4c zpXcD&)yEUs<^ppW&?2BDL>ogmrbT{}coVv#Yf6Ly1#WsQE(VsbU>!FhI@qsF4);-G zx$)zN80AOHJ$`_D`5PEPxAF#94{i))|(L<^G@niimrJ<}rmt+)Be)rt45Uh<>m7gUEK dZXFA1GH+hpd&TM}OH7Z%SPpJf{2{*4AVPSvqem5cP|3rcHD64oyRS`9EH^v8 zL4<*UvHeD=Q49kZaQ^~Qdd5IP6NnW-SYYoC^f!#&CZCGHU}o&9ol;Ja6!JxrlG#Bk`S2Rb-+%@?|%`)A4ZrwC*Ca4Y>hz>3dOdZawGvR@o|>sWZnbi4nv1{H}HF@8`T6%ZZF jKxd+duadH_npuLx8wZiA2I;n82hKo!q5{#v2o7KXenXs* diff --git a/.gradle/7.5.1/fileHashes/fileHashes.lock b/.gradle/7.5.1/fileHashes/fileHashes.lock index 798e9c3462f2b61ec9f18e22ed992fa3241d8dda..933e18c8adaa1dcc25d4858af3edf5cdca7f4d56 100644 GIT binary patch literal 17 VcmZRceqf>e*T2hS7{GvO3jjbW1;zjX literal 17 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 delta 99 zcmeypgmLn8#tkMCjFOXmB|Ij7m5`WhD=9H~D-b^gVqGbZ$$O;?Ci_ZDOsWbtnHv>?Jp diff --git a/.gradle/file-system.probe b/.gradle/file-system.probe index 459411e163015b3563978356faca7368f9a815bc..f2c3764d7908e8c6eae180ddffad69bed5bab718 100644 GIT binary patch literal 8 PcmZQzU~IqfbLT<;3l9Ud literal 8 PcmZQzU~Iopq_GbG2z3Iv diff --git a/build/reports/tests/test/classes/sbu.cs.FindMultiplesTest.html b/build/reports/tests/test/classes/sbu.cs.FindMultiplesTest.html new file mode 100644 index 0000000..cc6f3a2 --- /dev/null +++ b/build/reports/tests/test/classes/sbu.cs.FindMultiplesTest.html @@ -0,0 +1,96 @@ + + + + + +Test results - FindMultiplesTest + + + + + +
+

FindMultiplesTest

+ +
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
0.008s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+ +
+

Tests

+ + + + + + + + + + + + + +
TestDurationResult
testSix()0.008spassed
+
+
+ +
+ + diff --git a/build/test-results/test/TEST-sbu.cs.FindMultiplesTest.xml b/build/test-results/test/TEST-sbu.cs.FindMultiplesTest.xml new file mode 100644 index 0000000..5966376 --- /dev/null +++ b/build/test-results/test/TEST-sbu.cs.FindMultiplesTest.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/main/java/sbu/cs/FindMultiples.java b/src/main/java/sbu/cs/FindMultiples.java index cf28470..eef7682 100644 --- a/src/main/java/sbu/cs/FindMultiples.java +++ b/src/main/java/sbu/cs/FindMultiples.java @@ -19,10 +19,63 @@ Use the tests provided in the test folder to ensure your code works correctly. */ -import java.util.ArrayList; -import java.util.HashSet; -import java.util.Scanner; -import java.util.Set; +import java.util.*; + +class divisibleBy3 extends Thread{ + + + private long n; + public divisibleBy3(long n){ + this.n=n; + } + @Override + public void run() { + for (long i=1 ; i<=n ; i++){ + if (i%3==0L){ + FindMultiples.temp=i; + FindMultiples.increment(); + } + } + } + +} + +class divisibleBy5 extends Thread{ + + + private long n; + public divisibleBy5(long n){ + this.n=n; + } + @Override + public void run() { + for (long i=1 ; i<=n ; i++){ + if (i%5==0L){ + FindMultiples.temp=i; + FindMultiples.increment(); + } + } + } + +} + +class divisibleBy7 extends Thread{ + + private long n; + public divisibleBy7(long n){ + this.n=n; + } + @Override + public void run() { + for (long i=1 ; i<=n ; i++){ + if (i%7==0L){ + FindMultiples.temp=i; + FindMultiples.increment(); + } + } + } + +} public class FindMultiples { @@ -35,10 +88,13 @@ public class FindMultiples New Threads and tasks should be created here. */ - public ArrayList dividends = new ArrayList(); - public static int n; - int temp = 0; - public synchronized void increment(){ + public static synchronized void increment(){ + FindMultiples.dividends.add(FindMultiples.temp); + } + public static ArrayList dividends = new ArrayList(); + //public static int n; + public static long temp = 0; + /*public synchronized void increment(){ dividends.add(temp); } Thread divisibleBy3 = new Thread(new Runnable() { @@ -76,38 +132,40 @@ public void run() { } } }); +*/ - - public int getSum() { - int sum = 0; - Set set = new HashSet<>(dividends); + public Long getSum(long n) { + Long sum = 0L; + divisibleBy3 obj3 = new divisibleBy3(n); + divisibleBy5 obj5 = new divisibleBy5(n); + divisibleBy7 obj7 = new divisibleBy7(n); + obj3.start(); + obj5.start(); + obj7.start(); + try { + obj3.join(); + obj5.join(); + obj7.join(); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + Set set = new HashSet<>(dividends); dividends.clear(); dividends.addAll(set); - for (int i : dividends){ + for (long i : dividends){ sum+=i; } return sum; } public static void main(String[] args) { - Scanner input = new Scanner(System.in); - n = input.nextInt(); - FindMultiples obj = new FindMultiples(); - obj.divisibleBy3.start(); - obj.divisibleBy5.start(); - obj.divisibleBy7.start(); - try { - obj.divisibleBy3.join(); - obj.divisibleBy5.join(); - obj.divisibleBy7.join(); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - - System.out.println(obj.getSum()); + FindMultiples obj = new FindMultiples(); + Scanner input = new Scanner(System.in); + int n = input.nextInt(); + obj.getSum(n); } } diff --git a/src/main/java/sbu/cs/UseInterrupts.java b/src/main/java/sbu/cs/UseInterrupts.java index a7b7d49..cd2d3de 100644 --- a/src/main/java/sbu/cs/UseInterrupts.java +++ b/src/main/java/sbu/cs/UseInterrupts.java @@ -10,6 +10,9 @@ Take note that you are NOT ALLOWED to change or delete any existing line of code. */ +import java.util.Timer; +import java.util.TimerTask; + public class UseInterrupts { /* @@ -82,10 +85,30 @@ public static void main(String[] args) { SleepThread sleepThread = new SleepThread(5); sleepThread.start(); + Timer sleepTimer = new Timer(); + sleepTimer.schedule(new TimerTask() { + @Override + public void run() { + if (sleepThread.isAlive()) { + sleepThread.interrupt(); + System.out.println(sleepThread.getName() + " has been interrupted"); + } + } + }, 3000); // TODO Check if this thread runs for longer than 3 seconds (if it does, interrupt it) LoopThread loopThread = new LoopThread(3); loopThread.start(); + Timer loopTimer = new Timer(); + loopTimer.schedule(new TimerTask() { + @Override + public void run() { + if (loopThread.isAlive()) { + loopThread.interrupt(); + System.out.println(loopThread.getName() + " has been interrupted"); + } + } + }, 3000); // TODO Check if this thread runs for longer than 3 seconds (if it does, interrupt it) From ce88f598a86e72a743f61fa2dbafab364fc16af0 Mon Sep 17 00:00:00 2001 From: maryamSoli Date: Fri, 5 May 2023 11:56:41 -0700 Subject: [PATCH 3/4] done --- .../executionHistory/executionHistory.bin | Bin 57568 -> 57568 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 17 bytes .gradle/7.5.1/fileHashes/fileHashes.bin | Bin 21997 -> 22247 bytes .gradle/7.5.1/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../7.5.1/fileHashes/resourceHashesCache.bin | Bin 21115 -> 22339 bytes .../buildOutputCleanup.lock | Bin 17 -> 17 bytes .gradle/file-system.probe | Bin 8 -> 8 bytes .../classes/sbu.cs.FindMultiplesTest.html | 96 ----------- .../test/TEST-sbu.cs.FindMultiplesTest.xml | 7 - src/main/java/sbu/cs/CPU_Simulator.java | 49 +++++- src/main/java/sbu/cs/FindMultiples.java | 156 +++++------------- src/main/java/sbu/cs/UseInterrupts.java | 63 +++---- 12 files changed, 98 insertions(+), 273 deletions(-) delete mode 100644 build/reports/tests/test/classes/sbu.cs.FindMultiplesTest.html delete mode 100644 build/test-results/test/TEST-sbu.cs.FindMultiplesTest.xml diff --git a/.gradle/7.5.1/executionHistory/executionHistory.bin b/.gradle/7.5.1/executionHistory/executionHistory.bin index 57d5319ce9ac637f8197338f10f0ebc5d6d3ed8b..ee4faa85ffecad8b241385d1bc09806a3d0f8f9c 100644 GIT binary patch delta 1616 zcmbtTYfuwc7|kY&sDN$)DPS>xCL)MHm0}eEQR@R?Qf#fX4%U#wK*UJ02~U-^ZGzCo z%y4-Wp`bMu!>bt=S{-U6%0nnmLBzHOMhb|cQXXTgHFOhcJ3y!Y=+5kqd++%k=R4=? z(^LBN6z$swnG5sz30y%^!V!){#6g8Tu{cJ`kC%v~Xp)Td@?!y?FdgnD5L0O7-g_de zI!FEMqcz8>8*}GFr$I+69b6UeL()`Zg_G(b_LI-t1|KmmF@VRRJ4oMYnT35?SpBAF zDlz5}H2@4(VnCc623Ra>iFII=u48#=`(C$=KZM$*2X*G%%Q5==Y5`>dF>0GiLI#rJ zgNJFJM|Z35*%z(lM|GP4Mk z$8y%?HS(?K0ZID$0SXDJZR!+MUu0DqY<~|}IvFrZTy1WdtoZWT-YS}L>~=x3eHrlP zx#KoRjzKOvB2u>aKihHA!E!lNQ|#w*$4sFNh9MGZq5VQf(EFaR-H=wO9B~;{!P;uW z^LJMa4_2HV#|z^o5EkuRe)1viVQzv@$`?h;L_FS+Btg8NfG^{rzSHuoo|fk_nQZk7 zIH6n%;>0$@kO!c_zfbM$j_YQOiGsid_5J?Z*Av*nqU{=yf&+bpM#;RnsP~L1F{J?O zi~u^Ej=aUK`0&8fv^Cb>X4WM3Hy}Z(UYrA-n0_OlxY?g z_e(YDMqmvX^k8k{g+S};msR?20k!dJ6A~cVsIzP8f7|@%7otRc?&2SDM&n z8L13}htNS$?R-$KcgEfIPGl$#lpS}#4_?ohkIe2dvsr-TW-APv<0ac$Mn>u@Zawe@ z3C*r#qdP`KL)M7BoFu{UUIb^343W?TD} zn$0#h4s}e-o68GR27>HFI*91mHrLCTvIN9+?ZM0MpcISWO#THe7<0=MZrWA|`dq?C ziA_YkqGCiOWQn6iVu02|{X$M6uWUOR{1R0N5lixM{_|~A=kS7t{EswP`YjwT1*7#& z;G6n+p!_Ze;Kvbxq-M!_86$kx&5fYch?h#3!&DNK-^pK58Y`Z|AQ`g;{+=R zL}bEPqR&I`9IOlOdM6z-w^Rue^|xdM=g3p;ce_pwC<0TRdrcd_n7U?!i8Xh&bY4Jm zwzdIxe`bK8-W70OzIq%``&hv>Me6Yvb5uy!^V;h0;!L|xEOJfBk6n3sGpa3=DAQC1 zBLUP2lAX!ijy6D?2M6*ey<$A#+u^jtq2+dG)(X+FFD31qh2UjP6A delta 1825 zcmaEGkomzu<_)fCDsi*(vyzf>a?0|I(o!>$vU772Gt4uKEAmZC5*Z*sYO;avzRl|C zh0Fp0tM&vbMQo`w`Ta4El67&w^uCRd`jhg>YjC% zPW+vGAV{iS;Xt@ozJ-#@t+k)k&#m;{wI3v7aEG07a!O`dW^raxPO4L-v0idcVsSBp z07tDK|NDCT&r9u2PWy2%`{IU0Q&0Uh*u{dP+7zaG&$I}C>uo-Ab>e-im;7k?wGmTw zpi`weO!*TB z?s_l8nlND-So!hI0l8d^X8OK|UZ(msx879R_i&Q-7e!_U0q;PSR8vL{?b2Vj%{N9V z{R9eKO5J)iGe1VWcxANq*Yw4ani4)VJ zPr2Qjwe<9qx*aE{ubwy&n1-%%1LLF5Z{Djey_vJmTuA=a@_y%XpioV6w8NgdjI<*w zKC&>&2N?l{o_{xr-;|&sxFl`!sx7xpOqo0(uVeDr6!Xdc`N5NWr_2!H=E+|d*Bkag z|M9KOAG+Hz)&XtUY&o@8TU~)+c4ls3QeshgdU;ufX<2@5d1_j=QE5h!akdF00vTs8 zteG6>B|3TOLG{g=2W6NT7fx<`Ajw{mT3iyGS+P0pa2JOVx*r(lgYzNZnLtd}<)2Yx z6q-Eo%pcskxF+vCn=XK!NhiN8Qk;CeHAw(Hk51klC4(nbp=VNTaS6@QxKkB+-o<7J z!BmBwqp=x+nySz<_2!S~zpx3S$2d4eO-`ufnmn~abh5{FH|%L{a>DYm$qAQ3H_yFM z%*=ZJ&)!piC!cLlak~B=$TDDL>?uku29_$tdP$ji3<9O^ZXM9;&gVIJcJ=Xuwz=&P zRpGz{=jOahx>M%x4C{jQ`X|i_w^&wBet2Aba>GoK$;$Tm;K{pfeRFPdLFg*{*?e^5lEjh%j)VGz=zJ zJy3OR-nUIcqIgMQiH6Vi^O^gYZ-D*V#|(6gKfzW6aq&i!WJX0?P9xjm|ovt z4iOKNpX@4OA<*mVcxPg?!JrSw$` zp@M;vMdfxeu}f}L{2{*3Kyb68hX;F*pGU85)L(fn%}4*DuI{hNU|?Wue{`cq7@~*U z0!Zr_0|`waRs>-I^N9OjTJ(BMxLz*d2I+YC;cEj>5(v1wCg1jV3F5Kay6>X$ z>I>oOHm7}rJME#yUWO=Q`Us@ajD1>J=J--brzU90Bk}phsYy^B*C0AL{!K0nSfOyh zf9q7ez*X1e?sYYv5YjXS+x_*$UWg)2p~;qkD-=8;s-3NWd2~pyD>EKgZl(Y==_W)G zlg?zupm+5TwL)J&bpid1?ij}nCs)|<9NyV~@ci?7mAn;Td!8O&3DLp27E?z?W;&DB zZLhA?eRH@IPI>u4b*zEtV19?DWAZ$2aTZ`W|CqefTMx*X`G4|jZz%;SN!AM64O&b7 zwlXkjobPaiIDO`Sh$#&7CNK057XLHv#$B6JsnL9Y&(B+UG6!tatLRUY?~N1Hy$}Otu|N#qTrzoYh>KU8dDTlTFY|xP1b>IEK5}CTR1qsg5r;aO zTY+(|w%~VNX7SnZgvsSouT1ZJ3bpgYWbaTtmU|iDUX#~{N==>~Dgxs806Ab$KagmB zgMTE;zUqatf^Ey~r@THm1!@}`)HYDup(TaM5tCRNDhyuhPiwfsawVV>sso~dfyo3@ zN8O?9wVrzW7?!H8N)$Dl228BLH2L+#9-zuxAZFTxsb!t@zKN4sI9OlJH2>Phz4jQK}@y|$6Xf~A!q>hje-TcE>%mN;Zc162Y6iy@HE0{|t@Jq-W= delta 696 zcmaF9mhtUs#tkMCf^IGG_J=AYYN{E)z;piOQVEOAM5}H7)2*Ls! zt)^|WKQL+c2ZTIlPj^oQ>A2|{FdZlf1On}oZ~MChZE}k%e|;i9>Gq1{n@_2{PX#Ly znQjA7!~~+zj8!-g?v-z$*TB z?s_l8nlJ%kcc2+W5vTiP%fJ;1Ui&?diJIxmPH?MdpK)T_cBmptsNL3+8H3){-}v!$ zAyiiekVbQi$i#_h(Wl(*&02bTO5Ki=K)(SUe*T2hS7{Guv8~{Jl1#AES literal 17 VcmZRceqf>e*T2hS7{GvO3jjbW1;zjX diff --git a/.gradle/7.5.1/fileHashes/resourceHashesCache.bin b/.gradle/7.5.1/fileHashes/resourceHashesCache.bin index 3bce4b68298b12ef91c57aa29472f41f028e6396..7f968d37d8e7a8ba1fc5672b640293c64b66e648 100644 GIT binary patch delta 1829 zcmeypgz@k?#tkMCjD?d;B@8s0_g|V7X593V0SrRl|A&I+hud4<>6?~9#KVjy$4X=f z%v#mi??3tVL5N_8@Z`M`8~JA)KeF@U#=Q`+VE4(Xl8XFHYa|YCah(rUH+yoeq=LrQ z_+8@jB|dG02!^`CY}#ho_3-B(o2gI(R3}fB%n&%*`TD@+CYHre6T&Bdm9)?}Cu-5Z z?BXYwo62D(oPXnXJ#odRWe~+-GbgJ`SqNM!-^%cF$+je@b*m?bN(J)s|FG_Q$M_6t z>fXt7r7|>LJz4zf_H5k}h+xoun5nOSm)w!#`@H}n9(;cCUnvERcb>0z-`h10>WSb? znBtF&uMB2gI&}nUNcCh<=>UyyStqk|H)wx_2!@5i6o2oNeo(IMHya`z+BrE^+LGT= za^2ihXQn~b{-4|{ZK1*7@S8_UH0UB!VLHqJ#(18IQ&-09fhrc9yjR*nfTfY=k*4xB zPKaR0{mE~oGXw;VzE*v&tS}QQSUK5O#*&}&`hv9S$!DQrrju)dVjuiPQLc~Iq zC$E(W5Kv7v%(=2=&uxfc*zU<+WfU~jkL>L3H_BK85e!#^xk>NY9af#E4W}XE!QGR2 zWg7%+AOBr9uXza%RB-L&R@n>zcg3{J!Yd5CA%dZdlb^~eXn1)t9zB-fH31?RG#6&9 zch??A71m@ns0qxI|H_^a$kgKJ5pS$>f+~JEd9R#>M!s)rV&Ha56Nq5gU6={^cTY&D zoG`D3n(%S*TR8=R!oB%j1+jcE|DK)9DqqCJwQ{545Alr#1-zRbJ*>Fuje%MufmjfP z1s)aL=@Mf7rEItM;PUSUE5(6=a;PfK2X9@KD4S+)+bPlGxmN__7c>>u{S?cx2-nA`S?^CYOK(-L{F||+tQDI!R9%=VE;=#qkl(iQ#4a}n&mga8P|`#T zC5y!jM#b|v^5Uz0xz|)FsUTEL{_pK0(7h`5M0?Fz55+RS)7NZLjV2ohnHa6r4~^Y= z`GfVbjFq*!Pfq7R=z+zbqVE^Et&7~BO- - - - - -Test results - FindMultiplesTest - - - - - -
-

FindMultiplesTest

- -
- - - - - -
-
- - - - - - - -
-
-
1
-

tests

-
-
-
-
0
-

failures

-
-
-
-
0
-

ignored

-
-
-
-
0.008s
-

duration

-
-
-
-
-
-
100%
-

successful

-
-
-
-
- -
-

Tests

- - - - - - - - - - - - - -
TestDurationResult
testSix()0.008spassed
-
-
- -
- - diff --git a/build/test-results/test/TEST-sbu.cs.FindMultiplesTest.xml b/build/test-results/test/TEST-sbu.cs.FindMultiplesTest.xml deleted file mode 100644 index 5966376..0000000 --- a/build/test-results/test/TEST-sbu.cs.FindMultiplesTest.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/src/main/java/sbu/cs/CPU_Simulator.java b/src/main/java/sbu/cs/CPU_Simulator.java index 6be88c3..1c4eee8 100644 --- a/src/main/java/sbu/cs/CPU_Simulator.java +++ b/src/main/java/sbu/cs/CPU_Simulator.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Scanner; /* For this exercise, you must simulate a CPU with a single core. @@ -17,22 +18,26 @@ Use the tests provided in the test folder to ensure your code works correctly. */ -public class CPU_Simulator -{ +public class CPU_Simulator { public static class Task implements Runnable { long processingTime; String ID; + public Task(String ID, long processingTime) { - // TODO + this.ID = ID; + this.processingTime = processingTime; } - /* - Simulate running a task by utilizing the sleep method for the duration of - the task's processingTime. The processing time is given in milliseconds. - */ + /* + Simulate running a task by utilizing the sleep method for the duration of + the task's processingTime. The processing time is given in milliseconds. + */ @Override public void run() { - // TODO + try { + Thread.sleep(processingTime); + } catch (InterruptedException e) { + } } } @@ -44,11 +49,37 @@ Here the CPU selects the next shortest task to run (also known as the public ArrayList startSimulation(ArrayList tasks) { ArrayList executedTasks = new ArrayList<>(); - // TODO + while (tasks.size()!=0) { + Task shortest = tasks.get(0); + for (Task i : tasks) { + if (i.processingTime < shortest.processingTime) { + shortest = i; + } + } + tasks.remove(shortest); + Thread thread = new Thread(shortest); + thread.start(); + try { + thread.join(); + executedTasks.add(shortest.ID); + } catch (InterruptedException e) { + } + } return executedTasks; } public static void main(String[] args) { + + ArrayList tasks = new ArrayList<>(); + CPU_Simulator cpu = new CPU_Simulator(); + tasks.add(new Task("1", 200)); + tasks.add(new Task("2", 1236)); + tasks.add(new Task("3", 2)); + + ArrayList executedTasks = cpu.startSimulation(tasks); + for (String i : executedTasks) { + System.out.println(i); + } } } diff --git a/src/main/java/sbu/cs/FindMultiples.java b/src/main/java/sbu/cs/FindMultiples.java index eef7682..c51523f 100644 --- a/src/main/java/sbu/cs/FindMultiples.java +++ b/src/main/java/sbu/cs/FindMultiples.java @@ -18,68 +18,36 @@ Use the tests provided in the test folder to ensure your code works correctly. */ - import java.util.*; +public class FindMultiples +{ -class divisibleBy3 extends Thread{ - - - private long n; - public divisibleBy3(long n){ - this.n=n; - } - @Override - public void run() { - for (long i=1 ; i<=n ; i++){ - if (i%3==0L){ - FindMultiples.temp=i; - FindMultiples.increment(); - } - } + public static ArrayList dividends = new ArrayList<>(); + //public static int temp = 0; + public static synchronized void increment(int temp){ + dividends.add(temp); } + public static class thread implements Runnable{ -} - -class divisibleBy5 extends Thread{ + public int divisor; + public int n; - - private long n; - public divisibleBy5(long n){ - this.n=n; - } - @Override - public void run() { - for (long i=1 ; i<=n ; i++){ - if (i%5==0L){ - FindMultiples.temp=i; - FindMultiples.increment(); - } + public thread(int n , int divisor){ + this.n=n; + this.divisor=divisor; } - } - -} -class divisibleBy7 extends Thread{ + @Override + public void run() { - private long n; - public divisibleBy7(long n){ - this.n=n; - } - @Override - public void run() { - for (long i=1 ; i<=n ; i++){ - if (i%7==0L){ - FindMultiples.temp=i; - FindMultiples.increment(); + for (int i=1 ; i<=n ; i++){ + if (i%divisor==0){ + //temp=i; + increment(i); + } } } } - -} - -public class FindMultiples -{ - // TODO create the required multithreading class/classes using your preferred method. @@ -87,76 +55,30 @@ public class FindMultiples The getSum function should be called at the start of your program. New Threads and tasks should be created here. */ - - public static synchronized void increment(){ - FindMultiples.dividends.add(FindMultiples.temp); - } - public static ArrayList dividends = new ArrayList(); - //public static int n; - public static long temp = 0; - /*public synchronized void increment(){ - dividends.add(temp); - } - Thread divisibleBy3 = new Thread(new Runnable() { - @Override - public void run() { - for (int i=1 ; i<=n ; i++){ - if (i%3==0){ - temp=i; - increment(); - } - } - } - }); - - Thread divisibleBy5 = new Thread(new Runnable() { - @Override - public void run() { - for (int i=1 ; i<=n ; i++){ - if (i%5==0){ - temp=i; - increment(); - } - } - } - }); - - Thread divisibleBy7 = new Thread(new Runnable() { - @Override - public void run() { - for (int i=1 ; i<=n ; i++){ - if (i%7==0){ - temp=i; - increment(); - } - } - } - }); -*/ - - - public Long getSum(long n) { - Long sum = 0L; - divisibleBy3 obj3 = new divisibleBy3(n); - divisibleBy5 obj5 = new divisibleBy5(n); - divisibleBy7 obj7 = new divisibleBy7(n); - obj3.start(); - obj5.start(); - obj7.start(); + public int getSum(int n) { + int sum = 0; + Thread t1 = new Thread(new thread(n,3)); + Thread t2 = new Thread(new thread(n,7)); + Thread t3 = new Thread(new thread(n,5)); + // TODO + t1.start(); + t2.start(); + t3.start(); try { - obj3.join(); - obj5.join(); - obj7.join(); - } catch (InterruptedException e) { - throw new RuntimeException(e); + t1.join(); + t2.join(); + t3.join(); + }catch (InterruptedException e){ + } - Set set = new HashSet<>(dividends); + Set set = new HashSet<>(dividends); dividends.clear(); dividends.addAll(set); - for (long i : dividends){ + for (int i : dividends){ sum+=i; } + return sum; } @@ -164,8 +86,6 @@ public static void main(String[] args) { FindMultiples obj = new FindMultiples(); Scanner input = new Scanner(System.in); - int n = input.nextInt(); - obj.getSum(n); + System.out.println(obj.getSum(input.nextInt())); } - -} +} \ No newline at end of file diff --git a/src/main/java/sbu/cs/UseInterrupts.java b/src/main/java/sbu/cs/UseInterrupts.java index cd2d3de..0f192be 100644 --- a/src/main/java/sbu/cs/UseInterrupts.java +++ b/src/main/java/sbu/cs/UseInterrupts.java @@ -10,18 +10,15 @@ Take note that you are NOT ALLOWED to change or delete any existing line of code. */ -import java.util.Timer; -import java.util.TimerTask; - public class UseInterrupts { -/* - TODO - Analyse the following class and add new code where necessary. - If an object from this type of thread is Interrupted, it must print this: - "{ThreadName} has been interrupted" - And then terminate itself. - */ + /* + TODO + Analyse the following class and add new code where necessary. + If an object from this type of thread is Interrupted, it must print this: + "{ThreadName} has been interrupted" + And then terminate itself. + */ public static class SleepThread extends Thread { int sleepCounter; @@ -50,14 +47,14 @@ public void run() { } } -/* - TODO - Analyse the following class and add new code where necessary. - If an object from this type of thread is Interrupted, it must print this: - "{ThreadName} has been interrupted" - And then terminate itself. - (Hint: Use the isInterrupted() method) - */ + /* + TODO + Analyse the following class and add new code where necessary. + If an object from this type of thread is Interrupted, it must print this: + "{ThreadName} has been interrupted" + And then terminate itself. + (Hint: Use the isInterrupted() method) + */ public static class LoopThread extends Thread { int value; public LoopThread(int value) { @@ -77,40 +74,20 @@ public void run() { } } -/* - You can add new code to the main function. This is where you must utilize interrupts. - No existing line of code should be changed or deleted. - */ + /* + You can add new code to the main function. This is where you must utilize interrupts. + No existing line of code should be changed or deleted. + */ public static void main(String[] args) { SleepThread sleepThread = new SleepThread(5); sleepThread.start(); - Timer sleepTimer = new Timer(); - sleepTimer.schedule(new TimerTask() { - @Override - public void run() { - if (sleepThread.isAlive()) { - sleepThread.interrupt(); - System.out.println(sleepThread.getName() + " has been interrupted"); - } - } - }, 3000); // TODO Check if this thread runs for longer than 3 seconds (if it does, interrupt it) LoopThread loopThread = new LoopThread(3); loopThread.start(); - Timer loopTimer = new Timer(); - loopTimer.schedule(new TimerTask() { - @Override - public void run() { - if (loopThread.isAlive()) { - loopThread.interrupt(); - System.out.println(loopThread.getName() + " has been interrupted"); - } - } - }, 3000); // TODO Check if this thread runs for longer than 3 seconds (if it does, interrupt it) } -} +} \ No newline at end of file From 419a866c8bb67c169bc09e502154e1d0727aaaf0 Mon Sep 17 00:00:00 2001 From: maryamSoli <125889257+maryamSoli@users.noreply.github.com> Date: Fri, 5 May 2023 22:34:39 +0330 Subject: [PATCH 4/4] Add files via upload --- Report to assignment number 6.pdf | Bin 0 -> 65645 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Report to assignment number 6.pdf diff --git a/Report to assignment number 6.pdf b/Report to assignment number 6.pdf new file mode 100644 index 0000000000000000000000000000000000000000..5353e29b7fe720f90b71113f92de89754f9d2d58 GIT binary patch literal 65645 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

30>ds(Zg?HJEtV&Gvj|EC`rys< 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

ySGGX!9>x}@%!Y72$GQ9;A;-Mo>wGMkqm`j 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 Nd(cSW+4qm2{|D<%3RVCB literal 0 HcmV?d00001