Ich habe ein Problem bei der Arbeit. Ich muss zwei Zahlen vergleichen, die als Zeichenfolgen aus zwei verschiedenen Datenbanken stammen. Die Zahlen können führende Nullen und / oder führende / nachfolgende Leerzeichen enthalten. So kann ich "0001 "
von einer Datenbank und " 1 "
von der anderen haben.
Ich habe das Problem in C # mit folgendem Code gelöst:
Func<string, string, bool> f = (a,b) => int.Parse(a.Trim()) == int.Parse(b.Trim())
Die Herausforderung
Dies ist eine wirklich einfache Herausforderung, geeignet für Anfänger und jede Art von esoterischen Sprachen. Wenn Sie zwei Zahlen als Zeichenfolgen mit führenden Nullen und / oder führenden / nachfolgenden Leerzeichen angeben, schreiben Sie den kürzesten Code, der prüft, ob die beiden Zeichenfolgen dieselbe Zahl darstellen.
- Die Eingaben müssen aus zwei Zeichenfolgen oder der Entsprechung in Ihrer Sprache bestehen (ein Zeichen-Array ist in Ordnung) und sie stellen immer ganzzahlige Werte dar, die größer als Null sind.
- Die Ausgabe muss aus zwei beliebigen konsistenten Werten bestehen, die einen Wahrheitswert und einen Falsey-Wert darstellen.
Beispiele
A B Result
----------------------------
"0001" "1 " true
"1450" "1450 " true
"0010001 " " 10001 " true
"0010000" " 10 " false
"101023" "101024" false
Das ist Code-Golf , also kann der kürzeste Code für jede Sprache gewinnen!
Antworten:
Javascript , 11 Bytes
Das Casting von Javascript ein wenig zu missbrauchen;
+a
zwingt sicha
in einen numerischen Typ.-6 Bytes dank Shaggy und Martin Ender ♦
Auch eine coole Einstellung von LiefdeWen :
quelle
c=
, und Currying ist auch in Ordnung, sodass Sie siea=>b=>...
anstelle von verwenden können(a,b)=>
. Endlich ist mein JavaScript etwas eingerostet, aber ich denke sowas!(a-b)
würde auch funktionieren?a
mit unary zu einem numerischen Typ+
.05AB1E , 1 Byte
Probieren Sie es online!
Erläuterung
Beim Vergleich auf Gleichheit
Q
wird automatisch versucht, Zeichenfolgen vor dem Vergleich als Ints auszuwerten.quelle
|0+Q
war kurz genug ...Operation Flashpoint- Skriptsprache, 33 Byte
Rufen Sie an mit:
Ausgabe:
Alternative Version (41 Bytes):
Immer noch 5 Bytes kürzer als der einfachere
f={t=_this;call(t select 0)==call(t select 1)}
39 Bytes:
count
(das die Größe eines Arrays zurückgibt) funktioniert stattdessenforEach
, weil Sie ihm ein "Lambda" geben können, das als Bedingung verwendet wird, um nur die Array-Elemente zu zählen, die diese Bedingung erfüllen. Die in diesem Fall verwendete "Bedingung" ist keine gültige Bedingung, spielt hier jedoch keine Rolle, da sie keinen Fehler verursacht und der Rückgabewert voncount
nicht benötigt wird.quelle
Taxi , 488 Bytes
Probieren Sie es online!
Ungolfed:
Taxi ist für diese Herausforderung (relativ) gut geeignet, da nur Strings als Eingabe- oder Ausgabetyp zulässig sind.
The Babelfishery
konvertiert Zeichenfolgen in Zahlen (und umgekehrt) und entfernt alle Leerzeichen und führenden Nullen. Es werden auch negative Zahlen verarbeitet, wenn sich das-
unmittelbar vor der ersten Ziffer befindet. AnschließendEqual's Corner
werden die beiden Werte miteinander verglichen undWriter's Depot
die Ausgabe im Zeichenfolgenformat bereitgestellt. Die Ausgabe ist1
für die Wahrheit und0
für die Falschheit.quelle
error: The boss couldn't find your taxi in the garage. You're fired!
?Go to Taxi Garage:n 1 r 1 l 1 r.
C (gcc) , 27 Bytes
Mit
-O0
(das ist die Standardeinstellung).Probieren Sie es online!
C 32 Bytes
Probieren Sie es online!
quelle
char
und wenn Sie ein Array an eine Funktion übergeben, übergeben Sie den Zeiger einfach an das erste Element des Arrays. Hier werden die Zeiger auf diechar
Arrays implizit in Ganzzahlen konvertiert, wenn sie an die Funktion übergeben werden, und die Ganzzahlen werden beim Aufruf wieder in Zeiger konvertiertatoi
.s=foo;
verwenden möchten,return foo;
müssen Sie dies als "x86 gcc mit deaktivierter Optimierung" und nicht nur als "C" bezeichnen, da dieser Code nur als Implementierungsartefakt einen Wert zurückgibt.s=retval;
nichtreturn retval;
wirklich kaputt gegangen ist . Es sieht so aus, als würde die interne Logik von gcc (mit-O0
nur) den letzten Ausdruck als Rückgabewert behandeln, vielleicht genauso wie ein GNU C-Anweisungsausdruck . (Aber es erforderts=
). In ARM32 berechnet es das==
Ergebnis inr3
und verwendet dann ein Extramov r0, r3
, um den Rückgabewert zu bestimmen ! Es handelt sich also nicht um einen x86-spezifischen Hack, sondern um einengcc -O0
Hack, den GCC offenbar nicht zu unterstützen versucht .J , 4 Bytes
Vergleichen Sie
=
nach der&
Bewertungdo
. Kann auch=&".
online probiert werden!quelle
-10
) und für Negative, wie J sie_10
aufgrund der monadischen Arbeitsweise versteht (z. B. )-
.Retina , 11 Bytes
Probieren Sie es online!
Die Eingabe ist durch Zeilenvorschub getrennt, die Testsuite verwendet jedoch zur Vereinfachung eine Kommatrennung. Druckt
1
für Gleichheit und0
für Ungleichheit.Erläuterung
Wandle jede Zeile in eine unäre um. Dies ignoriert führende Nullen und Leerzeichen.
Deduplizieren: Löschen Sie die zweite Zeile, wenn beide identisch sind.
Überprüfen Sie, ob die Zeichenfolge jetzt in einem Zeilenumbruch endet.
quelle
Python 3 , 25 Bytes
Probieren Sie es online!
quelle
Brain-Flak , 22 Bytes
Probieren Sie es online!
4 Bytes gespart dank Jo King .
quelle
Dreieckigkeit , 17 Bytes
Probieren Sie es online!
Dreieckigkeit ist ausnahmsweise wettbewerbsfähig!
Wie es funktioniert
Dreieckigkeit erfordert, dass der Code eine dreieckige Verteilung der Punkte aufweist. Das heißt, die Länge jeder Zeile muss gleich der Anzahl der mit 2 multiplizierten und dekrementierten Zeilen sein, und jede Zeile muss (auf jeder Seite) eine Anzahl von Punkten aufweisen, die ihrer Position im Programm entspricht (die unterste Zeile ist Zeile 0). die darüberliegende ist Reihe 1 und so weiter). Lassen Sie uns vor diesem Hintergrund analysieren, wie der Code funktioniert:
quelle
Alice , 7 Bytes
Probieren Sie es online!
Jedes nicht-stellige Trennzeichen funktioniert. Druckt
1
für Gleichheit und0
sonst.Erläuterung
quelle
Japt , 3 Bytes
Versuch es
Konvertiert die zweite Eingabe in eine Ganzzahl und vergleicht die Gleichheit mit der ersten.
quelle
APL (Dyalog) , 4 Bytes
3 Bytes gespart dank @ Adám
Probieren Sie es online!
quelle
=/⍎¨
jq, 24 Zeichen
Die 2 Zeichenfolgen werden als Elemente eines Arrays übergeben.
Probelauf:
Probieren Sie es online! ( Alle Testfälle )
quelle
Schale , 3 Bytes
Probieren Sie es online!
Erläuterung
quelle
Ër
funktioniert dies auch.PowerShell , 20 Byte
Ähnlich wie bei der JavaScript-Antwort, nur länger, da PowerShell kein Currying hat. Verwendet
+
, um die erste Zeichenfolge in eine Ganzzahl umzuwandeln, und dann die-eq
umzuwandeln wandelt uals die zweite Zeichenfolge automatisch in eine Ganzzahl um. Die Ausgabe ist wahr / falsch.Probieren Sie es online!
quelle
PowerShell , 19 Byte
Probieren Sie es online!
-join
Das Argument array ($args
) mit der String-Darstellung des Vergleichsoperators (-eq
) wertet dann den Ausdruck mitInvoke-Expression
(iex
) aus.quelle
+
da sie die Prüfung der Zeichenfolgengleichheit durchführt.00009
und077
dann der resultierende Code sind00009 -eq077
, ist ein vollkommen gültiger Code. Sie arbeiten zur Laufzeit direkt mit der Zeichenfolge. Sie müssen sie also zuerst umwandeln, damit die Operation für eine numerische Zeichenfolge ausgeführt wird.Q (Kdb +), 13 Bytes
Erläuterung
(x; y): eine Liste der beiden Eingaben.
"J" $: Jede Eingabe wird aus String (10c) in einen langen Typ (7j) umgewandelt, der
Leerzeichen und führende Nullen korrekt interpretieren kann .
= /: Überprüft die Gleichheit über Elemente in einer Liste (jedes nachfolgende Paar).
Da es nur ein Paar gibt, wird der einzelne Boolian 0b / 1b zurückgegeben.
quelle
{=/["J"$(x;y)]}
für 15 Bytes ... Obwohl Sie dies für 8 Bytes haben könnten:(~/)"J"$
Wenn Sie nur die REPL verwenden und die Eingaben als Liste von Zeichenfolgen übergeben. oder{(~/)"J"$x}
für 11 als Funktion.T-SQL, 35 Bytes
Gemäß unseren Standards werden Daten über eine bereits vorhandene Tabelle
t
mitvarchar
Felderna
und eingegebenb
.Gibt zurück,
1
wenn sie übereinstimmen,0
wenn sie nicht .Ein paar von SQL mathematischen Funktionen (einschließlich
ABS
,FLOOR
undCEILING
) wird eine implizite Konvertierung in numerischen tun , wenn String - Parametern gegeben, das ist kürzer als ein expliziteCAST(a AS INT)
oderCONVERT(INT,b)
, und arbeitet in diesem Fall , da wir die Eingangswerte sind immer positiv kennen.IIF
ist spezifisch für MS SQL 2012 und höher, daher kann keine Garantie für andere Implementierungen übernommen werden.quelle
Excel VBA,
2716 Bytes-9 Danke an @Nayrb und @TaylorScott
Wo Sie die Werte auf den Zellen mit eingeben
'string
.Wox
undy
sind die Eingabezeichenfolgen undz
ist eine boolesche Ausgabe.Wenn CInt (x) = CInt (y), dann ist z = 1
Verwenden von CIntquelle
?[Int(A1)=Int(B1)]
das nimmt eine Eingabe von den BereichenA1
undB1
und gibt an die VBE sofortigen FensterR ,
2827 BytesLiest Zahlen als Zeichenfolgen, konvertiert sie in Doppelte und überprüft, ob ihre Differenz ungleich Null ist.
Probieren Sie es online!
−1 Byte danke an Giuseppe
quelle
""
genügtLua , 20 Bytes
Probieren Sie es online!
quelle
Haskell , 20 Bytes
-11 Bytes dank Laikoni. -2 Bytes dank Zgarb.
Probieren Sie es online!
quelle
read
:a#b=0+read a==read b
Gema , 21 Zeichen
Kein Boolescher in Gema. Als das
@get-switch{}
/@set-switch{}
-Funktionen 0 und 1 zur Darstellung von Schaltzuständen verwenden, werden auch 0 und 1 verwendet.Die 2 Zeichenfolgen werden auf separaten Eingabezeilen übergeben.
Probelauf:
quelle
Perl 5, 9 + 1 (
-p
) = 10 Bytesversuche es online
quelle
Gestapelt , 8 Bytes
Probieren Sie es online!
Erläuterung
quelle
Attache , 11 Bytes
Probieren Sie es online!
Dies erfordert eine Reihe von Zeichenfolgen, z
V["0001", "1 "]
. Einfach ausgedrückt,Map&:N
ist eine Funktion, dieN
ihr Argument abbildet undSame
prüft, ob das Array nur gleiche Mitglieder enthält. (Unterhaltsame Tatsache: Diese Funktion funktioniert für mehr als 2 Zeichenfolgenargumente.)quelle
SNOBOL4 (CSNOBOL4) , 42 Bytes
Probieren Sie es online!
Gibt 1 für wahr, nichts für falsch aus. Da
(Leerzeichen) der Verkettungsoperator in SNOBOL ist,
EVAL
ergibt eine Zahl mit führenden / nachfolgenden Leerzeichen die Zahl selbst und kümmert sich ordentlich um alle führenden Nullen.EQ
testet auf numerische Gleichheit, setzt bedingtOUTPUT
auf 1 anSuccess
.quelle
Sinclair ZX81 / Timex TS1000 / 1500 BASIC, ~ 29 tokenisierte BASIC-Bytes
Neue Lösung dank Neil (danke für den Tipp).
Diese Lösung erfordert Benutzereingaben. Geben Sie also zwei Zeichenfolgen mit Leerzeichen und / oder führenden Nullen ein oder zwei Zeichenfolgen mit ungleichem numerischen Wert.
0
ist falsch und1
ist true, sobald Zeile 3 den Wert jeder eingegebenen Zeichenfolge verglichen hat.Alte Lösung: Sinclair ZX81 / Timex TS1000 / 1500 BASIC, ~ 46 tokenisierte BASIC-Bytes
Die eigentliche Prüfung erfolgt in Zeile drei, die nur ~ 16 tokenisierte BASIC-Bytes enthält. Wenn Sie also jedes Testfallpaar im Direktmodus eingeben, werden ca. 30 Byte aus der Liste entfernt. Beachten Sie, dass diese Byteanzahl das nicht enthält
var stack
.quelle
INPUT A$
und verwendenINPUT B$
? Ich glaube auch nicht, dass du das()
s brauchst .APL (NARS2000) , 7 Byte
Nun ja, ich weiß, dass NARS2000 hier nicht mit Dyalog konkurrieren kann, da es Unicode verwendet, aber ich dachte, ich würde lieber angeben
⍥
( Komposition in NARS2000 genannt, obwohl es eigentlich nichts mit Komposition zu tun hat), was Dyalog nicht tut habe da ein eingebautes gesehen und habe es hier noch nie benutzt. In Dyalog muss es implementiert werden als{(⍵⍵⍺)⍺⍺⍵⍵ ⍵}
. Es ruft die monadische Funktion des rechten Operanden sowohl für das linke als auch für das rechte Argument auf und ruft dann die dyadische Funktion des linken Operanden für die Ergebnisse auf.Hier ist der rechte Operand
⍎
( Execute , dh eval) und der linke Operand ist=
( Equal To , dh überprüfe, ob seine Argumente gleich sind).quelle