Mam problem w pracy. Muszę porównać dwie liczby, które są ciągami znaków z dwóch różnych baz danych. Liczby mogą zawierać początkowe zera i / lub początkowe / końcowe spacje. Więc mogę mieć "0001 "
z jednej bazy danych iz " 1 "
drugiej.
Rozwiązałem problem w języku C # za pomocą następującego kodu:
Func<string, string, bool> f = (a,b) => int.Parse(a.Trim()) == int.Parse(b.Trim())
Wyzwanie
To naprawdę proste wyzwanie, odpowiednie dla początkujących i każdego rodzaju ezoterycznych języków. Biorąc pod uwagę dwie liczby jako ciągi znaków, które mogą zawierać początkowe zera i / lub wiodące / końcowe spacje, napisz najkrótszy kod, który sprawdza, czy dwa ciągi reprezentują tę samą liczbę.
- Dane wejściowe muszą być dwoma łańcuchami lub odpowiednikiem w twoim języku (tablica znaków jest OK) i zawsze będą reprezentować wartości całkowite większe od zera.
- Dane wyjściowe muszą być dowolnymi dwiema spójnymi wartościami, które reprezentują prawdziwą wartość i wartość falsey.
Przykłady
A B Result
----------------------------
"0001" "1 " true
"1450" "1450 " true
"0010001 " " 10001 " true
"0010000" " 10 " false
"101023" "101024" false
To jest golf golfowy , więc wygrywa najkrótszy kod dla każdego języka!
Odpowiedzi:
JavaScript , 11 bajtów
Nadużywanie zasad obsady Javascript jest trochę;
+a
wymuszaa
na typ numeryczny.-6 bajtów dzięki Shaggy i Martinowi Enderowi ♦
Również fajne ujęcie LiefdeWen :
źródło
c=
, a curry jest również w porządku, więc możesz użyća=>b=>...
zamiast(a,b)=>
. W końcu mój JavaScript jest trochę zardzewiały, ale myślę, że coś w!(a-b)
tym stylu też by działało?a
na typ liczbowy z jednością+
.05AB1E , 1 bajt
Wypróbuj online!
Wyjaśnienie
Porównanie równości
Q
automatycznie spróbuje ocenić ciągi znaków jako ints przed porównaniem.źródło
|0+Q
był wystarczająco krótki ...Operacyjny język skryptowy Flashpoint , 33 bajty
Zadzwoń z:
Wydajność:
Alternatywna wersja (41 bajtów):
Nadal 5 bajtów krótszych niż te bardziej proste
f={t=_this;call(t select 0)==call(t select 1)}
39 bajtów:
count
(który zwraca rozmiar tablicy) działa zamiastforEach
, ponieważ można nadać mu „lambda”, która jest używana jako warunek do zliczania tylko elementów tablicy, które spełniają ten warunek. „Warunek” użyty w tym przypadku nie jest prawidłowym warunkiem, ale nie ma tutaj znaczenia, ponieważ nie powoduje błędu, a zwracana wartośćcount
nie jest potrzebna.źródło
Taxi , 488 bajtów
Wypróbuj online!
Nie golfowany:
Taxi jest (względnie) dobrze przystosowane do tego wyzwania, ponieważ ciągi są jedynym dozwolonym typem wejścia lub wyjścia.
The Babelfishery
jest tym, co konwertuje ciągi na liczbę (i odwrotnie) i obsługuje usuwanie wszystkich spacji i zer wiodących. Będzie również obsługiwać liczby ujemne, jeśli-
będzie znajdować się bezpośrednio przed pierwszą cyfrą. NastępnieEqual's Corner
sprawdza dwie wartości względem siebie iWriter's Depot
udostępnia dane wyjściowe w formacie ciągu. Wyjście jest1
dla prawdy i0
dla falsey.źródło
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 bajtów
Z
-O0
(co jest ustawieniem domyślnym).Wypróbuj online!
C, 32 bajty
Wypróbuj online!
źródło
char
, a kiedy przekazujesz tablicę do funkcji, faktycznie przekazujesz wskaźnik do pierwszego elementu tablicy. Tutaj wskaźniki dochar
tablic są domyślnie konwertowane na liczby całkowite po przekazaniu do funkcji, a liczby całkowite są konwertowane z powrotem na wskaźniki podczas wywoływaniaatoi
.s=foo;
zamiast tegoreturn foo;
musisz oznaczyć to jako „x86 gcc z wyłączoną optymalizacją”, a nie tylko „C”, ponieważ ten kod nie zwraca wartości z wyjątkiem artefaktu implementacji.s=retval;
zamiast sięreturn retval;
zepsuć. Wygląda na to, że wewnętrzna logika gcc (z-O0
tylko) faktycznie traktuje ostatnie wyrażenie jako wartość zwracaną, być może w ten sam sposób, w jaki działa wyrażenie wyrażenia GNU C. (Ale to wymagas=
). Na ARM32 oblicza==
wynikr3
, a następnie używa dodatkowej wartości,mov r0, r3
aby uzyskać wartość zwracaną! Więc to nie jest hack specyficzny dla x86, togcc -O0
hack, który gcc wydaje się dawać z siebie wszystko.J , 4 bajty
Porównaj
=
po&
dokonaniu ocenydo
. Może być również=&".
Wypróbuj online!źródło
-10
), Jak i negatywów, gdy J je rozumie (np._10
) Ze względu na sposób działania monadycznego-
.Siatkówka , 11 bajtów
Wypróbuj online!
Dane wejściowe są oddzielone od linii, ale zestaw testów używa separacji przecinków dla wygody. Wydruki
1
dla równości i0
nierówności.Wyjaśnienie
Konwertuj każdą linię na unary. To ignoruje wiodące zera i spacje.
Deduplikacja: wyczyść drugą linię, jeśli obie są takie same.
Sprawdź, czy łańcuch kończy się teraz na linii.
źródło
Python 3 , 25 bajtów
Wypróbuj online!
źródło
Brain-Flak , 22 bajty
Wypróbuj online!
Zaoszczędzono 4 bajty dzięki Jo Kingowi .
źródło
Trójkątność , 17 bajtów
Wypróbuj online!
Trójkątność jest raz konkurencyjna!
Jak to działa
Trójkątność wymaga, aby kod miał trójkątny rozkład kropek. Oznacza to, że długość każdego wiersza musi być równa liczbie wierszy pomnożonej przez 2 i zmniejszonej, a każdy wiersz musi mieć (z każdej strony) liczbę kropek równą swojej pozycji w programie (dolny wiersz to wiersz 0, ten powyżej to rząd 1 i tak dalej). Mając to na uwadze, przeanalizujmy, jak działa kod:
źródło
Alice , 7 bajtów
Wypróbuj online!
Działa dowolny separator inny niż cyfrowy. Wydruki
1
dla równości i0
nie tylko.Wyjaśnienie
źródło
Japt , 3 bajty
Spróbuj
Konwertuje drugie wejście na liczbę całkowitą i porównuje równość z pierwszym.
źródło
APL (Dyalog) , 4 bajty
3 bajty zapisane dzięki @ Adám
Wypróbuj online!
źródło
=/⍎¨
jq, 24 znaki
2 ciągi znaków są przekazywane jako elementy tablicy.
Przykładowy przebieg:
Wypróbuj online! ( Wszystkie przypadki testowe )
źródło
Łuska , 3 bajty
Wypróbuj online!
Wyjaśnienie
źródło
Ër
również działa.PowerShell , 20 bajtów
Podobne do odpowiedzi JavaScript, tylko dłużej, ponieważ PowerShell nie ma curry. Używa
+
rzutowania pierwszego ciągu na liczbę całkowitą, a następnie-eq
uals automatycznie rzuca drugi ciąg na liczbę całkowitą. Dane wyjściowe to prawda / fałsz.Wypróbuj online!
źródło
PowerShell , 19 bajtów
Wypróbuj online!
-join
tablica argumentów ($args
) z reprezentacją ciągu operatora porównania (-eq
), a następnie oceń wyrażenie za pomocąInvoke-Expression
(iex
).źródło
+
radzisz bez potrzeby rzucania na liczbę całkowitą, podczas gdy moje łamie się, jeśli usunę, ponieważ wykonuje sprawdzanie równości ciągów.00009
a077
wynikowy kod to00009 -eq077
, doskonale poprawny fragment kodu. W czasie wykonywania masz do czynienia bezpośrednio z ciągiem, więc musisz rzucić go najpierw, aby operacja została wykonana na liczbach.Q (Kdb +), 13 bajtów
Wyjaśnienie
(x; y): lista dwóch danych wejściowych.
„J” $: rzutowanie każdego wejścia na długi (7j) typ z ciągu (10c), który może poprawnie interpretować
białe znaki i początkowe zera.
= /: sprawdza równość elementów na liście (każda kolejna para).
Ponieważ jest tylko jedna para, zwraca pojedynczy boolian 0b / 1b.
źródło
{=/["J"$(x;y)]}
Dla 15 bajtów ... Chociaż dla 8 bajtów można to mieć:(~/)"J"$
jeśli tylko używasz REPL i przekazujesz dane wejściowe jako listę ciągów .. lub{(~/)"J"$x}
dla 11 jako funkcji.T-SQL, 35 bajtów
Zgodnie z naszymi standardami dane są wprowadzane za pomocą wcześniej istniejącej tabeli
t
zvarchar
polamia
ib
.Zwraca,
1
jeśli pasują, jeśli nie pasują0
.Kilka funkcji matematycznych (w tym SQL
ABS
,FLOOR
iCEILING
) zrobi niejawna konwersja do numeryczny jeśli podane parametry ciąg ten jest krótszy niż jawneCAST(a AS INT)
lubCONVERT(INT,b)
i działa w tym przypadku, ponieważ wiemy, że wartości wejściowe są zawsze pozytywne.IIF
jest specyficzny dla MS SQL 2012 i wyższych, więc nie ma gwarancji na inne implementacje.źródło
Excel VBA,
2716 bajtów-9 Dzięki @Nayrb i @TaylorScott
Gdzie wpisujesz wartości w komórkach za pomocą
'string
.Gdziex
iy
są wejściowymi ciągami znaków iz
są wynikiem logicznym.Jeśli CInt (x) = CInt (y) to z = 1
Korzystanie z CIntźródło
?[Int(A1)=Int(B1)]
, że wykonuje wejściowe z przedziałówA1
iB1
i wyjścia do bezpośredniego okna VBER ,
2827 bajtówOdczytuje liczby jako ciągi znaków, konwertuje je na liczby podwójne i sprawdza, czy ich różnica nie jest równa zero.
Wypróbuj online!
-1 bajt dzięki Giuseppe
źródło
""
wystarczyLua , 20 bajtów
Wypróbuj online!
źródło
Haskell, 20 bytes
-11 bajtów dzięki Laikoni. -2 bajty dzięki Zgarb.
Wypróbuj online!
źródło
read
:a#b=0+read a==read b
Gema, 21 characters
No boolean in Gema. As the
@get-switch{}
/@set-switch{}
functions use 0 and 1 to represent switch statuses, also used 0 and 1.The 2 strings are passed on separate input lines.
Sample run:
źródło
Perl 5, 9 + 1 (
-p
) = 10 bytestry it online
źródło
Stacked, 8 bytes
Try it online!
Explanation
źródło
Attache, 11 bytes
Try it online!
This takes an array of strings, such as
V["0001", "1 "]
. Simply stated,Map&:N
is a function that mapsN
over its argument, andSame
checks that the array contains only equal members. (Fun fact: this function works for more than 2 string arguments.)źródło
SNOBOL4 (CSNOBOL4), 42 bytes
Try it online!
Outputs 1 for truthy, nothing for falsey. Since
(space) is the concatenation operator in SNOBOL,
EVAL
ing a number with leading/trailing spaces yields the number itself, and it also neatly takes care of any leading zeroes.EQ
tests for numerical equality, conditionally settingOUTPUT
to 1 onSuccess
.źródło
Sinclair ZX81/Timex TS1000/1500 BASIC, ~29 tokenized BASIC bytes
New solution thanks to Neil (thanks for the tip).
This solution requires user input, so enter in two strings with white spaces and/or leading zeros, or enter two strings of non-equal numeric value;
0
is false and1
is true once line three has compared the value of each string entered.Old solution: Sinclair ZX81/Timex TS1000/1500 BASIC, ~46 tokenized BASIC bytes
The actual check is done in line three, which is only ~16 tokenized BASIC bytes; so entering each test case pair using direct mode will save ~30 bytes from the listing. Note that this byte count does not include the
var stack
.źródło
INPUT A$
andINPUT B$
? Also I don't think you need the()
s.APL (NARS2000), 7 bytes
Well, yes, I do know NARS2000 can't compete over Dyalog here since it uses Unicode, but I thought I'd rather show off
⍥
(called Composition in NARS2000, even though it's actually unrelated to function composition), something Dyalog doesn't have as a built-in and I haven't ever seen used here. In Dyalog, it has to be implemented as{(⍵⍵⍺)⍺⍺⍵⍵ ⍵}
. What it does is call the right operand monadic function on both the left and right argument, and then call the left operand dyadic function on the results.Here, the right operand is
⍎
(Execute, i.e. eval) and the left operand is=
(Equal To, i.e. check if its arguments are equal).źródło