Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 44 additions & 0 deletions problem-set/SymbolStats.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
/*
* File: SymbolStats.java
* ----------------------------
* ამოცანის პირობა:
* კონსოლიდან შეგყვავს ტექსტი პროგრამამ უნდა დაბეჭდოს სტატისტიკა რომელი სიმბოლო
* რამდენჯერ გვხვდება
*/

import acm.program.ConsoleProgram;

import java.util.Map;

public class SymbolStats extends ConsoleProgram {

public void run() {
String text = readLine("Enter the text: ");
countStatistics(text);
}

// counting the ocurrencies of all the distinct characters
private void countStatistics(String text){
String usedCharacters = "";
for(int i = 0; i < text.length(); i++){
char ch = text.charAt(i);
if(usedCharacters.indexOf(ch) == -1){
usedCharacters += ch;
int num = countCharacters(text , ch);
println(ch + ": " + num);
}
}
}

// counting the number of occurrencies of a specific character in the text
private int countCharacters(String text , char ch){
int count = 0;
for(int i = 0; i < text.length(); i++){
char current = text.charAt(i);
if(current == ch){
count++;
}
}
return count;
}
}
57 changes: 57 additions & 0 deletions problem-set/SymbolStats.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
# SymbolStats

პრობლემა:
კონსოლიდან შეგყვავს ტექსტი პროგრამამ უნდა დაბეჭდოს სტატისტიკა რომელი სიმბოლო რამდენჯერ გვხვდება.




## პრობლემის გადაჭრის გზა
* დავიმახსოვროთ ყველა განსხვავებული სიმბოლო.
* თითოეული სიმბოლოსთვის დავთვალოთ, თუ რამდენჯერ გვხვდება იგი.

---
### განსხვავებული სიმბოლოების შენახვა
განსხვავებული სიმბოლოების დამახსოვრება String-ში შეგვიძლია. IndexOf(გვიბრუნებს პირველ ინდექსს, სადაც გვხვდება ესა თუ ის სიმბოლო)
მეთოდის მეშვეობით ჩვენ შევამოწმებთ გვხვდება თუ არა სიმბოლო(თუკი არ გვხვდება IndexOf დაგვიბრუნებს -1-ს).

შესაბამისად მივიღებთ კოდს:
```java
if(usedCharacters.indexOf(ch) == -1){
usedCharacters+=ch;
}
```


---

### სიმბოლოების რაოდენობების დათვლა
countCharacters მეთოდში დავითვალოთ კონკრეტული სიმბოლოს რაოდენობა. შემოვიღოთ count ცვლადი, რომელშიც შევინახავთ პასუხს.
თუკი სტრინგზე იტერაციისას შეგვხვდა ეს კონკრეტული სიმბოლო, count ცვლადის მნიშვნელობა გავზარდოთ.

შესაბამისად მივიღებთ კოდს:
```java
private int countCharacters(String text , char ch){
int count = 0;
for(int i = 0; i < text.length(); i++){
char current = text.charAt(i);
if(current == ch){
count++;
}
}
return count;
}
```



## რატომ იმუშავებს კოდი ტექსტის ნებისმიერი მნიშვნელობისთვის?
* კოდი ტექსტის ნებისმიერი მნიშვნელობისთვის სწორად იმუშავებს, რადგან ამოცანის ამოხსნის ლოგიკა არ არის დამოკიდებული
ტექსტის მნიშვნელობასა თუ ზომაზე.
---

## შესაძლო გაუმჯობესებები ამოხსნის იმპლემენტაციისას.
* შეგვეძლო, გამოგვეყენებინა მონაცემთა სრუქტურა Map, რომლის key იქნებოდა char, ხოლო value - int.
შემოყვანილ ტექსტზე იტერაციისას Map-ში კონკრეტული char-ის value-ს გავზრდიდით და საბოლოოდ Map-შივე
გვექნებოდა შენახული სიმბოლოების რაოდენობები. Map-ის toString მეთოდის საშუალებით კი გამოვიტანდით
სიმბოლოების რაოდენობას.