introduction
Clarence est un commis à la saisie de données qui travaille chez un fournisseur de services Internet. Son travail consiste à saisir manuellement les adresses IP de tous les clients du fournisseur de services Internet dans la base de données. Il le fait en utilisant un clavier qui a la disposition suivante:
1
2
3
4
5
6
7
8
9
.
0
La distance entre le centre des touches adjacentes horizontalement ou verticalement est exactement d’un centimètre. Par exemple, la distance entre les centres de 3et 9serait de deux centimètres. La distance entre les centres de 3et 5serait de √2cm. Le théorème de Pythagore suffit à calculer la distance entre deux clés quelconques.
Clarence, comme on peut s'y attendre de la part d'un fournisseur d'accès à Internet, utilise un système de frappe très lent et inefficace. Il utilise un seul doigt et cherche la clé, puis déplace son doigt sur la touche, puis appuie dessus, puis répète tous les chiffres du numéro. Vous connaissez peut-être ce style en tant que "système de recherche d'aigle" puisque le doigt cherche au-dessus du clavier la clé correcte avant de plonger pour appuyer sur la touche, comme un aigle plongeant pour tuer.
Par exemple, voici comment Clarence taperait le numéro 7851
:
- Il commence son doigt 7et appuie sur la clé.
- Il déplace son doigt vers la droite de 1 cm 8et appuie sur la touche.
- Il bouge son doigt de 1 cm vers le haut 5et appuie sur la touche.
- Il déplace son doigt en diagonale vers le haut et à gauche de √2 cm 1et appuie sur la touche.
Par conséquent , la distance totale parcourue par Clarence déplacé son doigt taper 7851
est -ce 1 + 1 + √2
qui représente environ 3.41cm.
Votre tâche consiste à écrire un programme calculant la distance à laquelle Clarence doit déplacer son doigt pour saisir des adresses IP arbitraires.
Description de l'entrée
L'entrée est une chaîne qui sera sous la forme
().().().()
où chacun ()
est un entier compris dans l'intervalle 0
- 999
. Cela représente l'adresse IP que Clarence doit taper. Un exemple d'entrée pourrait être:
219.45.143.143
J'aimerais également souligner que des entrées telles que 0.42.42.42
ou 999.999.999.999
sont toujours valables, malgré le fait qu'elles soient des adresses IP non valides. Vous n'avez donc pas besoin d'inclure de code de vérification d'adresse IP dans votre programme.
Description de la sortie
Indiquez la distance à laquelle Clarence doit déplacer son doigt pour saisir l'adresse IP spécifiée. Arrondissez les réponses à deux décimales si nécessaire et utilisez l’ cm
unité dans votre sortie. La sortie pour l'exemple d'entrée est 27.38cm
(1 + √8 + √5 + 2 + 1 + √5 + 3 + 1 + √5 + √13 + 3 + 1 + √5).
Réponses:
CJam,
464443383734 octetsMerci à @ user23013 de nous avoir suggéré
mh
, ce qui a permis d’économiser 5 octets.Essayez-le en ligne dans l' interprète CJam .
Comment ça marche
la source
{3fmd~@-@@-mh}%
.mh
même existé.Pyth,
383534 octetsManifestation.
Indexation dans la chaîne d'une idée float grâce à @Dennis.
Explication, sur l'entrée bidon
15.0
:z
. '15 .0 'Nous identifions cette liste comme suit:
m.jF.Dx`ciUTT1k3z
.UT
: Nous générons la liste[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
.iUTT
: Ensuite, nous traitons cette liste comme un numéro de base 10 nous donnant123456789
.ciUTT1
: Ensuite, nous convertissons ce nombre en un nombre à virgule flottante en le divisant par 1, ce qui donne123456789.0
.`
: Convertir en chaîne.'123456789.0'
x k
: Prend l'index du caractère saisi dans cette chaîne.[0, 4, 9, 10]
..D 3
:.D
est la fonction divmod, qui sort sa première entrée divisée et modulo par la deuxième entrée. La deuxième entrée est 3, ici. Cela donne l'emplacement physique du personnage sur le pavé numérique.[(0, 0), (1, 1), (3, 0), (3, 1)]
..jF
:.j
est le constructeur du nombre complexe.F
l'applique au tuple.[0j, (1+1j), (3+0j), (3+1j)]
..: 2
: Maintenant, prenons les 2 sous-chaînes d’entrée de cette liste pour pouvoir trouver les distances par paires.[[0j, (1+1j)], [(1+1j), (3+0j)], [(3+0j), (3+1j)]]
.-M
: Prend la différence des deux nombres complexes.[(-1-1j), (-2+1j), -1j]
..aM
: Prend la valeur absolue du résultat. C'est la distance entre les emplacements des claviers.[1.4142135623730951, 2.23606797749979, 1.0]
s
: Somme les distances.4.650281539872885
..R 2
: Arrondir à 2 décimales.4.65
.+ "cm
: Ajouter'cm'
à la fin et imprimer.4.65cm
.la source
PHP - 108 octets
L'entrée est prise de stdin. Le
-.987654321
message envoyé à lastrpos
fonction est évalué'-0.987654321'
dans un contexte de chaîne.Exemple d'utilisation:
la source
C,
192177159 octetsVersion mise à jour, programme maintenant complet en utilisant l’argument de la ligne de commande. Dans le même temps, amélioré pour être toujours plus court que la version précédente:
Ungolfed:
La version golfée utilise un préprocesseur
#define
pour raccourcir une partie du code répété dans la version complète.la source
s
avant de vérifier que ce*s
n'est pas nul. 3. L'OP dit programme à son poste. Je ne suis pas sûr si une fonction est acceptée. 4. Avec GCC, vous n'avez pas besoin d'inclure. 5.sqrt
est plus court quesqrtf
. 6.pow(u-p,2)
est plus court que(u-p)*(u-p)
. 7. Je ne suis pas sûr, mais je pense que le stockage dans les deux coordonnées une seule chaîne et la miseu=x[c]/3
etv=x[c]%3
devrait être plus courte.int
pouvaient être utilisées non déclarées. Mais en fait, Clang l'accepte aussi avec un avertissement, alors je m'en suis débarrassé.p=u,q=v,G,r+=...
.JavaScript ( ES6 ), 132
I / O via popup. Exécutez l'extrait de code pour tester (Firefox uniquement)
la source
Python 3, 108 octets
Certes, pas très bien joué au golf, mais au moins, il est lié à PHP.
la source
Ruby 135
139Testez-le en ligne: http://ideone.com/2CIQa5
la source
Python
199 171166Il existe un code Python plus court (108) pour cela par SP3000:
https://codegolf.stackexchange.com/a/50854/41163
Exemple d'utilisation:
Courez en ligne: http://codepad.org/h9CWCBNO
Code commenté
la source
if
clauses sur une seule ligne, par exempleif i<1:c=3,1
<!-- language: lang-python -->