Ostrzeżenie: NIE jest to wyzwanie „hej, narysujmy ciasto w sztuce ASCII”! Proszę czytaj dalej;)
Jakiś czas temu były moje urodziny, mam teraz 33 lata.
Istnieje więc ta niezręczna tradycja społeczna polegająca na zapraszaniu rodziny i przyjaciół, stawianiu świec numerycznych na torcie, śpiewaniu piosenek i prezentach.
33
--------
Zamiast liczb mogę użyć systemu binarnego do umieszczenia standardowych świec: kładę 6 z nich na torcie i zapalam dwie z nich.
100001
--------
Widzę, że zarówno liczby dziesiętne, jak i binarne w moim wieku są palindromiczne!
Wyzwanie
Chcę wiedzieć, czy jakaś inna liczba może być umieszczona na torcie ze świecami i być palindromiczna, dziesiętna i binarna.
Napisz program / funkcję, aby sprawdzić, czy liczba jest palindromiczna zarówno w postaci dziesiętnej, jak i binarnej. Ale czekaj, jest więcej: w systemie binarnym wiodące zera liczą się do testu!
Wkład
Liczba dziesiętna x, którą chcę przetestować, jeśli jest urodzinowa palindromiczna z 0 <x <2 32 -1 (tak, ludzie w moim wymiarze żyją bardzo długo)
Wydajność
Prawda, jeśli spełnia dokładnie te dwa warunki, Falsey jeszcze:
- Dziesiętna reprezentacja liczby jest standardowym palindromem
- Binarna reprezentacja liczby jest standardowym palindromem, a dodanie zer wiodących może w tym pomóc
Przypadki testowe
1 > 1 => Truthy
6 > 110 (0110) => Truthy
9 > 1001 => Truthy
10 > 1010 (01010) => Falsey, 10 is not palindromic
12 => 1100 (001100) => Falsey, 12 is not palindromic
13 => 1101 (...01101) => Falsey, neither 13 nor 1101 are palindromic
14 => 1110 (01110) => Falsey, 14 is not palindromic
33 > 100001 => Truthy
44 > 101100 (..0101100) => Falsey, 101100 is not palindromic
1342177280 > 1010000000000000000000000000000 (00000000000000000000000000001010000000000000000000000000000) => Falsey, 1342177280 is not palindromic (but the binary representation is)
297515792 > 10001101110111011101100010000 (000010001101110111011101100010000) => Truthy
Zasady
- Standardowe luki są niedozwolone
- Dozwolone są konwersje i testy wbudowanej biblioteki
- To jest code-golf , najkrótsza wygrana kodu!
Powodzenia i ostatecznie wszystkiego najlepszego!
źródło
0b01010000000000000000000000000000
nie jest palindromiczne, ponieważ wymagałoby dodania większej liczby zer, a zatem przekraczałoby 2 ^ 32-1? W takim przypadku pomogłoby dodać coś1342177280
w rodzaju przypadku testowego falsey.1342177280
nie jest palindromiczny dziesiętny, więc Falsey. EdycjaOdpowiedzi:
05AB1E , 7 bajtów
Wypróbuj online! lub jako pakiet testowy
Wyjaśnienie
źródło
Python 3 , 59 bajtów
Wypróbuj online!
-3 bajty dzięki Rodowi
-3 bajty dzięki Connorowi Johnstonowi
źródło
JavaScript (ES6), 65 bajtów
Zwraca
0
lub1
.W jaki sposób?
Funkcja pomocnicza g () przyjmuje na wejściu liczbę całkowitą b i sprawdza, czy n jest palindromem w podstawie b . Jeśli b nie jest określone, po prostu konwertuje n na ciąg przed przetestowaniem.
My pozbyć się zer z binarnej reprezentacji n izolując przynajmniej znaczną 1 z
n&-n
i podzielenie n przez otrzymanej ilości.Ciekawostka: to prawda,
0
ponieważ(0/0).toString(2)
równa się"NaN"
, czyli palindrom. (Ale i0
tak nie jest to poprawny wpis.)Przypadki testowe
Pokaż fragment kodu
źródło
Mathematica,
5249 bajtówWypróbuj na Wolfram Sandbox
Stosowanie
Wyjaśnienie
Wersja z wbudowanym
PalindromeQ
źródło
Pyth - 13 bajtów
Pakiet testowy .
źródło
_MI
ijQ2
zapisać 2 bajty:_MI,.sjQ2Z`
Japt , 14 bajtów
Przetestuj online!
Wyjaśnienie
źródło
sêQ *(¢w)sêQ
isêQ &¢w n sêQ
297515792
(odwrócony plik binarny przekonwertowany na dziesiętny jest po prostu zbyt duży, aby JS mógł go obsłużyć) ...Proton , 57 bajtów
Wypróbuj online!
źródło
APL,
2731 bajtówJak to działa Używając 6 jako argumentu ...
Wypróbuj na TryAPL.org
źródło
{(⌽¨≡⊢)⍕¨⍵,⊂(⌽↓⍨~⊥~)2⊥⍣¯1⊢⍵}
(jest to dobra forma, aby podać link do uruchomienia całego pakietu testowego)Galaretki , 8 bajtów
Wypróbuj online!
źródło
ȧ
luba
zamiast,µ
ponieważ w przeciwnym razie zawsze będzie to prawdą.Brachylog , 7 bajtów
Wypróbuj online!
To dużo
↔
…Wyjaśnienie
W przypadku niejawnego wejścia i wyjścia kod jest następujący:
?↔?ḃc↔.↔.
źródło
APL (Dyalog Classic) , 26 bajtów
Wyjaśnienie
Wypróbuj online!
źródło
Perl, 53 +3 (-pal) bajtów
spróbuj online
źródło
Pyt , 10 bajtów
Zwraca [1] jeśli prawda, [0] jeśli fałsz
Wypróbuj online!
Wyjaśnienie:
źródło
Siatkówka , 72 bajty
Wypróbuj online! Link zawiera przypadki testowe. Działa poprzez utworzenie jednoznacznego duplikatu oryginalnego numeru, ale za pomocą
_
s, aby nie pomylić go np. Przez wprowadzenie11
. Unary liczba jest następnie konwertowana na „binarne” i usuwane zera końcowe zera. Palindromy są następnie kolejno obcinane, a ostatni etap sprawdza, czy coś zostało.źródło
Mathematica, 70 bajtów
źródło
Łuska , 14 bajtów
Wypróbuj online!
Niegolfowane / Wyjaśnienie
źródło
Gaia , 10 bajtów
Wypróbuj online!
Wyjaśnienie
Zamiast sprawdzania z wiodącymi zerami w systemie binarnym, sprawdzam bez zer końcowych.
źródło
C (gcc) , 105 bajtów
Wypróbuj online!
źródło
return
zn=
. ( 95 bajtów )C # (.NET Core) ,
130 129 179173 + 23 bajtykilka rzeczy, dziękuję Edowi Marty'emu za wskazanie, że muszę sprawdzić, ile tylnych zer padało z przodu na palindrom. I muszę się upewnić, że mogę sprawdzić do x ^ 32 -1.
Wypróbuj online!
źródło
return
i(
dla 129 bajtówusing System;
iusing System.Linq
Python 2 , 56 bajtów
Wypróbuj online!
Używa
strip
metody Pythona zarówno do usuwaniabin(..)
wiodących zer wyjściowych, jak0b
i końcowych zer binarnych (ponieważ zawsze będą miały pasujący bit).źródło
Pyth ,
2522191817 bajtów-
3678 bajtów poprzez dalszą naukę językaWyjaśnienie:
Jestem pewien, że można to zagrać w golfa, będę nad tym pracował.
Pakiet testowy
źródło
PHP, 69 + 1 bajtów
Uruchom jako fajkę z
-nR
Echa oryginalnym wejściem dla prawdy / nic dla falsey
Wypróbuj online!
źródło
Oktawa ,
6866 bajtówWypróbuj online!
Pierwsza oferta od Octave.
Zasadniczo tworzymy tablicę zawierającą liczbę jako ciąg dziesiętny i liczbę jako ciąg binarny z usuniętymi końcowymi zerami. Następnie tworzymy tablicę z tym samym ciągiem znaków, ale z odwróconą liczbą binarną i dziesiętną. Na koniec porównywane są obie tablice, a wynik jest albo prawdziwy, jeśli pasują (oba palindromy), albo fałsz, jeśli nie (jedna lub obie nie są palindromami).
flip
zamiastfliplr
.źródło
APL2 (nie Dyalog), 36 bajtów
Najpierw niech B będzie 32-bitową reprezentacją N:
Następnie wykonaj kopię lustrzaną B i znajdź pozycję 1. 1:
Następnie upuść tyle pozycji z B. To pozwoli zachować prawidłową liczbę wiodących zer.
Następnie wykonaj ZNAJDŹ i ZMNIEJSZANIE OR, aby sprawdzić, czy przycięty B zawiera własne lustro.
Teraz spójrzmy na N, dziesiętny. Wyrażenie znajdujące się najbardziej po lewej stronie w nawiasach przekształca N w wektor znaków i sprawdza, czy DOPASUJE swoje własne lustro.
Wreszcie AND dołącza do dwóch czeków.
W APL2 nie mogę zrobić zgrabnej lambdy, więc napisałem linijkę i dołączyłem strzałkę przypisania. Mam nadzieję, że to nie oszustwo.
źródło
⎕
), aby zamiast tego był to pełny program? Czy jesteś w stanie skrócić(N≡⌽N←⍕N)^∨/(B↓⍨1⍳⍨⌽B)⍷B←(32⍴2)⊤N←⎕
?Java 8,
105104 bajtówWyjaśnienie:
Wypróbuj tutaj.
źródło