Haben Sie bemerkt, dass dies ein Palindrom ist?
Eingabe
Nicht negative Ganzzahl oder Zeichenfolge, die diese Zahl darstellt
Ausgabe
4 mögliche Ausgaben, die zwei Eigenschaften der Zahl darstellen:
- ist es Palindrom
- tricky # 2
Tricky # 2 property
Wenn number nicht palindrome ist, beantwortet diese Eigenschaft die Frage "Haben die erste und die letzte Ziffer die gleiche Parität?"
Wenn die Zahl palindrom ist, beantwortet diese Eigenschaft die Frage "Haben die erste und die mittlere Ziffer die gleiche Parität?". Bei geraden Längen ist die mittlere Ziffer eine der beiden mittleren Ziffern.
Beispiele
12345678 -> False False
Es ist kein Palindrom, erste und letzte Ziffer haben unterschiedliche Parität12345679 -> False True
Es ist kein Palindrom, erste und letzte Ziffer haben die gleiche Parität12344321 -> True False
Es handelt sich um ein Palindrom. Die erste Ziffer 1 und die mittlere Ziffer 4 haben unterschiedliche Paritäten123454321 -> True True
Es handelt sich um ein Palindrom. Die erste Ziffer 1 und die mittlere Ziffer 5 haben dieselbe Parität
PS
Sie können Art und Format der Ausgabe selbst bestimmen. Es können 4 verschiedene Werte sein. Erwähne es einfach in deiner Antwort.
quelle
Antworten:
05AB1E,
15,14,13 Bytes (Dank an Riley und carusocomputing)Versuchen Sie es online
Gibt mit Klammern zurück, wenn es sich um ein Palindrom handelt
Gibt mit 0 zurück, wenn die Parität unterschiedlich ist, und mit 1, wenn sie gleich ist
Ð
Füge Input hinzu, so dass ich genug Input habe, um damit zu arbeitenR
Kehrt das letzte Element des Stapels umQ
Prüfen Sie, ob es dasselbe ist (nimmt die beiden obersten Elemente und führt == aus)i
If-Anweisung geht also nur durch, wenn es sich um ein Palindrom handelt2
Drücken Sie die Nummer 2ä
Teilen Sie die Eingabe in 2 gleiche Schichten¨
Schieben Sie das erste Element der Teilung (1264621 ergibt 1264)}
Ende wennÈ
Überprüfen Sie, ob das letzte Element gerade ist¹
Drücken Sie den ersten Eingang erneutR
Kehre diese Eingabe umÈ
Überprüfen Sie, ob es jetzt noch istQ
Überprüfen Sie, ob diese geraden Ergebnisse gleich sind und implizit gedruckt werdenquelle
¨
anstelle von verwenden1£
.,
, implizite Ausgabe. Auch statt2ä
Sie können gegabelten benutzenÂ
; Einsparungen von 2 Byte für 12:ÐRQi¨}ȹRÈQ
,
sollte Sie an die Spitze treiben ;).PHP,
5552 Bytesnimmt Eingaben von STDIN entgegen; renn mit
-R
.Ausgabe:
10
für Palindrom und gleiche Parität11
für Palindrom und unterschiedliche Parität0
für Nicht-Palindrom und gleiche Parität1
für Nicht-Palindrom und unterschiedliche ParitätAnmerkungen:
strlen($n)/2
==log($n,10)/2
==log($n,100)
$n[1*log($n,100)]
$n[0*log($n,100)]
quelle
<?=
anstelle vonecho
sandbox.onlinephpfunctions.com/code/…$argn
ist nur mit definiert-R
und das erlaubt keine Tags.$argn
gibt es auch mit-F
. Aber nm.Jelly ,
16 bis14 BytesProbieren Sie es online!
Gibt zwei Zeilen aus:
1
für Palindrom,0
für nicht0
für knifflige # 2 ,1
für nichtErläuterung
quelle
Python 2 ,
706866 BytesProbieren Sie es online!
quelle
PowerShell ,
114 bis99 ByteProbieren Sie es online!
Dank @Sinusoid 15 Bytes gespart.
Eingaben als Zeichenfolge. Gibt ein Array vom Typ aus
(0|1) (True|False)
, wobei0
"kein Palindrom" und1
"Palindrom" angezeigt werden und dieTrue
angezeigte Parität übereinstimmtFalse
.Dies geschieht durch Verwendung eines Pseudoternärs und Indizierung an der entsprechenden Stelle
(a,b)[index]
. Der Index($n-eq-join$n[$n.length..0])
prüft, ob die Eingabe ein Palindrom ist. Wenn dies nicht der Fall, nehmen wir dena
Teil, der eine ist0
mit gekoppelt ob die Parität der ersten Ziffer$n[0]
ist-eq
ual der Parität der letzten Ziffer$n[-1]
. Ansonsten befinden wir uns in demb
Teil, der1
mit der Parität der mittleren Ziffer$z
(der Parität der ersten Ziffer)-eq
gekoppelt ist$n[$n.length/2]
.Früher musste ich
"$($n[0])"
die erste Ziffer als Ganzzahl korrekt umsetzen, da$n[0]
achar
und der Modulo-Operator s auf der Grundlage des ASCII-Werts und nicht des Literalwerts%
verschmelzenchar
, während astring
den Literalwert ergibt. Mit @Sinusoid konnte ich jedoch feststellen, dass0,1,2,...,9
alle Literalwerte die gleiche Parität wie48,49,50,...,57
haben. Wenn also der ASCII-Wert verwendet wird, erhalten wir immer noch das gleiche Ergebnis.Dieses Array verbleibt in der Pipeline, und die Ausgabe ist implizit.
quelle
$
wenn Sie%2
eine Zahl modulierten ? Ich habe es selbst versucht und es war nicht notwendig, wenn ich jeden Schritt einzeln ausgeführt habe, aber wenn Sie ihn in ein Array einfügen? Wird es von Powershell als anderer Variablentyp behandelt?$n[0]
Index erstellt wird, wird er als ausgegebenchar
. Die vom Operator erzwungene Umwandlung vonchar
nach erfolgt nicht von nach nach , sondern nach dem ASCII- Wert . Das führt stattdessen eine explizite Umwandlung in einen String durch, in den es ordnungsgemäß konvertiert wird . ... Obwohl jetzt, da Sie es erwähnen, die Parität von der von ASCII identisch ist , kann ich das wahrscheinlich abschätzen. Vielen Dank!int
%
'1'
1
49
"$( )"
1
0..9
48..57
VBA,
11799 Bytes18 Bytes dank Titus gespart
Es wird nicht viel erweitert, wenn es einmal formatiert ist:
Hier sind die gegebenen Testergebnisse:
quelle
&1
stattmod 2
. Sie könnten auch dasIf/Then
mitr=r+2-2*(left(s,1)-b &1)
oder sogar besser loswerdenIf s = StrReverse(s) then r=2
undr=r+1-(left(s,1)-b &1)
... und 2 Bytes weg mit dem Umkehren des Tricky # 2r=r+(left(s,1)-b &1)
:; sparen mehr mit Druck direkt:Debug.Print r+(left(s,1)-b &1)
. Sollte dann 95 Bytes sein; 98 wenn&1
nicht funktioniert.And
nicht nur verwendet&
. Ich habe herausgefunden, wie Sie Ihren ersten Vorschlag umsetzen können, aber ich konnte nicht herausfinden, wie Sie die dritte Zeile mit ändern wolltenStrReverse
.Sub p(s);b=s;If s=StrReverse(s)Then r=2:b=Mid(s,Len(s)/2+.1,1);Debug.?r+(Left(s,1)-b&1);End Sub
-> 0/2 für Palindrome, 1/0 für Tricky # 2Mid()
mitLeft(s,Len(s)/2+1)
oder so ersetzen können .Len(s)/2
= auf4.5
welche VBA gerundet4
. Wenn es 7 Zeichen lang ist, wirdLen(s)/2
= auf3.5
welches VBA auch gerundet4
. Hinzufügen0.1
korrigiert den Wahnsinn.Perl 6 , 48 Bytes
Versuch es
ergibt
(True True)
(True False)
(False True)
oder(False False)
Erweitert:
quelle
Java 8,
205197182168134 BytesAusgänge:
1
für falsch-falsch;2
für falsch-wahr;3
für wahr-falsch;4
für wahr-wahr.Erläuterung:
Probieren Sie es hier aus.
quelle
Haskell , 89 Bytes
Probieren Sie es online! Verbrauch:
f "12345"
. Gibt0
für True True,1
für True False,2
für False True und3
für False False zurück.Die Funktion
#
konvertiert beide Ziffern in ihre ASCII-Zeichencodes und summiert sie. Wenn beide gerade oder beide ungerade sind, ist die Summe gerade, andernfalls, wenn einer gerade und der andere ungerade ist, ist die Summe ungerade. Die Berechnung Modulo zwei,#
kehrt0
für gleiche Parität und aus1
anderen Gründen .f
prüft, ob die Eingabezeichenfolgex
ein Palindrom ist. Wenn nicht,#
wird mit aufgerufenx
und das letzte Zeichen vonx
und zwei wird zum Ergebnis hinzugefügt, andernfallsx
wird bei einem palindromischen Aufruf#
mit dem mittleren Zeichen vonx
stattdessen das Ergebnis so belassen, wie es ist.quelle
Kotlin , 142 Bytes
Probieren Sie es online!
quelle
REXX,
104100 BytesGibt logisches Wertepaar
0 0
,0 1
,1 0
oder1 1
.quelle
R,
115109105 BytesÜbernimmt die Eingabe von stdin. Gibt
FALSE FALSE
für False False,FALSE TRUE
für False True,TRUE FALSE
für True False undTRUE TRUE
für True True zurück.quelle
AWK,
9796 BytesAm einfachsten ist es, den Code in einer Datei abzulegen:
OddEven
dann mache:Die Ausgabe ist im Wesentlichen die Bitsumme der Vergleiche in der Frage, z
Ich habe versucht das Entfernen der
()
aus(s?0:2)
aber diese vermasselt Operatorpräzedenz irgendwie.quelle
CJam, 32 Bytes
Die Eingabe ist eine Zahl oben auf dem Stapel.
Erläuterung:
quelle
Ruby , 60 + 1 = 61 Bytes
Verwendet die
-n
Flagge.Probieren Sie es online!
quelle
Groovy,
326303 BytesGeschrumpfter Code:
Originalcode (mit Erklärung):
Originalcode (ohne Erklärung):
Eingang:
Ausgabe:
quelle