Skip to content

Adding reference to solution 2022.4 #42

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Dec 5, 2022
Merged

Adding reference to solution 2022.4 #42

merged 1 commit into from
Dec 5, 2022

Conversation

lucianoq
Copy link
Contributor

@lucianoq lucianoq commented Dec 4, 2022

No description provided.

@misterdelle
Copy link
Contributor

Stupenda questa:
if (y1-x1)*(x2-y2) >= 0 {
count++
}
di una semplicità disarmante :-) ma non ho capito perché funziona, saresti cosi gentile da spiegarla?

@lucianoq
Copy link
Contributor Author

lucianoq commented Dec 4, 2022

@misterdelle certo: il prodotto ha il vantaggio che entrambi negativi o entrambi positivi (quindi concordi) danno un positivo.
Quindi non mi interessa quale dei due tra x1,x2 e y1,y2 sia a sinistra, se funziona per uno, funziona il suo simmetrico.
Per esteso:
Se (y1-x1) > 0, vuol dire che y1>x1, allora voglio che x2-y2 sia concorde, cioe' positivo, cioe' che x2>y2.
Se (y1-x1) < 0, vuol dire che y1<x1, allora voglio che x2-y2 sia concorde, cioe' negativo, cioe' che x2<y2.

L'uguale mi serve perche' include i casi in cui y1==x1 oppure x2==y2 che mi interessano.

Di fatto è una trasformazione in algebra delle stesse condizioni che hanno fatto tutti, sfruttando la simmetria del prodotto per scrivere di meno.

Ammetto che sia meno chiara 😆

@alessio-perugini
Copy link
Contributor

alessio-perugini commented Dec 4, 2022

@misterdelle certo: il prodotto ha il vantaggio che entrambi negativi o entrambi positivi (quindi concordi) danno un positivo.
Quindi non mi interessa quale dei due tra x1,x2 e y1,y2 sia a sinistra, se funziona per uno, funziona il suo simmetrico.
Per esteso:
Se (y1-x1) > 0, vuol dire che y1>x1, allora voglio che x2-y2 sia concorde, cioe' positivo, cioe' che x2>y2.
Se (y1-x1) < 0, vuol dire che y1<x1, allora voglio che x2-y2 sia concorde, cioe' negativo, cioe' che x2<y2.

L'uguale mi serve perche' include i casi in cui y1==x1 oppure x2==y2 che mi interessano.

Di fatto è una trasformazione in algebra delle stesse condizioni che hanno fatto tutti, sfruttando la simmetria del prodotto per scrivere di meno.

Ammetto che sia meno chiara 😆

@lucianoq Una figata, anch'io guardando il problema avevo pensato di implementarla così poi ho optato per la strada della "semplicità" La cosa diverte di questi problemi è che puoi sbizzarrirti com ti pare visto che il livello di performance non è un requisito. Ho trovato molto utile come hai fatto il parsing dei valori con la fmt.Sscanf() non ci avevo proprio pensato!

@misterdelle
Copy link
Contributor

È vero la fmt.Sscanf è una figata e con una riga di codice hai fatto tutto 👍

@lucianoq
Copy link
Contributor Author

lucianoq commented Dec 4, 2022

Si, ottima in questo caso, ma ha molte controindicazioni, soprattutto per parsare stringhe, visto che %s e' greedy e molto spesso non riesci a controllarla bene se c'e' dell'altro testo o punteggiatura intorno.

Se non ci sono grossi vantaggi con la Scanf (come in questo caso 4 valori da leggere e poi da trasformare in int), strings.Fields() e strings.Split() sono di gran lunga preferibili.

@lucianoq lucianoq merged commit 17c53e7 into main Dec 5, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants