Perl6 22/30
Saya akan melihat apakah Perl6 dapat menyimpulkan urutan untuk saya.
Untuk melakukan itu saya menggunakan REPL yang dibangun ke dalam Perl6
$ perl6
> 1,2,4,7...*
Unable to deduce arithmetic or geometric sequence from 2,4,7 (or did you really mean '..'?)
> 1,2,4,7,10...*
1 2 4 7 10 13 16 19 22 25 28 31 34 37 40 43 46 49 52 55 58 61 64 67 70 ...
Hmm, saya melihat pola yang disimpulkan Perl. Setelah 4 untuk mendapatkan nilai berikutnya Anda hanya menambahkan 3.
1,2,4,*+3...*
Yang menyimpan satu karakter membuat kode untuk mendapatkan daftar nomor tak terbatas dalam urutan 13 karakter Stöhr.
Kode ini hanya melakukan sesuatu yang berguna dalam REPL karena mencetak intisari hasilnya bagi kami. Untuk mencetaknya, Anda harus memberi tahu Perl untuk mencetak hasilnya.
$ perl6 -e 'say 1,2,4,*+3...*'
( * + 3
hanyalah cara untuk mendapatkan referensi kode yang mengembalikan 3 ditambahkan ke argumen itu saja. Cara lain untuk menulisnya adalah { $_ + 3 }
, atau -> $i { $i + 3 }
, { $^i + 3 }
atau sub ($i){ $i + 3 }
)
Cara terpendek untuk membuat sesuatu Callable untuk menghasilkan elemen n pertama adalah untuk mendapatkan sepotong elemen.
{(1,2,4,*+3...*)[^$_]} # 22
Dalam konteks kosong yang akan menghasilkan nilai pertama $_
, lalu segera membuangnya.
Dalam apa pun selain konteks batal itu menciptakan blok kode anonim (subrutin dasar tanpa nama) yang mengambil satu argumen.
# store it in a scalar variable
my $sub = {(1,2,4,*+3...*)[^$_]};
say $sub.(5);
# 1 2 4 7 10
# use it immediately
say {(1,2,4,*+3...*)[^$_]}.(5);
# 1 2 4 7 10
# pretend it always had a name
my &Stöhr-first = {(1,2,4,*+3...*)[^$_]};
say Stöhr-first 5;
Jika Anda benar-benar berpikir itu harus memiliki nama untuk memenuhi syarat sebagai valid untuk tantangan ini, Anda mungkin akan melakukan ini:
sub s(\n){(1,2,4,*+3...*)[^n]} # 30
Meskipun karena s
juga digunakan untuk operator substitusi, untuk memanggil ini parens adalah non-opsional. (Anda bisa memberikannya nama yang berbeda saya kira)
say s(5);
# 1 2 4 7 10