Die Aufgabe
In dieser Herausforderung besteht Ihre Aufgabe darin, ein Programm oder eine Funktion zu schreiben, die einen String aufnimmt und einen Wahrheits- oder Falschwert ausgibt, je nachdem, ob das erste Zeichen und das letzte Zeichen des Eingabe-Strings gleich sind.
Eingang
Sie können Eingaben auf jede vernünftige Weise vornehmen. Unter der Annahme, dass die Eingabe in einer vordefinierten Variablen vorhanden ist, ist dies jedoch nicht zulässig. Das Lesen aus einer Datei, einer Konsole, einer Befehlszeile, einem Eingabefeld usw. oder die Eingabe als Funktionsargument ist zulässig.
Ausgabe
Sie können in jedem vernünftigen Format ausgeben, mit Ausnahme der Zuweisung des Ergebnisses zu einer Variablen. Das Schreiben in eine Datei, eine Konsole, eine Befehlszeile, eine modale Box, Funktionsanweisungen return
usw. ist zulässig.
Zusätzliche Regeln
Die Eingabe kann auch ein leerer String sein, für den Sie einen falschen Wert zurückgeben sollten.
Single-Char Input Strings sollten ein echtes Ergebnis haben.
Ihr Programm sollte zwischen Groß- und Kleinschreibung unterscheiden.
helloH
sollte einen Falsey-Wert ausgeben.Sie können nur einen einzigen Wahrheitswert und einen einzigen Falsey-Wert haben. Beispielsweise ist die Ausgabe
false
für eine0
Eingabezeichenfolge und für eine andere Eingabezeichenfolge als False-Werte nicht zulässig.Standardlücken sind nicht erlaubt.
Testfälle
Input -> Output
"10h01" Truthy
"Nothing" Falsey
"Acccca" Falsey
"wow!" Falsey
"wow" Truthy
"H" Truthy
"" Falsey
Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes!
.
, aber es stimmt nicht mit Zeilenvorschüben überein. Wenn Sie das String- Tag verwenden, geben Sie im Allgemeinen genau an, welche Zeichen in der Eingabe angezeigt werden können.AbAb => false
Antworten:
Gelee , 3 Bytes
Probieren Sie es online!
quelle
Python 3 , 23 Bytes
Die Ausgabe erfolgt über den Exit-Code, daher ist 0 (Erfolg) wahr und 1 (Misserfolg) falsch. Wenn dies akzeptabel ist, kann ein Byte gespeichert werden.
Probieren Sie es online!
Wie es funktioniert
Wenn s eine leere Zeichenfolge ist,
s[0]
wird zunächst ein IndexError ausgelöst , wodurch das Programm fehlschlägt.Wenn bei nicht leeren s das erste und das letzte Zeichen gleich sind,
s[0]!=s[-1]
wird False ausgewertet , sodass das Programm sauber und sofort beendet wird.Wenn sich die Zeichen unterscheiden,
s[0]!=s[-1]
wird der Wert " True" ( Wahr) ausgewertet , wodurch der Vergleichs[-1]<e
durchgeführt wird. Da e undefiniert ist, wird ein NameError ausgelöst .Wenn keine Abwärtskompatibilität mit Python 2 gewünscht ist,
Funktioniert auch, da der Vergleich einer Zeichenfolge mit einer Ganzzahl einen TypeError auslöst .
quelle
JavaScript, 19 Bytes
quelle
endsWith
Methode für String-Objekte gibt. Nett! :)endsWith()
?! Ich habe auf eine Gelegenheit gewartet, sie zu nutzen.Mathematica, 15 Bytes
Nimmt eine Reihe von Zeichen. Löst Fehler aus, wenn die Eingabe leer ist, aber ignoriert werden kann.
quelle
===
der leere Fall behandelt :)05AB1E , 4 Bytes
Probieren Sie es online! oder Probieren Sie alle Tests aus
quelle
ÂâćüQ
verwirrender sein und ein Byte gewinnen!ćsθQ
ist ein weiterer 4-Byte.Retina ,
1312 BytesProbieren Sie es online! Beinhaltet eine Testsuite. Bearbeiten: 1 Byte dank @Kobi gespeichert.
quelle
C ++, 39 Bytes
Vollständige Programme:
Probieren Sie es online aus
quelle
s[0]
um*s
zwei zu speichern Bytes jedes?Brachylog , 4 Bytes
Probieren Sie es online!
Erläuterung
quelle
Java,
81.77BytesVersuchen Sie es online
true
wenn sie sind gleich, sonstfalse
,false
für leere ZeichenfolgeArray-Version, 60 Byte
quelle
Charcter.MAX_VALUE - Character.MIN_VALUE
65535s.charAt(l-1)==s.charAt(0)
würde zwei Bytes sparen.Python 2 ,
262524 BytesVielen Dank an @Dennis für das Speichern eines Bytes!
Probieren Sie es online!
quelle
Brainfuck , 43 Bytes
Probieren Sie es online!
Erläuterung
Die Hauptschleife ist
[>[->+<<->],]
. Nach jeder Iteration ist die Zelle rechts von der aktuellen Position das erste Byte der Zeichenfolge, und die Zelle links ist die Differenz zwischen dem zuletzt verarbeiteten und dem ersten Zeichen.<[[-]-<]
wandelt das Endergebnis in -1 um, wenn es nicht Null ist, und der Rest wandelt -1 und 0 in 48 und 49 ("0" bzw. "1") um.quelle
Haskell , 21 Bytes
c
nimmt aString
und gibt a zurückBool
.Probieren Sie es online!
c s=s!!0==last s
.take 1s
Gibt eine Liste aus, die nur das erste Element von ist,s
soferns
es nicht leer ist. In diesem Fall ist es auch leer.last s
würde bei einer leeren Zeichenfolge einen Fehler machen, aber Haskells Faulheit speichert ihn: Eine Zeichenfolge mit einem einzelnen Element unterscheidet sich immer von der leeren Zeichenfolge, ohne dass das Element ausgewertet wird.quelle
MATL, 5 Bytes
Probieren Sie es bei MATL Online!
Erläuterung
In dem Fall, dass eine leere Eingabezeichenfolge behandelt werden muss, würde so etwas wie die folgenden (8 Bytes) funktionieren
Diese Lösung stellt a einfach vor
0
die Vorderseite der N x N-Matrix, sodass für eine leere Eingabe, wenn die Matrix vorhanden ist0 x 0
, immer noch ein0
Wert vorhanden ist, der dann von übernommen wird0)
Probieren Sie es bei MATL Online aus
quelle
5L)d~
.tn?&=PO)}F
mit leeren Eingaben umgehen. Sie sind sich nicht sicher, ob es einen effizienteren Weg gibt.)Japt , 6 Bytes
Probieren Sie es online!
quelle
false
). Ich denke, Sie können dies mittJ ¥Ug
APL (Dyalog) , 4 Bytes
Probieren Sie es online!
Erläuterung
Hier ist der Grund, warum dies bei leeren Zeichenfolgen funktioniert. Das Anwenden
⊃
auf eine leere Zeichenfolge gibt ein Leerzeichen zurück. Das Umkehren einer leeren Zeichenfolge gibt jedoch immer noch eine leere Zeichenfolge zurück. Wenn Sie also eine leere Zeichenfolge mit einer nicht leeren Zeichenfolge vergleichen (in diesem Fall
), erhalten Sie einen leeren numerischen Vektor. Und das Anwenden
⊃
auf einen leeren numerischen Vektor gibt zurück0
. Das Übergeben einer leeren Zeichenfolge führt daher zu einer Rückkehr0
.quelle
(⊃⌽)=⊃
oder⊢/=⊃
, aber keines von beiden liefert das richtige Ergebnis.⌽=⊃
Vergleicht stattdessen die umgekehrte Zeichenfolge mit ihrem ersten Zeichen und wählt dann das erste Element davon aus. Wenn die Zeichenfolge leer ist, es endet , einen Raum zu einem leeren String zu vergleichen, die eine leere Boolesche Liste gibt, von denen die (dazu gezwungen) erste Element⊃
ist0
- die richtige Antwort für leere Strings. Ihr Ausdruck ist gleichbedeutend mit,⊃⊃=⌽
weil er=
kommutativ ist.⊃⌽=⊃
ist nicht dasselbe wie(⊃⌽)=⊃
. Es ist teurer, da es alle Elemente vergleicht, anstatt nur das erste und das letzte. Auch würde es nicht funktionieren, wenn das OP Zahlen anstelle von Zeichenketten verwendet hätte.The first argument reversed
→The right argument reversed
Java,
5243 BytesUm dies zu erreichen, geben Sie dies in eine Funktion wie die folgende ein, die ein Lambda "go" macht:
quelle
s.endsWith(""+s.charAt(0))
statts.charAt(0)==s.charAt(s.length()-1)
s->""!=s&&s.endsWith(""+s.charAt(0))
new String()
den Lambda. Es wird eine Ausnahme auslösen. Referenzsemantik funktioniert hier nicht.Ruby,
2624 BytesZwei Bytes dank @philomory gespart !
Erster Beitrag über Codegolf -))
quelle
e[0]&&e[0]==e[-1]
, da wenne
leer,e[0]
wird Null sein. Eigentlichnil
ist es nicht gut , darüber nachzudenken, da es sich um Falschgeld handelt, aber nicht um dasselbe, das der Vergleich zurückgibt. Nach dem Hinzufügen!!
werden immer noch 2 Zeichen gespeichert.PHP> = 7.1, 23 Bytes
Gibt 1 für gleich und nichts aus, wenn sich das Zeichen unterscheidet
quelle
Schnell, 57 Bytes
quelle
a.last
notwendig?C #,
3830 Bytes8 Bytes dank @raznagul gespeichert.
quelle
s
vergleichen Sie es einfach mit""
. Den?:
-Operator brauchst du auch nicht . Verwenden&&
hat das gleiche Ergebnis.&
den gleichen Effekt?&
funktioniert einfach nicht. Mit&&
dem zweiten Ausdruck wird nicht validiert, ob der erste Ausdruck falsch ist. Mit&
der Sekunde wird der Ausdruck immer validiert und schlägt mit einemIndexOutOfRangeException
auf die leere Zeichenkette bezogenen Testfall fehl .s.Last()
stattdessen verwendens[s.Length-1]
R, 40 Bytes
Danke an Nitrodon für -2 Bytes.
Vielen Dank an MickyT für -8 Bytes.
Prüfung:
Ausgabe:
quelle
rev(y<-el(strsplit(x,"")))==y
.f=
function(x)x>""&&rev(y<-charToRaw(x))==y
> <> ,
3933 BytesIch benutze zum ersten Mal> <> und spiele Codegolf, daher sind hilfreiche Vorschläge willkommen.
Der Code besteht aus drei grundlegenden Abschnitten.
quelle
Google Sheets, 33 Bytes
Nimmt Eingaben von Zelle
[A1]
und Ausgaben1
für wahrheitsgemäße Eingaben und0
für falsche Eingaben.Es wird darauf hingewiesen, dass die Klammern in
Exact(
undRight(
nicht geschlossen bleiben, da Google Sheets dies automatisch korrigiert, sobald der Benutzer den Formeltext eingegeben und die Eingabetaste gedrückt hat, um diese Zelle zu verlassen.Ausgabe
quelle
&
. Es giltA=a
auch als wahr. Der kürzeste, den ich bekommen kann, ist 38 Bytes:=AND(EXACT(LEFT(A1),RIGHT(A1)),A1<>"")
oder die Alternative=IFERROR(CODE(A1)=CODE(RIGHT(A1)),1=0)
.TRUE
für jede fehlerfreie Eingabe zurückgegeben. ( Screenshot ) Funktioniert es in Ihrer Kopie für alle Testfälle? ExcelGuy hat eine Antwort , die aus den gleichen Gründen wie meine oben endet.*
stattdessen&
die binäre und die Anweisung verwenden sollen, aber das lässt immer noch das"A"="a"
Problem, das ich völlig übersehen hatte. All das und ein paar Syntaxkorrekturen führen mich zu=EXACT(LEFT(A1),RIGHT(A1))*(A1<>"")
35, aber ich habe die Sprache auf Google Sheets umgestellt, wodurch ich die doppelte Klammer des Terminals in derExact
Anweisung fallen ließ und=(A1<>"")*Exact(Left(A1),Right(A1
33 Bytes renderteR,
5043414064Zweite Lösung mit 41 Bytes für eine aufrufbare Funktion - dank @ niczky12 & @ Giuseppe - geändert für x = ""
Zuerst mit 50 Bytes, aber nicht für die Herausforderung
quelle
charToRaw
mitutf8ToInt
zu produzierenNA
s , wenn die Zeichenfolge leer ist.{}
um den Funktionskörper entfernen .(y==rev(y))[1]
ist um ein Byte kürzerNA
zu einer leeren Zeichenfolge, jedochFALSE
zu"ab"
. Probieren Sie es online! .Oktave, 16 Bytes
Es nimmt einen String
s
als Eingabe und vergleicht das erstes(1)
mit dem letzten Elements(end)
.Dies könnte sein ,
@(s)s(1)-s(end)
wenn es in Ordnung zu tauschen isttrue/false
zufalse/true
.quelle
GNU grep , 12 Bytes
Im erweiterten oder PCRE-Modus ausführen.
Ich weiß nicht, ob dies als Betrug angesehen wird oder nicht.
quelle
JavaScript, 20 Bytes
Fügen Sie
f=
am Anfang und rufen Sie wief(arg)
.Erläuterung
Diese Funktion nimmt ein Argument auf
_
._[0]==_.slice(-1)
Überprüft im Funktionskörper, ob das erste Element von_
(am0
Index) dem letzten Element entspricht, und gibt den entsprechendentrue
oder denfalse
Booleschen Wert zurück.quelle
SILOS , 81 Bytes
Probieren Sie es online!
quelle
Common Lisp,
83746158 BytesOriginal: 83 Bytes
Ich habe gerade angefangen, Common Lisp zu lernen, also habe ich das Gefühl, einen Putter auf eine Driving Range zu bringen. Hier muss eine Art rekursiver Makro-Assistenten oder Array-Manipulation möglich sein, die ich nicht sehe.
Dies ist eine anonyme Funktion, die eine Zeichenfolge als Eingabe akzeptiert:
Schön gemacht:
Würde gerne eine glattere Lösung sehen!
Revision 1: 74 Bytes
Muss ich lieben diese Standard-Bibliotheksfunktionen!
Hässlich:
Ziemlich:
Revision 1.5: 61 Bytes
Leerzeichen!
Revision 2: 58 Bytes
Hässlich:
Ziemlich:
Das ist alles für jetzt! Ich denke, ich bin schon schlauer.
quelle
if
stattand
und(mismatch(reverse s)s)
statt(mismatch s(reverse s))
AWK,
2934 BytesDieser kann leicht schummeln, da AWK mit der folgenden Option aufgerufen werden muss:
In GNU Awk können Sie die Langform-Synonyme verwenden:
Also habe ich der Gesamtsumme 5 Bytes hinzugefügt, um dies zu berücksichtigen.
Hässlich:
Ziemlich:
quelle