lab 6 task 19

main
Artem-Darius Weber 6 months ago
parent 25d760338c
commit 8031087863

@ -1,4 +1,4 @@
.PHONY: run build clean task1 build-task1 clean-task1 task2 build-task2 clean-task2 task3 build-task3 clean-task3 task4 build-task4 clean-task4 task5 build-task5 clean-task5 task6 build-task6 clean-task6 task7 build-task7 clean-task7 task8 build-task8 clean-task8 task9 build-task9 clean-task9 task10 build-task10 clean-task10 task16 build-task16 clean-task16 task17 build-task17 clean-task17 task18 build-task18 clean-task18
.PHONY: run build clean task1 build-task1 clean-task1 task2 build-task2 clean-task2 task3 build-task3 clean-task3 task4 build-task4 clean-task4 task5 build-task5 clean-task5 task6 build-task6 clean-task6 task7 build-task7 clean-task7 task8 build-task8 clean-task8 task9 build-task9 clean-task9 task10 build-task10 clean-task10 task16 build-task16 clean-task16 task17 build-task17 clean-task17 task18 build-task18 clean-task18 task19 build-task19 clean-task19
# task1
run:
@ -141,3 +141,13 @@ build-task18:
clean-task18:
cd task18 && dotnet clean
# task19
task19:
cd task19 && dotnet run --project task19.fsproj
build-task19:
cd task19 && dotnet build
clean-task19:
cd task19 && dotnet clean

@ -0,0 +1,144 @@
open System
let countRussianCharacters (str: string) =
str.ToCharArray()
|> Array.filter (fun c -> (c >= 'А' && c <= 'Я') || (c >= 'а' && c <= 'я') || c = 'Ё' || c = 'ё')
|> Array.length
let isLowercaseLatinSorted (str: string) =
let lowercaseChars =
str.ToCharArray()
|> Array.filter (fun c -> c >= 'a' && c <= 'z')
if lowercaseChars.Length <= 1 then true
else
lowercaseChars
|> Array.pairwise
|> Array.forall (fun (a, b) -> a <= b)
let shuffleWords (str: string) =
let random = Random()
str.Split(' ')
|> Array.sortBy (fun _ -> random.Next())
|> String.concat " "
let isPalindrome (str: string) =
let cleanStr = str.Replace(" ", "").ToLower()
let chars = cleanStr.ToCharArray()
chars = Array.rev chars
let shuffleCharacters (str: string) =
let random = Random()
str.ToCharArray()
|> Array.sortBy (fun _ -> random.Next())
|> String
let shuffleMiddleCharacters (str: string) =
let words = str.Split(' ')
let random = Random()
words
|> Array.map (fun word ->
if word.Length <= 2 then word
else
let first = word.[0]
let last = word.[word.Length - 1]
let middle = word.[1..word.Length-2].ToCharArray()
let shuffledMiddle =
middle
|> Array.sortBy (fun _ -> random.Next())
|> String
string first + shuffledMiddle + string last)
|> String.concat " "
let doUppercaseLatinFormPalindrome (str: string) =
let uppercaseChars =
str.ToCharArray()
|> Array.filter (fun c -> c >= 'A' && c <= 'Z')
|> Array.map string
|> String.concat ""
isPalindrome uppercaseChars
let countWordsWithEvenLength (str: string) =
str.Split(' ')
|> Array.filter (fun word -> word.Length % 2 = 0)
|> Array.length
let doLowercaseLatinFormPalindrome (str: string) =
let lowercaseChars =
str.ToCharArray()
|> Array.filter (fun c -> c >= 'a' && c <= 'z')
|> Array.map string
|> String.concat ""
isPalindrome lowercaseChars
let countLetterA (str: string) =
str.ToCharArray()
|> Array.filter (fun c -> c = 'А' || c = 'A' || c = 'а' || c = 'a')
|> Array.length
[<EntryPoint>]
let main argv =
printfn "Задание 19: Работа со строками"
printfn "================================\n"
printfn "1. Подсчет русских символов:"
let testStr1 = "Привет Hello Мир World"
let russianCount = countRussianCharacters testStr1
printfn " Строка: \"%s\"" testStr1
printfn " Количество русских символов: %d\n" russianCount
printfn "2. Проверка упорядоченности строчных латинских символов:"
let testStr2a = "abc def ghi"
let testStr2b = "acb def ghi"
printfn " Строка: \"%s\" - упорядочена: %b" testStr2a (isLowercaseLatinSorted testStr2a)
printfn " Строка: \"%s\" - упорядочена: %b\n" testStr2b (isLowercaseLatinSorted testStr2b)
printfn "3. Перемешивание слов:"
let testStr3 = "первое второе третье четвертое"
printfn " Исходная строка: \"%s\"" testStr3
printfn " Перемешанная: \"%s\"\n" (shuffleWords testStr3)
printfn "4. Проверка палиндрома:"
let testStr4a = "А роза упала на лапу Азора"
let testStr4b = "Это не палиндром"
printfn " \"%s\" - палиндром: %b" testStr4a (isPalindrome testStr4a)
printfn " \"%s\" - палиндром: %b\n" testStr4b (isPalindrome testStr4b)
printfn "5. Перемешивание символов:"
let testStr5 = "Hello"
printfn " Исходная строка: \"%s\"" testStr5
printfn " Перемешанная: \"%s\"\n" (shuffleCharacters testStr5)
printfn "6. Перемешивание средних символов в словах:"
let testStr6 = "Hello World Testing"
printfn " Исходная строка: \"%s\"" testStr6
printfn " С перемешанными средними: \"%s\"\n" (shuffleMiddleCharacters testStr6)
printfn "7. Проверка палиндрома из прописных символов:"
let testStr7a = "AaaBbbAaa"
let testStr7b = "AaaBbbCaa"
printfn " \"%s\" - прописные образуют палиндром: %b" testStr7a (doUppercaseLatinFormPalindrome testStr7a)
printfn " \"%s\" - прописные образуют палиндром: %b\n" testStr7b (doUppercaseLatinFormPalindrome testStr7b)
printfn "8. Подсчет слов с четным количеством символов:"
let testStr8 = "один два три четыре пять"
let evenWordsCount = countWordsWithEvenLength testStr8
printfn " Строка: \"%s\"" testStr8
printfn " Слов с четным количеством символов: %d\n" evenWordsCount
printfn "9. Проверка палиндрома из строчных латинских символов:"
let testStr9a = "AabccbaA"
let testStr9b = "AabcdbaA"
printfn " \"%s\" - строчные образуют палиндром: %b" testStr9a (doLowercaseLatinFormPalindrome testStr9a)
printfn " \"%s\" - строчные образуют палиндром: %b\n" testStr9b (doLowercaseLatinFormPalindrome testStr9b)
printfn "10. Подсчет букв 'А':"
let testStr10 = "АААaaa Мама мыла раму AAA"
let letterACount = countLetterA testStr10
printfn " Строка: \"%s\"" testStr10
printfn " Количество букв 'А' (включая 'a', 'а'): %d" letterACount
0

@ -0,0 +1,12 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net7.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Compile Include="Program.fs" />
</ItemGroup>
</Project>
Loading…
Cancel
Save