Loading...
anton_fotev avatar anton_fotev 9 Точки

C# 04. Mixed Up List - More Exercises

Колеги, дава ми 50/100. Пробвах с различни примерни стойности - на конзолата ми дава верни отговори.

Условието на задачата е следното:
Write a program that mixes up two lists by some rules. You will receive two lines of input, each one
being a list of numbers. The rules for mixing are:
- Start from the beginning of the first list and from the ending of the second
- Add element from the first and element from the second
- At the end there will always be a list in which there are 2 elements remaining
- These elements will be the range of the elements you need to print
- Loop through the result list and take only the elements that fulfill the condition
- Print the elements ordered in ascending order and separated by a space

Example

Input :

1 5 23 64 2 3 34 54 12
43 23 12 31 54 51 92

Output:  23 23 31 34 43 51

Comment
After looping through the two of the arrays we get:
1 92 5 51 23 54 64 31 2 12 3 23 34 43
The constrains are 54 and 12 (so we take only the numbers between them):
51 23 31 23 34 43
We print the result sorted

Кодът ми е следния:

using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
    public static void Main()
    {
        List<int> firstInput = Console.ReadLine()
            .Split(new[]{' ', ','}, StringSplitOptions.RemoveEmptyEntries)
            .Select(int.Parse)
            .ToList();
        
        List<int> secondInput = Console.ReadLine()
            .Split(new[]{' ', ','}, StringSplitOptions.RemoveEmptyEntries)
            .Select(int.Parse)
            .ToList();
        
        List<int> mixed = MakeMixedList(firstInput, secondInput);
        
        int minBorder = CheckRigthListAndMin(firstInput, secondInput);
         int maxBorder = CheckRigthListAndMax(firstInput, secondInput);
        
        List<int> rezult = MakeRezultList(mixed, minBorder, maxBorder);
        
        Console.WriteLine(string.Join(" ", rezult));
        

    }
    
     public static int CheckRigthListAndMin(List<int> firstInput, List<int> secondInput)
      {
        if(firstInput.Count > secondInput.Count)
        {
             return Math.Min(firstInput[firstInput.Count -1], firstInput[firstInput.Count -2]);
        }
        else
        {
            return Math.Min(secondInput[secondInput.Count -1], secondInput[secondInput.Count -2]);
        }
      }
    
     public static int CheckRigthListAndMax(List<int> firstInput, List<int> secondInput)
      {
        if(firstInput.Count > secondInput.Count)
        {
             return Math.Max(firstInput[firstInput.Count -1], firstInput[firstInput.Count -2]);
        }
        else
        {
            return Math.Max(secondInput[secondInput.Count -1], secondInput[secondInput.Count -2]);
        }
      }
    
      public static List<int> MakeMixedList(List<int> firstInput, List<int> secondInput)
      {
          List<int> mixed = new List<int>();
          
          if (firstInput.Count > secondInput.Count)
          {
           secondInput.Reverse();
              
           for (int i = 0; i < secondInput.Count; i++)
           {
            mixed.Add(firstInput[i]);
            mixed.Add(secondInput[i]);    
           }
          } // end if
          else
          {
           firstInput.Reverse();
              
           for (int i = 0; i < firstInput.Count; i++)
           {
            mixed.Add(secondInput[i]);
            mixed.Add(firstInput[i]);        
           }  
          } // end else
          
        return mixed;      
      }
    
    public static List <int> MakeRezultList(List<int> mixed, int minBorder, int maxBorder)
    {
         List<int> rezult = mixed
            .Where(x => (minBorder < x && x < maxBorder))
            .OrderBy(x => x)
            .ToList();
        
        return rezult;
    }
}

Тагове:
0
Teamwork and Personal Skills
KaloyanStoyanovvv avatar KaloyanStoyanovvv 77 Точки

Здравей,

Пробвай в единият случай да взимаш индекса на Count-2 и Count-1 както си го направил, а при другия да взимаш индекса на 0 и 1 за да обърнеш логиката.

0
TeodorStefanovPld avatar TeodorStefanovPld 1274 Точки

нещо много си си усложнил живота. Имаш 2 листа единия е винаги е с 2 елемента повече. Поне като чета условието и като гледам примера.

Въртиш проверяваш луда работа а ти трябват точно 2 или 3 реда като се замислиш.

 var listOne=new List<int>{1,2,3,33,44,11};
         var listtwo=new List<int>{11,100,45,34,12};
         var mixed= listOne.Take(listOne.Count-2).Concat(listtwo);
         var result=mixed.Where(x=>x>=Math.Min(listOne[listOne.Count-1],listOne[listOne.Count-2]) && x<=Math.Max(listOne[listOne.Count-1],listOne[listOne.Count-2]));
        Console.WriteLine(string.Join(" ",result.OrderBy(x=>x)));

 

ето това е, нарочно малко го разписах иначе реално може да се навърже в един linq statement. 

какво се случва, взимаме 2та листа,съединяваме ги като изпускаме последните 2 елемента от първия те са ни границите.

След това филтрираме новия лист като с math.max и math.min определяме кой от 2та заделени елемента е горната и долна граница. И получения резултат го принтираме  като преди това го подреждаме в момента е подреден  asc. 

и примера които давам ти връща 34 33 12 11 и като видиш че горната ти граница е 44 а долната 11 това са правилните резултати :Д Сега забелязах че не казват кои лист ще е по дългия но това лесно можеш да си го определиш с 1 проверка на count listone и listtwo и другото си остава същото.

 

 

0
31/05/2019 20:04:10
anton_fotev avatar anton_fotev 9 Точки

Мерси. Ще опростя кода и ще пробвам.

П.П. Иначе усложних кода от параноя - понеже никъде в условието не се гарантира, че винаги първия ред ще е по-дългия.

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.