Einführung
Clarence ist ein Dateneingabe-Angestellter, der bei einem Internetdienstanbieter arbeitet. Seine Aufgabe ist es, die IP-Adressen aller ISP-Kunden manuell in die Datenbank einzugeben. Er tut dies mit einer Tastatur, die das folgende Layout hat:
1
2
3
4
5
6
7
8
9
.
0
Der Abstand zwischen der Mitte horizontal oder vertikal benachbarter Tasten beträgt genau einen Zentimeter. Beispielsweise würde der Abstand zwischen den Mitten von 3und 9zwei Zentimeter betragen. Der Abstand zwischen den Mitten von 3und 5wäre √2cm. Der Satz von Pythagoras reicht aus, um den Abstand zwischen zwei beliebigen Schlüsseln zu berechnen.
Clarence verwendet, wie Sie es von einem Internetdienstanbieter erwarten können, ein sehr langsames und ineffizientes Tippsystem. Er benutzt einen einzelnen Finger und sucht nach der Taste, bewegt dann seinen Finger zur Taste, drückt sie dann und wiederholt sie für alle Ziffern in der Nummer. Sie kennen diesen Stil vielleicht als das "Adlersuchsystem", da der Finger über der Tastatur nach der richtigen Taste sucht, bevor er nach dem Tastendruck abtaucht, wie ein Adler, der nach einem Kill abtaucht.
So würde Clarence beispielsweise die Zahl eingeben 7851
:
- Er beginnt mit dem Finger 7und drückt den Schlüssel.
- Er bewegt seinen Finger 1 cm nach rechts 8und drückt die Taste.
- Er bewegt seinen Finger 1 cm nach oben 5und drückt die Taste.
- Er bewegt seinen Finger diagonal nach oben und um √2 cm nach links 1und drückt die Taste.
Daher ist die Gesamtdistanz , dass Clarence seinen Finger bewegt , in den Typ 7851
IS , 1 + 1 + √2
die etwa 3.41cm ist.
Ihre Aufgabe ist es, ein Programm zu schreiben, das die Entfernung berechnet, die Clarence zum Eingeben beliebiger IP-Adressen benötigt.
Eingabebeschreibung
Die Eingabe ist eine Zeichenfolge, die im Formular enthalten sein wird
().().().()
wobei jedes ()
eine ganze Zahl im Bereich ist 0
- 999
. Dies stellt die IP-Adresse dar, die Clarence eingeben muss. Eine Beispieleingabe könnte sein:
219.45.143.143
Ich möchte auch darauf hinweisen, dass Eingaben wie 0.42.42.42
oder 999.999.999.999
immer noch gültige Eingaben sind, obwohl es sich um ungültige IP-Adressen handelt. Sie müssen also keinen IP-Adressverifizierungscode in Ihr Programm aufnehmen.
Ausgabebeschreibung
Geben Sie die Entfernung ein, um die Clarence seinen Finger bewegen muss, um die angegebene IP-Adresse einzugeben. Runden Sie die Antworten nach Bedarf auf zwei Dezimalstellen und verwenden Sie die cm
Einheit in Ihrer Ausgabe. Die Ausgabe für die Beispieleingabe ist 27.38cm
(1 + √8 + √5 + 2 + 1 + √5 + 3 + 1 + √5 + √13 + 3 + 1 + √5).
Antworten:
CJam,
464443383734 BytesVielen Dank an @ user23013 für den Vorschlag
mh
, mit dem 5 Bytes eingespart werden konnten .Probieren Sie es online im CJam-Interpreter aus .
Wie es funktioniert
quelle
{3fmd~@-@@-mh}%
.mh
überhaupt existiert.Pyth,
383534 BytesDemonstration.
Indizierung in die Zeichenfolge einer Float-Idee dank @Dennis.
Erklärung zum falschen Eingang
15.0
:z
. '15 .0 'Wir bilden diese Liste wie folgt:
m.jF.Dx`ciUTT1k3z
.UT
: Wir erstellen die Liste[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
.iUTT
: Als nächstes behandeln wir diese Liste als Basis 10, die uns eine Zahl gibt123456789
.ciUTT1
: Als nächstes konvertieren wir diese Zahl in einen Gleitkommawert, indem wir sie durch 1 teilen und geben123456789.0
.`
: In einen String konvertieren.'123456789.0'
x k
: Nimm den Index des eingegebenen Zeichens in diese Zeichenkette.[0, 4, 9, 10]
..D 3
:.D
ist die DivMod-Funktion, die ihren ersten Eingang geteilt und durch den zweiten Eingang moduliert ausgibt. Die zweite Eingabe ist hier 3. Dies gibt die physische Position des Zeichens auf dem Nummernblock an.[(0, 0), (1, 1), (3, 0), (3, 1)]
..jF
:.j
ist der Konstruktor für komplexe Zahlen.F
wendet es auf das Tupel an.[0j, (1+1j), (3+0j), (3+1j)]
..: 2
: Nun nehmen wir die 2 Eintragssubstrings dieser Liste, um die paarweisen Abstände zu finden.[[0j, (1+1j)], [(1+1j), (3+0j)], [(3+0j), (3+1j)]]
.-M
: Nimmt die Differenz der beiden komplexen Zahlen.[(-1-1j), (-2+1j), -1j]
..aM
: Nimmt den absoluten Wert des Ergebnisses. Dies ist der Abstand zwischen den Positionen der Tastatur.[1.4142135623730951, 2.23606797749979, 1.0]
s
: Summiere die Entfernungen.4.650281539872885
..R 2
: Auf 2 Dezimalstellen runden.4.65
.+ "cm
:'cm'
Zum Ende hinzufügen und ausdrucken.4.65cm
.quelle
PHP - 108 Bytes
Die Eingabe erfolgt aus stdin. Die
-.987654321
an diestrpos
Funktion gesendete wird'-0.987654321'
in einem String-Kontext ausgewertet .Beispielnutzung:
quelle
C
192177159 BytesAktualisierte Version, jetzt Programm mit Kommandozeilenargument abschließen. Gleichzeitig verbessert, um noch kürzer als die Vorgängerversion zu sein:
Ungolfed:
Die Golf-Version verwendet einen Präprozessor
#define
, um einen Teil des wiederholten Codes in der Vollversion zu verkürzen.quelle
s
vor dem Überprüfen, ob der Wert*s
ungleich Null ist, eine Erhöhung durchführen . 3. Das OP sagte Programm in seinem Beitrag. Ich bin nicht sicher, ob eine Funktion akzeptiert wird. 4. Bei GCC benötigen Sie das Include nicht. 5.sqrt
ist kürzer alssqrtf
. 6.pow(u-p,2)
ist kürzer als(u-p)*(u-p)
. 7. Ich bin nicht sicher, aber ich denke, beide Koordinaten in einer einzigen Zeichenfolge und Einstellung zu speichernu=x[c]/3
undv=x[c]%3
sollte kürzer sein.int
nicht deklariert werden könnten. Aber in der Tat akzeptiert Clang es auch mit einer Warnung, also habe ich es losgeworden.p=u,q=v,G,r+=...
.JavaScript ( ES6 ), 132
I / O über Popup. Führen Sie das zu testende Snippet aus (nur Firefox)
quelle
Python 3, 108 Bytes
Zugegebenermaßen nicht sehr gut golfen, aber es hängt zumindest mit PHP zusammen.
quelle
Ruby 135
139Testen Sie es online: http://ideone.com/2CIQa5
quelle
Python
199 171166Es gibt einen kürzeren Python-Code (108) von SP3000:
https://codegolf.stackexchange.com/a/50854/41163
Beispielnutzung:
Online ausführen : http://codepad.org/h9CWCBNO
Kommentierter Code
quelle
if
Klauseln in einer Zeile definieren, z. B.if i<1:c=3,1
<!-- language: lang-python -->