Tulis program yang membaca dari stdin dua bilangan bulat, setiap baris diakhiri, selanjutnya disebut "angka" dan "radix", dan:
- Mencetak pesan tetap Anda inginkan jika nomor tersebut adalah palindrom di radix itu (misalnya
true
,t
,1
) - Mencetak pesan tetap berbeda yang Anda inginkan jika nomor tersebut bukan merupakan palindrom di radix itu (misalnya
false
,f
,0
, dll) - Pesan-pesan ini harus sama untuk setiap latihan, tetapi tidak ada aturan tentang apa yang harus mereka mainkan (apa pun yang terbaik untuk bermain golf).
- Anda dapat menganggap input tersebut valid, dua bilangan bulat positif. "angka" tidak akan melebihi
2147483647
, "radix" tidak akan melebihi32767
. - Anda mungkin tidak menggunakan sumber daya eksternal, tetapi Anda dapat menggunakan fungsi matematika apa pun yang disertakan secara default dalam bahasa Anda.
Catatan: radix hanyalah basis dari angka.
Sampel berjalan:
16
10
false
16
3
true
16
20
true
121
10
true
5
5
false
12346
12345
true
16781313
64
true
16781313
16
true
code-golf
decision-problem
base-conversion
palindrome
durron597
sumber
sumber
Jawaban:
Fitur ganda J (23 char) dan K (19)
Kedua bahasa ini sangat mirip, baik secara umum maupun dalam golf khusus ini. Inilah J:
,~1
- Tambahkan nomor 1 untuk dirinya sendiri, membuat array1 1
.1!:1
- Baca dalam dua string dari keyboard (1!:1
untuk membaca, dan1
menangani file / nomor untuk input keyboard).".
- Konversi setiap string ke angka.#.^:_1~/
-F~/ x,y
Berarti untuk menemukany F x
. KamiF
adalah#.^:_1
, yang melakukan ekspansi basis.(-:|.)
- Apakah argumen cocok dengan (-:
) kebalikannya (|.
)?1
untuk ya,0
untuk tidak.Dan di sini adalah K:
0::'``
- Baca dalam (0::
) string untuk setiap'
baris ( ) dari konsol (`
adalah pegangan file untuk ini)..:'
- Konversi (.:
) setiap ('
) string ke angka._vs/|
- Balikkan pasangan angka, sehingga radix berada di depan angka, dan kemudian masukkan (/
) fungsi ekspansi basis_vs
("vektor dari skalar") di antara mereka.a~|a:
- Tetapkan ekspansi yang dihasilkan ini kea
, dan kemudian periksa apakaha
cocok (~
) kebalikannya (|
). Sekali lagi,1
untuk ya,0
untuk tidak.sumber
GolfScript, 10 karakter
Itu yang mudah untuk GolfScript jika kita melakukannya dengan cara langsung. Outputnya adalah
0
/1
untuk false / true.sumber
APL (20)
Keluaran
0
atau1
, misalnya:Penjelasan:
⎕{
...}⎕
: baca dua angka, berikan ke fungsi.⍵
adalah angka pertama dan⍺
merupakan angka kedua.⌊1+⍺⍟⍵
:floor(1+⍺ log ⍵)
, jumlah digit yang diperlukan untuk mewakili⍵
basis⍺
.⍺/⍨
: basis untuk setiap digit, jadi⍺
direplikasi dengan angka yang baru saja kita hitung.⍵⊤⍨
: mewakili⍵
dalam basis yang diberikan (menggunakan angka, sehingga berfungsi untuk semua nilai⍺
).≡∘⌽⍨
: lihat apakah hasilnya sama dengan kebalikannya.sumber
Perl,
82777369 byteAngka-angka input diharapkan sebagai garis input STDIN dan hasilnya ditulis sebagai
1
atau0
, yang pertama berarti angka pertama adalah palindrom dalam representasi basis yang diberikan.Sunting 1: Menggunakan
$=
menyimpan beberapa byte, karena konversi internal ke int.Sunting 2: Operator smartmatch
~~
membandingkan elemen array secara langsung, sehingga konversi ke string tidak diperlukan.Sunting 3: Optimasi dengan menghapus variabel yang tidak perlu.
65 byte : Jika string kosong dibolehkan sebagai output untuk
false
, empat byte terakhir dapat dihapus.Versi tidak disatukan
Algoritma menyimpan digit angka yang dikonversi dalam array
@a
. Kemudian representasi string dari array ini dibandingkan dengan array dalam urutan terbalik. Spasi memisahkan digit.sumber
$=
membiarkan Andaint
melangkah ... Dan pertanyaan berdirianything you want
sehingga tidak ada yang bisa Anda inginkan ;-)$=
juga diberikan sebagai tip dalam jawaban untuk pertanyaan "Tips untuk bermain golf di Perl" . Pengembalian0
biaya 6 byte tambahan, tetapi kesan saya bahwa pesan tetap tidak dimaksudkan untuk kosong.silence
Javascript 87
n
argumen adalah angka,b
argumen adalah radix.sumber
Sage, 45
Berjalan di prompt interaktif
Mencetak
True
saat palindrom, mencetakFalse
sebaliknyasumber
Perl
54 5662Untuk diuji:
akan memberi:
Jadi output ini
1
untuktrue
ketika palindrom ditemukan dan tidak ada jika yang lain.Tidak melakukan pelanggaran:
Nota :
$_
adalah buffer baris saat ini dan kosong di awal.$=
adalah variabel yang dipesan , aslinya digunakan untuk pencetakan garis, ini adalah penghitung baris. Jadi variabel ini adalah bilangan bulat , perhitungan apa pun pada ini akan menghasilkan bilangan bulat terpotong seperti jikaint()
digunakan.$-
digunakan untuk bersenang-senang, hanya untuk tidak menggunakan huruf tradisional ... (beberapa kebingungan lagi) ...sumber
Mathematica
7743IntegerDigits[n,b]
mewakili n sebagai daftar angka dalam basis b. Setiap basis-b digit dinyatakan secara desimal.Misalnya, 16781313 bukan palindrom di basis 17:
Namun, ini adalah palindrom di basis 16:
Jika pasangan yang dipesan dalam contoh di atas dimasukkan,
akan kembali
sumber
Integer
Haskell (80 karakter)
Sebut saja dengan
pali $number $radix
. Benar, ketika angka adalah palindrome, Salah jika tidak.sumber
Ruby - 76 karakter
sumber
Perl 6 , 27 byte (22 tanpa stdin / out)
Cobalah online!
Perl6, raja golf yang dapat dibaca (golves?) (Dan juga beberapa tidak dapat dibaca).
Fungsi Perl 6 (bukan stdin / stdout), 22 byte
Cobalah online!
sumber
base
dalam jawaban saya adalah bahwabase
hanya mendukung hingga basis 36, dan pertanyaannya meminta untuk mendukung radix hingga32767
dg - 97 byte
Mencoba dg :
Dijelaskan:
sumber
C,
140132sumber
puts(m)
akan bekerja dengan benar?printf("%d",m);
akan lebih pendek 8 karakter.Haskell - 59
Beberapa perubahan pada jawaban Max Ried.
sumber
Pyth , 4 byte
Cobalah di sini atau periksa test suite (Membutuhkan ~ 10-15 detik).
sumber
dc, 39 byte
Panjangnya adalah palindrome, tentu saja (
33₁₂
).Nomor dan radix harus di atas tumpukan (di basis nomor saat ini); angka harus minimal 0, dan radix harus minimal 2. Outputnya
t
jika palindrom danf
jika tidak. Karena tidak ditentukan dalam tantangan, saya berasumsi bahwa angka tidak pernah memiliki angka nol di depan (jadi angka apa pun yang berakhir dengan0
tidak bisa menjadi palindrom).Penjelasan
Sebagai program lengkap:
sumber
LaTeX, 165 byte
Contoh di desmos.com
k
, radix, adalah input yang dapat disesuaikanJika
f(x)=0
,x
adalah palindrome di pangkalank
.sumber
Perl 6 , 34 byte
-4 byte terima kasih kepada PhilH
Cobalah online!
sumber
05AB1E ,
43 byteCobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
sumber
C (gcc) , 79 byte
Cobalah online!
Kehabisan
Berdasarkan fakta bahwa untuk palindrome, kebalikan dari angka harus sama dengan angka itu sendiri.
Misalkan Anda memiliki nomor ABC tiga digit di beberapa pangkalan. Mengalikannya dengan basis akan selalu menghasilkan ABC0, dan membaginya dengan basis dalam AB dengan C sebagai sisanya. Jadi untuk membalikkan angka kita mengambil digit paling kanan dari nomor asli dan memasukkannya ke kanan pada nomor terbalik. Untuk memberi ruang bagi digit itu, kita gandakan kebalikannya dengan basis sebelumnya.
Pada dasarnya:
sumber