From 4afd072cc925d628aa3f8aad412fc60249bdf730 Mon Sep 17 00:00:00 2001 From: lmebo17 <114059885+lmebo17@users.noreply.github.com> Date: Tue, 1 Nov 2022 21:36:46 +0400 Subject: [PATCH 1/2] Implemented Solution and Explanation SymbolStats --- problem-set/SymbolStats.java | 44 ++++++++++++++++++++++++++++++ problem-set/SymbolStats.md | 53 ++++++++++++++++++++++++++++++++++++ 2 files changed, 97 insertions(+) create mode 100644 problem-set/SymbolStats.java create mode 100644 problem-set/SymbolStats.md 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..fe29d2c --- /dev/null +++ b/problem-set/SymbolStats.md @@ -0,0 +1,53 @@ +# SymbolStats + +პრობლემა: +კონსოლიდან შეგყვავს ტექსტი პროგრამამ უნდა დაბეჭდოს სტატისტიკა რომელი სიმბოლო რამდენჯერ გვხვდება. + + + + +## პრობლემის გადაჭრის გზა +* დავიმახსოვროთ ყველა განსხვავებული სიმბოლო. +* თითოეული სიმბოლოსთვის დავთვალოთ, თუ რამდენჯერ გვხვდება იგი. + +--- +### განსხვავებული სიმბოლოების შენახვა +განსხვავებული სიმბოლოების დამახსოვრება String-ში შეგვიძლია. IndexOf(გვიბრუნებს პირველ ინდექსს, სადაც გვხვდება ესა თუ ის სიმბოლო) +მეთოდის მეშვეობით ჩვენ შევამოწმებთ გვხვდება თუ არა სიმბოლო(თუკი არ გვხვდება IndexOf დაგვიბრუნებს -1-ს). + +შესაბამისად მივიღებთ კოდს: + if(usedCharacters.indexOf(ch) == -1){ + usedCharacters+=ch; + } + + +--- + +### სიმბოლოების რაოდენობების დათვლა +countCharacters მეთოდში დავითვალოთ კონკრეტული სიმბოლოს რაოდენობა. შემოვიღოთ count ცვლადი, რომელშიც შევინახავთ პასუხს. +თუკი სტრინგზე იტერაციისას შეგვხვდა ეს კონკრეტული სიმბოლო, count ცვლადის მნიშვნელობა გავზარდოთ. + +შესაბამისად მივიღებთ კოდს: +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 მეთოდის საშუალებით კი გამოვიტანდით +სიმბოლოების რაოდენობას. From afbd8eb8813cd0f07dcd4ca04d0fd98154d20aa6 Mon Sep 17 00:00:00 2001 From: lmebo17 <114059885+lmebo17@users.noreply.github.com> Date: Tue, 1 Nov 2022 21:38:02 +0400 Subject: [PATCH 2/2] Update SymbolStats.md --- problem-set/SymbolStats.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/problem-set/SymbolStats.md b/problem-set/SymbolStats.md index fe29d2c..c3d92ed 100644 --- a/problem-set/SymbolStats.md +++ b/problem-set/SymbolStats.md @@ -16,9 +16,11 @@ მეთოდის მეშვეობით ჩვენ შევამოწმებთ გვხვდება თუ არა სიმბოლო(თუკი არ გვხვდება IndexOf დაგვიბრუნებს -1-ს). შესაბამისად მივიღებთ კოდს: - if(usedCharacters.indexOf(ch) == -1){ +```java +if(usedCharacters.indexOf(ch) == -1){ usedCharacters+=ch; } +``` --- @@ -28,6 +30,7 @@ countCharacters მეთოდში დავითვალოთ კონ თუკი სტრინგზე იტერაციისას შეგვხვდა ეს კონკრეტული სიმბოლო, count ცვლადის მნიშვნელობა გავზარდოთ. შესაბამისად მივიღებთ კოდს: +```java private int countCharacters(String text , char ch){ int count = 0; for(int i = 0; i < text.length(); i++){ @@ -38,6 +41,7 @@ private int countCharacters(String text , char ch){ } return count; } +```