En yaygın standart görevlerden biri (özellikle ezoterik programlama dillerini gösterirken) bir "cat programı" uygulamaktır : tüm STDIN'leri okuyun ve STDOUT'a yazdırın. Bu, Unix kabuk yardımcı programından sonra adlandırılmış olsa cat
da, normalde diskten okunan birkaç dosyayı yazdırmak (ve birleştirmek) için kullanılan gerçek şeyden çok daha az güçlüdür.
Görev
Standart giriş akışının içeriğini okuyan ve bunları standart çıkış akışına sözlü olarak yazan tam bir program yazmalısınız . Eğer ve eğer diliniz standart giriş ve / veya çıkış akışlarını desteklemiyorsa (çoğu dilde anlaşıldığı gibi), bu terimleri kendi dilinizde en yakın karşılığı (örneğin, JavaScript prompt
ve benzeri) anlamında kullanabilirsiniz alert
. Bunlar sadece başka bir arayüz, büyük ölçüde görevin niteliğini değiştirmek ve daha az karşılaştırılabilir cevapları kılacağı için, I / O ve kabul edilebilir formlar.
Çıktı tam olarak girişi içermeli ve başka bir şey içermemelidir . Bu kuralın tek istisnası, selamlama, ANSI renk kodları veya girintiler gibi bastırılamayan dilinizin tercümanının sürekli çıktısıdır. Bu aynı zamanda takip eden yeni hatlar için de geçerlidir. Girdi sonunda yeni bir satır içermiyorsa, çıkışın da birini içermemesi gerekir! (Bunun tek istisnası, dilinizin yürütmeden sonra mutlaka daima yeni bir satırsonu yazmasıdır.)
Standart çıkış akımı beklenen çıkışı içerdiği sürece standart hata akışına çıkış dikkate alınmaz. Bu, özellikle, standart çıkış akışını kirletmemesi koşuluyla, programınızın akışın sonuna (EOF) çarptığında bir hatayla sona erebileceği anlamına gelir. Bunu yaparsanız, cevabınıza hatasız bir versiyon eklemenizi de tavsiye ederim (referans için).
Bu, diller arasında değil, her dilde bir zorluk olarak tasarlandığından, dile özgü birkaç kural vardır:
- Dilinizde standart giriş akışındaki boş baytları EOF'den ayırt etmek mümkün ise, programınız diğer baytlar gibi boş baytları da desteklemelidir (yani standart çıkış akışına da yazılmalıdır).
- Kendi dilinizde keyfi bir sınırsız giriş akışını desteklemek mümkün ise (örn. Girişte EOF tuşuna basmadan önce çıktıya bayt yazdırmaya başlayabilirseniz), programınızın bu durumda doğru çalışması gerekir. Örnek olarak
yes | tr -d \\n | ./my_cat
sonsuzy
s s yazdırmalısınız . Standart çıkış akışını ne sıklıkta yazdırıp sıkıştıracağınız size bağlıdır, ancak akıştan bağımsız olarak sınırlı bir süre sonra gerçekleşmesi garanti edilmelidir (bu, özel bir karakter için bekleyemeyeceğiniz anlamına gelir) yazdırmadan önce bir satır beslemesi).
Lütfen boş baytlar, sonsuz akışlar ve yabancı çıktılarla ilgili tam davranış hakkındaki yanıtınıza bir not ekleyin.
Ek kurallar
Bu, bunun için en kısa çözümü içeren dili bulmakla ilgili değildir (boş programın hile yaptığı bazı yerler vardır) - bu, her dilde en kısa çözümü bulmakla ilgilidir . Bu nedenle, hiçbir cevap kabul edilmiş olarak işaretlenmeyecektir.
Çoğu dilde yapılan gönderiler, genellikle önceden var olan bir UTF-8 kodlama kodunda bayt olarak puanlanacaktır .
Klasörler gibi bazı dilleri puanlamak biraz zor. Şüpheniz varsa, üzerine sorabilirsiniz Meta .
Bu zorluktan daha yeni olsa bile, bir dili (veya dil sürümünü) kullanmaktan çekinmeyin. Bu zorluğa 0 baytlık bir cevap göndermek için özel olarak yazılan diller adil oyundur ancak özellikle ilgi çekici değildir.
Göndermenin test edilebilmesi için bir tercüman olması gerektiğini unutmayın. Daha önce uygulanmamış bir dil için bu tercümanı kendiniz yazmanıza izin verilir (ve hatta teşvik edilir).
Ayrıca, dillerin programlama dilleri için genel kriterlerimizi yerine getirmesi gerektiğine dikkat edin .
Seçtiğiniz dil, zaten bir cevabı olan (belki de BASIC veya SQL lehçeleri, Unix kabukları veya önemsiz Brainfuck türevlerini düşünen), başka bir (potansiyel olarak daha popüler) dilin önemsiz bir değişkeni ise, mevcut cevaba bir not eklemeyi düşünün. aynı veya çok benzer bir çözüm diğer dilde de en kısa olanıdır.
Daha önce reddedilmediklerinde , http://meta.codegolf.stackexchange.com/q/1061 dahil tüm standart kod golf kuralları uygulanır .
Bir yandan not olarak, lütfen golf için fazla bir şey olmadığı dillerde sıkıcı (ama geçerli) cevapları azaltmayınız; Bunlar bir kataloğu mümkün olduğu kadar eksiksiz bir şekilde derlemeye çalıştığı için bu soru için hala faydalıdır. Bununla birlikte, öncelikle yazarın gerçekte kodu golf oynamak için çaba harcadığı dillerde cevapları çoğaltınız.
Katalog
Bu yazının altındaki Yığın Parçacığı, cevapları a) dil başına en kısa çözümün bir listesi olarak ve b) genel bir lider tablosu olarak oluşturur.
Cevabınızın göründüğünden emin olmak için, lütfen aşağıdaki Markdown şablonunu kullanarak cevabınızı bir başlık ile başlatın:
## Language Name, N bytes
Gönderinizin N
büyüklüğü nerede ? Puanınızı artırmak varsa, olabilir onları içinden vurarak, başlığa eski hesapları tutmak. Örneğin:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Başlığınıza birden fazla sayı eklemek istiyorsanız (örneğin, puanınız iki dosyanın toplamı olduğundan veya tercüman bayrağı cezalarını ayrı ayrı listelemek istediğiniz için), gerçek puanın başlıktaki son sayı olduğundan emin olun :
## Perl, 43 + 2 (-p flag) = 45 bytes
Dil adını, daha sonra pasajda görünecek bir bağlantı da yapabilirsiniz:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
sh
kullanarak cat
daha kısa bir çözümü de içeren bir cevap zaten var dd
.)
cat