Czy zauważyłeś, że to jest palindrom?
Wprowadź
nieujemną liczbę całkowitą lub ciąg znaków reprezentujący ją
Wyjście
4 możliwe wyjścia, reprezentujące dwie właściwości liczby:
- czy to palindrom?
- trudne # 2
Podstępna właściwość # 2
Jeśli liczba nie jest palindromem, ta właściwość odpowiada na pytanie „Czy pierwsza i ostatnia cyfra mają tę samą parzystość?”
Jeśli liczba jest palindromem, ta właściwość odpowiada na pytanie „Czy pierwsza i środkowa cyfra mają tę samą parzystość?”. Dla parzystych długości środkowa cyfra jest jedną z dwóch środkowych cyfr.
Przykłady
12345678 -> Fałsz Fałsz
To nie jest palindrom, pierwsze i ostatnie cyfry mają różną parzystość12345679 -> Fałsz Prawda
To nie jest palindrom, pierwsze i ostatnie cyfry mają tę samą parzystość12344321 -> Prawda Fałsz
To palindrom, pierwsza cyfra 1 i środkowa cyfra 4 mają różną parzystość123454321 -> Prawda Prawda
To palindrom, pierwsza cyfra 1 i środkowa cyfra 5 mają tę samą parzystość
PS
Ty decydujesz o rodzaju i formacie wyjścia. Mogą to być dowolne 4 różne wartości. Po prostu wspomnij o tym w swojej odpowiedzi.
źródło
Odpowiedzi:
05AB1E,
15,1413 bajtów (dzięki Riley i carusocomputing)Wypróbuj online
Zwraca w nawiasach, jeśli jest to palindrom
Zwraca 0, jeśli parzystość jest inna, 1, jeśli jest taka sama
Ð
Dodaj dane wejściowe, dzięki czemu mam wystarczającą ilość danych wejściowych do pracyR
Odwróć ostatni element stosuQ
Sprawdź, czy jest taki sam (bierze dwa górne elementy i wykonuje ==)i
Instrukcja if, więc przejdzie tylko wtedy, gdy jest palindromem2
Naciśnij cyfrę 2ä
Podziel wejście na 2 równe plasterki¨
Wciśnij pierwszy element podziału (1264621 wyników w 1264)}
Zakończ jeśliÈ
Sprawdź, czy ostatni element jest parzysty¹
Naciśnij ponownie pierwsze wejścieR
Odwróć to wejścieÈ
Sprawdź, czy jest jeszcze terazQ
Sprawdź, czy te parzyste wyniki są takie same i niejawnie drukowaneźródło
¨
zamiast1£
.,
, niejawnego wyniku. Także zamiast2ä
można użyć selerowaty:Â
; oszczędność 2 bajtów dla 12:ÐRQi¨}ȹRÈQ
,
powinno pchnąć cię na prowadzenie;).PHP,
5552 bajtówpobiera dane wejściowe ze STDIN; biegać z
-R
.wynik:
10
dla palindromu i tej samej parzystości11
dla palindromu i innej parzystości0
w przypadku braku palindromu i tej samej parzystości1
w przypadku braku palindromu i innej parzystościuwagi:
strlen($n)/2
==log($n,10)/2
==log($n,100)
$n[1*log($n,100)]
$n[0*log($n,100)]
źródło
<?=
zamiastecho
sandbox.onlinephpfunctions.com/code/…$argn
jest zdefiniowany tylko za pomocą-R
, i nie pozwala na znaczniki.$argn
jest również dostępny z-F
. Ale nm.Galaretka ,
1614 bajtówWypróbuj online!
Wyprowadza dwie linie:
1
za palindrom,0
za nie0
za podstępne # 2 ,1
za nieWyjaśnienie
źródło
Python 2 ,
706866 bajtówWypróbuj online!
źródło
PowerShell ,
11499 bajtówWypróbuj online!
Zaoszczędzono 15 bajtów dzięki @Sinusoid.
Dane wejściowe jako ciąg. Wyprowadza tablicę typu
(0|1) (True|False)
ze0
wskazującym „nie palindromem” i1
wskazującym „palindromem”, aTrue
parzystość wskazująca jest dopasowana i wFalse
inny sposób.Odbywa się to za pomocą pseudo-trójki i indeksowania w odpowiednim miejscu
(a,b)[index]
. Indeks($n-eq-join$n[$n.length..0])
sprawdza, czy dane wejściowe są palindromem. Jeśli tak nie jest, bierzemy tęa
część, która jest0
sprzężona z tym, czy parzystość pierwszej cyfry$n[0]
jest równa-eq
parzystości ostatniej cyfry$n[-1]
. W przeciwnym razie jesteśmy wb
części, która jest1
sprzężona z tym, czy$z
(parzystość pierwszej cyfry) jest równa-eq
parzystości środkowej cyfry$n[$n.length/2]
.Wcześniej musiałem
"$($n[0])"
uzyskać pierwszą cyfrę, aby poprawnie rzutowała jako liczba całkowita, ponieważ$n[0]
wyniki achar
i operator modulo%
łączą sięchar
s na podstawie wartości ASCII, a nie wartości dosłownej, podczas gdy astring
robi wartość dosłowną. Jednak @Sinusoid pomógł mi zobaczyć, że0,1,2,...,9
ponieważ dosłowne wartości mają taką samą parzystość jak48,49,50,...,57
, więc jeśli używa wartości ASCII, nadal otrzymujemy ten sam wynik.Tę tablicę pozostawia się w potoku, a dane wyjściowe są niejawne.
źródło
$
gdy zrobiłeś moduł%2
dla liczby? Próbowałem tego sam i nie było to konieczne, gdybym robił każdy krok indywidualnie, ale czy to jest, gdy umieścisz go w tablicy? Czy PowerShell traktuje go jako inny typ zmiennej?$n[0]
indeksuje, wychodzi jakochar
. Rzut zchar
naint
wymuszony przez%
operatora nie przechodzi od'1'
do1
, ale do wartości ASCII , więc jest49
."$( )"
Robi wyraźne zabarwienie ciąg zamiast, który konwertuje go prawidłowo1
. ... Mimo, że teraz wspomnieć, tym parytet od0..9
jest taka sama jak ASCII48..57
, więc mogę chyba że golf w dół. Dzięki!VBA,
11799 bajtówZaoszczędził 18 bajtów dzięki Tytusowi
Po sformatowaniu niewiele się rozwija.
Oto wyniki podanych przypadków testowych:
źródło
&1
zamiastmod 2
. Można też pozbyć sięIf/Then
zr=r+2-2*(left(s,1)-b &1)
lub jeszcze lepiejIf s = StrReverse(s) then r=2
ir=r+1-(left(s,1)-b &1)
... i 2 bajty mecz odwrócenie Tricky # 2:r=r+(left(s,1)-b &1)
; więcej oszczędzać przy drukowaniu bezpośrednio:Debug.Print r+(left(s,1)-b &1)
. Powinien wtedy wynosić 95 bajtów; 98 jeśli&1
nie działa.And
zamiast po prostu&
. Wymyśliłem, jak wdrożyć pierwszą sugestię, ale nie mogłem zrozumieć, jak zamierzałeś zmienić trzecią linięStrReverse
.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 dla palindromów, 1/0 dla Tricky # 2Mid()
zLeft(s,Len(s)/2+1)
lub tak.Len(s)/2
= do4.5
którego VBA zaokrągli4
. Jeśli ma 7 znaków, toLen(s)/2
= do3.5
którego VBA również się zaokrągli4
. Dodanie0.1
poprawia obłęd.Perl 6 , 48 bajtów
Spróbuj
wyniki w
(True True)
(True False)
(False True)
lub(False False)
Rozszerzony:
źródło
Java 8,
205197182168134 bajtówWyjścia:
1
dla false-false;2
dla fałszu-prawdy;3
dla prawda-fałsz;4
dla prawdy-prawdy.Wyjaśnienie:
Wypróbuj tutaj.
źródło
Haskell , 89 bajtów
Wypróbuj online! Zastosowanie:
f "12345"
. Zwraca wartość0
True True,1
True False,2
False True i3
False False.Funkcja
#
konwertuje obie cyfry na ich kody ascii i sumuje je. Jeśli oba są parzyste lub oba są nieparzyste, suma będzie parzysta, w przeciwnym razie, jeśli jedno będzie parzyste, a drugie nieparzyste, suma będzie nieparzysta. Obliczanie modulo dwa,#
zwraca0
dla równej parzystości i1
inaczej.f
sprawdza, czy ciąg wejściowyx
jest palindromem. Jeśli nie,#
to wywoływany jest za pomocą,x
ax
do wyniku dodawany jest ostatni znak i dwa, w przeciwnym razie, jeślix
jest wywołanie palindromiczne#
ze środkowym znakiemx
zamiast, i pozostaw wynik bez zmian .źródło
Kotlin , 142 bajty
Wypróbuj online!
źródło
REXX,
104100 bajtówZwraca wartość logiczną parą
0 0
,0 1
,1 0
lub1 1
.źródło
R,
115109105 bajtówPobiera dane wejściowe ze standardowego wejścia. Zwraca wartość
FALSE FALSE
False False,FALSE TRUE
False True,TRUE FALSE
True False iTRUE TRUE
True True.źródło
AWK,
9796 bajtówNajprostszym sposobem jest umieszczenie kodu w pliku:
OddEven
następnie wykonaj:Wynik jest zasadniczo sumą bitów porównań w pytaniu, np
Próbowałem usunąć
()
z,(s?0:2)
ale to w jakiś sposób zaburza pierwszeństwo operatora.źródło
CJam, 32 bajty
Dane wejściowe to liczba na górze stosu.
Wyjaśnienie:
źródło
Rubinowy , 60 + 1 = 61 bajtów
Używa
-n
flagi.Wypróbuj online!
źródło
Groovy,
326303 bajtówKod skurczony:
Kod oryginalny (z wyjaśnieniem):
Kod oryginalny (bez wyjaśnienia):
Wejście:
Wynik:
źródło