Urutan plus-minus
Urutan plus-minus adalah yang dimulai dengan dua biji, a(0)
dan b(0)
. Setiap iterasi dari urutan ini adalah penambahan dan pengurangan dari dua anggota urutan sebelumnya. Yaitu, a(N) = a(N-1) + b(N-1)
dan b(N) = a(N-1) - b(N-1)
.
Tujuan Menghasilkan urutan plus-minus, dalam infinitude atau K
langkah pertama yang diberikan K
. Anda dapat melakukan ini menggunakan program keluaran tanpa batas, generator, atau fungsi / program yang memberikan K
langkah pertama . Urutan output tidak masalah, asalkan konsisten. (Yaitu, b(K) a(K)
atau a(K) b(K)
, dengan beberapa pemisah non-numerik di antara keduanya.) Output harus dimulai dengan input.
Uji kasus
Untuk input 10 2
(dari a(0) b(0)
, ini adalah output yang mungkin untuk pendekatan K pertama (atau subbagian dari pendekatan tak terbatas):
10 2
12 8
20 4
24 16
40 8
48 32
80 16
96 64
160 32
192 128
320 64
384 256
640 128
768 512
1280 256
1536 1024
2560 512
3072 2048
5120 1024
6144 4096
10240 2048
12288 8192
20480 4096
24576 16384
40960 8192
49152 32768
81920 16384
98304 65536
Untuk input 2 20 10
( a(0) b(0) k
):
2 20
22 -18
4 40
44 -36
8 80
88 -72
16 160
176 -144
32 320
352 -288
Ini adalah kode-golf , jadi program terpendek dalam byte menang.
a
danb
menjadi baris baru?Jawaban:
Jelly , 5 byte
Ini adalah pendekatan rekursif. Karena optimasi panggilan ekor, satu-satunya batasan adalah kemampuan untuk memasukkan kedua bilangan bulat ke dalam memori. Output adalah satu daftar per baris.
Cobalah online!
Bagaimana itu bekerja
sumber
Main link
sebenarnya yang dimaksud?¶
dan linefeeds dapat digunakan secara bergantian. Anda dapat menggunakan keduanya dalam mode UTF-8, tetapi hanya ada\x7f
untuk mewakili mereka di halaman kode Jelly.Python 2, 31 byte
Mencetak selamanya. Ya, pada akhirnya Anda melebihi batas rekursi, tetapi itu adalah batasan sistem.
sumber
sys.setrecursionlimit
while
loop berperilaku berbeda dari apa yang Anda lakukan.f=lambda a,b:print(a,b)or f(a+b,a-b)
)MATL , 10 byte
Versi ini akan menampilkan elemen dalam jumlah tak terbatas dalam urutan plus-minus.
Cobalah secara Online! (hentikan setelah berjalan karena infinite loop)
Penjelasan
sumber
Haskell, 19 byte
Menghasilkan urutan angka yang tak terbatas. Contoh penggunaan:
sumber
Pyth,
109 byteTerima kasih kepada @isaacg untuk 1 byte.
Mencetak urutan pasangan tanpa batas.
sumber
Q
dapat dihapus - Pyth akan mengisinya secara implisit.C, 81 byte
sumber
05AB1E , 7 byte
Menggunakan metode k pertama . Masukkan yang berikut ini untuk:
Kode:
Penjelasan:
Menggunakan pengkodean CP-1252 . Cobalah online!
sumber
k, 12
.
Bisa juga disebut dalam bentuk
sumber
APL, 37 karakter
Dapat digunakan sebagai
atau
sumber
MathGolf , 8 byte
Cobalah online!
Mengambil input dalam urutan terbalik, tetapi itu hanya karena itulah cara mereka didorong ke stack. Kalau tidak, itu akan menjadi 1 byte lebih lama. 2-3 byte berasal dari output. Tanpa perlu benar-benar mencetak satu pasang per baris, program bisa
æ`‼+-∟
(mengisi tumpukan dengan elemen-elemen urutan tanpa batas waktu), atauÉ‼+-∟
(mencetak semua elemen urutan kecuali yang pertama untuk debug, selama-d
flag aktif) .Penjelasan
sumber
ABC
, saya mendapatkan kesalahan on linestdin = StdIn(line)
dalam kode Python ..'ABC'
atau"ABC"
. Secara internal,ast.literal_eval
digunakan untuk mengurai input. Masih ada beberapa kebiasaan yang harus diselesaikan, tetapi Anda harus dapat melakukan ini .ABCDEF
to[AB, CD, EF]
?2ô_2<\1>]
(hard-coded ke input-length 6 dan dipecah menjadi bagian-bagian ukuran 2, karena itulah yang saya butuhkan, tetapi mungkin harus dapat dimodifikasi untuk bekerja untuk ukuran input umum dan ukuran komponen)./
Python 3.5,
5543 byte:Mencetak urutan yang benar untuk selamanya. Saya telah dapat membiarkan ini berlangsung selama sekitar 30 menit tanpa ada kesalahan yang diangkat, dan program telah mencetak 2301 digit untuk angka pertama, dan 1.150 digit untuk yang kedua! Berdasarkan hal ini, saya menduga bahwa, dengan menyediakan perangkat keras yang cukup untuk dijalankan, ini dapat berlangsung selama WAY lebih lama dan mencetak WAY lebih banyak digit, dan secara teoritis juga tidak memiliki batas rekursi, milik
while
loop!sumber
a
danb
untuk mencocokkan pertanyaan.while
panggilan berulang dan rekursif sekarang ...Reng v.3.2, 9 byte (menjawab sendiri, tidak bersaing)
Mengambil dua input (
a b
) dan outputb a
. Coba di sini!i
mengambil input dua kali,¤
menduplikasi tumpukan,æ
mencetak angka dan spasi (dan melakukannya dua kali, ada dua),ö
mencetak baris baru,±
melakukan apa yang Anda harapkan, dan2.
melompati dua karakter berikutnya, membungkus input yang mendapatkan karakter.sumber
Python 2.7,
56, 42 byte:Simpul sederhana yang mencetak selamanya (ish).
sumber
a,b=input()
, Anda dapat menghapus indentasi.Batch, 54 byte
Perhatikan bahwa CMD.EXE terbatas pada bilangan bulat bertanda 32-bit, sehingga akan dengan cepat meluap dan mencetak sampah dan pesan kesalahan.
sumber
Julia, 25 byte
Penyalahgunaan sintaksis maksimum. Julia aneh . Cobalah online!
Versi alternatif, 29 byte
Perhatikan bahwa output akan akhirnya meluap kecuali Anda memanggil
<|
pada BigInt . Sayangnya,show
akan mengawali setiap array denganBigInt
dalam hal ini. Dengan biaya empat byte lagi, kita dapat menghasilkan output yang dipisahkan spasi untuk semua jenis numerik.Cobalah online!
Bagaimana itu bekerja
Kami mendefinisikan operator biner
<|
untuk tujuan keluar. Ini tidak terdefinisi dalam versi terbaru Julia, tetapi masih diakui sebagai operator oleh parser. Sementara\
(tidak didefinisikan secara eksplisit untuk bilangan bulat) lebih pendek satu byte, prioritas tinggi akan membutuhkan penggantiana+b<|a-b
dengan(a+b)\(a-b)
(+3 byte) atau\(a+b,a-b)
(+2 byte).Ketika
a<|b
dijalankan, itu dimulai dengan memanggilshow
untuk mencetak [ab] ke STDOUT. Kemudian,a+b<|a-b
secara rekursif memanggil<|
jumlah atau perbedaannya.Karena rekursi (seharusnya) tak terbatas, perbandingan
<
tidak pernah dilakukan; satu-satunya tujuan adalah merantai dua bagian kode. Ini menghemat dua byte dari alternatif yang lebih mudah([a b]|>show;a+b<|a-b)
.sumber
Perl 6 , 23 byte (tak terbatas)
Sunting: terima kasih kepada JoKing, versi urutan sekarang adalah yang terpendek (juga dihapus
.say
per klarifikasi dari OP:TIO: InfiniteSeq
Jawaban fungsional lama
TIO: InfiniteFunc
Perhatikan bahwa Perl 6 tidak memiliki batas rekursi per se, itu murni berdasarkan memori yang tersedia, jadi ini akan mencapai jutaan sebelum pemboman.
sumber
Faktor, 62 byte
recursive
, atau kalau tidak, callstack terlalu cepatsumber
Ruby, 25 byte
Berdasarkan solusi Python xnor . Mungkin saya akan membuat generator di jawaban lain, tetapi ini akan mencetak
a
, lalub
, lalu yang barua
, lalu yang barub
, ad infinitum.sumber
Python 3, 42 byte
Saya ingin menulis generator untuk fungsi ini, dan saya melakukannya.
Dalam Python 3, urutan dihasilkan dengan cara ini:
sumber
Common Lisp, 57
Penggunaan
psetf
, yang mempengaruhi nilai variabel secara paralel, danloop
sintaksis sederhana .sumber
bash + GNU coreutils, 75 byte
Doa:
sumber
CP / M 8080, 47 byte
z80 mnemonics tapi tidak ada yang tidak dimiliki 8080, sumber berkomentar begitu saya memutuskan untuk menghitung output daripada input tetapi nama fungsi singkat dipertahankan, tangan dirakit jadi maafkan 'xx's di mana saya tahu jumlah byte tetapi belum berhasil alamat keluaran atau offset:
sumber
Clojure, 44 byte
Fungsi yang menghasilkan urutan malas yang tak terbatas.
sumber
Perl 5, 40 byte
membutuhkan
-E
(gratis)atau (panjang yang sama)(Saya menemukan yang terakhir karena harus memiliki kesalahan pembulatan untuk beberapa iterasi.)
Topi-tip
Tapi saya curiga harus ada solusi Perl 5 yang lebih pendek.
sumber
KEMBALI , 21 byte
Try it here.
Operator rekursif-lambda. Pemakaian:
Penjelasan
sumber
> <> , 26 byte
Panggil dengan
a
,b
,n
di stack, di manan
adalah jumlah putaran atau nilai negatif untuk output yang tak terbatas. Keluarana
danb
dipisahkan oleh spasi.Sebagai penjelasan, berikut adalah bagaimana tumpukan berevolusi selama runtime:
Anda dapat mencobanya pada juru bahasa online dengan jumlah belokan positif tetapi Anda harus menggunakan juru bahasa python resmi untuk menguji mode tak terbatas.
sumber
Fuzzy Octo Guacamole ,
1716 byte(non-bersaing, menggunakan fitur setelah tantangan)
Ini sulit dibuat, karena kesalahan sisi klien. Tapi saya mengerti!
Panduan:
sumber
:
ke awal loop dan menghilangkan kebutuhan untuk mencetak dua kali?Serius, 12 byte
Menghasilkan aliran tanpa batas, formatnya
b(n) a(n)
, sepasang keluaran per baris.Tidak ada tautan online karena TryItOnline tidak melakukannya dengan baik dengan loop tak terbatas
Penjelasan:
sumber
J,
1612 byteHanya menghasilkan nilai k pertama untuk urutan berdasarkan pada biji yang diberikan.
Disimpan 4 byte menggunakan trik (atau gula sintaksis) yang ditunjukkan oleh @randomra dalam komentar ini .
Pemakaian
sumber
C #, 50 byte
Sumber lengkap, termasuk test case:
Tipe data BigInteger digunakan sehingga angka tidak meluap dan menjadi 0. Namun, karena ini adalah solusi rekursif, mengharapkan stack overflow.
sumber