Skip to content
Open
63 changes: 32 additions & 31 deletions problem-set/FillRaw.java
Original file line number Diff line number Diff line change
@@ -1,31 +1,32 @@
/*
* File: FillRaw.java
* ----------------------------
* FillRaw დაეხმარება კარელს, შეავსოს ქუჩა ბიპერებით,
* რომელზედაც ის ამჟამად იმყოფება.
*
* ამოცანის პირობა:
* კარელი დგას 1x1 უჯრაზე, შეავსებინეთ მას პირველი ქუჩა ბრილიანტებით. ანუ პირველი
* ქუჩის ყველა უჯრაზე უნდა იდოს ზუსტად ერთი ბრილიანტი. ჩათვალეთ რომ საწყის
* სამყაროში ბრილიანტები არსად არ დევს.
*/

import stanford.karel.*;

public class FillRaw extends SuperKarel {

public void run() {
// Karel must follow the street until it faces the wall.
// So the execution must be run while front is clear.
while(frontIsClear()) {
// While it moves through the street, it places the beepers on the road.
putBeeper();
// After placing the beeper, it needs to move to the next box.
move();
}
// Keep in mind the Off-by-one error
// Take a look at /problem-set/FillRaw.md for further explanation
putBeeper();
}

}
@@ -1,31 +0,0 @@
/*
* File: FillRaw.java
* ----------------------------
* FillRaw დაეხმარება კარელს, შეავსოს ქუჩა ბიპერებით,
* რომელზედაც ის ამჟამად იმყოფება.
*
* ამოცანის პირობა:
* კარელი დგას 1x1 უჯრაზე, შეავსებინეთ მას პირველი ქუჩა ბრილიანტებით. ანუ პირველი
* ქუჩის ყველა უჯრაზე უნდა იდოს ზუსტად ერთი ბრილიანტი. ჩათვალეთ რომ საწყის
* სამყაროში ბრილიანტები არსად არ დევს.
*/

import stanford.karel.*;

public class FillRaw extends SuperKarel {

public void run() {
// Karel must follow the street until it faces the wall.
// So the execution must be run while front is clear.
while(frontIsClear()) {
// While it moves through the street, it places the beepers on the road.
putBeeper();
// After placing the beeper, it needs to move to the next box.
move();
}
// Keep in mind the Off-by-one error
// Take a look at /problem-set/FillRaw.md for further explanation
putBeeper();
}

}
209 changes: 104 additions & 105 deletions problem-set/FillRaw.md

Large diffs are not rendered by default.

32 changes: 32 additions & 0 deletions problem-set/Pencil.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
/*
* File: Pencil.java
* ----------------------------
* ამოცანის პირობა:
* გააკეთეთ Paint-ის ფანქრის ანალოგიური ხელსაწყო. კერძოდ, მაუსის ყოველ მოძრაობაზე
* ეკრანზე დაამატეთ გაფერადებული წრეწირები იმავე წერტილში სადაც მაუსი მდებარეობს.
*/

import acm.graphics.*;
import acm.program.*;
import java.awt.*;
import java.awt.event.MouseEvent;

public class Target extends GraphicsProgram
{
private static final int DIAMETER = 50;
public void init() {
addMouseListeners();
}

public void run()
{

}
public void mouseMoved(MouseEvent e) {
GOval oval = new GOval(e.getX(),e.getY(),DIAMETER,DIAMETER);
oval.setFillColor(Color.BLUE);
oval.setFilled(true);
add(oval);
}

}
37 changes: 37 additions & 0 deletions problem-set/Pencil.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Pencil

პრობლემა:
```
გააკეთეთ Paint-ის ფანქრის ანალოგიური ხელსაწყო. კერძოდ, მაუსის ყოველ მოძრაობაზე
ეკრანზე დაამატეთ გაფერადებული წრეწირები იმავე წერტილში სადაც მაუსი მდებარეობს.
```



## პრობლემის გადაჭრის გზა:
ამოცანის ამოსახსნელად გამოვიყენებთ Event-ებს:
*mouseMoved() მეთოდში დავაიმპლემენტირებთ ჩვენი წრეწირის დახატვის ლოგიკას

---

### I. ინიციალიზაციის ეტაპი:
* ვიდრე გამოვიყენებდეთ mouse event-ების მეთოდებს, საჭიროა, რომ პროგრამამ ყურადღება მიაქციოს, ანუ "მოუსმინოს" ჩვენს mouse event-ებს, ამისათვის init()-მეთოდში, რომელიც ერთხელ გამოიძახება run() მეთოდამდე, რათა გარკვეულ ველებს ინიციალიზება გავუკეთოთ, ჩავწეროთ addMouseListeners(), რომ ამის შემდგომ პროგრამას mouse-ის event-ებზე რეაგირება მოახდინოს.

