Tulis program terpendek dalam bahasa favorit Anda untuk menafsirkan program brainfuck . Program ini dibaca dari file. Input dan output adalah input standar dan output standar.
- Ukuran sel: 8bit tidak ditandatangani. Overflow tidak terdefinisi.
- Ukuran array: 30000 byte (tidak dilingkari)
- Perintah yang salah bukan bagian dari input
Komentar dimulai dengan # dan berlanjut hingga akhir baris.Komentar adalah segalanya tidak masuk+-.,[]<>
- tidak ada simbol EOF
Tes yang sangat bagus dapat ditemukan di sini . Bunyinya nomor dan kemudian cetak nomor prima hingga nomor itu. Untuk mencegah pembusukan tautan, berikut adalah salinan kode:
compute prime numbers
to use type the max number then push Alt 1 0
===================================================================
======================== OUTPUT STRING ============================
===================================================================
>++++++++[<++++++++>-]<++++++++++++++++.[-]
>++++++++++[<++++++++++>-]<++++++++++++++.[-]
>++++++++++[<++++++++++>-]<+++++.[-]
>++++++++++[<++++++++++>-]<+++++++++.[-]
>++++++++++[<++++++++++>-]<+.[-]
>++++++++++[<++++++++++>-]<+++++++++++++++.[-]
>+++++[<+++++>-]<+++++++.[-]
>++++++++++[<++++++++++>-]<+++++++++++++++++.[-]
>++++++++++[<++++++++++>-]<++++++++++++.[-]
>+++++[<+++++>-]<+++++++.[-]
>++++++++++[<++++++++++>-]<++++++++++++++++.[-]
>++++++++++[<++++++++++>-]<+++++++++++.[-]
>+++++++[<+++++++>-]<+++++++++.[-]
>+++++[<+++++>-]<+++++++.[-]
===================================================================
======================== INPUT NUMBER ============================
===================================================================
+ cont=1
[
- cont=0
>,
======SUB10======
----------
[ not 10
<+> cont=1
=====SUB38======
----------
----------
----------
--------
>
=====MUL10=======
[>+>+<<-]>>[<<+>>-]< dup
>>>+++++++++
[
<<<
[>+>+<<-]>>[<<+>>-]< dup
[<<+>>-]
>>-
]
<<<[-]<
======RMOVE1======
<
[>+<-]
]
<
]
>>[<<+>>-]<<
===================================================================
======================= PROCESS NUMBER ===========================
===================================================================
==== ==== ==== ====
numd numu teid teiu
==== ==== ==== ====
>+<-
[
>+
======DUP======
[>+>+<<-]>>[<<+>>-]<
>+<--
>>>>>>>>+<<<<<<<< isprime=1
[
>+
<-
=====DUP3=====
<[>>>+>+<<<<-]>>>>[<<<<+>>>>-]<<<
=====DUP2=====
>[>>+>+<<<-]>>>[<<<+>>>-]<<< <
>>>
====DIVIDES=======
[>+>+<<-]>>[<<+>>-]< DUP i=div
<<
[
>>>>>+ bool=1
<<<
[>+>+<<-]>>[<<+>>-]< DUP
[>>[-]<<-] IF i THEN bool=0
>>
[ IF i=0
<<<<
[>+>+<<-]>>[<<+>>-]< i=div
>>>
- bool=0
]
<<<
- DEC i
<<
-
]
+>>[<<[-]>>-]<<
>[-]< CLR div
=====END DIVIDES====
[>>>>>>[-]<<<<<<-] if divides then isprime=0
<<
>>[-]>[-]<<<
]
>>>>>>>>
[
-
<<<<<<<[-]<<
[>>+>+<<<-]>>>[<<<+>>>-]<<<
>>
===================================================================
======================== OUTPUT NUMBER ===========================
===================================================================
[>+<-]>
[
======DUP======
[>+>+<<-]>>[<<+>>-]<
======MOD10====
>+++++++++<
[
>>>+<< bool= 1
[>+>[-]<<-] bool= ten==0
>[<+>-] ten = tmp
>[<<++++++++++>>-] if ten=0 ten=10
<<- dec ten
<- dec num
]
+++++++++ num=9
>[<->-]< dec num by ten
=======RROT======
[>+<-]
< [>+<-]
< [>+<-]
>>>[<<<+>>>-]
<
=======DIV10========
>+++++++++<
[
>>>+<< bool= 1
[>+>[-]<<-] bool= ten==0
>[<+>-] ten = tmp
>[<<++++++++++>>>+<-] if ten=0 ten=10 inc div
<<- dec ten
<- dec num
]
>>>>[<<<<+>>>>-]<<<< copy div to num
>[-]< clear ten
=======INC1=========
<+>
]
<
[
=======MOVER=========
[>+<-]
=======ADD48========
+++++++[<+++++++>-]<->
=======PUTC=======
<.[-]>
======MOVEL2========
>[<<+>>-]<
<-
]
>++++[<++++++++>-]<.[-]
===================================================================
=========================== END FOR ===============================
===================================================================
>>>>>>>
]
<<<<<<<<
>[-]<
[-]
<<-
]
======LF========
++++++++++.[-]
@
Contoh dijalankan:
$ python2 bf.py PRIME.BF
Primes up to: 100
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
code-golf
interpreter
brainfuck
Alexandru
sumber
sumber
,
EOF? Atau terserah pada kita untuk memilih nilai saat mencoba,
EOF? Atau apakah EOF tidak terdefinisi secara keseluruhan?Jawaban:
Perl, 120
138Ini menjalankan hello.bf dan primes.bf dengan sempurna:
Inisialisasi: Tabel terjemahan opcode ke Perl disimpan di
%c
. Bentuk yang dapat dibaca terlihat seperti ini:Langkah 1: Menghirup input program ke
$_
dan mengubahnya menjadi kode Perl menggunakan tabel terjemahan. Komentar dihapus secara otomatis (diganti denganundef
) pada langkah ini.Langkah 2: Buka kompresi semua
$b[$p]
kejadianLangkah 3: Luncurkan program menggunakan
eval
.sumber
qw
sintaks Perl untuk mendefinisikan%c
secara langsung - baik untuk 7 karakter yang lebih sedikit (Anda harus mengatakanprint+chr$b[$p]
danord(getc)
, meskipun)Python (tanpa eval), 317 byte
sumber
f(u,c,k)
while b*c[c[0]]and j<1
denganwhile b*c[c[0]]*(j<1)
16 bit 8086 kode mesin: 168 byte
Inilah versi yang disandikan base64 , konversi dan simpan sebagai 'bf.com' dan jalankan dari prompt perintah Windows: 'bf progname'
SUNTING
Inilah beberapa assembler (gaya A86) untuk membuat executable (saya harus merekayasa balik ini karena saya salah menempatkan sumber aslinya!)
sumber
brainfuck ,
843691 byteSunting: memutuskan untuk mengunjungi kembali ini dan menemukan sejumlah cara mengejutkan untuk bermain golf dari byte
Ini mengambil input dalam bentuk di
code!input
mana!input
opsional. Ini juga mensimulasikan sel negatif tanpa menggunakan sel negatif itu sendiri dan dapat menyimpan hingga(30000-(length of code+6))/2
sel.Cobalah online!
sumber
Ruby 1.8.7,
188185149147 karakterVersi yang bisa dibaca:
Seperti yang Anda lihat, saya tanpa malu-malu mencuri ide Anda untuk menerjemahkan ke bahasa host dan kemudian menggunakan eval untuk menjalankannya.
sumber
>0
daripada menguji kesetaraan:!=0
. Spesifikasi mengatakan tidak ditandatangani, dan overflow tidak ditentukan.3e4
juga akan berfungsi sebagai lawan30000
File.read($*.pop).bytes
->$<.bytes
harus bekerja juga{?a,"foo"}
yang setara dengan{?a=>"foo"}
. Dan pengujian di sini menunjukkan bahwa Anda benar-benar dapat menggantiFile.read($*.pop).bytes
dengan$<
tanpa masalah. Juga inlining semuanya menjadi sesuatu sepertieval"a[0]..."+$<.bytes.map{?.,"putc a[i]",...}*";"
mempersingkat solusi dengan beberapa karakter lainnya.Binary Lambda Calculus 112
Program ditunjukkan dalam hex dump di bawah ini
mengharapkan inputnya terdiri dari program Brainfuck (hanya melihat bit 0,1,4 untuk membedakan antara, -. + <>] [) diikuti oleh a], diikuti oleh input untuk program Brainfuck.
Simpan hex dump di atas dengan xxd -r> bf.Blc
Dapatkan juru bahasa blc dari https://tromp.github.io/cl/cl.html
Halo Dunia!
sumber
Retina 0.8.2 ,
386391386 byteKode berisi
0x00
karakter NUL ( ) yang tidak dapat dicetak. Ini juga belum super golf, karena sudah sangat lambat, dan jika saya golf lagi, saya tidak tahu berapa lama untuk menyelesaikannya. Muncul waktu habis pada sampel temuan utama.Mungkin ada bug di interpreter online atau di program saya (memimpin baris baru tidak muncul di output?).
Mengambil input seperti
<code>│<input>
. Tidak, itu bukan pipa (|
). Ini karakter UnicodeU+2502
. Kode ini juga menggunakan karakter Unicodeÿ▶◀├║
. Karakter Unicode digunakan untuk mendukung input semua karakter ASCII. Oleh karena itu, karakter ini harus dipisahkan dari kode oleh karakter non-ASCII.Cobalah online
Perhatikan ada baris baru di sana.
Penjelasan singkat:
Nol
0x00
digunakan untuk rekaman itu, yang tidak terbatas. Penggantian pertama mengatur interpreter dalam bentuk▶<code>│<input>├<output>║▶<tape>
, di mana yang pertama▶
adalah penunjuk untuk kode, dan yang kedua adalah penunjuk untuk kaset.ÿ
adalah0xFF
(255), yang digunakan untuk Transliterasi (digunakan untuk mengimplementasikan+
dan-
) untuk membungkus sel kembali menjadi nol.◀
hanya digunakan untuk keterbacaan (jika program dihentikan di tengah atau Anda ingin melihat program sedang berjalan). Jika tidak, Anda tidak bisa menentukan ke arah mana pointer bergerak.Kode yang dikomentari:
Klik di sini untuk kode dengan nol menggantikan byte nol. Setiap kejadian
$0
tidak boleh diganti dengan nol.Sunting : Sekarang mendukung input kosong dan menekan trailing newline.
Output tanpa batas sekarang didukung. (403 byte)
sumber
<code>
dan<tape>
selanjutnya satu sama lain (meskipun akan lebih banyak karakter) sehingga transisi ke penerjemah SMBF akan lebih mudah, jika saya pernah memutuskan untuk melakukan itu.TI-BASIC, 264 byte
Karena keterbatasan dalam TI-BASIC, ini sebenarnya tidak memenuhi syarat untuk tantangan ini karena melanggar aturan 2; RAM kalkulator sangat terbatas, dan melakukan sesuatu seperti
30000->dim(L1
(saya menggunakan L1 untuk stack / array) akan memaksanya untuk melemparERR:MEMORY
. Dengan demikian, tumpukan / array dimulai pada ukuran 1 dan tumbuh jika pointer menunjuk ke elemen melewati ujungnya. Itu juga melanggar aturan 3, karena sudah melanggar aturan 2 jadi saya mungkin juga tidak repot dengan batas ukuran sel.Ngomong-ngomong, mungkin masih bisa bermain golf ... Saya sudah membuat satu atau dua suntingan untuk tujuan itu sejak pertama kali dikirim, tetapi jika versi di bawah ini tidak berfungsi, kembalilah ke pengeditan mulai 6 Mei '15 dan gunakan itu kode sebagai gantinya. Juga, karena benar-benar tidak ada ASCII di TI-BASIC, ini mengambil angka dari berbagai ukuran (dan apa pun yang mengembalikan angka, seperti variabel atau ekspresi) sebagai input, dan menghasilkan angka pada gilirannya.
Gunakan SourceCoder untuk membuatnya menjadi file .8xp kemudian kirimkan ke kalkulator Anda dengan TI-Connect atau TILP atau apalah, dan jalankan dengan memasukkan program brainfuck Anda dalam tanda kutip ganda diikuti oleh titik dua dan apa pun yang Anda beri nama program TI-BASIC. Misalnya, jika Anda menamakannya BrainF, Anda akan menjalankan program seperti ini:
"brainfuck goes here":prgmBRAINF
. Jika Anda memiliki shell pada calc Anda yang memotong perintah lain ketika mendeteksiprgm
token, meskipun, melakukan hal ini:"brainfuck goes here" -> press ENTER -> prgmBRAINF
.Jika Anda tidak memiliki cara untuk menghubungkan kalkulator Anda ke komputer dan ingin mengetikkan ini di-kalk sebagai gantinya (Saya tidak bisa membayangkan mengapa Anda ingin, tapi saya ngelantur) perhatikan bahwa itu
->
adalahSTO>
tombol di atas ON kunci,~
adalah simbol negatif di sebelah ENTER, dan untuk mengganti semua instanceL<number>
dengan token daftar yang sesuai ditemukan di2ND -> <number on keypad>
Berkat thomas-kwa (setidaknya, saya pikir itu nama pengguna Stack-nya) untuk membantu saya mengoptimalkan ini, terutama dengan
[
dan]
instruksi.sumber
Ans+S
?S-sum(not(cumSum(L4(Ans)=seq(L4(X),X,Ans+1,dim(L4->S
. (a-a=0
). Dan hei, jangan khawatir tentang melupakan SATU urutan operasi di sini, saya telah melihat banyak orang lupa urutan operasi untuk%
(mod) pada tantangan.Python
275248255Saya memutuskan untuk mencobanya.
sumber
exec t
?). Jika Anda menggunakan ujung S.Mark dan juga membuat seluruhfor
siklus menjadi satu baris, Anda dapat mengecilkan ini menjadi 243 karakter.[]
, program bf yang sepele namun valid. Saya telah menyarankan edit yang memperbaiki ini, tetapi meningkatkan jumlah karakter. Untuk mengurangi jumlah karakter lebih lanjut, Anda bisafrom sys import *
, dan gunakan'i+=1,...'.split(',')
sebagai ganti['i+=1',...]
.+1
, tetapi banyak perbaikan telah disarankan dan tidak diterapkan.Haskell,
457413 karakterKode ini "mengkompilasi" program BF menjadi
IO
aksi bentukState -> IO State
negara adalah ritsleting pada string yang tak terbatas.Sedih karena saya harus mengeluarkan 29 karakter untuk mematikan buffering. Tanpa itu, ia berfungsi, tetapi Anda tidak melihat petunjuknya sebelum Anda harus mengetikkan input. Compiler itu sendiri (
b
,,f
dank
) hanya 99 karakter, runtime (#
dan%
) adalah 216. Driver w / inisial menyatakan 32 lainnya.pembaruan 2011-02-15: Saran JB yang dimasukkan, melakukan sedikit perubahan nama, dan diperketat
main
sumber
IO
, dan argumen dari justSystem
(-19). Masalah buffering menggangguku juga, karena spec tidak benar-benar menyebutkannya dan jawaban terpilih bahkan tidak melakukan I / O. Jika Anda harus menyimpannya, mungkin lebih singkathFlush
setelah setiap penulisan daripada mengubah mode buffering global (-34 + 15).Conveyor, 953
Ini mungkin kode terindah yang pernah Anda lihat:
sumber
C
284362 (Dari file)Bilangan prima:
Dikompilasi dan dijalankan dengan sukses VS2008
Solusi asli gagal mengenali loop yang awalnya diatur ke nol. Masih ada ruang untuk bermain golf. Tetapi akhirnya menyelesaikan program Nomor Perdana.
Tidak Terkumpul:
Tes:
Halo Dunia
Rot13
sumber
l
) setiap kali Anda mengulang? Saya pikir Anda seharusnya memeriksa lokasi kepala saat ini (p
).l
di buffer telah mencapai nol dan memecah yang lain itu me-reset aliran kembali ke loop asli[
. Ini diperlukan untuk[
loop bersarang .break;else
denganreturn;
.(c==62)?a:b
dengan(c-62)?b:a
.PHP 5.4,
296294273263261209191183178166 karakter:Saya mencobanya tanpa menggunakan eval, tetapi akhirnya saya harus menggunakannya
Semua perintah berfungsi. Ini sangat menyalahgunakan variabel variabel, dan menyebarkan peringatan. Namun, jika seseorang mengubah php.ini mereka ke memadamkan peringatan (atau pipa stderr ke / dev / null), ini berfungsi dengan baik.
Verifikasi (Ini adalah contoh "Hello World!" Dari Wikipedia ): http://codepad.viper-7.com/O9lYjl
Tidak Digubah,
367365335296267 karakter:Ini harus dijalankan melalui baris perintah:
php bf.php hello.bf
sumber
Windows PowerShell, 204
Konversi instruksi yang cukup mudah dan kemudian
Invoke-Expression
.Sejarah:
3e4
lebih pendek dari30000
.switch
.Write-Host
.sumber
C, 333 karakter
Ini adalah juru bahasa BF pertama saya dan golf pertama yang harus saya debug.
Ini menjalankan pembangkit bilangan prima pada Mac OS X / GCC, tetapi tambahan
#include<string.h>
mungkin diperlukan dengan biaya 19 karakter lebih jika definisi implisit daristrchr
tidak terjadi untuk bekerja pada platform lain. Juga diasumsikanO_RDONLY == 0
. Selain itu, meninggalkanint
keluar dari deklarasiM
menyimpan 3 karakter tapi itu tampaknya tidak sesuai C99. Sama dengan yang ketiga*
dib()
.Ini tergantung pada rincian pengkodean ASCII. Operator Brainfuck adalah semua pasangan pelengkap yang dipisahkan oleh jarak 2 dalam ruang kode ASCII. Setiap fungsi dalam program ini mengimplementasikan sepasang operator.
sumber
#define
tabel fungsi bukannya mungkin juga akan terser. Saya suka nomor 333 dan tabel: v).||
.CJam, 75 byte
Cobalah online: pembalikan string , Hello World .
Penjelasan
Mengambil kode pada baris pertama STDIN dan memasukkan semua baris di bawahnya.
Bagaimana dengan daftar ajaib itu?
Daftar yang dihasilkan adalah sebagai berikut:
Kami menghasilkan potongan untuk
+
dan>
dari orang-orang untuk-
dan<
, hanya dengan mengubah parens kiri (CJam ini “penurunan”) ke dalam parens kanan ( “peningkatan” CJam ini).sumber
F #: 489 karakter
Program berikut tidak melompat pada instruksi '[' / ']', tetapi memindai kode sumber untuk token yang cocok berikutnya. Ini tentu saja membuatnya agak lambat, tetapi masih dapat menemukan bilangan prima di bawah 100. Jenis integer F # tidak meluap tetapi membungkus.
Ini versi singkatnya:
Gotcha jahat adalah bahwa program primes.bf tersedak pada baris baru windows. Untuk menjalankannya, saya harus menyimpan nomor input ke dokumen teks yang diformat UNIX dan memasukkannya ke program dengan pipa:
Sunting: memasuki Alt + 010 diikuti oleh Enter juga berfungsi di Windows cmd.exe
Ini versi yang lebih panjang:
sumber
Delphi,
397382378371366364328 karakterMakan Delphi ini!
Di sini kode yang sama, indentasi dan komentar:
Yang ini memakan waktu beberapa jam, karena itu bukan jenis kode yang biasanya saya tulis, tetapi nikmatilah!
Catatan: Tes utama berfungsi, tetapi tidak berhenti di 100, karena berbunyi # 13 (CR) sebelum # 10 (LF) ... apakah kiriman lain juga mengalami masalah ini ketika berjalan pada CRLF OS?
sumber
C, 260 + 23 = 283 byte
Saya membuat program C yang dapat ditemukan di sini .
Harus dikompilasi melalui
gcc -D"q(a,b)"="*c-a||(b);" -o pmmbf pmmbf.c
dan dapat dipanggil sebagai berikut: dipmmbf ",[.-]" 30000
mana argumen pertama (dikutip) berisi bf-program untuk dijalankan, yang kedua menentukan seberapa besar rekaman seharusnya.sumber
-D"q(a,b)"="*c-a||(b);"
opsi, karena tampaknya (setidaknya pemahaman saya, setidaknya) akan membantu Anda mengecilkan kode Anda.define
- kata yang panjang dan baris baru, tetapi saya tidak berpikir itu benar-benar halal. Pokoknya dengan kutipan, komentar, dangcc -D
saya tidak melihat keuntungannya sama sekali.C, 267
Jalankan sebagai ./a.out primes.bf
Versi Tidak Serigala:
sumber
Python 2, 223
Saya akui bahwa saya mendaur ulang program lama saya (tetapi harus mengubahnya sedikit, karena versi lama tidak memiliki input, tetapi memeriksa kesalahan ...).
Menjalankan kalkulator primes baik-baik saja.
Saya melihat sekarang bahwa Alexandru memiliki jawaban yang memiliki beberapa kesamaan. Saya akan memposting jawaban saya, karena saya pikir ada beberapa ide baru di dalamnya.
sumber
C (gcc) Linux x86_64,
884 621 525 487 439 383 358354 byteCobalah online!
Ini adalah JIT yang mengkompilasi kode BF ke dalam bahasa mesin x86_64 saat runtime. Ini melakukan terjemahan lurus sehingga sering terjadi urutan seperti
>>>
,<<<
,+++
dan---
tidak berkoalisi menjadi petunjuk yang lebih cepat.Versi yang kurang golf:
sumber
C,
374368Membaca dari file. Lulus tes PRIME.BF.
Penggunaan: ./a.out PRIME.BF
Dipformat ulang:
sumber
Lua, 285
Versi yang bisa dibaca:
Bekerja dengan sempurna
Lua, 478, tanpa tali beban
Versi yang dapat dibaca:
sumber
Brainfuck, 948 bytes
Yah, itu butuh waktu. Saya bermain self-interpreter Brainfuck dengan ... bukan saya.
sumber
Penarikan , 594 byte
Singkatnya: Recall tidak memiliki operator aritmatika dalam arti klasik, ia hanya memiliki operasi bitwise. Anda tidak bisa hanya "menambahkan satu", dll. Ingat juga didasarkan pada stack.
Contoh 1: Cetak sesuatu
Memasukkan:
Keluaran:
Contoh 2: Output angka kuadrat hingga 100
Memasukkan:
Keluaran:
Contoh ini mungkin memerlukan beberapa menit untuk dieksekusi dan mungkin menyebabkan pesan "tab ini dibekukan". Abaikan itu dan tunggu.
sumber
OCaml (lex), 497 karakter
OCamllex adalah bagian dari distribusi standar OCaml.
Simpan sebagai b.mll dan jalankan dengan
Saya tidak suka parsing dengan tangan, jadi saya menggunakan generator lexer yang disediakan. Dari token baca, kami menulis fungsi untuk program brainf * ck keseluruhan.
sumber
C # (2861 char, ~ 84 baris)
Ini bukan solusi tercantik untuk masalah ini, dan mungkin tidak semua 'Golf-ish', karena saya tidak peduli dengan panjang seperti yang seharusnya saya lakukan. (Saya tidak menghapus komentar atau ruang kosong ekstra.) Saya hanya ingin mencoba sesuatu dalam bahasa baru, untuk melihat apakah saya bisa. Jika saya melakukannya lagi, saya akan membatalkan penggunaan tumpukan untuk kembali dari ']' dan hanya melihat ke belakang. Jalankan tanpa argumen baris perintah, ia menjalankan program hello world yang diberikan dalam deskripsi masalah. Ia menerima satu argumen baris perintah, nama file program yang akan dijalankan.
Sunting: Menghapus referensi yang tidak digunakan.
sumber
C (gcc) ,
273268 byteCobalah online!
-5 Terima kasih untuk ceilingcat
Mengambil input dari stdin.
Ini sedikit bergantung pada lingkungan, tetapi cukup konsisten. Ini secara efektif solusi eval untuk c. Itu menulis program C yang sesuai untuk file wc, mengkompilasinya, dan menjalankannya sebagai executable yang diinginkan. Jadi sebagai efek bonus ini sebenarnya mengkompilasi kode bf dan meninggalkan
a.out
sebagai biner untuk itu. Perhatikan bahwa tergantung pada sistem Anda mungkin perlu memodifikasi string terakhir. Khususnya sebagian besar kompiler windows c memanggil executable default "a.exe". Untungnya sejauh yang saya tahu, mereka semua memiliki panjang yang sama sehingga bytecount sama. (meskipun jika Anda tidak memiliki cc yang ditentukan, Anda mungkin perlu menambahkan huruf seperti gcc ke perintah kompilasi, menambahkan 1 byte).Saya sadar bahwa utas ini agak lama, tetapi saya belum melihat solusi gaya C ini, jadi saya pikir saya akan menambahkannya.
sumber
[SUNTING]
C ++ 11, 355, dibaca dari file:
Uji
http://ideone.com/b7vO4
[VERSI LAMA]
C ++ 11, 391, untuk menjalankannya: http://ideone.com/yZHVv
sumber