Zadanie
W tym wyzwaniu Twoim zadaniem jest napisanie programu lub funkcji, która przyjmuje ciąg znaków i generuje wartość true lub falsey na podstawie tego, czy pierwszy znak i ostatni znak wejściowego ciągu znaków są równe.
Wkład
Możesz brać udział w jakikolwiek rozsądny sposób. Zakładanie obecności danych wejściowych w predefiniowanej zmiennej jest jednak niedozwolone. Dozwolone jest czytanie z pliku, konsoli, wiersza poleceń, pola wprowadzania itp. Lub przyjmowanie danych wejściowych jako argumentu funkcji.
Wydajność
Możesz generować dane w dowolnym rozsądnym formacie, z wyjątkiem przypisania wyniku do zmiennej. Zapis do pliku, konsoli, wiersza poleceń, pola modalnego, return
instrukcji funkcji itp. Jest dozwolony.
Dodatkowe zasady
Wejście może być również pustym ciągiem, dla którego powinieneś zwrócić wartość falsey.
Ciągi wejściowe pojedynczego znaku powinny mieć prawdziwy wynik.
W twoim programie rozróżniana jest wielkość liter.
helloH
powinien generować wartość falsey.Możesz mieć tylko jedną wartość Prawdy i jedną wartość Falsey. Na przykład wyprowadzanie
false
dla ciągu wejściowego i0
dla innego ciągu wejściowego jako wartości Falsey jest niedozwolone.Standardowe luki są niedozwolone.
Przypadki testowe
Input -> Output
"10h01" Truthy
"Nothing" Falsey
"Acccca" Falsey
"wow!" Falsey
"wow" Truthy
"H" Truthy
"" Falsey
To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach!
.
, ale nie pasowałby on do linii. Ogólnie rzecz biorąc, jeśli używasz znacznika ciągu , określ dokładnie, jakie znaki mogą pojawiać się na wejściu.AbAb => false
Odpowiedzi:
Galaretka , 3 bajty
Wypróbuj online!
źródło
Python 3 , 23 bajty
Wyjście odbywa się za pomocą kodu wyjścia, więc 0 (sukces) jest prawdą, a 1 (niepowodzenie) jest fałszem. Jeśli to jest do zaakceptowania, bajt może być zbawiony.
Wypróbuj online!
Jak to działa
Przede wszystkim, jeśli s jest pustym łańcuchem,
s[0]
wywoła błąd IndexError , powodując awarię programu.Dla niepustych s , jeśli pierwsze i ostatnie znaki są równe,
s[0]!=s[-1]
oceni się fałsz , więc wyjść programowych czysto i natychmiast.Wreszcie, jeśli postacie są różne,
s[0]!=s[-1]
przejdzie w wartość Prawda , co spowodujes[-1]<e
wykonanie porównania. Ponieważ e jest niezdefiniowany, wywołuje to błąd NameError .Jeśli zgodność wsteczna z Python 2 nie jest pożądana,
działa również, ponieważ porównywanie łańcucha z liczbą całkowitą wywołuje błąd TypeError .
źródło
JavaScript, 19 bajtów
źródło
endsWith
metoda obiektu String. Miły! :)endsWith()
? Czekałem na okazję z niego skorzystać.Mathematica, 15 bajtów
Zajmuje tablicę znaków. Zgłasza błędy, gdy dane wejściowe są puste, ale można je zignorować.
źródło
===
zajmuje się pustą skrzynką :)05AB1E , 4 bajty
Wypróbuj online! lub Wypróbuj wszystkie testy
źródło
ÂâćüQ
być bardziej zagmatwanym i zyskać bajt!ćsθQ
jest kolejnym 4-bajterowym.Siatkówka ,
1312 bajtówWypróbuj online! Obejmuje pakiet testowy. Edycja: Zapisano 1 bajt dzięki @Kobi.
źródło
C ++, 39 bajtów
Pełne programy:
Wypróbuj online
źródło
s[0]
aby*s
zapisać dwa bajty każdego?Brachylog , 4 bajty
Wypróbuj online!
Wyjaśnienie
źródło
Java,
8177 bajtówWypróbuj online
true
jeśli są równe, w przeciwnym raziefalse
,false
na pusty ciągWersja tablicy, 60 bajtów
źródło
Charcter.MAX_VALUE - Character.MIN_VALUE
65535s.charAt(l-1)==s.charAt(0)
zaoszczędziłby dwa bajty.Python 2 ,
262524 bajtówDzięki @Dennis za uratowanie bajtu!
Wypróbuj online!
źródło
pieprzenie mózgu , 43 bajty
Wypróbuj online!
Wyjaśnienie
Główna pętla to
[>[->+<<->],]
. Po każdej iteracji komórka po prawej stronie bieżącej pozycji jest pierwszym bajtem ciągu, a komórka po lewej stronie stanowi różnicę między ostatnio obsługiwanym znakiem a pierwszym.<[[-]-<]
konwertuje wynik końcowy na -1, jeśli niezerowy, a reszta konwertuje -1 i 0 na 48 i 49 (odpowiednio „0” i „1”).źródło
Haskell , 21 bajtów
c
bierze aString
i zwraca aBool
.Wypróbuj online!
c s=s!!0==last s
.take 1s
daje listę, która jest tylko pierwszym elementem,s
chyba żes
jest pusty, w którym to przypadku jest również pusty.last s
popełni błąd na pustym łańcuchu, ale lenistwo Haskella ratuje go: Łańcuch z jednym elementem zawsze różni się od pustego łańcucha, bez oceny jego elementu.źródło
MATL, 5 bajtów
Wypróbuj w MATL Online!
Wyjaśnienie
W przypadku, gdy trzeba obsłużyć pusty ciąg wejściowy, działałoby coś takiego jak następujące (8 bajtów)
To rozwiązanie po prostu przesuwa
0
na przód macierzy N x N, tak że dla pustego wejścia, gdy macierz jest0 x 0
, wciąż istnieje0
wartość, która jest następnie przechwytywana przez0)
Try it at MATL Online
źródło
5L)d~
.tn?&=PO)}F
to deal with empty input; not sure if there is a more efficient way)Japt, 6 bytes
Try it online!
źródło
false
). I think you can fix this withtJ ¥Ug
APL (Dyalog), 4 bytes
Try it online!
Explanation
Here is the reason this works on empty strings. Applying
⊃
to an empty string returns a space. But reversing an empty string still returns an empty string, so comparing an empty string with a non-empty string (in this case
) gives an empty numerical vector. And applying
⊃
to an empty numerical vector returns0
. Hence passing an empty string returns0
.źródło
(⊃⌽)=⊃
or⊢/=⊃
, but neither of those give the right result. Instead⌽=⊃
compares the reversed string to its first character, and then picks the first element of that. If the string is empty, it ends up comparing a space to an empty string, which gives an empty Boolean list, of which the (coerced) first element⊃
is0
– the correct answer for empty strings. Your expression is equivalent to⊃⊃=⌽
because=
is commutative.⊃⌽=⊃
is not the same as(⊃⌽)=⊃
. It is more expensive, as it compares all the elements instead of just the first and last. Also it wouldn't work had the OP used numbers instead of strings.The first argument reversed
→The right argument reversed
Java,
5243 bytesTo make it work, feed this into a function such as the following that makes a lambda "go":
źródło
s.endsWith(""+s.charAt(0))
instead ofs.charAt(0)==s.charAt(s.length()-1)
s->""!=s&&s.endsWith(""+s.charAt(0))
new String()
into the lambda. It will throw an exception. Reference semantics do not work here.Ruby,
2624 bytesSaved two bytes thanks to @philomory!
First post on codegolf -))
źródło
e[0]&&e[0]==e[-1]
, since ife
is empty,e[0]
will be nil. Actually, come to think of it,nil
is no good since it's falsey but not the same falsey that the comparison returns; still, after adding!!
you're still saving 2 characters.PHP>=7.1, 23 Bytes
prints 1 for equal and nothing if the character is different
źródło
Swift, 57 bytes
źródło
a.last
necessary?C#,
3830 bytesSaved 8 bytes thanks to @raznagul.
źródło
s
just compare it with""
. Also you don't need the?:
-Operator. Using&&
has the same result.&
have the same effect too?&
doesn't work. With&&
the second expression is not validated if the first expression is false. With&
the seconds expression is always validated and fails with aIndexOutOfRangeException
on the empty string test case.s.Last()
instead ofs[s.Length-1]
R, 40 bytes
Thanks to Nitrodon for -2 bytes.
Thanks to MickyT for -8 bytes.
Test:
Output:
źródło
rev(y<-el(strsplit(x,"")))==y
.f=
function(x)x>""&&rev(y<-charToRaw(x))==y
><>,
3933 bytesThis is my first time both using ><> and playing code golf, so helpful suggestions would be appreciated.
The code is in three basic sections.
źródło
Google Sheets, 33 Bytes
Takes input from cell
[A1]
and outputs1
for truthy input and0
for falsey input.It is noted that the parentheticals in
Exact(
andRight(
are left unclosed as Google Sheets automatically corrects this as soon as the user has input the formula text and pressed enter to leave that cell.Output
źródło
&
like that. Also, it considersA=a
to be true. The shortest I can get is 38 bytes:=AND(EXACT(LEFT(A1),RIGHT(A1)),A1<>"")
or the alternative=IFERROR(CODE(A1)=CODE(RIGHT(A1)),1=0)
.TRUE
for any non-error input. (screenshot) Does it work in your copy for all test cases? ExcelGuy has an answer that ends up like mine above for the same reasons.*
instead&
for the binary and statement, but that still leaves the"A"="a"
issue, which I had completely overlooked. All of that and a bit of syntax corrections leads me to=EXACT(LEFT(A1),RIGHT(A1))*(A1<>"")
for 35, but I have switched the language to Google Sheets, which allowed me to drop the terminal double parenthetical in theExact
statement, rendering=(A1<>"")*Exact(Left(A1),Right(A1
for 33 bytesR,
5043414064Second solution with 41 bytes for a callable function - thanks to @niczky12 & @Giuseppe - amended for x=""
First with 50 bytes but not for the challenge
źródło
charToRaw
withutf8ToInt
to produceNA
s when the string is empty.{}
around the function body.(y==rev(y))[1]
is shorter by a byteNA
for empty string butFALSE
for"ab"
. Try it online!.Octave, 16 bytes
It takes a string
s
as input, and compares the firsts(1)
element with the lasts(end)
.This could be
@(s)s(1)-s(end)
if it was OK to swaptrue/false
tofalse/true
.źródło
GNU grep, 12 bytes
Run in extended or PCRE mode.
I don't know if this is considered cheating or not.
źródło
JavaScript, 20 bytes
Add
f=
at the beginning and invoke likef(arg)
.Explanation
This function takes in an argument
_
. In the function body,_[0]==_.slice(-1)
checks whether the first element of_
(at0
th index) equals the last element of it, and returns the appropriatetrue
orfalse
boolean.źródło
S.I.L.O.S, 81 bytes
Try it online!
źródło
Common Lisp,
83746158 bytesOriginal: 83 bytes
I've just started learning Common Lisp, so I feel like I'm bringing a putter to a driving range. There must be some kind of recursive macro wizardry or array manipulation possible here that I'm not seeing.
This is an anonymous function that accepts a string as its input:
Prettified:
Would love to see a slicker solution!
Revision 1: 74 bytes
Gotta love those standard library functions!
Ugly:
Pretty:
Revision 1.5: 61 bytes
Whitespace!
Revision 2: 58 bytes
Ugly:
Pretty:
That's all for now! I think I'm smarter already.
źródło
if
instead ofand
and(mismatch(reverse s)s)
instead of(mismatch s(reverse s))
AWK,
2934 bytesThis one might be cheating slightly, because it requires invoking AWK with the option:
In GNU Awk you can use the long-form synonyms:
So I added 5 bytes to the total to account for this.
Ugly:
Pretty:
źródło