Dari Wikipedia Set-teoritik definisi bilangan asli
Himpunan N dari bilangan alami didefinisikan sebagai himpunan terkecil yang berisi 0 dan ditutup di bawah fungsi penerus S yang didefinisikan oleh S (n) = n ∪ {n}.
Beberapa angka pertama yang didefinisikan dengan cara ini adalah 0 = {}, 1 = {0} = {{}}, 2 = {0,1} = {{}, {{}}}, 3 = {0,1,2 } = {{}, {{}}, {{}, {{}}}}.
Dengan menggunakan definisi bilangan alami ini, hitung panjang string.
Masukkan serangkaian karakter dari a-zA-Z dengan panjang berapa pun
Keluarkan panjang string dalam notasi yang disetel tanpa pemisah
Contohnya
Masukkan string kosong
Keluaran {}
Masukan a
Keluaran {{}}
Masukan aaaa
Keluaran {{} {{}} {{} {{}}} {{} {{}} {{}} {{}}}}}
Untuk keluaran keterbacaan untuk 'aaaa' dengan pemisah adalah
{
{}
{{}}
{{} {{}} }
{{} {{}} {{} {{} } } }
}
Kondisi
- Tidak ada angka 0 hingga 9 yang muncul dalam kode;
- Tidak ada penggunaan konversi kode karakter untuk menghasilkan angka;
- Tidak menggunakan + - * / untuk perhitungan aritmatika termasuk kenaikan dan penurunan;
- Tidak ada operasi matematika selain Boolean Logic;
- String input tidak dihitung dalam menentukan panjang byte;
Pemenang Panjang kode terpendek dalam byte.
Karena ini adalah pertanyaan pertama saya, saya harap saya telah membuatnya cukup jelas dan keras. Saran ramah diterima.
sumber
f(n-1)
?Jawaban:
GolfScript (
1817 byte)Mengambil input pada stack (jadi jika dijalankan sebagai program, via stdin). Meninggalkan output sebagai dua string pada stack (jadi jika dijalankan sebagai program, output yang benar dikirim ke stdout).
Untuk meninggalkan satu string pada stack, tambahkan
+
ke concat, atau gunakan alternatifPembedahan
Alternatif:
Dampak pembatasan
Jika pengurangan diizinkan, itu akan memungkinkan solusi 15-byte
sumber
Fungsi Haskell,
3534 karakterProgram Haskell dengan input hardcoded,
48 atau 4947 atau 48 karakter(47 karakter jika Anda tidak keberatan dengan kutipan tambahan di sekitar output; jika Anda melakukannya, gunakan
putStr
sebagai gantiprint
total 48 karakter)Program Haskell,
5150 karaktersumber
Python 3 - 64
Jika memasukkan input diperbolehkan:
Python 2 - 54
sumber
o[-1]
bukano.pop()
o=[]
, yang menjadio=['{}']
setelah satu langkah, dan memperpanjang input dengan satu dengan menggantinya dengan'_'+input()
, memotong spasi setelahin
.Javascript 70 (karakter)
Ini adalah usaha saya sebelum mengajukan pertanyaan. Saya akan berasumsi seseorang dengan pengetahuan Javascript lebih dari saya mungkin bisa mengalahkannya.
Terima kasih Jan Dvorak dan Peter Taylor untuk pengurangan lebih lanjut
sekarang 62
dan sekarang 61
Penjelasan Kode Asli
set s menjadi kosong
masukkan string ke c dan pisahkan menjadi array
sementara dimungkinkan untuk memunculkan () karakter dari c melakukannya dan mengatur ulang s = s {s} sebagai penerus
arus keluaran tetapi perlu dikelilingi dengan tanda kurung.
sumber
while
(menyimpan satu karakter).s='{'
dan parit keduanya'{'+
. (Ini kemudian berperilaku seperti solusi GS saya). Ada penghematan 1-ar lebih lanjut dengan menggunakanfor
alih-alihwhile
dan menarik salah satu dari dua inisialisasi ke inisialisasi loop.for(a;b;c){d}
secara langsung setara dengana;while(b){d;c}
di sebagian besar bahasa yang memiliki keduanya. Jadi sementarafor(;b;)
identik denganwhile(b)
efek dan jumlah karakter,for(a;b;)
simpan satu karaktera;while(b)
dan efeknya identik.J -
2220 charBagaimana ini diturunkan:
Atau, ini bisa ditulis
'{','{'&(,,~)&'}'@#
, artinya hal yang sama.Pemakaian:
sumber
Haskell - 35 karakter
Solusi dipengaruhi oleh Jan Dvorak, tetapi tanpa membalik urutan.
sumber
Scala, 64 karakter
Perhatikan peran ganda yang menahan dan
s
bermain dalam kode ini.EDIT: menghapus satu digit
sumber
Python 3 (44)
Pada setiap langkah,
s
adalah string yang mewakili set dengan final}
dihilangkan. Kami membuat himpunan yang mewakilin+1
dari himpunan yang mewakilin
melalui hubungan f (n + 1) = f (n) ∪ {f (n)}. Untuk mengimplementasikan penyatuan dengan string, kami menambahkan string untuk {f (n)}, yang persiss
tetapi dengan yang}
dikembalikan, dan lalai untuk memasukkan yang terakhir}
dalam hasil. Akhirnya, kami menambahkan kembali final'}'
sebelum dicetak.Jika saya dapat membuat hardcode string, jumlah karakter berkurang hingga 35 karakter, beralih ke Python 2 untuk menyimpan paranthes di
print
.Mungkin ada cara untuk menghemat ruang setelahnya
print
dengan melakukan sesuatu sepertiprint'{'+s
dengan terbaliks
, tetapi ini mengacaukan dengan+=
menambahkan di sebelah kanan.sumber
gs2, 12 byte
ilmu tentang cara menghafal:
sumber
Mathematica, 115 karakter
Kode lengkap seperti yang ditunjukkan memiliki 121 karakter, tetapi 6 di antaranya digunakan untuk string input (
"test"
) yang, menurut aturan, tidak masuk hitungan.Tanpa persyaratan bahwa tidak ada pembatas, panjang kode dapat dikurangi lebih jauh dengan 24 karakter; tanpa konversi eksplisit ke string maka 9 karakter lain dapat dihapus.
sumber
Ruby, 27, agak curang
Hal yang dipertanyakan:
[[], [[]], [[], [[]]], [[], [[]], [[], [[]]]]]
sumber
inspect
array secara manual dantr
hasilnya.Pure Bash, 54
Keluaran:
sumber
Julia 43
Konstruk {z ...} memperluas string z ke dalam array. Lipat loop atas semua elemen array yang mengabaikan konten dan bukannya membangun dari string kosong. Folder fungsi tersedia dalam Julia 0.30.
Output Sampel
sumber
Haskell, 31 byte
sumber
Mathematica,
455748 byteSolusi 36 byte:
Namun, ia menggunakan beberapa perhitungan aritmatika.
sumber
Delphi XE3 (264)
Ok saya bahkan tidak mendekati yang lain tapi itu menyenangkan untuk dilakukan :)
Mungkin terlalu banyak berpikir. Akan melihat apakah ada cara yang lebih baik untuk melakukan ini.
Golf
Tidak disatukan
Hasil pengujian
String yang diuji dengan panjang 0..10
sumber
Perl 5: 33 karakter
Tidak jelas karakter mana yang harus saya hitung sebagai bagian dari solusi. Mungkin bukanecho ... |
bagian karena itu hanya digunakan untuk memberi makan garis ke stdin. Mungkin bukan nama biner perl, karena Anda dapat mengubah nama itu menjadi apa pun yang Anda inginkan.Jadi saya sudah menghitung switch baris perintah yang dilewatkan ke perl, tanda kutip melilit kode Perl, dan kode Perl itu sendiri.Juga terkait .
sumber
pl
sebagai standar, tetapi Anda mendapatkan-e
dan tanda kutip di sekitar kode secara gratis. RefPerl 6: 37 karakter
atau dari STDIN:
{"\{@_.join()\}"}...*
membuat daftar malas dari himpunan bentuk bilangan asli, dan kita hanya mengambil yang kita butuhkanget.chars
.Daftar malas mungkin lebih mudah ditulis:
Yang berbunyi sangat mirip dengan definisi.
sumber
Dart: 85 karakter
(dengan tambahan baris baru untuk keterbacaan).
Persyaratan untuk tidak menggunakan "0" benar-benar gigitan, jika
.first
tidak akan[0]
dan(..).isNegative
akan..<0
.sumber
Pyth, 13 byte
Ini adalah Pyth yang setara golf dari jawaban Python @ xnor. Perhatikan bahwa Pyth lebih baru dari pertanyaan ini, jadi jawaban ini tidak memenuhi syarat untuk memenangkan tantangan ini.
Demonstrasi.
sumber
u+G]GlQY
Javascript,
171149147142 byte(Kemungkinan akan golf lebih lanjut nanti)
sumber