Menulis sebuah program, diberi input n , akan menghasilkan semua n-tupel yang mungkin menggunakan bilangan asli.
n=1
(1),(2),(3),(4),(5),(6)...
n=2
(1,1),(1,2),(2,1),(2,2),(1,3),(3,1),(2,3),(3,2),(3,3)...
n=6
(1,1,1,1,1,1) (1,1,1,1,2,1) (1,1,1,2,1,1)...
- Output mungkin dalam urutan apa pun yang tidak melanggar aturan lain.
- Program harus ditulis untuk dijalankan selamanya dan daftar semua tuple yang berlaku tepat sekali, secara teori.
- Pada kenyataannya, program Anda akan mencapai batas dan kerusakan tipe integer Anda. Ini dapat diterima selama program akan berjalan sangat lama jika hanya tipe integer Anda yang tidak terbatas.
- Setiap tuple yang valid harus terdaftar dalam waktu yang terbatas, jika hanya program yang diizinkan untuk menjalankan selama itu.
- Output dapat, sesuai pilihan Anda, termasuk nol di samping bilangan asli.
- Anda dapat memilih format output program Anda untuk kenyamanan Anda, selama pemisahan antara tupel dan angka di dalam masing-masing tuple jelas dan konsisten. (Misalnya, satu tuple per baris.)
- Input (n) adalah bilangan bulat dari satu hingga enam. Perilaku yang diperlukan tidak ditentukan untuk input di luar kisaran ini.
- Aturan kode-golf berlaku, kemenangan program terpendek.
Terima kasih kepada "Artemis Fowl" untuk umpan balik selama fase kotak pasir.
Jawaban:
Sekam , 2 byte
Cobalah online!
Penjelasan
N
adalah daftar bilangan asli tanpa batas[1,2,3,4,..
.π
adalah kekuatan Cartesian. Hasilnya adalah daftar daftar yang tak terbatas. Setiap daftar panjang yang diinginkan terjadi tepat satu kali karenaπ
keren seperti itu. Input dan output bersifat implisit.sumber
n
- tupel diperoleh dengan mengambil produk Cartesian dari daftar asli dan daftarn-1
-tupel, dalam urutan kenaikan jumlah indeks.2,2,2
muncul setelah4,1,2
dan5,1,1
.N
. Untuk 2-tupel Anda mengambil produk Cartesian denganN
dipesan dengan jumlah indeks. Di kedua daftar, masing-masing angkan
berada di indeksn
sehingga untuk panjang 2 hasilnya kebetulan dipesan dengan jumlah. Untuk mendapatkan 3-tupel Anda mengambil produk CartesianN
dan daftar 2-tupel, dipesan berdasarkan jumlah indeks elemen dalam daftar ini. Itu tidak melihat jumlah tupel, ia melihat posisinya dalam daftar tupel.Haskell , 62 byte
Cobalah online!
n!s
menghasilkan semuan
-tuples yang dijumlahkans
.Maka jawabannya adalah
([1..]>>=).(!)
, yaitu\n -> [t | s<-[1..], t<-n!s]
.Ini adalah fungsi yang memetakan bilangan bulat
n
ke daftar malas tak terbatas tupel (daftar bilangan bulat).sumber
Haskell , 50 byte
Cobalah online!
Daftar
n
-tupel diurutkan berdasarkan jumlah.mapM
apakah angkat berat untuk menghasilkan semuan
-tupel angka dari 0 hingga k. The<$f
Trik ini dijelaskan di sini .Haskell , 51 byte
Cobalah online!
Secara rekursif merentangkan semua
n-1
-tupel menjadi semuan
-tupel dengan membagi angka pertamaa
dari masing-masingn-1
-tupel menjadi dua angkaa-k,k
yang menjumlahkannya, dengan segala cara yang mungkin.sumber
Pyth - 9 byte
Terima kasih kepada @FryAmTheEggman untuk golfnya
Putar semua x, dan ambil [1..x] ^ n. Ini membuat duplikat, jadi hanya menyimpan yang baru ke x itu, alias mengandung x di dalamnya. Formatnya sedikit aneh, tetapi bisa dibuat standar dengan satu byte lagi,
.V1j}#b^Sb
Cobalah online .
sumber
f}bT
->}#b
Juga, jumlah byte Anda tampaknya salah saat ini?j(b)
. Juga, terima kasih untuk golfnya.Brachylog (v2), 9 byte
Cobalah online!
Ini adalah generator tanpa batas yang menghasilkan semua tupel yang mungkin. TIO link memiliki header yang menggunakan generator untuk menghasilkan 1000 elemen dan mencetaknya (tetapi generator bisa berlanjut tanpa batas waktu jika saya meminta itu sebagai gantinya; bilangan bulat Brachylog tidak terikat).
Rasanya harus ada cara terser, tetapi ada banyak kendala dan ini adalah yang tersest yang bisa saya masukkan ke dalam satu program.
Penjelasan
Secara kebetulan, saya merasa sangat menarik betapa berbedanya penjelasan saya tentang keduanya
≜
, meskipun mereka melakukan hal yang persis sama dari sudut pandang Brachylog. Yang pertama≜
adalah predikat nondeterministik pertama dalam program, sehingga menetapkan urutan hasil; dalam hal ini, ia menghitung semua nilai eksplisit yang mungkin untuk jumlah daftar dalam urutan 0, 1, 2, 3 ..., dan digunakan untuk memastikan bahwa daftar tersebut adalah output dalam urutan jumlah mereka (ini memastikan bahwa setiap kemungkinan daftar muncul setelah jumlah output yang terbatas). Yang kedua≜
digunakan untuk menghitung semua kemungkinan eksplisit untuk daftar (daripada menghasilkan formula yang menentukan bagaimana elemen-elemen daftar saling berhubungan).sumber
↰₁ẉ⊥
juga merupakan tajuk yang bagus, untuk mencetak tanpa batas.ᶠ
atau⊥
di header.Perl 6 , 37 byte
Cobalah online!
Pada dasarnya berjalan
polymod
dengan sebanyak mungkin entri yang diperlukan, di mana modulo selalu lebih besar dari input, yaitu 0.polymod (1,1,1), 1.polymod (2,2,2) dll. Dengan begitu digit selalu berada dalam jangkauan. Perl6 tidak akan membiarkan saya modulo infinity ...sumber
(0, 1, 0, 0)
tidak terdaftar).Bahasa Wolfram (Mathematica) , 62 byte
Cobalah online!
-3 byte dengan pemisahan yang tidak konsisten (hapus
@#&
)Cobalah online!
sumber
C # (Visual C # Interactive Compiler) , 148 byte
Cobalah online!
-3 byte terima kasih kepada @ASCIIOnly!
sumber
Write
dengan misalnya'<literal tab>'
atau|
dengan panjang yang sama, dan mengambil garis yang jauh lebih sedikit: PJelly , 10 (9?) Byte
9 jika kita dapat menggunakan pemisahan yang tidak konsisten (yang saya tanyakan) - penghapusan
€
.Cobalah online!
Bagaimana?
sumber
€
diperlukan, tapi mari kita tunggu apa yang harus OP mengatakan.05AB1E ,
1511 byte-4 byte dengan menciptakan pelabuhan @Maltysen 's Pyth jawabannya .
Cobalah online.
Penjelasan:
sumber
MATL , 16 byte
Tuples dipesan dengan meningkatkan jumlah, dan dalam jumlah tertentu mereka dipesan secara leksikografis.
Cobalah online!
sumber
Python 2 ,
12611210610110083 byteCobalah online!
5 byte thx ke mypetlion ; 1 byte dari mata elang ArBo ; 17 byte dari xnor !
Bangun partisi yang diurutkan
m
menjadin
nampan, untukm = 0,1,2,3,...
dengan memilih angka biner dengann-1
0
s danm
1
s.sumber
if i==p:i=0;p*=2
dapat menjadii%=p;p<<=i<1
menghemat 5 byte.print b
tidak diperlukan: Di+p
hanya menghitung 1, 2, 3 ... dengan cara yang berbelit-belit dan hanya bisa menjadi variabel tunggal.C # (.NET Core) ,
608 570567 byteCobalah online!
Ya Tuhan apa yang telah saya lakukan (begitu banyak loop, itulah yang saya lakukan)
Itu harusnya bekerja!
Jika Anda memindahkan lingkaran cetak ke belakang satu braket, itu akan menampilkan daftar saat dibuat, setiap kali loop. (Saya sarankan menambahkan baris baru atau sesuatu untuk membedakan setiap loop jika Anda melakukannya.)
Jujur, banyak waktu saya dihabiskan untuk bertarung dengan bahasa ... tidak ada array yang cukup, berbagai macam perilaku == ...
Semoga versi ini lebih mudah dibaca.
sumber
Perl 6 , 50 byte
Cobalah online!
Blok kode anonim yang mengembalikan daftar malas tak terbatas. Ini menggunakan strategi yang sama dengan jawaban Chas Brown .
Penjelasan:
sumber
VDM-SL , 51 byte
Pemahaman mengatur rekursif dengan rangkaian urutan ..
Bukan pada TIO, Anda bisa menjalankan program (jika Anda mengaktifkan batas untuk tipe nat atau tidak akan berhenti):
Termasuk 0s opsional sebagai jawaban jika tidak maka akan menjadi 52 byte yang mengikat nat1
sumber
Bahasa Wolfram (Mathematica) , 131 byte
Cobalah online!
sumber
perl -M5.010 122 bytes
Menambahkan beberapa baris baru demi keterbacaan (tidak dihitung dalam jumlah byte)
sumber
Python 2 , 120 byte
Cobalah online!
Sedikit lebih lama daripada kebanyakan jawaban lain, tetapi saya menyukai ide di baliknya.
sumber
Stax , 6 byte
Jalankan dan debug itu
Untuk input
n
, prosedurnya kira-kirasumber
JavaScript (V8) , 98 byte
Cobalah online!
Hore! Akhirnya mendapatkannya di bawah 100 :) Pada dasarnya port jawaban C # saya .
sumber