Sfida
Quindi, ehm, sembra che, mentre abbiamo molte sfide che funzionano con numeri quadrati o numeri di altre forme, non ne abbiamo una che chiede semplicemente:
Dato un numero intero n
(dove n>=0
) come input restituisce un valore di verità se n
è un quadrato perfetto o un valore di falsa in caso contrario.
Regole
- È possibile accettare input con qualsiasi mezzo ragionevole e conveniente purché consentito dalle regole I / O standard .
- Non è necessario gestire input maggiori di quelli che la lingua scelta può gestire in modo nativo né che porterebbero a imprecisioni in virgola mobile.
- L'output dovrebbe essere uno dei due valori di verità / falsità coerenti (ad esempio,
true
ofalse
,1
o0
) - verità se l'input è un quadrato perfetto, false se non lo è. - Questo è code-golf, quindi vince il conteggio di byte più basso.
Casi test
Input: 0
Output: true
Input: 1
Output: true
Input: 64
Output: true
Input: 88
Output: false
Input: 2147483647
Output: false
2**54-2
è ancora più grande di un doppio che può tranquillamente gestire, almeno in JavaScript18014398509481982 > 9007199254740991
2**54-2
in una console JS e confronta ciò che ottieni 18014398509481982
(il valore esatto). JS emette il valore esatto, quindi 2**54-2
è rappresentabile con un doppio. Se ciò non ti convince ancora, prendi i dati binari 0100001101001111111111111111111111111111111111111111111111111111
, interpretali come un float a doppia precisione IEEE-754 e vedi quale valore ottieni.
18014398509481982
(2**54-2
), che è rappresentabile con un doppio, e fa sì che le risposte che usanosqrt
falliscano.