02. Emoji Detector
pastebin: https://pastebin.com/TbXbiPM2
judge: https://judge.softuni.bg/Contests/Practice/Index/2302#1
Дава 60/100. Не можах да намеря грешката. Ако може някой, да погледне.
pastebin: https://pastebin.com/TbXbiPM2
judge: https://judge.softuni.bg/Contests/Practice/Index/2302#1
Дава 60/100. Не можах да намеря грешката. Ако може някой, да погледне.
Здравей, логиката в кода ти направо е отзад - напред. Задачата е в това да си направиш regex, после само събираш информацията и принтираш.
С това решение е 100/100.
https://pastebin.com/dmxiErDp
Проблема е, че сплитваш по спейсове и вземаш само едно съвпадение.
Ако имаш вход: (**Tigers****Tigers**) ще вземе само едното съвпадение.
Вместо сплитване и обикаляне по масива ползвай:
while (matcher.find())
Здравей,
Поправих ти кода и вече дава 100/100. Много малки корекции на редове 33, 35 и 44:
Поздрави!
Благодаря!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
namespace _01.Activation_Keys
{
class Program
{
static void Main(string[] args)
{
string emojiPattern = @"(\*{2}|:{2})(?<emoji>[A-Z][a-z]{2,})\1";
string digitPattern = @"\d";
string input = Console.ReadLine();
MatchCollection emojis = Regex.Matches(input, emojiPattern);
MatchCollection digits = Regex.Matches(input, digitPattern);
int count = emojis.Count;
long treshold = 1;
foreach (Match digit in digits)
{
treshold *= int.Parse(digit.Value);
}
Console.WriteLine($"Cool threshold: {treshold}");
Console.WriteLine($"{count} emojis found in the text. The cool ones are:");
foreach (Match emoji in emojis)
{
int coolnes = 0;
string emj = emoji.Groups["emoji"].Value;
for (int i = 0; i < emj.Length; i++)
{
coolnes += emj[i];
}
if (coolnes >= treshold)
{
Console.WriteLine(emoji);
}
}
}
}
}
Ето едно решение и от мен, което се различава от вече постнатите тук по това, че използва стриймове за повечето от работата. Може да засяга неща, които още не са учени, но все пак може да ви е интересно:
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
public class Pr02EmojiDetector {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String input = scan.nextLine();
long coolEmojisThreshold = input.chars()
.filter(Character::isDigit)
.mapToObj(Character::getNumericValue)
.map(Long::valueOf)
.reduce((a, b) -> a * b)
.orElse(0L);
Matcher emojiMatcher = Pattern
.compile("(?<emoji>(?<symbols>[:]{2}|[*]{2})(?<name>[A-Z][a-z]{2,})\\k<symbols>)")
.matcher(input);
int emojisFound = 0;
List<String> coolEmojis = new ArrayList<>();
while (emojiMatcher.find()) {
emojisFound++;
emojiMatcher.group("name").chars()
.mapToObj(Long::valueOf)
.reduce(Long::sum)
.filter(current -> current.compareTo(coolEmojisThreshold) >= 0)
.ifPresent(sum -> coolEmojis.add(emojiMatcher.group("emoji")));
}
System.out.printf(
"Cool threshold: %d%n%d emojis found in the text. The cool ones are:%n%s%n",
coolEmojisThreshold,
emojisFound,
coolEmojis.stream().collect(Collectors.joining(System.lineSeparator())));
}
}
Здравейте,
някой може ли да ме осветли каква е разликата между тези два регекса:
([:]{2}|[*]{2})([A-Z][a-z]{2,})\1 =100/100
([:*]{2})([A-Z][a-z]{2,})(\1) = 70/100
Това:
*:Tigers*:
не е валидо, но втория ще го приеме. В условието е казано че трябва символите да са два и да са еднакви.
regex101.com не го хваща *:Tigers*: с втория
При мен го хваща. Горния регекс е верния.
Hi there, everything is going fine here and of course every one is sharing information, that’s really excellent, keep up writing. OGYOUTUBE Apk