Bilangan asli termasuk 0 secara resmi didefinisikan sebagai set, dengan cara berikut :
- Angka 0 didefinisikan sebagai set kosong, {}
- Untuk n ≥ 0, angka n +1 didefinisikan sebagai n ∪ { n }.
Akibatnya, n = {0, 1, ..., n -1}.
Angka pertama, yang ditentukan oleh prosedur ini, adalah:
- 0 = {}
- 1 = {{}}
- 2 = {{}, {{}}}
- 3 = {{}, {{}}, {{}, {{}}}}
Tantangan
Mengingat n
, output perwakilannya sebagai satu set.
Aturan
Output secara konsisten dapat menggunakan braket karakter seperti {}
, []
, ()
atau <>
. Karakter sewenang-wenang (seperti 01
) tidak diperbolehkan.
Alih-alih koma seperti di atas, pemisah dapat berupa tanda baca apa pun; atau mungkin tidak ada.
Spasi (bukan baris baru) dapat dimasukkan secara sewenang-wenang dan tidak konsisten.
Misalnya, angka 2 dengan tanda kurung dan titik koma sebagai pemisah [[]; [[]]]
, atau setara [ [ ]; [ [ ] ] ]
, atau genap[ [ ] ;[ []]]
The rangka di mana unsur-unsur dari suatu himpunan yang ditentukan tidak masalah. Jadi, Anda dapat menggunakan urutan apa pun dalam representasi. Misalnya, ini adalah beberapa output yang valid untuk 3
:
{{},{{}},{{},{{}}}}
{{{}},{{},{{}}},{}}
{{{}},{{{}},{}},{}}
Anda dapat menulis suatu program atau fungsi . Output mungkin berupa string atau, jika menggunakan fungsi, Anda dapat mengembalikan daftar atau array bersarang yang representasi stringnya sesuai dengan yang di atas.
Uji kasus
0 -> {}
1 -> {{}}
2 -> {{},{{}}}
3 -> {{},{{}},{{},{{}}}}
4 -> {{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}}
5 -> {{},{{}},{{},{{}}},{{},{{}},{{},{{}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}}}
6 -> {{},{{}},{{},{{}}},{{},{{}},{{},{{}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}}}}
7 -> {{},{{}},{{},{{}}},{{},{{}},{{},{{}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}}}}}
sumber
Jawaban:
Jelly , 3 byte
Ini adalah tautan monadik. Cobalah online!
Bagaimana itu bekerja
Setiap bilangan asli adalah himpunan semua bilangan asli sebelumnya, yaitu, n = {0, ..., n-1} . Karena tidak ada bilangan asli yang mendahului 0 , kita memiliki 0 = {} .
sumber
ḶL
adalah no-op, mnemonik tidak memiliki panjang. Ada juga yang tidak biner, undecimal, unhalve, unsine, unarccosine, dll.Python 2, 26 byte
Uji di Ideone .
sumber
JavaScript (ES6), 32 byte
Cukup sederhana.
sumber
.map()
tanpa fungsi panah di dalam :-).map(Number)
adalah kasus yang cukup umum..map(e=>+e)
lebih pendek, dengan satu byte.Perl 6 , 16 byte
Mengembalikan struktur data bersarang.
Contoh:
Penjelasan:
sumber
Ruby,
2721 byteSaya baru mengenal golf ruby, tapi tidak ada yang terjadi. Terima kasih kepada Jordan karena telah menghemat 6 byte!
Ini adalah fungsi rekursif
f
(proc, untuk lebih spesifik) dan mengambil argumens
. Ini memetakan proc dif
atas0...s
, yang merupakan kisaran[0, s)
.sumber
map{|e|f[e]}
denganmap &f
.Haskell,
3227 byteCobalah di Ideone.
sumber
CJam , 14 byte
Cobalah online!
Penjelasan
Dalam setiap iterasi, blok membangun representasi dari angka dari yang sebelumnya. Untuk mengilustrasikannya, mari kita perhatikan iterasi kedua, di mana representasi angka
2
dibangun dari1
, yaitu string"[[]]"
."[[]]"
_
(duplikat) itu berisi"[[]]"
,"[[]]"
)
(uncons) mengandung"[[]]"
,"[[]"
,"]"
@
(rotate) mengandung"[[]"
,"]"
,"[[]]"
\
(swap) mengandung"[[]"
,"[[]]"
,"]"
]
(masukkan ke dalam array) yang dikandungnya["[[]" "[[]]" "]"]
, yang akan ditampilkan sebagai string"[[][[]]]"
.sumber
Cheddar, 17 byte
Rekursi pendek + Jarak pendek + Iterasi pendek = Tantangan di mana cheddar bekerja dengan sangat baik
Non-bersaing, 11 byte
The
=>
Operator ditambahkan setelah tantangan ini dirilis membuat jawaban ini non-bersaing.Ini mungkin terlihat membingungkan tetapi izinkan saya menyederhanakannya:
pada dasarnya
n
adalah input danf
fungsi itu sendiri.|>n
menghasilkan [0, n) dan=>
peta yang berakhirf
.sumber
05AB1E ,
87 bytePenjelasan
Cobalah online!
Disimpan 1 byte berkat Adnan.
sumber
Pyth, 4 byte
Suite uji
L
: Tentukan fungsiy
dengan inputb
yMb
:y
dipetakan pada rentang0, 1, ..., b-1
Pada input 0, peta ini kembali
[]
. Jika tidak, ia kembaliy
dipetakan di atas semua nomor hinggab
.sumber
MATL , 13 byte
Cobalah online!
Penjelasan
sumber
Perl, 27 byte
Termasuk +1 untuk
-p
Banyak metode berbeda yang semuanya berakhir sebagai 27 atau 28 byte. misalnya
Yang terbaik yang bisa saya temukan adalah
karena pada perl yang lebih lama Anda dapat menjatuhkan spasi sebelum
for
dan mendapatkan 26 bytesumber
Mathematica, 14 byte
sumber
Mathematica, 31 byte
Menerapkan definisi sebagai daftar bersarang. Menggunakan fungsi tanpa nama yang secara rekursif menyebut dirinya menggunakan
#0
.sumber
Union
bukannyaJoin
:±0={};±n_:={t=±(n-1)}⋃t
... Namun, dalam hal ini bahkan lebih pendek untuk solusi berulang:Nest[{#}⋃#&,{},#]&
Retina ,
2418 byteCobalah online! (Baris pertama memungkinkan suite tes yang dipisahkan dengan linefeed.)
Penjelasan
Ini mengubah input ke unary dan menambahkan
<>
, representasi dari0
.Di sini, ini
+
menunjukkan bahwa substitusi ini harus dijalankan dalam satu lingkaran sampai string berhenti berubah. Lebih mudah untuk menjelaskan hal ini dengan melalui langkah-langkah individual yang saya lakukan saat bermain golf. Mari kita dengan versi substitusi ini:Ini cocok dengan yang terakhir
1
dari representasi unary dari input yang tersisa (untuk menghapusnya dan mengurangi input), serta isi dari set saat ini di bagian akhir. Ini kemudian diganti dengan set baru yang berisi yang sebelumnya serta isinya. Namun, kita dapat melihat bahwa$1
diikuti oleh>
dalam kedua kasus dan karenanya kita dapat memasukkannya dalam tangkapan itu sendiri dan menghilangkannya dari pola substitusi. Itu mengarah ke formulirNamun, sekarang kita dapat mengamati bahwa
(.*)
hanya menangkap akhiran string setelahnya1<
dan kita bahkan memasukkan akhiran ini di akhir$1
. Karena sintaksis substitusi memberi kita cara untuk merujuk ke bagian string setelah kecocokan dengan$'
kita bisa dengan mudah menghilangkan kedua bagian itu dan berakhir dengan versi yang digunakan dalam jawaban:sumber
{}
, tetapi<>
satu-satunya pasangan yang tidak perlu melarikan diri, jadi saya pikir saya akan pergi dengan itu. ;)Underload , 14 byte
Cobalah online!
Program penuh underload tidak dapat mengambil input melalui salah satu metode yang kami tentukan, jadi ini adalah fungsi yang mengambil input dari stack sebagai angka Gereja (cara normal untuk mendefinisikan bilangan bulat di Underload), dan menghasilkan output ke stack sebagai string .
Para
(…)
penanda pengelompokan yang diperlukan untuk membuat fungsi ini (dapat digunakan kembali) daripada potongan (hanya dapat digunakan sekali). Pembungkus dalam tautan TIO menyebut fungsi yang dimaksud menggunakan destruktif^
, tetapi bisa digunakan kembali dengan membuat salinannya dan hanya mengonsumsi salah satu salinan saat memanggilnya. Ini juga memberikan input ke program (di sini(:*:*)
,, yaitu 4), dan mencetak output menggunakanS
.Penjelasan
Underload secara mengejutkan cocok untuk tugas ini ketika Turing pergi, memiliki primitif yang bermanfaat seperti "copy" dan "surround dengan tanda kurung". (Entah bagaimana, Underload, biasanya bahasa yang sangat bertele-tele, mengalahkan Mathematica, biasanya bahasa yang menang karena memiliki satu set besar builtin, melalui memiliki lebih banyak builtin yang sesuai!) Inilah cara kerja program:
Eksponensiasi fungsi secara efektif menyebabkan langkah-langkah fungsi berulang yang berkali-kali, jadi, misalnya.
(:a*)
Akan menjadi(:a*:a*:a*)
. Itulah cara idiomatis untuk menulis sebuah loop yang mengulang beberapa kali dalam Underload. (Anda dapat mencatat bahwa~^
dijelaskan dua cara berbeda di atas; itu karena bilangan bulat dalam Underload didefinisikan sebagai fungsi eksponensial yang dikhususkan untuk integer itu, jadi untuk melakukan fungsi eksponensial, Anda cukup mencoba menjalankan integer seolah-olah itu adalah fungsi. .)sumber
Pari / GP , 23 byte
Cobalah online!
sumber
APL (NARS), 15 karakter, 30 byte
uji:
Saya tidak tahu apakah ini akan diterima ... Zilde adalah ⍬ di sini ia mewakili set kosong {} jika saya ingin mencetak elemen Zilde atau satu elemen penuh Zilde, dan Zilde menyertakan semua yang terjadi adalah mencetak apa-apa ... jadi untuk melihat Zilde kita harus mendefinisikan satu fungsi yang saya sebut o (
o←⎕fmt
) Saya tidak memasukkan dalam hitungan karena elemen dan strukturnya ada bahkan jika sys tidak mencetaknya ... Mungkin jika io adalah 0bisa menjadi solusi 12 karakter juga ...
sumber
Brachylog , 14 byte
Cobalah online!
Penjelasan
sumber
GAP , 22 byte
Sebagai contoh:
sumber
Racket 119 byte
Tidak Disatukan:
Pengujian (In Racket {} sama dengan () dan output default adalah ()):
Untuk melihat dengan jelas setiap angka (0 hingga 3):
sumber
Batch, 74 byte
Menggunakan fakta bahwa setiap jawaban sama dengan jawaban sebelumnya yang dimasukkan ke dalam dirinya sendiri setelah memimpin
{
. Beberapa output pertama adalah sebagai berikut:sumber