Immagina di viaggiare verso un punto disteso A miglia di distanza in orizzontale e B miglia di distanza in verticale dalla tua posizione attuale. O in altre parole, viaggiando da un (0, 0)
punto all'altro (a, b)
. Quanto lontano dovresti finire per viaggiare? Questa sembra una domanda semplice, ma la risposta dipende da chi chiedi. Se sei un corvo, e si può viaggiare in linea d'aria , la distanza percorsa è solo la distanza euclidea a (a, b)
. Questo è
sqrt(a^2 + b^2)
Ma se sei solo un essere umano noioso, non vuoi davvero camminare così lontano, quindi dovrai prendere un taxi. La maggior parte dei taxi non guida in linea retta verso la destinazione perché generalmente cerca di rimanere sulle strade. Quindi la vera distanza che finirai per viaggiare è la somma della distanza verticale e della distanza orizzontale. O la formula è:
abs(a) + abs(b)
Questa si chiama Taxicab Distance . Questa immagine dimostra bene la differenza tra i due:
Per viaggiare (6, 6)
, un corvo può semplicemente volare sulla linea verde e questo dà una distanza di 6 * sqrt(2)
circa 8,49. Un taxi può prendere i percorsi rosso, blu o giallo, ma ne prenderanno tutti 12.
Questo porta alla vera domanda che sto ponendo. Se un corvo e un taxi partono entrambi da un punto (0, 0)
all'altro e viaggiano verso un punto (a, b)
, quanto dura il percorso del taxi? O, in più gergo matematico,
Dato un vettore bidimensionale, determinare la differenza tra la norma2 del vettore e la norma1 del vettore.
È necessario scrivere il programma o la funzione più breve possibile per rispondere a questa domanda. Puoi scegliere di prendere 'a' e 'b' come due input separati o come tupla a due elementi. Puoi accettare input e output in qualsiasi formato ragionevole. Se la differenza non è un numero intero, è necessario essere precisi con almeno due cifre decimali.
Puoi sempre presumere che 'a' e 'b' saranno numeri interi e che non saranno entrambi 0. (Anche se è possibile che uno dei due sia zero)
Come al solito, si applicano scappatoie standard e cercano di rendere il programma il più breve possibile, conteggiato in byte.
Valuterò qualsiasi risposta che pubblichi una spiegazione del funzionamento del codice e mostri eventuali trucchi interessanti utilizzati per salvare i byte.
Ecco alcuni esempi su cui testare il tuo codice:
#input #output
3, 4 2
-3, 4 2
-3, -4 2
6, 6 3.51
42, 0 0
10, 10 5.86
3, 3 1.76
Divertiti a giocare a golf! :)
10,10
debba essere 5,86, dal momento che viene fuori 5.85786...
e hai arrotondato quello sotto di esso.