Bestimmen Sie anhand eines Infix-Ausdrucks, ob alle Konstanten vom gleichen Typ sind.
Operatoren bestehen nur aus diesen dyadischen Operatoren:+-/*
Ihr Programm oder Ihre Funktion sollte eine gültige Ausdruckszeichenfolge als Eingabe verwenden und einen wahrheitsgemäßen Wert ausgeben, wenn die Konstanten im Ausdruck gleichzeitig sind, und ansonsten einen falschen Wert.
Der Ausdruck besteht ausschließlich aus Konstanten und kann einen der folgenden Typen enthalten:
- Zeichenfolge des Formulars
"String"
(Immer doppelte Anführungszeichen, kann leer sein, keine Escapezeichen, kann ASCII-Text enthalten) - Ganzzahl der Form
14
(Immer positiv oder Null) - Float der Form
7.3f
(Immer positiv oder Null, hat immer eine Dezimalkomponente, z.14.0f
) - Byte der Form
0x42
(0-255
, immer 2 hexadezimale Zeichen) - Boolescher Wert in der Form
true
(true
oder ohnefalse
Berücksichtigung der Groß- und Kleinschreibung)
Der Ausdruck enthält keine Klammern, da die Reihenfolge der Operation den Typ nicht beeinflusst, wenn kein Typzwang vorhanden ist.
Eine einzelne Konstante ohne Operatoren ist ein gültiger Ausdruck.
Ein leerer Ausdruck ist kein gültiger Ausdruck.
Sie können davon ausgehen, dass die Ausdruckszeichenfolge kein Leerzeichen außerhalb von Zeichenfolgenliteralen enthält.
Hinweis: Alternativ können Sie davon ausgehen, dass zwischen Konstanten und Operatoren immer Leerzeichen vorhanden sind, wie in den Testfällen dargestellt. Wenn Sie diese Annahme treffen, geben Sie dies bitte in Ihrer Antwort an
Sie müssen nicht mit ungültigen Ausdrücken wie z 1 +
.
Wertung
Dies ist Code-Golf , also gewinnen die wenigsten Bytes!
Testfälle
(Leerzeichen zur besseren Lesbarkeit hinzugefügt)
2 + 3
True
"Hello" / "World"
True
true * false
True
"Hello" + 4
False
"Hello" + "4"
True
3 + 2.4f / 8
False
0xff * 0xff
True
0xff + 2
False
6
True
" " + ""
True
"4 + false" + "word"
True
quelle
truE+fALSe
). Wenn nicht, kann ich zwei Bytes in meiner Lösung speichern.Antworten:
JavaScript (ES6),
79 7775 Byte2 Bytes dank @ExpiredData gespeichert
Erwartet Leerzeichen um Operatoren. Gibt einen booleschen Wert zurück.
Probieren Sie es online aus!
Wie?
/".*?"/g
/0x../g
/\S+f/g
/\d/
; Wenn wir eine finden, muss es mindestens eine ganze Zahl geben"e"
oder"E"
mit/e/i
; Wenn wir einen finden, muss es mindestens einen Booleschen Wert gebenAlle entfernten Ausdrücke werden tatsächlich durch ein Komma ersetzt, was harmlos ist.
Wir filtern die regulären Ausdrücke heraus, die keine Änderung an der Eingabezeichenfolge bewirken, und testen, ob am Ende des Prozesses weniger als zwei davon übrig bleiben.
quelle
true
undfalse
werden als Groß- und Kleinschreibung markiert, ich denke , dass Mittel müssen Sie Ihre regex ignorieren Fall, wenn für diese Suchet
unds
(ich könnte falsch sein , obwohl).Perl 5
-p
, 73 BytesProbieren Sie es online aus!
Wie?
Versuchen Sie, Zeichenfolgen, Gleitkommazahlen, Hex, Boolesche Werte und Ganzzahlen in dieser Reihenfolge zu entfernen. Stoppen Sie, sobald etwas entfernt wird. Überprüfen Sie nach dem Stoppen, ob die verbleibende Zeichenfolge nur aus Operatoren und Leerzeichen besteht. Wenn dies der Fall ist, ist die Trype-Prüfung wahr. wenn nicht, ist es falsch.
Erster Versuch: Perl 5
-MList::Util=all
-p
, 99 BytesProbieren Sie es online aus!
quelle
$_=/^[+\/* -]*$/
kann geändert werden durch$_=!y#-+/* ##c
und....?e
durch.*e
Gelee ,
3023 BytesProbieren Sie es online aus!
Eine monadische Verknüpfung, die eine Zeichenfolge als Eingabe verwendet und 1 für true und 0 für false zurückgibt (Jellys Boolesche Werte). Erwartet Leerzeichen um Operatoren.
Ich habe dem TIO einige neue Testfälle hinzugefügt, darunter einen mit drei Operatoren und einen mit einem gemischten Fall für Boolesche Werte.
Erläuterung
quelle
C # (Visual C # Interactive Compiler) ,
113111109 BytePort of Arnauld's Javascript Antwort . Ist 72 Bytes mit dem Flag
/u:System.Text.RegularExpressions.Regex
.Probieren Sie es online aus!
quelle
Japt
-!
, 36 BytesVersuch es
quelle
05AB1E ,
5024 Bytes-26 Bytes, indem Sie eine Portierung von @NickKennedys Jelly-Antwort machen , also stellen Sie sicher, dass Sie ihn positiv bewerten !!
Erwartet eine Eingabe mit Leerzeichen an den Operanden.
Probieren Sie es online aus oder überprüfen Sie alle (plus einige weitere) Testfälle .
Erläuterung:
quelle
Python 2 , 102 Bytes
Probieren Sie es online aus!
Ich bin mir nicht ganz sicher, wie ich einige dieser Typen in Python darstellen soll. Zum Beispiel werden 0xff und 2 beide als ganze Zahlen behandelt. Und 2.4f ist kein gültiger Typ in Python, denke ich. Großgeschriebenes Richtig und Falsch zum Testen von Booleschen Werten.
Bearbeiten: Grammatik
quelle
true * false
eine.Stax , 26 Bytes
Führen Sie es aus und debuggen Sie es
Dieses Programm erwartet Leerzeichen um die Operatoren. Im Allgemeinen werden einige Transformationen auf die Eingabe angewendet, sodass das maximale Zeichen für jeden Ausdruckstyp unterschiedlich ist.
Ausgepackt, ungolfed und kommentiert sieht es so aus.
Führen Sie diesen aus
quelle
Haskell, 140 Bytes
quelle
f x=let z=...in ...
kann seinf x|z<-...=...
.