CodeStars. Решение задач.

Задача 1

Код консольного приложения на VB.


Imports System.Threading.Tasks
Imports System.Numerics
Imports System
Imports System.Collections.Generic
Imports System.IO
Imports System.Linq
Imports System.Text
Imports System.Text.RegularExpressions
Namespace CodeStars01
Friend Class Program
Shared Sub Main(ByVal args() As String)
Dim iresult As Long = 1
Dim bresult As BigInteger = 1
Dim big As Boolean = False
Do
iresult = 1
bresult = 1
big = False
Try
Console.Write("Введите число: ")
Dim num As Integer = Integer.Parse(Console.ReadLine())

Dim i As Integer = 1
Do While i <= num
Try
If Not big Then
iresult = iresult * i
Else
bresult *= i
End If
i += 1
Catch e1 As OverflowException
big = True
bresult = iresult
End Try

Loop

If big Then
bresult /= 360
Console.WriteLine(bresult.ToString())
Else
iresult \= 360
Console.WriteLine(iresult.ToString())
End If
'Console.ReadKey();
Catch e2 As Exception
Exit Do
End Try
Loop
End Sub
End Class
End Namespace

 

Задача 2

Случайно к тебе попало письмо с текстом будущего хита от твоего главного соперника за первое место в хит-парадах! Но, к сожалению, все сообщение оказалось закодированным. Твои помощники определили, что в песне используется два смысловых слова — Yo и Nice — причем, Nice означает конец очередной буквы, а количество предшествующих слов Yo определяет порядковый номер буквы в алфавите. Два подряд идущих слова Nice обозначают конец слова. В приведенном файле также содержатся другие слова-паразиты, которые не несут смысловой нагрузки, и бессмысленные знаки препинания (которые тем не менее используются для разделения слов). Расшифруй текст песни, содержащийся в файле. Если ты сделаешь все правильно, ты получишь текст только из букв и пробелов, без лишних пробелов и знаков препинания.</p>
<p style=»text-align: justify;»>3

Код консольного приложения на VB.


Imports System.Linq
Imports System.Text
Imports System.Text.RegularExpressions
Imports System.Threading.Tasks

Namespace CodeStar02
Friend Class Program
Private Enum State
MakingLetter
MakedLetter
MakedWord
End Enum
Shared Sub Main(ByVal args() As String)
Dim file = System.IO.File.OpenText("xx.result")   'xx.result - файл с закодированным текстом
Dim sb = New StringBuilder()
Dim text = New List(Of String)()
Dim line As String
Dim re = New Regex("\W", RegexOptions.Compiled)
Dim yo = New Regex("Yo\W?", RegexOptions.Compiled)
Dim nice = New Regex("Nice\W?", RegexOptions.Compiled)
Dim count As Integer = 0
Dim state As State = CodeStar02.Program.State.MakedWord
Dim ch As Char
Const start As Char = "a"c
Dim delta As Integer = 1
line = file.ReadLine()
Do While line IsNot Nothing
Dim words = line.Split(" "c)
For Each word In words
If yo.IsMatch(word) Then
count += 1
state = CodeStar02.Program.State.MakingLetter
ElseIf nice.IsMatch(word) Then
If state = CodeStar02.Program.State.MakingLetter Then
state = CodeStar02.Program.State.MakedLetter
ch = ChrW(count + AscW(start) - delta)
count = 0
sb.Append(ch)
ElseIf state = CodeStar02.Program.State.MakedLetter Then
state = CodeStar02.Program.State.MakedWord
text.Add(sb.ToString())
sb.Clear()
ElseIf state = CodeStar02.Program.State.MakedWord Then
text.Add("")
End If
End If

Next word

line = file.ReadLine()
Loop
file.Close()
For Each item In text
Console.Write(item)
Console.Write(" ")
My.Computer.FileSystem.WriteAllText("song.txt", item, True)
Console.WriteLine("Текст песни сохранен файл " &amp;amp;amp;amp;amp;amp;amp;amp;amp; My.Computer.FileSystem.CurrentDirectory &amp;amp;amp;amp;amp;amp;amp;amp;amp; "\song.txt")
Next item
Console.ReadKey()
End Sub
End Class
End Namespace

 

Задача 3

Немногие знают, что музы существуют на самом деле. Физики-музыковеды выяснили, что музы, как и люди, говорят на разных языках, но это не мешает им общаться. Так, в Секретном институте прикладного музыковедения ученые в ходе наблюдений получили текстовый файл, который в каждой строчке содержит два номера муз (разделенных пробелом), которые общаются друг с другом. Предполагается, что общаются друг с другом только те музы, которые говорят на одном языке, и что для каждой музы в файле есть запись (т.е. муз, которые ни с кем не общаются, не существует). Узнай, сколько всего языков существует у муз.</p>
<p style=»text-align: justify;»>19
Код консольного приложения на VB.

