Biorąc pod uwagę liczbę N , wyjście / powrót X, tak że N + X jest palindromem, gdzie | X | musi być jak najmniejszy.
Palindrom: Liczba jest palindromem, jeśli sekwencja cyfr jest taka sama podczas czytania ich od lewej do prawej, jak podczas czytania od prawej do lewej.
95359
i 6548456
są symetryczne 123
i 2424
nie są. Liczby z wiodącymi zerami, takie jak 020
nie są palindromem.
Dane wejściowe to dodatnia liczba całkowita mniejsza niż 10 15 . Przeczytaj to ze standardowego, jako parametru-metody, cokolwiek.
Wyjście musi być liczbą całkowitą (dodatnią lub ujemną) i powinno wynosić 0, jeśli wejście jest już palindromem. Możesz zapisać swoje wyjście na standardowe wyjście, zwrócić je z funkcji lub cokolwiek zechcesz. Jeśli są 2 liczby (np. 2
I -2
), które spełniają wymagania, wypisz tylko jedną z nich.
Przykłady:
Input Output
3 0
234 -2
1299931 -10
126 5 or -5 (only one of them)
źródło
N=10
. Wyjście może byćX=-1
lubX=1
?Odpowiedzi:
Pyth ,
2620Zaktualizowano w celu spełnienia nowych zasad.
Program działa w nieskończonej pętli, która testuje każdy możliwy przyrost, w kolejności 0, -1, 1, -2, -2 ...
Wyjaśnienie:
Przykładowy przebieg:
Zajęło to 23 sekundy.
Rozwiązanie premiowe, ta sama liczba znaków:
źródło
[0, 1, -1, 2, -2, ...]
przez aktualizacjęZ=-Z+(Z<0)
?Rubin,
11184 bajtówTraktuje liczbę jako jedyny argument wiersza polecenia.
źródło
CJam,
342925 bajtówWypróbuj online.
Przykłady
Jak to działa
źródło
Haskell - 62
Zapisz go w pliku o nazwie,
golf.hs
a następnie przetestuj za pomocą ghci:źródło
x<-[0..]>>=(\v->[n+v,n-v])
? Jest krótszy i sprawia, że jestPython 2.7,
98, 81Tworzy palindrom na podstawie numeru wejściowego, a następnie odejmuje go od wejścia, aby znaleźć deltę.
stosowanie:
nieposortowany i opatrzony adnotacjami:
źródło
f(19) = -8
(palindrom11
), gdzie należy+3
zrobić22
.Perl 5,
93898887756344Nie golfowany:
Dzięki sugestiom Dennisa sprowadziłem go do 43 +
-p
= 44źródło
-$a
jest krótszy niż$a*-1
. 2. Jeśli używasz($a<1)
, nie ma takiej potrzeby? :$a++
. 3. Jeśli użyjesz-p
przełącznika$_=<>
iprint$_
jest niejawny, możesz upuścić pierwszą instrukcję i zmienić ostatnią na$_=$a+0
.-p
przełącznik jako jeden dodatkowy bajt, ale można go odzyskać, używając($a<1)-$a
zamiast niego-$a+($a<1)
.while
$/
zamiast$a
, to zadziała.05AB1E ,
1514 bajtów (-1 dzięki Emigna)Wypróbuj online!
Metoda:
źródło
2äн
zamiastg;î£
.Java:
127109Podstawowa iteracja, sprawdzająca zarówno negatywną, jak i pozytywną przed przejściem do następnego kandydata.
Dla danych wejściowych
123456789012345
wraca-1358024
do równego palindromu123456787654321
.Podziały wierszy:
źródło
n+i+""
działa i zapisuje nawiasy? Myślę, że pierwszeństwo powinno być prawidłowe.toString()
. Dzięki :)i=i<1?-i+1:-i
? Nazwę to „niezdecydowaniem”.Clojure, 92
Pobiera pierwszy z leniwej sekwencji, która działa od 0 na zewnątrz i zawiera tylko wartości, które tworzą palindromy:
Sesja REPL-LPER:
źródło
JavaScript,
175136117Bezpośredni.
p
zwraca true, jeśli podaną liczbą jest palindrom,f
wyszukuje najbliższy.EDYCJA: Grałem też w golfa trochę bardziej dzięki słodkiej sztuczce „niezdecydowania” Geobitsa w odpowiedzi Java tutaj.
Stosowanie:
źródło
p=n=>[...s=''+n].reverse().join('')==s f=n=>{r=t=0;while(!(p(n+r++)||p(n+t--)));return p(n+r-1)?r-1:t+1}
:)function
ireturn
są strasznie długie zastrzeżone słowa ...s=>{for(i=0;[...s+i+""].reverse().join``!=s+i;i=i<0?-i:~i);return i}
. Podatne na przepełnienie stosu 61:f=(s,i=0)=>[...s+i+""].reverse().join``==s+i?i:f(s,i<0?-i:~i)
J - 49 znaków
Funkcja mapująca liczby całkowite na liczby całkowite.
Oto, w jaki sposób możesz zbudować ten wynik w trzech częściach. Jest to wyświetlanie J REPL: wiersze wcięte są wprowadzane przez użytkownika, a wiersze nieobecne są wynikiem REPL. I tak, J zapisuje znak minus znakiem podkreślenia
_
.Przykłady:
Możesz również sprawić, że golf woli preferować rozwiązanie pozytywne od negatywnego, gdy są równe, zmieniając
_1 1
na1 _1
.źródło
JavaScript 86
To jest moje pierwsze wyzwanie dla codegolfa. Mam nadzieję, że to rozwiązanie jest dopuszczalne.
niemodyfikowany:
n => { s = (n + '').split(''); for (i = 0, j = s.length - 1; i < j; i++,j--) s[j] = s[i]; return s.join('') - n }
Objaśnienie:Konwertuj wejście n na String i podziel.
Iteruj po obu stronach wynikowej tablicy i kopiuj cyfry od s [i] do s [j], aż i <j. Spowoduje to nasz pożądany palindrom.
Ponownie połącz tablicę i odejmij n, aby uzyskać x
źródło
s=(n+'').split('')
nas=[...(n+'')]
. ogolić 5 bajtówf(19)=3
ponieważ 22 jest najbliższą palindromią, ale funkcja zwraca -8 dla konwersji 19 na 11. btw[...n+'']
będzie również działało dla dodatkowych -2 bajtówJavaScript (ES6), 84 bajtów
Moje pierwsze wyzwanie golfowe! Wiem, że krótsze i bardziej eleganckie rozwiązanie zostało już opublikowane przez @Brian H., ale jest to inne podejście.
Kod testowy
Pokaż fragment kodu
źródło
Brachylog , 8 bajtów
Wypróbuj online!
Predykat etykiety
≜
jest tutaj niezbędny, ponieważ dzięki użyciu go na wyjściu, zanim wydarzy się cokolwiek innego (chociaż tak naprawdę jest wywoływany na liście zawierającej dane wejściowe i wyjściowe), jego wartość bezwzględna jest zminimalizowana, ponieważ zamiast robić mądrzejsze na podstawie ograniczenia program zgaduje każdą liczbę całkowitą, zaczynając od 0, aż znajdzie tę, która działa. Jeśli≜
zostanie pominięty, w programie pojawia się informacja, że 0 jest bardzo ładnym palindromem i zawsze będzie wypisywać ujemną wartość wejściową.źródło
Groovy -
131111107 znakówGra w golfa:
przykładowe przebiegi:
Nie golfowany:
źródło
Python 2 - 76
Pobiera numer wejściowy i generuje listę różnic między danymi wejściowymi a każdą liczbą pomiędzy
0
i2*i
tylko wtedy, gdy liczba jest palindromiczna.Następnie sortuje listę według wartości bezwzględnej i drukuje pierwszy element.
źródło
min
argumentu słowa kluczowego zamiast sortowania.C ++ 289
Funkcja P sprawdza palindromy za pomocą
<algorithm>
metody.Nie golfowany:
źródło
Mathematica 75
Prawdopodobnie można grać w golfa więcej ..
Miejsca nie są liczone i nie są potrzebne.
źródło
CoffeeScript: 73
Objaśnienie: Wykorzystuje to fakt, że jeśli mamy liczbę nieparzystych długości (powiedzmy 1234567),
x.slice(0, y)
nie będzie zawierała środkowej cyfry, alex.slice(0, -y)
będzie. JavaScriptslice
prawdopodobnie nie powinien działać w ten sposób, ale działa.Spodziewałem się, że CoffeeScript / JavaScript będzie miał lepszy sposób na odwrócenie łańcucha, ale wydaje się, że metoda split / reverse / join jest wszystkim, co istnieje.
źródło
PHP, 56 bajtów
pobiera dane wejściowe z argumentu wiersza poleceń; biegać z
-nr
.źródło
javascript 68 bajtów
OGROMNE rekwizyty dla @Beldraith dla algorytmu, ale zamieszczam to jako odpowiedź, ponieważ zajęło mi sporo czasu, aby uruchomić go w jednym poleceniu.
Wszelkie wskazówki są mile widziane;)
bez golfa
źródło
(n,s=[...n+''],j=s.length)=>s.map((v,i)=>i>--j?s[j]:v).join``-n
ale istnieje również nieoczywisty kontrprzykład (19);)Python, 109
źródło
123456789
powoduje awarię, znacznie poniżej limitu 10 ^ 15 podanego w pytaniu.QBIC , 38 bajtów, nc
Wyjaśnienie:
Kod odczytuje dane wejściowe, a następnie stosuje modyfikator. Następnie sprawdza, czy modyfikator liczba + jest palindromem. Następnie włącza westchnienie modyfikatora, ponownie go stosuje i ponownie testuje.
źródło
Bash, 73 bajty
Dane wejściowe przechodzą do argumentu pierwszego wiersza poleceń:
źródło
Axiom,
720594412 bajtówLiczba bajtów to znowu to, ale algo będzie to O (log (n)), ponieważ spadnie tylko od długości cyfr jego wejścia (a log10 (n) będzie w pobliżu długości cyfr dziesiętnych n ). niepoddane golfowi i wyniki
źródło
Łuska ,
16 129 bajtówDzięki @ H.PWiz za -4 bajty!
Wypróbuj online!
Wyjaśnienie
źródło
APL NARS 47 znaków
to powyższe wyszukiwanie, ale algo nie może być szybkie i właściwe, jak g poniżej ...
To
jest prostym wyjściem z pętli tylko wtedy, gdy znajdzie b≡⌽b, więc b jest palindromem łańcuchowym
źródło
Python 2 ,
5554 bajtówWypróbuj online!
źródło
Japt , 8 bajtów
Spróbuj
źródło