Tantangan:
Buat program yang menerima bilangan bulat positif dan periksa apakah dapat ditulis dalam bentuk (3 ^ x) -1, di mana X adalah bilangan bulat positif lainnya .
Jika bisa, output X
Jika tidak bisa, output -1 atau pernyataan palsu .
Contoh input / output
Memasukkan:
2
Itu dapat ditulis sebagai (3 ^ 1) - 1, jadi kita menghasilkan x yang 1
Keluaran:
1
Memasukkan:
26
26 dapat ditulis sebagai (3 ^ 3) - 1, jadi kami output x (3)
Keluaran:
3
Memasukkan:
1024
1024 tidak dapat ditulis dalam bentuk (3 ^ x) - 1, jadi kami menghasilkan -1
Keluaran:
-1
Ini adalah kode-golf sehingga jumlah byte yang menang paling sedikit
OEIS Terkait: A024023
3^0-1
output yang valid dan karenanya tidak dapat digunakan sebagai false,log()
dalam jawaban mereka harus mengonfirmasikannya dengan memberikan jawaban yang benar5
ketika242
dimasukkan.Jawaban:
Mathematica,
2116 byteMemanfaatkan perhitungan simbolik Mathematica. Jika
#+1
kekuatan tiga makaLog[3,#+1]
akan menghitung hasil integer yang merupakan nilai atom. Kalau tidak, kita akan mendapatkanLog[#+1]/Log[3]
apa adanya. Karena ini bukan nilai atom, ini adalah ekspresi yang selalu berbentukhead[val1,val2,...]
. Dalam hal ini sebenarnya seperti ituTimes[Power[Log[3], -1], Log[#+1]]
.Kami membedakan antara dua kasus dengan menerapkan fungsi lain pada hasilnya. Apa yang benar-benar diterapkan adalah bahwa itu menggantikan
head
bagian dari ekspresi. Karena hasil bilangan bulat adalah atom, menerapkan fungsi apa pun padanya tidak menghasilkan apa-apa. Khususnyaf @@ atom == atom
.Namun, dalam kasus lain, kepala diganti. Fungsi yang kami gunakan adalah
-1&
fungsi sederhana yang mengabaikan argumen dan pengembaliannya-1
. Jadi kami mendapatkan sesuatu-1&[Power[Log[3], -1], Log[#+1]]
dalam kasus non-integer, yang dievaluasi langsung ke-1
. Casing khusus melalui sihir.sumber
Python,
4644 byteCobalah online!
Dalam hal ini,
0
akan menjadi nilai palsu. Terima kasih kepada @ mbomb007 karena menunjukkan output yang salah dan 2 byte tanpa[]
penghematan.sumber
[n for n in range(x)if 3**n-1==x]
untuk -4 byte, kosongkan daftar sebagai falsyHaskell, 35 byte
Contoh penggunaan:
f 26
->3
.sumber
05AB1E , 7 byte
Cobalah online!
Penjelasan
sumber
<3zm©.ïi®
adalah yang terdekat saya tidak menggunakan rentang seperti yang dia lakukan.3DÝms<k
... Nevermind ... Tidak dapat memotong satu byte lagi, bisa bersumpah aku bisa.Jelly , 5 byte
Output x atau 0 (falsy).
Cobalah online!
Bagaimana itu bekerja
sumber
Python 2, 41 byte
Fungsi rekursif yang mengembalikan
0
input yang tidak cocok. Berulang kali membagi input dengan 3, menghitung jumlah langkahi
, yang merupakan output pada akhirnya. Tetapi, jika langkah apa pun menghasilkan nilain
yang bukan 2 modulo 0, angkanya bukan untuk3^i-1
, sehingga output dikalikan dengan 0.sumber
Perl, 31 byte
Membutuhkan
-E
bendera untuk dijalankan:Penjelasan:
grep{3**$_-1==$i}0..($i=<>)
mengembalikan daftar elemen rentang0..$_
(mis. Mulai dari 0 hingga input) yang memenuhi tes3**$_-1==$i
. Hanya satu elemen paling banyak yang dapat memenuhi tes ini, jadi instruksi ini akan mengembalikan array elemen 0 atau 1. Kami kemudian mencetak daftar ini: salahX
atau tidak sama sekali (yang salah).sumber
Pyth, 11 byte
Konversi ke basis 3 dan memeriksa kesetaraan untuk
[2, 2, ..., 2]
.sumber
?-2JjQ3ZlJ
, karena<col> <num>
dan<num> <col>
dapat dipertukarkan dengan-
Pyth.JavaScript (ES7),
383634 byteAtau hanya
3029 byte jika OK untuk keluar dengan kesalahan kegagalan:Uji
Tampilkan cuplikan kode
sumber
Java 8,
375867 byteLambda ini cocok dengan
Function<Integer, Integer>
referensi dan menggunakan trik dasar 3 sederhana.Kali ini seharusnya bekerja dengan benar.
sumber
i->
. Juga, jika Anda menganggapnyai
sebagaiLong
, Anda dapat menggunakana.toString(...)
(id akan memberikan beberapa peringatan tentang menggunakan fungsi statis secara tidak benar, tetapi harus dikompilasi). Namun, seperti kata OP, Anda harus mengembalikan nilainya, bukan hanya Benar atau Salah.Memproses,
6056 byteKeluaran
-1
jika salah.Penjelasan
void
adalah 1 byte lebih pendek daripada menggunakanfloat
, jadi itu sebabnya fungsi ini secara langsung menghasilkan bukannya mengembalikan nilai.Solusi alternatif
untuk 63 byte, tapi saya rasa alt ini bisa golf lebih pendek dari solusi aslinya. Saya sedang mengerjakannya.
sumber
0
sekarang?0
tidak pernah falsy di Java / Processing yang saya tahu.Brachylog , 8 byte
Cobalah online!
Output nilai jika benar dan
false.
jika ini tidak mungkin.Penjelasan
Ini adalah transkripsi langsung dari relasi yang diberikan:
sumber
+~^r~:3
, tetapi sayangnya~:
tidak melakukan apa yang Anda harapkan (kemungkinan karena:
sintaks daripada builtin), dan tampaknya diperlakukan secara identik:
.:
adalah simbol kontrol, dan~
hanya berfungsi pada predikat.Perl 6 ,
2524 byteCobalah
Menghapus ruang setelah
**
bekerja karena lebih panjang dari operator infiks lain yang bisa cocok*
.Jadi
…***…
diuraikan sebagai… ** * …
bukan… * ** …
.Cobalah
Diperluas:
sumber
R, 24 byte
Pendekatan yang berbeda dari jawaban plannapus , dan satu byte lebih pendek!
Menghasilkan semua bilangan bulat dari
3^1-1
ke3^99-1
, dan memeriksa apakah stdin cocok. Jika demikian, ia mengembalikan indeks yang cocok, yaitux
. Jika tidak, kembaliNA
sebagai nilai falsy.Kebetulan, itu akan menerima beberapa nilai sebagai input, dan menguji semuanya, yang merupakan fitur yang rapi.
sumber
Prolog, 20 byte
Bahasa ini keren sekali.
sumber
05AB1E , 9 byte
Cobalah online!
Mencetak -1 untuk falsy.
sumber
MATL , 8 byte
Ini menghasilkan angka
x
jika ada, atau tidak menghasilkan apa-apa, yang salah.Cobalah online!
Penjelasan
sumber
Japt , 11 byte
Coba di sini .
Terima kasih banyak kepada ETHproductions untuk membantu!
sumber
Python 3,
746664 byte-10 byte terima kasih kepada @ mbomb007, @FlipTack dan @ nmjcman101
sumber
from math import*
. Jugareturn n==3**x-1and x
.STDOUT
, sehingga Anda dapat mengubahnya kembali ke cetakan.import math
danmath.ceil
untuk satu byte. Anda juga dapat beralih3**x-1==n and x
kex*(3**x-1==n)
Ruby, 30 byte
Mengembalikan
nil
(nilai palsu) jika tidak ada angka yang ditemukan. [Coba online]sumber
C, 56 byte
tambahkan satu ke input dan kemudian berulang kali bagi tiga hingga sisa ditemukan, jika satu tercapai kembalikan jumlah pembagian yang lain -1
sumber
a%3<1
sebagai gantinya!(a%3)
. Satu lagi dengan0
falsy.a=--a?-1:n;
Anda akan menghemat 5 byte. jika fungsi non-void tidak memiliki pengembalian, itu hanya akan menggunakan tugas terakhir. Juga apa yang dikatakan @Titus.a%3?0:(a/=3)
alih-alih!(a%3)&&(a/=3)
Utilitas Bash / Unix,
3735 byteCobalah online!
Menggunakan dc untuk mengonversi ke basis 3, memeriksa apakah string yang dihasilkan semuanya 2s, menghitung jumlah karakter (termasuk baris baru), dan kemudian menggunakan bc untuk mengurangi 1.
Jika angka dalam basis 3 tidak semua 2s, maka grep tidak menghasilkan apa-apa (bahkan bukan baris baru), sehingga jumlah karakter adalah 0, dan mengurangi 1 menghasilkan -1.
sumber
C dikompilasi dengan Dentang 3.8.1,
53,52,54, 51 Bytes@SteadyBox sudah memposting solusi dalam C, tapi saya menggunakan pendekatan yang berbeda.
@Terima kasih kepada Jasen karena membantu menyelamatkan byte.
sumber
log
kembalidouble
jadi mungkin itu mungkin berhasil.C, 42 Bytes, dioptimalkan dari Wade Tyler
Mencoba
C, 37 Bytes, tanpa
return
Mencoba
n
bersifat global tetapi(I)MUL
hanya dapat memiliki operan dest di register, jadi harus dimasukkan keEAX
(pilihan biasa) dan pindah ke sanaJavaScript 6, 32 Bytes
Jika "falsy" harus sama, 33 Bytes:
sumber
Pyt ,
109 bytePenjelasan:
Menyimpan byte dengan menggunakan fungsi kenaikan alih-alih secara eksplisit menambahkan 1
sumber
Python, 64 byte
Keluaran
False
jika nomor tidak dapat ditulis dalam format itu.Ini juga berfungsi dalam 64 byte, dan mencetak string kosong sebagai output falsy:
Solusi kreatif untuk 65 byte, menghasilkan
0
untuk falsy:sumber
x
juga-1
.x
bukann
jika terjadi kecocokan.Pyth, 10 byte
Coba di sini!
sumber
Julia, 30 byte
Ini adalah fungsi sederhana - ini menciptakan vektor yang
true
hanya memiliki posisi yang sesuai3^a-1
, di manaa
vektor berisi bilangan bulat antara 0 dann
. Ia menemukan posisi "pertama" yaitutrue
dan mengurangi 1 (jika itu semuafalse
, temuan itu bernilai nol, dan mengembalikan -1).Seperti yang
0:n
telah0
di tempat pertama, kurangi 1 mengoreksi untuk pengindeksan dan juga memungkinkan-1
tanggapan palsu.sumber
Pyke,
96 byteCoba di sini!
Versi 9 byte lama:
Coba di sini!
sumber
Pyth 8 byte
Coba di sini
sumber