Salah satu tugas standar yang paling umum (terutama ketika menampilkan bahasa pemrograman esoterik) adalah untuk mengimplementasikan "program cat" : membaca semua STDIN dan mencetaknya ke STDOUT. Meskipun ini dinamai setelah utilitas shell Unix cat
, tentu saja jauh lebih kuat daripada yang asli, yang biasanya digunakan untuk mencetak (dan menyatukan) beberapa file yang dibaca dari disk.
Tugas
Anda harus menulis program lengkap yang membaca isi dari aliran input standar dan menulisnya kata demi kata ke aliran output standar. Jika dan hanya jika bahasa Anda tidak mendukung input standar dan / atau aliran keluaran (sebagaimana dipahami dalam sebagian besar bahasa), Anda dapat menggunakan istilah-istilah ini sebagai yang paling dekat dengan bahasa Anda (misalnya JavaScript prompt
dan alert
). Ini adalah satu - satunya bentuk I / O yang dapat diterima, karena antarmuka lain sebagian besar akan mengubah sifat tugas dan membuat jawaban menjadi jauh lebih tidak sebanding.
Keluaran harus mengandung input dan tidak ada yang lain . Satu-satunya pengecualian untuk aturan ini adalah output konstan dari juru bahasa Anda yang tidak dapat ditekan, seperti salam, kode warna ANSI atau lekukan. Ini juga berlaku untuk mengikuti baris baru. Jika input tidak mengandung baris tambahan, output juga tidak boleh termasuk! (Satu-satunya pengecualian adalah jika bahasa Anda benar-benar selalu mencetak baris baru setelah eksekusi.)
Keluaran ke aliran kesalahan standar diabaikan, selama arus keluaran standar berisi keluaran yang diharapkan. Secara khusus, ini berarti program Anda dapat diakhiri dengan kesalahan setelah mencapai ujung aliran (EOF), asalkan tidak mencemari aliran keluaran standar. Jika Anda melakukan ini, saya sarankan Anda untuk menambahkan versi bebas kesalahan ke jawaban Anda juga (untuk referensi).
Karena ini dimaksudkan sebagai tantangan dalam setiap bahasa dan bukan antar bahasa, ada beberapa aturan khusus bahasa:
- Jika mungkin dalam bahasa Anda untuk membedakan byte nol dalam aliran input standar dari EOF, program Anda harus mendukung byte nol seperti byte lainnya (yaitu, mereka juga harus ditulis ke aliran output standar).
- Jika memungkinkan dalam bahasa Anda untuk mendukung aliran input tak terbatas sewenang - wenang (yaitu jika Anda dapat mulai mencetak byte ke output sebelum Anda menekan EOF dalam input), program Anda harus bekerja dengan benar dalam kasus ini. Sebagai contoh
yes | tr -d \\n | ./my_cat
harus mencetak aliran tak terbatasy
s. Terserah kepada Anda seberapa sering Anda mencetak dan menyiram aliran output standar, tetapi harus dijamin akan terjadi setelah waktu yang terbatas, terlepas dari aliran (ini berarti, khususnya, bahwa Anda tidak dapat menunggu karakter tertentu seperti linefeed sebelum mencetak).
Harap tambahkan catatan pada jawaban Anda tentang perilaku pasti berkenaan dengan null-byte, aliran tak terbatas, dan output asing.
Aturan tambahan
Ini bukan tentang menemukan bahasa dengan solusi terpendek untuk ini (ada beberapa di mana program kosong melakukan trik) - ini adalah tentang menemukan solusi terpendek dalam setiap bahasa. Karenanya, tidak ada jawaban yang akan ditandai sebagai diterima.
Kiriman dalam kebanyakan bahasa akan dinilai dalam byte dalam pengkodean yang sudah ada sebelumnya, biasanya (tetapi tidak harus) UTF-8.
Beberapa bahasa, seperti Folder , agak sulit untuk dinilai. Jika ragu, silakan tanyakan di Meta .
Jangan ragu untuk menggunakan bahasa (atau versi bahasa) meskipun itu lebih baru dari tantangan ini. Bahasa yang ditulis khusus untuk mengirimkan jawaban 0-byte untuk tantangan ini adalah permainan yang adil tetapi tidak terlalu menarik.
Perhatikan bahwa harus ada juru bahasa sehingga pengajuan dapat diuji. Diperbolehkan (dan bahkan dianjurkan) untuk menulis sendiri penerjemah ini untuk bahasa yang sebelumnya tidak diterapkan.
Juga mencatat bahwa bahasa yang harus memenuhi kriteria kami biasa untuk bahasa pemrograman .
Jika bahasa pilihan Anda adalah varian sepele dari bahasa lain (yang berpotensi lebih populer) yang sudah memiliki jawaban (pikirkan dialek BASIC atau SQL, cangkang Unix atau turunan Brainfuck sepele seperti Headecks atau Unary), pertimbangkan untuk menambahkan catatan ke jawaban yang ada bahwa solusi yang sama atau sangat mirip juga merupakan yang terpendek dalam bahasa lain.
Kecuali jika telah ditolak sebelumnya, semua aturan standar kode-golf berlaku, termasuk http://meta.codegolf.stackexchange.com/q/1061 .
Sebagai catatan tambahan, tolong jangan turunkan jawaban yang membosankan (tapi valid) dalam bahasa di mana tidak banyak bermain golf; ini masih berguna untuk pertanyaan ini karena mencoba mengkompilasi katalog selengkap mungkin. Namun, lakukan sebagian besar pilihan jawaban dalam bahasa di mana penulis benar-benar harus berusaha kode golf.
Katalog
Cuplikan Stack di bagian bawah posting ini menghasilkan katalog dari jawaban a) sebagai daftar solusi terpendek per bahasa dan b) sebagai leaderboard keseluruhan.
Untuk memastikan bahwa jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama, menggunakan templat Penurunan harga berikut:
## Language Name, N bytes
di mana N
ukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda bisa menyimpan skor lama di headline, dengan mencoretnya. Misalnya:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Jika Anda ingin memasukkan beberapa angka dalam tajuk Anda (mis. Karena skor Anda adalah jumlah dari dua file atau Anda ingin membuat daftar penalti penterjemah secara terpisah), pastikan bahwa skor aktual adalah angka terakhir di tajuk:
## Perl, 43 + 2 (-p flag) = 45 bytes
Anda juga dapat membuat nama bahasa menjadi tautan yang kemudian akan muncul di cuplikan:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
sh
jawaban yang menggunakan cat
yang juga mengandung solusi yang lebih pendek menggunakan dd
.)
cat