diff --git a/problem-set/SymbolStats.java b/problem-set/SymbolStats.java new file mode 100644 index 0000000..0cf25d7 --- /dev/null +++ b/problem-set/SymbolStats.java @@ -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; + } +} \ No newline at end of file diff --git a/problem-set/SymbolStats.md b/problem-set/SymbolStats.md new file mode 100644 index 0000000..c3d92ed --- /dev/null +++ b/problem-set/SymbolStats.md @@ -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 მეთოდის საშუალებით კი გამოვიტანდით +სიმბოლოების რაოდენობას.