### II. რომელ mouse event-ებს გამოვიყენებთ:
* რადგან მაუსის ყოველ მოძრაობაზე უნდა დავხატოთ წრეწირი, ამიტომ დავწეროთ წრეწირის დახატვის ლოგიკა mouseMoved() მეთოდში, mouseMoved()-ის გარდა გვაქვს mousePressed() (სრულდება ერთხელ, მაუსის დაჭერის მომენტში), mouseClicked()(სრულდება, მაუსის დაჭერის შემდგომ აშვების შემდეგ), mouseDragged()(სრულდება, როდესაც მაუსი დაჭერილი გვაქვს და თან ვამოძრავებთ, ყოველი მოძრაობისას ხელახლა იძახება ეს მეთოდი), mouseReleased()(სრულდება, როდესაც მაუსს ვუშვებთ).

### III. MouseEvent კლასი :
* ჩამოთვლილი mouse event-ების მეთოდებს ყველას გადაეცემა პარამეტრად MouseEvent კლასის ტიპის ობიექტი e (სახელი ნებისმიერია). ამ ობიექტის მეშვეობით შეგვიძლია მივიღოთ მრავალი ტიპის ინფორმაცია მომხდარ event-ზე, მაგალითად, თუ რომელ კოორდინატებზე მოხდა ის(e.getX() და e.getY()), რა ობიექტზე მოხდა ეს event (e.getSource(), რომელიც ჩვენ შემთხვევაში კანვასს დაგვიბრუნებს, რადგანაც მაუსს კანვასზე ვამოძრავებთ), დრო თუ როდის მოხდა ეს event(e.getWhen(), რომელიც გვიბრუნებს განვლილ დროს მილიწამებში 1970წლის 1 იანვრის 00:00UTC) და ა.შ.

### IV. მაუსის გამოძრავებისას წრეწირების დახატვა :

* როგორც ვიცით, mouseMoved() მეთოდი მაუსის ყოველი გამოძრავებისას იძახება, ამიტომ ჩვენი მთლიანი ამოცანა დავიდა იმაზე, რომ ამ მეთოდში უბრალოდ წრეწირი დავხატოთ და ამის შემდგომ მაუსის ყოველ გამოძრავებაზე ხელახლა დაიხატება წრეწირი. ვქმნით GOval ტიპის ობიექტს, რომელსაც კოორდინატებად გადავცემთ e.getX() და e.getY() მეთოდებს, ხოლო დიამეტრისათვის გლობალურად აღვწეროთ ცვლადი DIAMETER და ის გადავცეთ. იმისათვის, რომ უკეთ გამოჩნდეს ჩვენი დახატული წრეწირები, გავხადოთ იგი ლურჯი ფერის, ამისათვის გამოვიყენოთ setFillColor() მეთოდი და პარამეტრად გადავცეთ Color.BLUE, და არ დაგვავიწყდეს setFilled(true)-ს დაწერა, რათა გაფერადებული იყოს ჩვენი წრეწირი, შედეგად მივიღებთ კოდს :

```java
public void mouseMoved(MouseEvent e) {
GOval oval = new GOval(e.getX(),e.getY(),DIAMETER,DIAMETER);
oval.setFillColor(Color.BLUE);
oval.setFilled(true);
add(oval);
}
```
46 changes: 46 additions & 0 deletions problem-set/RemoveDuplicated.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
/*
* File: RemoveDuplicated.java
* ---------------------------------
* დაწერეთ მეთოდი რომელიც გადაცემული ტექსტიდან შლის დუბლირებულ სიმბოლოებს,
* ანუ თუ ტექსტიში რომელიმე სიმბოლო მეორდება, უნდა დარჩეს მხოლოდ ყველაზე მარცხენა.
*/
import java.util.ArrayList;
import java.util.List;

import acm.program.*;


public class RemoveDuplicated extends ConsoleProgram {

public void run() {
String str = readLine("Enter string: ");
str = removeDuplicates(str);
println(str);
}

// returns new string with no duplicates (leaves the left most dupliate)
private String removeDuplicates(String str) {
List<Character> usedChars = new ArrayList<Character>();
String res = "";
for(int i = 0; i<str.length();i++) {
char ch = str.charAt(i);
if(!contains(usedChars,ch)) {
res+=ch;
usedChars.add(ch);
}
}
return res;
}


//returns true if ls contains ch element
private boolean contains(List<Character> ls, char ch) {
for(int i = 0; i<ls.size();i++) {
if(ls.get(i) == ch) {
return true;
}
}
return false;
}

}
Loading