Seorang pria dari bintang-bintang telah datang ke Bumi! Beruntung presiden Amerika Serikat, Donald Trump, mengalami kematian tak terhingga. Menggunakan dadu ini, ia dapat menyulap nomor yang Anda , walikota Podunk , harus gunakan untuk menentukan siapa yang harus dikirim untuk menghentikan penyerang! Tapi hati-hati, Anda hanya dapat mengirim byte dalam jumlah terbatas di belakang katak Anda !
Diberikan input pengguna (yang akan menjadi bilangan bulat positif), Anda harus mengembalikan string tergantung pada kategori apa nomor itu berada.
- Jika angka tersebut adalah angka Fibonacci , Anda harus menampilkan Ness .
- Jika nomor tersebut adalah nomor Lucas , Anda harus menampilkan Lucas .
- Jika nomor tersebut adalah baik sebuah nomor Lucas dan nomor Fibonacci , Anda harus keluaran Travis .
- Jika nomor itu tidak aa jumlah Lucas maupun nomor Fibonacci , Anda harus keluaran Pippi .
Contohnya
Berikut adalah beberapa kasus uji:
1 => Travis 2 => Travis 3 => Travis 4 => Lucas 5 => Ness 6 => Pippi 7 => Lucas 8 => Ness 610 => Ness 722 => Pippi 843 => Lucas
Aturan
- Ini adalah kode-golf , jawaban terpendek dalam byte menang.
- Program Anda mungkin merupakan program lengkap atau fungsi (n anonim).
Bonus
Ada beberapa bonus yang dapat Anda gunakan untuk membantu katak Anda mendapatkan data ke Presiden Trump lebih cepat:
- Untuk
-15
byte: Jika nomor inputnya adalah2016
, Anda harus mengeluarkanTrump
, karena dia berada di puncak kepresidenannya.
0, 1
lain1, 1
, saya percaya ini tergantung pada definisi yang Anda gunakan. Bukanlah hal yang tidak biasa untuk melihat angka-angka Lucas dimulai dengan2, 1
, misalnya OEIS memiliki kedua versi ( 1 , 2 ), tetapi yang dimulai dengan 2 adalah fase definisi.Jawaban:
Pyth, 59 - 15 = 44 byte
atau 42 byte setelah bug diperbaiki
Hexdump:
Dua karakter pertama (
&Q
) diperlukan karena bug penguraian Pyth yang membuatQ
setelah."
gagal. Perbaikan telah diterapkan. Jika penerjemah post-bugfix diizinkan, -2 byte.Tanpa kompresi string yang tidak dapat dibaca:
Pyth, 63 - 15 = 48 byte
49 byte tanpa Trump
Test Suite
Cukup mudah, hanya menghasilkan urutan, duplikat dan periksa keanggotaan.
Urutan dihasilkan dengan mulai dengan
[1, 2]
dan[2, 1]
, dan kemudian menerapkan aturan fibonacci.sumber
Julia,
146142121120 byteIni menciptakan fungsi tanpa nama yang mengembalikan boolean. Untuk menyebutnya, berikan nama, mis
f=n->...
.Tidak Disatukan:
Memperbaiki masalah dan menyimpan 7 byte berkat Glen O!
sumber
Mathematica
143156 - 15 (bonus) = 141 byteDengan 2 byte yang disimpan berkat LegionMammal978.
sumber
False
danTrue
dapat diganti dengan1<0
dan dengan1>0
hormat.Mathematica,
9287 byteTerinspirasi oleh jawaban Sp3000 .
sumber
Python 2, 107
Kuncinya adalah dua pemeriksaan aritmatika murni untuk angka Fibonacci dan Lucas:
n
adalah angka Fibonacci tepat jika5*n*n+4
atau5*n*n-4
adalah kuadrat sempurnan
adalah angka Lucas persis jika5*n*n+20
atau5*n*n-20
adalah kuadrat sempurnaSitus ini memiliki sketsa bukti .
Jadi, output tergantung pada nilai-nilai
5*n*n+i
untuki
dalam{4,-4,20,-20}
. Fungsif
menguji nilaii
, dengan memeriksa apakah nilai yang sesuai tidak memiliki akar kuadrat bilangan bulat.abs
Ada hanya untuk menghindari kesalahan mengambil akar negatif untukn=1, i=-20
.Fungsi ini
f
mengambil nilai angkan
untuk diuji dari STDIN. Python hanya mengevaluasi ini sekali, bukan sekali per panggilan fungsi.Apakah angka tersebut bukan Fibonacci dievaluasi sebagai
f(4)*f(-4)
menggunakan boolean implisit untuk konversi nomor dan juga untuk tidak Lucas, dan string yang sesuai diambil. Jika spasi tambahan diizinkan, interleaving string akan lebih pendek.sumber
Python 2, 117 byte
Untuk daftar string,
"Pippi Lucas Ness Travis".split()
panjangnya sama.sumber
CJam,
585554 bytePendekatan naif menghasilkan angka Fibonacci dan Lucas kemudian menghitung kejadian di keduanya, mengonversi menjadi biner, dan memilih string yang sesuai.
Cobalah online .
sumber
Serius, 69 byte
Sebelum tantangan ini, Serius memiliki builtin
f
(indeks dalam angka Fibonacci, -1 jika bukan angka Fibonacci) ... tetapi bukan indeks dalam daftar atau "ada dalam daftar"! (Sejak itu ditambahkan sebagaií
.)Akibatnya, inilah yang saya habiskan untuk mencari apakah inputnya adalah angka Fibonacci:
Inilah yang saya habiskan menghasilkan daftar nomor Lucas:
Dan inilah yang saya habiskan untuk menemukan jika inputnya ada di daftar nomor Lucas:
Itu adalah string yang diformat menggunakan notasi Python menjadi sesuatu seperti
:610:=
, dan dikonversi ke fungsi, yang kemudian dipetakan di atas array dan dijumlahkan. (Angka-angka Lucas unik, sehingga jumlahnya selalu 0 atau 1.)Terima kasih kepada @Mego untuk bit terakhir dengan pemformatan string.
sumber
Perl,
133(146-15 =) 131(144-15 =) 129(136-15 =) 121 byte+1 byte untuk
-n
bendera.Dengan baris baru setelah titik koma, untuk keterbacaan:
Demo:
Trik:
Anda mungkin bertanya-tanya mengapa variabel saya diberi nama$a
,$b
,$%
, dan$d
. Itu pertanyaan yang sangat bagus! Bahkan, ini memungkinkan saya untuk menghemat satu byte.lebih pendek satu byte dari
Ini tidak lagi berlaku karena saya memasukkan kode saya dengan mengatur ulang hal-hal, menyebabkan perubahan nama variabel menjadi tidak lagi menyimpan byte. Saya mengubahnya kembali sehingga nama variabel masuk akal lagi.$_-2?$f+$l*2:3
agak menarik. Pada dasarnya, saya harus menggunakan case khusus2
untuk nomor Lucas karena program saya memeriksa apakah suatu angka adalah nomor Lucas setelah "memperbarui" nomor Fibonacci dan Lucas. Jadi2
dianggap sebagai nomor bukan-Lucas.$_-2?foo:bar
adalah char lebih pendek dari$_==2?bar:foo
. Hal yang sama digunakan untuk2016
ujian.Ini juga tidak lagi benar karena saya dapat merestrukturisasi program untuk tidak memerlukan casing khusus
2
. Tapi saya masih menggunakan$_-2016?stuff:Trump
sebagai gantinya$_==2016?Trump:stuff
, yang satu byte lebih lama.Omong-omong, Anda mungkin bertanya-tanya bagaimana saya melakukan restrukturisasi ini. Saya baru saja membuat program melakukan iterasi 9 kali lebih banyak dari yang diperlukan, yang hanya memakan biaya 2 byte (
*9
) tetapi memungkinkan saya untuk membuat asumsi di tempat lain yang membantu menurunkan barang golf.Karena variabel default ke nol,
lebih pendek dari
Perl mendukung barewords, jadi saya tidak perlu mengutip string saya (\ o /).
sumber
-n
flag (seperti disebutkan dalam jawaban).-n
bendera?while(<>) { ... }
loop di sekitar program Anda. Lihat: Perl docs .Julia,
101100 byteTidak Disatukan:
sumber
{}
sintaks alternatifnyaAny[]
sudah usang; itu akan menghemat beberapa byte.Oktaf, 93 byte
Pendekatan ini mirip dengan jawaban MATLAB saya dengan pengecualian bahwa Oktaf memungkinkan Anda untuk mengindeks langsung ke array baru:
sumber
MATL (Non-Kompetisi),
575554(67-15) = 52 byteCobalah secara Online!
Penjelasan
Sekali lagi, logika yang mirip dengan jawaban saya yang lain di sini dan di sini .
sumber
C ++ 11, 176 + 15 (#sertakan) = 191
Tidak digabungkan dengan penggunaan. Saya bisa menambahkan penjelasan jika diminta besok, gtg tidur sekarang!
sumber
Javascript (ES6), 108 byte
Fungsi yang sama untuk Fibonnacci dan Lucas. Ini adalah fungsi rekursif yang mengambil dua nilai pertama sebagai init.
sumber
Java, 151 byte
Anda dapat berargumen bahwa Trump tidak akan pernah melakukan outsourcing keputusan penting ini, jadi kami tidak perlu mempublikasikan metode ini, menghemat 7 byte lagi.
Tidak diikutkan termasuk permohonan ujian utama
Sejauh ini saya tidak menemukan cara untuk menguji 2016 dan mengembalikan "Trump" dalam kode yang kurang dari 15 byte dalam kode.
sumber
C (gcc) ,
128120116110 byteCobalah online!
Penjelasan
Mari kita nama
F(n)
-n jumlah Fibonacci, danL(n)
n th-nomor Lucas.a
,b
YangF(n-1)
,F(n)
masing-masing.Kemudian kita dapat menghitung
L(n) == F(n-1)+F(n+1) == 2*F(n-1) + F(n) == 2*a+b
Fungsi ini secara berturut-turut akan menghitung angka Fibonacci dan Lucas, hingga
n
, dan memeriksa apakahn
ada di antara mereka.Jika
n
adalah angka Fibonacci, bit pertama dario
akan diatur ke1
Jika
n
adalah angka Lucas, bit ke-2o
akan diatur untuk1
o
kemudian akan digunakan untuk menentukan nama yang akan diproduksiEdit
a<b<c
dana<a+c=L(n)
, jadi( b<=n || a+c<=n ) => a<n
. Saya sebenarnya perlua<=n
menanganinya dengan benarn=1
c
, sama denganF(n+1)
, yang tidak berguna karena kita sudah bisa menghitungF(n+1)
dengana
danb
sumber
b+=a
alih-alihb=a+b
Perl 5.10, 119 - 15 (bonus) = 104 byte
Tidak Disatukan:
Ini mengeksploitasi fakta itu
adalah angka Lucas terbesar yang lebih rendah atau sama dengan F (n).
sumber
Groovy, 149 byte
Kode uji:
g
adalah penutupan yang menghasilkan daftar angka berdasarkan pada seed (s
) dan nilai maks (m
).(g(i,[1,1]).contains(i)?1:0)+(g(i,[2,1]).contains(i)?2:0)
menemukan indeks yang akan digunakan berdasarkan nomor yang sedang lucas atau fibonacci.sumber
MATLAB,
122119 bytePenjelasan singkat
Kami pertama kali membuat array sel yang berisi nilai-nilai untuk mencetak:
{'Pippi', 'Lucas', 'Ness', 'Travis'}
. Kemudian untuk mengetahui nilai mana yang akan ditampilkan, kami memeriksa untuk melihat apakah itun
adalah angka Fibonacci atau Lucas.Untuk Fibonnaci, kami menggunakan rumus berikut:
Ini memeriksa untuk melihat apakah salah
5*n^2 + 4
atau5*n^2 - 4
persegi yang sempurna. Jikaany
ada, maka itu adalah angka Fibonacci.Rumus untuk nomor Lucas sangat mirip dengan pengecualian yang kami gunakan +/- 20 bukannya 4:
Dalam solusi ini saya menggabungkan dua kasus ini menjadi satu dengan menggunakan matriks:
Dengan menerapkan persamaan yang sama dengan yang di atas, tetapi memaksa
any
untuk mempertimbangkan hanya dimensi pertama, saya mendapatkan array logis dua elemen di mana jika elemen pertama adalahtrue
, maka itu adalah nomor Lucas dan jika elemen kedua adalahtrue
, itu adalah nomor fibonacci .Kemudian untuk menghitung indeks ke dalam array sel awal saya, saya memperlakukan ini sebagai urutan biner dengan melakukan perkalian elemen-bijaksana boolean ini dengan
[2^0, 2^1]
atau hanya[1,2]
. Dan jumlah elemen. Jelas saya harus menambahkan 1 karena pengindeksan berbasis satu MATLAB.Lalu saya harus menggunakan
subsref
dansubstruct
mengindeks ke dalam array sel awal untuk mendapatkan hasil akhir.sumber
JavaScript (ES6), 97 byte
The
a==1
cek diperlukan kalau tidak saya tidak melihat bahwa 1 adalah angka Lucas.sumber
Jelly , 47 byte - 15 = 32 (tidak bersaing ...?)
Cobalah online!
sumber
05AB1E ,
3937 (52 - 15 bonus) byteCobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
sumber