Diberi angka N , output / return X sehingga N + X adalah palindrome, di mana | X | harus sekecil mungkin.
Palindrome: Suatu angka adalah palindrom, jika urutan digitnya sama ketika membacanya dari kiri ke kanan seperti ketika membaca dari kanan ke kiri.
95359
dan 6548456
simetris, 123
dan 2424
tidak. Angka dengan angka nol di depan seperti 020
bukan palindrome.
Input adalah bilangan bulat positif lebih kecil dari 10 15 . Baca dari stdin, sebagai parameter-metode, apa pun.
Output harus berupa bilangan bulat (positif atau negatif) dan harus 0 jika inputnya sudah berupa palindrom. Anda dapat menulis output Anda ke stdout, mengembalikannya dari suatu fungsi atau apa pun yang Anda suka. Jika ada 2 angka (misalnya 2
dan -2
) yang memenuhi persyaratan, output hanya satu dari mereka.
Contoh:
Input Output
3 0
234 -2
1299931 -10
126 5 or -5 (only one of them)
sumber
N=10
output bisaX=-1
atauX=1
?Jawaban:
Pyth ,
2620Diperbarui untuk memenuhi aturan baru.
Program ini berjalan dalam loop tak terbatas yang menguji setiap kenaikan yang mungkin, dalam urutan 0, -1, 1, -2, -2 ...
Penjelasan:
Contoh dijalankan:
Ini membutuhkan waktu 23 detik.
Solusi bonus, jumlah karakter yang sama:
sumber
[0, 1, -1, 2, -2, ...]
pembaruanZ=-Z+(Z<0)
?Ruby,
11184 byteMengambil nomor sebagai satu-satunya argumen baris perintah.
sumber
CJam,
342925 byteCobalah online.
Contohnya
Bagaimana itu bekerja
sumber
Haskell - 62
Simpan ke file yang bernama
golf.hs
lalu ujilah dengan ghci:sumber
x<-[0..]>>=(\v->[n+v,n-v])
? Ini lebih pendek dan menjadikannya satu-linerPython 2.7,
98, 81Buat palindrome dari nomor input, lalu kurangi dari input untuk menemukan delta.
pemakaian:
ungolfed dan annotated:
sumber
f(19) = -8
(Palindrome11
), di mana seharusnya+3
dibuat22
.Perl 5,
93898887756344Tidak Disatukan:
Berkat saran Dennis, turun ke 43 +
-p
= 44sumber
-$a
lebih pendek dari$a*-1
. 2. Jika Anda menggunakan($a<1)
, tidak perlu? :$a++
. 3. Jika Anda menggunakan-p
sakelar,$_=<>
danprint$_
tersirat, maka Anda dapat menjatuhkan pernyataan pertama dan mengubah yang terakhir ke$_=$a+0
.-p
sakelar sebagai satu byte tambahan, tetapi Anda bisa mendapatkannya kembali dengan menggunakan($a<1)-$a
alih-alih-$a+($a<1)
.while
$/
alih-alih$a
, itu akan berhasil.05AB1E ,
1514 byte (-1 Terima kasih kepada Emigna)Cobalah online!
Metode:
sumber
2äн
bukang;î£
.Jawa:
127109Iterasi dasar, memeriksa negatif dan positif sebelum pindah ke kandidat berikutnya.
Untuk input
123456789012345
, ia mengembalikan-1358024
, ke palindrome yang sama123456787654321
.Jeda baris:
sumber
n+i+""
bekerja dan menyimpan tanda kurung? Saya pikir prioritasnya harus benar.toString()
. Terima kasih :)i=i<1?-i+1:-i
? Saya akan menyebutnya "tidak senonoh".Clojure, 92
Mengambil yang pertama dari malas untuk-urutan yang bekerja dari 0 dan hanya menyertakan nilai yang membuat palindrom:
Sesi REPL-LPER:
sumber
JavaScript,
175136117Mudah.
p
mengembalikan true jika angka yang diberikan adalah palindrome,f
mencari yang terdekat.EDIT: Saya juga bermain golf sedikit lebih banyak berkat trik "keraguan" manis oleh Geobits di Jawa yang menjawab di sini.
Pemakaian:
sumber
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
danreturn
kata-kata yang sangat lama dicadangkan ...s=>{for(i=0;[...s+i+""].reverse().join``!=s+i;i=i<0?-i:~i);return i}
. Stack-overflow rawan 61f=(s,i=0)=>[...s+i+""].reverse().join``==s+i?i:f(s,i<0?-i:~i)
J - 49 char
Fungsi pemetaan bilangan bulat ke bilangan bulat.
Inilah cara Anda membangun hasil ini, dalam tiga bagian. Ini adalah tampilan dari J REPL: baris indentasi adalah input pengguna dan yang sudah ketinggalan zaman adalah output REPL. Dan ya, J mengeja tanda negatif dengan garis bawah
_
.Contoh:
Anda juga dapat membuat golf lebih menyukai solusi positif daripada negatif ketika mereka sama, dengan mengubahnya
_1 1
menjadi1 _1
.sumber
Javascript 86
Ini adalah tantangan codegolf pertama saya. Semoga solusi ini dapat diterima.
ungolfed:
n => { s = (n + '').split(''); for (i = 0, j = s.length - 1; i < j; i++,j--) s[j] = s[i]; return s.join('') - n }
Penjelasan:Konversi input n ke String dan split.
Iterasi di kedua sisi array yang dihasilkan dan salin digit pada s [i] ke s [j] hingga i <j. Ini akan menghasilkan palindrome yang kita inginkan.
Gabungkan kembali array bersama-sama dan kurangi n untuk mendapatkan x
sumber
s=(n+'').split('')
menjadis=[...(n+'')]
. untuk memotong 5 bytef(19)=3
karena 22 adalah palindromic terdekat, tetapi fungsi mengembalikan -8 untuk mengubah 19 menjadi 11. btw[...n+'']
juga akan bekerja untuk ekstra -2 byteJavaScript (ES6), 84 byte
Tantangan golf pertamaku! Saya tahu solusi yang lebih pendek dan lebih elegan telah diposting oleh @ Brian H., tetapi ini adalah pendekatan lain.
Kode Uji
Tampilkan cuplikan kode
sumber
Brachylog , 8 byte
Cobalah online!
Predikat label
≜
sangat penting di sini, karena dengan menggunakannya pada output sebelum hal lain terjadi (walaupun itu benar-benar dipanggil pada daftar yang berisi input dan output), nilai absolutnya diminimalkan, karena alih-alih melakukan sesuatu yang lebih pintar berdasarkan pada kendala program menebak setiap bilangan bulat mulai dari 0 hingga dapat menemukan yang bekerja. Jika≜
dihilangkan, ia sadar pada program bahwa 0 adalah palindrome yang sangat bagus, dan itu akan selalu menampilkan negatif dari input.sumber
Groovy -
131111107 karakterGolf:
sampel berjalan:
Tidak Disatukan:
sumber
Python 2 - 76
Mendapat nomor input dan menghasilkan daftar perbedaan antara input dan setiap nomor antara
0
dan2*i
hanya jika jumlahnya palindromik.Kemudian mengurutkan daftar dengan nilai absolut dan mencetak elemen pertama.
sumber
min
argumen kata kunci alih-alih menyortir.C++ 289
Function P checks for palindromes using
<algorithm>
method.Ungolfed:
sumber
Mathematica 75
Probably can be golfed more..
Spaces not counted and not needed.
sumber
CoffeeScript: 73
Explanation: This takes advantage of the fact that if we have a number of odd length (say 1234567),
x.slice(0, y)
won't include the middle digit butx.slice(0, -y)
will. JavaScript'sslice
probably shouldn't work this way, but it does.I was expecting CoffeeScript/JavaScript to have a better way to reverse a string, but the split/reverse/join method seems to be all there is.
sumber
PHP, 56 bytes
takes input from command line argument; run with
-nr
.sumber
javascript 68 bytes
HUGE props to @Beldraith for the algorithm, i'm posting this as an answer though, because it took me quite the time to get it to work in a single statement.
Any tips are welcome ;)
ungolfed
sumber
(n,s=[...n+''],j=s.length)=>s.map((v,i)=>i>--j?s[j]:v).join``-n
, but also a non-obvious counterexample (19) exists ;)Python, 109
sumber
123456789
causes it to fail, well below the 10^15 limit posted in the question.QBIC, 38 bytes, nc
Explanation:
The code reads an input, and then applies a modifier. It then tests to see if the number + modifier is a palindrome. Then, it flips the sigh on the modifier, re-applies that and tests again.
sumber
Bash, 73 bytes
Input goes to the 1st command line argument:
sumber
Axiom,
720594412 bytesThe byte count it is again this, but the algo it would be O(log(n)) because it would dipend only from the digit lenght of its input (and log10(n) would be near the lenght of the decimal digits of n). ungolfed and results
sumber
Husk,
16 129 bytesThanks @H.PWiz for -4 bytes!
Try it online!
Explanation
sumber
APL NARS 47 chars
this above search but algo can not be fast and right as the g below...
This
is a simple loop exit only when it find b≡⌽b so b is a string palindrome
sumber
Python 2,
5554 bytesTry it online!
sumber
Japt, 8 bytes
Try it
sumber