Ihre Herausforderung besteht darin, festzustellen, ob die angegebene Eingabe eine Ganzzahl, eine Zeichenfolge oder eine Dezimalzahl ist.
Regeln
- Eine Zeichenfolge ist eine Eingabe, die keine Ganzzahl oder Gleitkommazahl ist
- Eine Ganzzahl darf nur numerische Zeichen enthalten und darf nicht mit einer Null beginnen
- Eine Dezimalstelle ist eine Eingabe, die den Punkt (
.
) enthält, und der Punkt ist von numerischen Zeichen umgeben.
Hinweis: .01 wird nicht als gültige Dezimalzahl betrachtet.
- Das Programm sollte eine Rohzeichenfolge entweder "Zeichenfolge", "Ganzzahl" oder "Dezimalzahl" ausgeben.
- Sie können davon ausgehen, dass nur druckbare ASCII-Zeichen verwendet werden
Fälle:
asdf -> string
asdf3.4 -> string
2 -> integer
2.0 -> decimal
02 -> string
40. -> string
. -> string
.01 -> string
0.0 -> decimal
.9.9.9 -> string
[empty space] -> string
EDIT: Tippfehler behoben. Ich meinte 0,01 ohne die führende Null, nicht mit. Wenn das es unklar machte, ist es jetzt behoben!
Dies ist Code-Golf , also gewinnt die kürzeste Antwort.
02
wird nicht als Ganzzahl betrachtet, da die meisten Sprachen führende Nullen kürzen, wenn der Typ ein ist,integer
aber führende Nullen behalten, wenn er als gespeichert wirdstring
. Obwohl ich mit @isaacg bin0.0
,0.01
sollte es auch sein, wenn dies als Dezimalzahl betrachtet wird ..01
Nicht zählen macht Sinn, denke ich ...Antworten:
Pyth, 33 Bytes (39 ohne gepackte Zeichenfolge)
Einige Bytes werden aufgrund von Markdown entfernt. Offizieller Code und Testsuite.
Ohne gepackte Schnur:
Es besteht alle oben genannten Testfälle. Um zu überprüfen, ob eine Zeichenfolge eine Ganzzahl oder eine Dezimalzahl ist, wird grundsätzlich geprüft, ob die Zeichenfolge als Python-Literal (
v
) ausgewertet werden kann. Wenn ja, können Sie 0 hinzufügen und in die Zeichenfolgendarstellung zurückverfolgen und abrufen die Eingabezeichenfolge. Wenn ja, ist es eine Ganzzahl oder eine Dezimalzahl. Wenn Sie es auch in ein int umwandeln und trotzdem die ursprüngliche Zeichenfolge zurückerhalten können, ist es eine Ganzzahl.quelle
Javascript,
11212187 BytesVielen Dank an @ edc65 für das Speichern von 34 Bytes durch Konvertieren des Originalcodes (in der Erklärung) in ES6. Ich habe die Erklärung nicht geändert, weil sie die Logik besser zeigt.
Dadurch werden die Regeln für eine Ganzzahl und eine Dezimalzahl in der Frage in Regex-Prüfungen konvertiert und anhand der angegebenen Eingabe getestet. Wenn die Eingabe nicht übereinstimmt, muss es sich um eine Zeichenfolge handeln. Es besteht alle in der Frage angegebenen Tests.
Ungolfed + Erklärung
}}
quelle
01.23
.b("0.123")
Fall. Entschuldigung, da in der Frage nur explizit erwähnt wurde, dass eine Ganzzahl keine führenden Nullen haben kann, habe ich angenommen, dass dies nicht für Dezimalstellen gilt.a=>/^[1-9]\d*$/.test(a)?"integer":/^([1-9]\d+|\d)\.\d+$/.test(a)?"decimal":"string"
... sowieso nicht die kürzestmöglicheb=
damit er in Chrome funktioniert. Für mich zeigt es, dass das Original, das Sie gepostet haben, 85 Bytes statt 83 ist, plus die 2 Bytes für insgesamt 87.b=
) wird normalerweise nicht gezählt. Und der Rest ist 83, hüte dich vor seltsamen unsichtbaren Zeichen, die vom Kommentareditor eingefügt wurden - es gibt einige in meinem vorherigen Kommentar zwischen "str" und "ing"Java, 133 Bytes
quelle
JavaScript (ES6), 74
75Bearbeiten Sie 1 Byte gespeichert thx Zequ
Prüfung
quelle
[^0\D]
das Regex-Match auf[1-9]
Perl 5, 59 Bytes
Mit dem
-p
Argument in der Befehlszeile (das in die Byteanzahl berechnet wird):quelle
.0
. Wofür ist daschop
?Perl 6 , 61 Bytes
Verwendungszweck:
quelle
Python 2, 148 Bytes
quelle
JavaScript ES6,
7470 Bytesquelle
02
?/^\d+$/
auf^[1-9]\d*
(75 Bytes) geändert haben .