• 38 108 online
  • 1 170 975 medlemmar
  • 60 397 550 inlägg
2018-05-12, 16:01
  #1
Medlem
Juhans avatar
Såååå jag har suttit med de här testet ett par dagar men får inte till det helt och hållet. Kattis vill testa 13 olika samples för att kontrollera min kod och jag går igenom 8st sen blir något fel (jag kan inte se vad)

Här är länken till Kattis utmaningen: https://open.kattis.com/problems/virus

Vad är det jag missar? Vad är det för sample min kod inte kan läsa? blir lite smått galen.....
Hade vart jätte tacksam om någon kunde peka mig i rätt riktning eller hjälpa mig med ett svar <3

Kod:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp3
{
    class Program
    {

        static void Main(string[] args)
        {
            Console.WriteLine(GetSample());
            Console.ReadKey();
        }

        public static int GetSample()
        {
            string sample1 = Console.ReadLine();
            string sample2 = Console.ReadLine();


            if (sample1 == sample2) return 0;

            if (sample1.Length >= sample2.Length)
            {
                for (int i = 0; i < sample2.Length; i++)
                {
                    if (!(sample1[i] == sample2[i]))
                    {
                        sample1 = sample1.Substring(i, sample1.Length - i);
                        sample2 = sample2.Substring(i, sample2.Length - i);
                        break;
                    }
                }

                int var = sample1.Length - sample2.Length;
                for (int i = sample2.Length - 1; i >= 0; i--)
                {
                    if (sample2[i] == sample1[i + var])
                        sample2 = trimlast(sample2);
                }
            }
            else
            {
                for (int i = 0; i < sample1.Length; i++)
                {
                    if (!(sample1[i] == sample2[i]))
                    {
                        sample1 = sample1.Substring(i, sample1.Length - i);
                        sample2 = sample2.Substring(i, sample2.Length - i);
                        break;

                    }
                }
                int var = sample2.Length - sample1.Length;
                for (int i = sample1.Length - 1; i >= 0; i--)
                {
                    if (sample2[i + var] == sample1[i])
                        sample2 = trimlast(sample2);
                }
            }
            return sample2.Length;

        }
        public static string trimlast(string str)
        {
            return str.Substring(0, str.Length - 1);
        }
    }

}
Citera
2018-05-13, 09:08
  #2
Medlem
MataRengis avatar
Det är inte bara så att programmet du skrivit tar för lång tid på sej? HackerRank kollar sånt. Gör Kattis detta? Isåfall kan du rikta in dej på att skriva om vissa delar som tar lång tid.
Strängarna kan ju vara upp till 10.000 tecken långa. Vet du om speciellt det fallet som failar tangerar max-gränsen?

Bara en idé...

Typ där du i en loop på 10 tusen gör sample1.Length 10 tusen gånger istället för att skapa en
int sampLen1 = sample1.Length;
bara en gång strax efter ReadLine och använda den istället inuti loopen.
__________________
Senast redigerad av MataRengi 2018-05-13 kl. 09:21.
Citera
2018-05-17, 09:21
  #3
Medlem
Sane?s avatar
Du gör det besvärligt för dig med allt substring-användande osv. Allt som behöver göras är att hitta var förändringen börjar från vänster och från höger:
Citera