Imports System
Imports System.Collections.Generic
Imports System.IO
Imports System.Linq
Imports System.Text
Imports System.Threading.Tasks</p>
Namespace CodeStars03
Friend Class Program
Shared Sub Main(ByVal args() As String)
Dim langs = New List(Of HashSet(Of Integer))()
Dim pair(1) As Integer
Dim sett(pair.Length - 1) As HashSet(Of Integer)</p>
Using file = System.IO.File.OpenText("19.data")
Dim line As String
line = file.ReadLine()
Do While line IsNot Nothing
Dim index As Integer = 0
For Each item In line.Split(" "c)
pair(index) = Integer.Parse(item)
index += 1
Next item</p>
For i As Integer = 0 To pair.Length - 1
sett(i) = Nothing
For Each lang In langs
If lang.Contains(pair(i)) Then
sett(i) = lang
Exit For
End If
Next lang
Next i</p>
If sett(0) IsNot sett(1) Then
If sett(0) IsNot Nothing Then
If sett(1) Is Nothing Then
sett(0).Add(pair(1))
Else
sett(0).UnionWith(sett(1))
langs.Remove(sett(1))
End If
ElseIf sett(1) IsNot Nothing Then
sett(1).Add(pair(0))
End If
ElseIf sett(0) Is Nothing Then
langs.Add(New HashSet(Of Integer)(pair))
End If

line = file.ReadLine()
Loop
End Using
Console.WriteLine(langs.Count)
Console.ReadKey()
End Sub

End Class
End Namespace

Задача 4

На международном музыкальном фестивале участники говорят на множестве разных языков. Чтобы все могли понимать друг друга, организаторы предложили использовать автоматические переводчики, но переводчики есть не для всех пар языков. В текстовом файле в каждой строке содержится (через пробел) имя переводчика, с какого языка и на какой он может переводить. Какое минимальное количество переводчиков необходимо, чтобы переводить с Исландского на Албанский?</p>
<p style=»text-align: justify;»>8</p>
<p style=»text-align: justify;»>Код консольного приложения на VB.

Imports System
Imports System.Collections
Imports System.Collections.Generic
Imports System.IO
Imports System.Linq
Imports System.Text
Imports System.Threading.Tasks</p>
Namespace CodeStart04
Friend Class Data
Public Src As String
Public Dst As String
Public Trans As String
End Class</p>
Friend Class ResultInfo
Inherits Tuple(Of Integer, List(Of String), HashSet(Of String))</p>
Public Sub New(ByVal count As Integer, ByVal path As List(Of String), ByVal trans As HashSet(Of String))
MyBase.New(count, path, trans)
End Sub
End Class

Friend Class Program
Shared Sub Main(ByVal args() As String)
Dim links = New Dictionary(Of String, List(Of Data))()
Using file = System.IO.File.OpenText("8.data")
Dim line As String
line = file.ReadLine()
Do While line IsNot Nothing
Dim split = line.Split(" "c)

Dim data = New Data With {.Trans = split(0), .Src = split(1), .Dst = split(2)}
Dim list As List(Of Data) = Nothing
If Not links.TryGetValue(data.Src, list) Then
list = New List(Of Data)()
links.Add(data.Src, list)
End If
list.Add(data)

line = file.ReadLine()
Loop
End Using
Dim info = GetMinPath(links, "Исландский", "Албанский", New HashSet(Of String)())
Console.WriteLine(info.Item1)
For Each item In info.Item2
Console.WriteLine(item)
Next item
Console.WriteLine(info.Item3.Count)
Console.ReadKey()
End Sub
Private Shared Function GetMinPath(ByVal links As Dictionary(Of String, List(Of Data)), ByVal [from] As String, ByVal [to] As String, ByVal entered As HashSet(Of String)) As ResultInfo
Dim min As Integer = 0
Dim path As List(Of String) = Nothing
Dim data As Data = Nothing
Dim sett As HashSet(Of String) = Nothing

entered.Add([from])

Dim list = links([from])

For Each item In list
If item.Dst = [to] Then
Return New ResultInfo(1, New List(Of String)() _
From {[from], [to]}, New HashSet(Of String)() From {item.Trans})
End If
Next item

For Each item In list
If Not entered.Contains(item.Dst) Then

Dim info = GetMinPath(links, item.Dst, [to], entered)
If path Is Nothing OrElse min > info.Item1 Then
min = info.Item1
path = info.Item2
sett = info.Item3
data = item
End If
End If

Next item
If path IsNot Nothing Then
path.Insert(0, [from])

End If

If sett IsNot Nothing Then
sett.Add(data.Trans)
End If
Return New ResultInfo(If(path Is Nothing, 0, min + 1), path, sett)
End Function
End Class
End Namespace

 

Задача 5

Билет на твой первый концерт в Лужниках содержит 6 цифр от 0 до 4. Сколько среди всех билетов «счастливых», т.е. таких, для которых сумма первых 3 цифр равна сумме последних 3 цифр?

Код консольного приложения на VB.