Loading...
YanaStamenova avatar YanaStamenova 21 Точки

Kamino Factory C#- идеи за по-опростено решение

Здравейте. Реших задача Kamino Factory. В Judge имам 100/100, но си мисля, че задачата може да бъде решена по-опростено. Ще се радвам, ако получа малко идеи.

Ето и моя код: https://pastebin.com/YmnjuJjU?fbclid=IwAR2YyG2IzaEFAM_rSZDguTiY2r6B0TjPpaljSDIpVnI7lcml3CB1SWCBLo8

2
Module: C# Advanced
RadostinStoychev avatar RadostinStoychev 128 Точки
Best Answer

Тази задачка е наистина завъртяна. Ето едно решение без методи, но пак си е трудна за четене :D. Такава е задачата, дано някой изпрати и по-кратко решение.

https://pastebin.com/SEagihxb

0
YanaStamenova avatar YanaStamenova 21 Точки

О, това изглежда толкова по-подредено и сбито от моето решение. Съвсем не се сетих да използвам true/false. Мерси много :) 

2
TeodorStefanovPld avatar TeodorStefanovPld 1274 Точки

е дайте условието :Д ако искате хората които сме по-опитни да го нарпавим по кратко. Не ги помним наизуст отделните задачи :Д

-2
YanaStamenova avatar YanaStamenova 21 Точки

Ето условие :)

1.*Kamino Factory

The clone factory in Kamino got another order to clone troops. But this time you are tasked to find the best DNA sequence to use in the production.

You will receive the DNA length and until you receive the command "Clone them!" you will be receiving a DNA sequences of ones and zeroes, split by "!" (one or several).

You should select the sequence with the longest subsequence of ones. If there are several sequences with same length of subsequence of ones, print the one with the leftmost starting index, if there are several sequences with same length and starting index, select the sequence with the greater sum of its elements.

After you receive the last command "Clone them!" you should print the collected information in the following format:

"Best DNA sample {bestSequenceIndex} with sum: {bestSequenceSum}."

"{DNA sequence, joined by space}"

Input / Constraints

  • The first line holds the length of the sequencesinteger in range [1…100];
  • On the next lines until you receive "Clone them!" you will be receiving sequences (at least one) of ones and zeroes, split by "!" (one or several).

 Output

The output should be printed on the console and consists of two lines in the following format:

"Best DNA sample {bestSequenceIndex} with sum: {bestSequenceSum}."

"{DNA sequence, joined by space}"

 Examples

Input

Output

Comments

5

1!0!1!1!0

0!1!1!0!0

Clone them!

Best DNA sample 2 with sum: 2.

0 1 1 0 0

We receive 2 sequences with same length of subsequence of ones, but the second is printed, because its subsequence starts at index[1].

Input

Output

Comments

4

1!1!0!1

1!0!0!1

1!1!0!0

Clone them!

Best DNA sample 1 with sum: 3.

1 1 0 1

We receive 3 sequences. Both 1 and 3 have same length of subsequence of ones -> 2, and both start from index[0], but the first is printed, because its sum is greater.

0
YanaStamenova avatar YanaStamenova 21 Точки

Такива решения ми харесват. Още не мога да ги измислям обаче. Мерси :)

0
Elena123456 avatar Elena123456 235 Точки

Здравейте колеги, ето и едно не чак толкова обемно  решение https://pastebin.com/TjeqFYgQ с един for  цикъл в while цикъла и три if/else проверки:

1) if (bestCurrentLengthOfOne > bestLengthDNA);

 

2) else if (bestCurrentLengthOfOne == bestLengthDNA)

а) if (currentENDIndex < bestENDIndex)

б) else if (currentENDIndex == bestENDIndex)

   if (currentSum > bestDNASum
 

Използвам for цикъл до i < currentDNA.Length - 1 (без последния елемент, че иначе се чупи) за да намеря най-дългата поредица от еденици в текущата DNA секвенция: ако два елемента са еднакви ще увеличавам counter, но ако са различни ще го сетвам отново на 1. Умишлено не съм използвала формулата за намиране на startIndex, защото дори и само с еndIndex при положение, че дължината на две DNA са еднакви, програмата се ориентира коя секвенция е по- наляво.( еndIndex<bestEndIndex).

Разгледах кодове на колеги, които все още не са 100/100. Направи ми впечатление различните места на деклариране на променливите- в и извън while цикъла, както и сетването на различни стойности на първоначалните променливи. След тестванията, които направих мисля, че е достатъчно само дължината на текущата DNA секвенция от еденици да е 1, а всички други променливи да се сетват примерно на 0.

И предполагам, че в while цикъла трябва да се сетнат само следните променливи, че при всяка нова DNA да се рестартират:

int currentLengthOfOne = 1;

int bestCurrentLengthOfOne = 0;

int currentENDIndex = 0;

int currentSum = 0;

 

А извън while цикъла са тези променливи, които не трябва да се рестартират при всяко изпълнение на цикъла. Тях ще ги рестартираме само след като направим трите проверки накрая и установим коя е най-добрата DNA секвенция от всичките текущи:

int bestLengthDNA = 0;

int bestENDIndex = 0;

int bestDNASum = 0;

int currentDNACounter = 0;

int bestDNACounter = 0;

int[] bestDNA = new int [n];

 

И нещото, което аз обърках на няколко пъти беше, че не приравнявах правилно масивите от DNA секвенции:

bestDNA = currentDNA.ToArray();

 

И споделям едно 30 min  видео на Саня Касърова, което е специално за задачата "Camino factory", ако все още някой се затруднява с нея. Видеото е найстина много добро и всичко е обяснено много чисто и ясно.

https://softuni.bg/trainings/resources/video/50372/%D0%B4%D0%BE%D0%BF%D1%8A%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D0%BD%D0%BE-%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-09-kamino-factory-%D1%81%D0%B0%D0%BD%D1%8F-%D0%BA%D0%B0%D1%81%D1%8A%D1%80%D0%BE%D0%B2%D0%B0-csharp-fundamentals-may-2020/2830

 

2
goalken avatar goalken 5 Точки

I just joined the forum so there are so many things I don’t know yet, I hope to have the help of the boards, and I really want to get to know you all on the forum run 3

-1
D.Malamov avatar D.Malamov 3 Точки

Здравейте, ето едно по-кратко решение. https://github.com/DSMalamov/Programming-Fundamentals-with-C-/blob/main/codes/Arrays-Exercise/09.KaminoFactory/Program.cs

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