Konstruksi ini adalah cara untuk mewakili Bilangan Alam.
Dalam representasi ini, 0 didefinisikan sebagai himpunan kosong dan untuk semua angka lainnya, n adalah gabungan dari {0} dan {n-1}.
Sebagai contoh untuk membangun 3 kita dapat mengikuti algoritma:
3 =
{ø, 2} =
{ø, {ø, 1}} =
{ø, {ø, {ø}}}
Tugas
Seperti yang Anda duga, tugas Anda adalah mengambil bilangan asli (termasuk nol) dan menampilkan konstruksinya.
Anda dapat menampilkan sebagai string atau sebagai objek set jika bahasa pilihan Anda mendukung objek tersebut.
Jika Anda memilih untuk menampilkan sebagai string, Anda harus mewakili satu set dengan kurung kurawal ( {}
). Anda secara opsional dapat mewakili set kosong sebagai ø
(jika tidak set harus tanpa entri {}
). Anda juga dapat memilih untuk menambahkan koma dan spasi putih di antara dan setelah entri di set.
Urutan tidak penting, namun Anda mungkin tidak memiliki elemen berulang dalam set yang Anda hasilkan (mis. {ø,ø}
)
Ini adalah kode-golf sehingga tujuannya adalah untuk memiliki byte paling sedikit
Uji kasus
Berikut adalah beberapa test case dengan beberapa contoh output.
0 -> {}
1 -> {{}}
2 -> {{}{{}}}
3 -> {{}{{}{{}}}}
4 -> {{}{{}{{}{{}}}}}
sumber
Jawaban:
Python , 28 byte
Cobalah online!
Ini adalah solusi yang cukup hambar untuk masalah ini. Untuk angka yang lebih besar dari nol Anda bisa mendapatkan representasi dengan rumus string
"{{}"*x+"}"*x
. Namun ini tidak berfungsi untuk nol di mana ini adalah string kosong. Kita dapat menggunakan fakta ini untuk membuat hubungan pendek danor
mengembalikan set kosong.Saya ingin menggunakan objek set bawaan python untuk mengatasi masalah ini, tetapi sayangnya:
Anda tidak bisa meletakkan set di dalam set dengan python.
sumber
x
ke"{{}"*x+x*"}"or
penyimpanan bytef=
bisa dihapus.frozenset
tetapi tidak ada yang mendapatkan byte untuk itu ...Haskell , 37 byte
Cobalah online!
Sampai 10 menit yang lalu jawaban seperti ini tidak masuk akal bagiku. Semua kredit masuk ke jawaban kiat ini .
Pada dasarnya, kita menggunakan
>>
asconcat $ replicate
(tetapi meneruskannya daftar n elemen bukan hanya n), dan=<<
sebagaiconcatMap
, mereplikasi lalu n kali setiap string dalam daftar dan menggabungkan hasilnya menjadi satu string.The
0
kasus diperlakukan secara terpisah karena akan mengembalikan string kosong.sumber
f 1
juga untuk membuatnya bekerja dengan benarJavaScript, 28 byte
Merupakan set menggunakan array. Solusi non-rekursif 38-byte:
Mengembalikan contoh string keluaran.
sumber
Mathematica, 27 byte
Saya punya dua solusi pada hitungan byte ini:
sumber
#//.{1->{{}},x_/;x>1->{{},x-1}}&
. Meskipun saya kira itu mengacaukan input 0Perl 6 , 37 byte
Cobalah
Diperluas:
sumber
:
atau ini sesuatu yang baru untuk Perl 6?05AB1E ,
65 byteKode
Menggunakan pengkodean CP-1252 . Cobalah online! atau Verifikasi semua kasus uji! .
Penjelasan
sumber
F¯)
, apakah itu tidak berhasil?n=0
, karena output kosong (bukan set kosong).Retina , 22 byte
Cobalah online!
Penjelasan
Konversikan input ke unary.
Ganti setiap digit unary dengan
{{}
dan cetak hasilnya tanpa linefeed tambahan (\
).Lepaskan
{
s, sehingga sisanya}
persis seperti yang masih harus kita cetak untuk menutup semua set. Namun, prosedur di atas gagal untuk input0
, di mana kami tidak akan mencetak apa pun. Begitu...Jika string kosong, ganti dengan set kosong.
sumber
n
kali string di Retina ...Brain-Flak , 135 byte
Termasuk +1 untuk
-A
Cobalah online!
sumber
Röda , 37 byte
sumber
CJam , 11 byte
Mencetak objek seperti set yang terdiri dari daftar daftar. CJam mencetak daftar kosong sebagai string kosong, karena daftar dan string hampir dapat dipertukarkan.
Cobalah online!
Penjelasan
Jawaban lama,
2118 byteIni sebelum dikonfirmasi bahwa tidak apa-apa untuk mencetak struktur daftar bersarang. Menggunakan algoritma pengulangan string.
Disimpan 3 byte berkat Martin Ender!
Penjelasan
sumber
Jelly , 6 byte
Ini adalah tautan niladic yang membaca integer dari STDIN dan mengembalikan array yang tidak rata.
Cobalah online!
Bagaimana itu bekerja
sumber
Python 3 , 32 byte
Bukan cara terpendek, tetapi saya hanya harus melakukan ini dengan rekursi.
Cobalah online!
sumber
Kardinal ,
5150 byteCobalah online!
Penjelasan
Terima input dan kirim turun dan kiri dari #
Cetak "{" satu kali lalu cetak "{} {" n-1 kali jika n> 1 lalu cetak "{}" jika n> 0
Tahan nilai input sampai loop pertama selesai
Cetak "}" sekali lalu ulangi n-1 kali jika n> 1
sumber
AHK, 55 byte
Ini bukan jawaban terpendek tapi saya menikmati ini karena kekhasan AutoHotkey membuat metode rekursi ini terlihat sangat salah.
If
danLoop
pernyataan menganggap baris berikutnya adalah satu-satunya yang disertakan jika tanda kurung tidak digunakan. Kurung keriting adalah karakter pelarian sehingga Anda harus menghindarinya dengan kurung keriting lain untuk menggunakannya sebagai teks. Selain itu, variabel1
adalah argumen yang diteruskan pertama. Ketika saya membaca kode tanpa mengetahui informasi tersebut, logikanya terlihat seperti ini:s
sama dengan jawaban yang salahTanpa semua karakter pelepasan braket, akan terlihat seperti ini:
sumber
JavaScript 50 byte
sumber
tinylisp , 52 byte
Cobalah online! (test harness).
Penjelasan
Perhatikan bahwa
(cons x (cons y nil))
cara Anda membuat daftar berisix
dany
dalam Lisp.sumber
C (gcc) , 52 byte
Mengambil keuntungan dari beberapa evaluasi dan rekursi hubung singkat.
Cobalah online!
sumber
Pure Bash ,
494841 byteCobalah online!
sumber
dc , 46 byte
Cobalah online!
Input pada stdin, output pada stdout.
Ini bekerja dengan menghitung formula untuk output yang diinginkan sebagai nomor basis-256. Perintah P di dc kemudian digunakan untuk mencetak nomor basis-256 sebagai string.
Penjelasan lebih lanjut:
Biarkan n menjadi input n. Program dc menghitung jumlah
A = lantai (256 ^ n / 255) * 125 (BF ditafsirkan oleh dc sebagai 11 * 10 + 15 = 125)
dan
B = lantai ((256 ^ n) ^ 3 / (8 ^ 8-1)) * 8092541 * (256 ^ n).
Untuk sebuah:
Perhatikan bahwa 1 + 256 + 256 ^ 2 + ... + 256 ^ (n-1) sama dengan (256 ^ n-1) / 255, dengan rumus untuk perkembangan geometrik, dan ini sama dengan lantai (256 ^ n / 255 ). Jadi ini adalah angka yang terdiri dari n 1 dalam basis 256.
Ketika Anda mengalikannya dengan 125 untuk mendapatkan A, hasilnya adalah angka yang terdiri dari n 125 dalam basis 256 (tentu saja 125 adalah satu digit dalam basis 256). Mungkin lebih baik menulis digit pada basis 256 sebagai angka hex; 125 adalah hex 7D, jadi A adalah angka dasar-256 yang terdiri dari n 7D berturut-turut.
B serupa:
Kali ini amati bahwa 1 + 16777216 + 16777216 ^ 2 + ... + 16777216 ^ (n-1) sama dengan (16777216 ^ n - 1) / 16777215, dan ini sama dengan lantai (16777216 ^ n / 16777215).
Sekarang, 256 ^ 3 = 16777216, dan 8 ^ 8-1 = 16777215, jadi inilah yang kami hitung sebagai lantai ((256 ^ n) ^ 3 / (8 ^ 8-1)).
Dari representasi deret geometri, angka dalam basis 256 ini adalah 100100100 ... 1001 dengan n dari angka 1 dan sisanya dari angka 0.
Ini dikalikan dengan 8092541, yaitu 7B7B7D dalam heksadesimal. Dalam basis 256, ini adalah angka tiga digit yang terdiri dari angka 7B, 7B, dan 7D (menulis angka-angka itu dalam hex untuk kenyamanan).
Oleh karena itu produk yang ditulis dalam basis 256 adalah angka 3n-digit yang terdiri dari 3 digit 7B 7B 7D yang diulang n kali.
Ini dikalikan dengan 256 ^ n, menghasilkan nomor basis-256 4n-digit, terdiri dari 3 digit 7B 7B 7D yang diulang n kali, diikuti oleh n 0's. Itu B.
Menambahkan A + B sekarang menghasilkan basis-digit 4n-digit 256 yang terdiri dari 3 digit 7B 7B 7D yang diulang n kali, diikuti oleh n 7D. Karena 7B dan 7D adalah kode ASCII untuk
{
dan}
, masing-masing, ini adalah string yang terdiri dari n salinan{{}
diikuti oleh n salinan}
, yang persis seperti yang kita inginkan untuk n> 0. Perintah P di dc mencetak angka dasar-256 sebagai string, seperti yang kita butuhkan.Sayangnya, n = 0 harus diperlakukan sebagai kasus khusus. Perhitungan di atas terjadi untuk menghasilkan hasil 0 untuk n = 0; dalam hal ini, saya baru saja mencetak kode hard-string
{}
.sumber
Java 7, 61 byte
Cobalah online!
sumber
Batch, 88 byte
sumber
Brainf *** , 99 byte
(baris baru untuk estetika) Karena itu *** ***, dibutuhkan input sebagai kode ascii char (input "a" sesuai dengan 96)
Braineasy, 60 byte
Juga, dalam bahasa khusus saya (berbasis brainf **, juru bahasa di sini ):
Anda harus memasukkan kode program ke dalam interpreter karena saya malas.
sumber
[]
? Sepertinya itu bisa dihapus05AB1E ,
53 byteCobalah online!
Versi ini setelah dia mengklarifikasi bahwa set tidak apa-apa.
Versi lama (yang memanfaatkan ø):
05AB1E ,
54 byteCobalah online!
Di mana
1
setara denganø
.sumber