9 svar
232 visningar
dajamanté behöver inte mer hjälp
dajamanté 5139 – Fd. Medlem
Postad: 14 jan 2019 15:40 Redigerad: 14 jan 2019 15:46

Enkel uppgift, äckligt lösning

Hej igen!

Jag kommer inte på något snyggt för att lösa det

Jag har sparat allt i en array och jämför $$ x_{1}, x_{2}, x_{3} $$ (respektive y) med värdarna, men det blir 6 jämförelser... Hur skulle ni göra det snyggt?

Laguna Online 30457
Postad: 14 jan 2019 15:43

Förlåt att jag kommenterar ditt språk, men jag trodde "värdarna" betydde "värdena" först och förstod inte så mycket. Men menar du "varandra"?

dajamanté 5139 – Fd. Medlem
Postad: 14 jan 2019 15:49 Redigerad: 14 jan 2019 15:49

Nej nej det är absolut ingen fara!

Jag värdar det hemliga hoppet att prata och skriva snyggt på svenska någon dag, så språkpolisen är altid välkommen. 

Ja, det är nog värdena som jag menade. Jag jämför varje x för att hitta den enstaka som inte återkommer 2 ggr.

Och samma för y.

 

Edit: titta, jag även försökte rekrytera back in the days: https://www.pluggakuten.se/trad/sprak-polis-sokes/

Laguna Online 30457
Postad: 14 jan 2019 16:03

Jag behöver bara jämföra x1 med x2 och x2 med x3, två jämförelser. (Och sen y också.) Men sen blir det äckligare än något annat. Hur ser hela din kod ut?

dajamanté 5139 – Fd. Medlem
Postad: 14 jan 2019 16:41

Jag gjorde det i början men problemet är att test fall 2 faller med bara 2 jämförelser.

Testa din med den andra testfall som kommer med exempel!

 

public class Main {

public static void main(String[] args) {
Kattio io = new Kattio(System.in);
int[] coordinates = new int[6];

for (int i = 0; i < 6; i++) {
coordinates[i] = io.getInt();
}

//printing x
if (coordinates[0] == coordinates[2])
System.out.print(coordinates[4]);
else if (coordinates[0] == coordinates[4])
System.out.print(coordinates[2]);
else if (coordinates[2] == coordinates[4])
System.out.print(coordinates[0]);
System.out.print(" ");
//printing y
if (coordinates[1] == coordinates[3])
System.out.print(coordinates[5]);
else if (coordinates[1] == coordinates[5])
System.out.print(coordinates[3]);
else if (coordinates[3] == coordinates[5])
System.out.print(coordinates[1]);
}

}

Laguna Online 30457
Postad: 14 jan 2019 16:49

Eftersom man vet att två av x:en är lika behövs inte den tredje jämförelsen, utan då vet man att det är coordinates[0] som ska ut. Om man inte är säker på att input beter sig så, så måste man ha en fjärde klausul med "else" där man ger ett lämpligt felmeddelande.

Men en smula "äckligt" är det att man bara håller på med siffrorna 0 till 5 och måste komma ihåg vad som är x och vad som är y. Det skulle vara mer lättläst om man hade en array för x och en för y.

En smula oelegant är det också att man har precis samma logik på två ställen, fast med olika index. Först gör man en sak för x och sedan precis samma för y. Det borde gå att göra en funktion för det.

Men din kod är helt OK.

dajamanté 5139 – Fd. Medlem
Postad: 14 jan 2019 16:54

Nej, det trodde jag också men det behövs alla tre jämförelser konstigt nog.

Har du skickat din kod i deras tester?

Hur skulle du ha löst det utan arrayer?

Laguna Online 30457
Postad: 14 jan 2019 16:58
dajamanté skrev:

Nej, det trodde jag också men det behövs alla tre jämförelser konstigt nog.

Har du skickat din kod i deras tester?

Hur skulle du ha löst det utan arrayer?

Nej, jag har inte provat.

Jag sa inte utan arrayer, jag sa att jag skulle föredra två arrayer.

dajamanté 5139 – Fd. Medlem
Postad: 15 jan 2019 12:54

Jag tror vi måste ha tre jämförelser: en första tillåter att skriva ut x_3, den andra x_1, så vi måste vara en upplopp för x_2. Ok, om det är inga bättre förbättring stänger jag :)

Tack Laguna!

Laguna Online 30457
Postad: 15 jan 2019 14:59
dajamanté skrev:

Jag tror vi måste ha tre jämförelser: en första tillåter att skriva ut x_3, den andra x_1, så vi måste vara en upplopp för x_2. Ok, om det är inga bättre förbättring stänger jag :)

Tack Laguna!

Min teori är att du kan ta bort "if (coordinates[2] == coordinates[4])".

Svara
Close