Tugas
Tugas Anda adalah menghasilkan string yang berisi karakter string rata-rata. Karakter pertama hasil adalah karakter rata-rata karakter pertama (yang merupakan karakter pertama) dan rata-rata karakter kedua dari dua karakter pertama dan seterusnya.
Apa itu karakter rata-rata?
String adalah array byte. Karakter rata-rata string dapat ditemukan dengan menghitung rata-rata nilai ASCII karakter dalam string dan mengambil karakter ASCII yang sesuai.
Misalnya string "Hello!"
dapat ditulis sebagai urutan byte 72 101 108 108 111 33
. Rata-rata nilai ascii adalah 533/6 = 88.833 ... dan ketika dibulatkan ke bilangan bulat terdekat kita mendapatkan 89 yang merupakan kode ascii untuk huruf kapital Y
.
Aturan
- Anda dapat berasumsi bahwa input hanya berisi karakter ASCII yang dapat dicetak
- Input dapat dibaca dari stdin atau sebagai argumen baris perintah atau sebagai argumen fungsi
- Output harus stdout. Jika program Anda berfungsi, Anda juga dapat mengembalikan string yang ingin Anda cetak.
- Itu harus seluruh program atau fungsi, bukan cuplikan
- Celah standar berlaku
- Integer dibulatkan oleh fungsi
floor(x+0.5)
atau fungsi serupa.
Bagaimana saya menang?
Ini adalah kode-golf , jadi jawaban tersingkat (dalam byte) dalam kemenangan.
Contohnya
Hello!
→HW^adY
test
→tmop
42
→43
StackExchange
→Sdccd_ccccddd
Jawaban:
Brainfuck 106 byte
Ini adalah partisipasi pertama saya dalam golf kode, harap lembut! Itu bekerja tetapi Brainfuck tidak dapat menangani mengapung (bukan yang saya tahu) sehingga nilai bulat selalu yang paling bawah (mungkin memperbaiki algoritma saya nanti).
Juga, algoritma rata-rata nilai 2 oleh 2, yang berarti itu bisa menjadi kekurangan di beberapa tempat. Dan saya perlu memperbaiki bug yang mencetak nomor di akhir output juga.
sumber
Pyth, 16 byte
Cukup mudah. Menggunakan
s+.5
alih-alih pembulatan, karena karena alasan tertenturound(0.5, 0)
0 di Python.sumber
0.5
harus bulat1
.Q,
1512 byte12 byte sebagai ekspresi
atau 15 byte sebagai fungsi
mengambil keuntungan dari
sumber
"c"$avgs"i"$
? Saya tidak berpikir solusi bisa menjadi lebih mudah dari itu. :)"c"
ke `c dan"i"
ke` i.CJam, 19 byte
Cobalah online di juru bahasa CJam .
sumber
Perl:
3130 karakter(29 karakter kode + 1 opsi baris perintah karakter.)
Contoh dijalankan:
sumber
C #
189 135 134106 BytesBisa dilihat di sini
Pegolf waktu pertama
sumber
K, 36 byte
Pemakaian:
_ci
dan_ic
mengonversi ascii menjadi karakter dan sebaliknya, masing-masing.{(+/x)%#x}
adalah idiom K klasik untuk menghitung mean. Secara keseluruhan cukup mudah.Edit: oh, salah baca spec. `0: diperlukan untuk mencetak hasilnya ke stdout. Menunggu klarifikasi pada input ulang. Pertanyaan Dennis.
sumber
{[s]`0:`c${_.5+(+/u)%#u:x#s}'1+!#s}
.`0:`c$_.5+{(+/x)%#x}'1_|(-1_)\
`c$_.5+{(+\x)%+\~^x}`i$
untuk 24. Ini bisa lebih pendek (`c$`i${(+\x)%+\~^x}`i$
) tetapi REPL Anda ( johnearnest.github.io/ok/index.html ) tidak membulatkan dengan benar ketika melakukan casting dari float ke int. Saya ragu untuk memanggil solusi ak ini karena_ci
dan_ic
tidak ada dalam spesifikasi K5 sejauh yang saya tahu, sementara0:
tidak mencetak ke stdout tetapi membaca file txt dari disk._ci
dan_ic
seluruhnya diganti dalam K5 dengan bentuk seperti`c$
. Solusi asli yang saya posting kompatibel dengan Kona, yang didasarkan pada K2 / K3. Saya biasanya mencoba untuk tidak mengirim solusi dengan oK secara khusus karena semantik masih bergeser dan sebagian tidak akurat.`0:_ci_0.5+{(+\x)%1.+!#x}_ic
Mathematica, 75 byte
sumber
Julia,
8581 byteIni menciptakan fungsi tanpa nama yang menerima string dan membuat vektor poin kode ASCII-nya. Berarti diambil untuk setiap grup berurutan, dibulatkan menjadi bilangan bulat, dikonversi ke karakter, digabungkan menjadi string, dan dicetak ke STDOUT.
sumber
Ruby, 46
ideone .
Dengan permintaan maaf kepada w0lf, jawaban saya akhirnya cukup berbeda sehingga sepertinya layak dikirim.
$<.bytes
iterates atas setiap byte di stdin, jadi kami mencetak rata-rata bergulir di setiap loop. '% c' mengonversi float ke karakter dengan membulatkan dan mengambil ASCII, jadi yang harus kita lakukan adalah menambahkan 0,5 untuk membuatnya bulat dengan benar.$.
adalah variabel ajaib yang dimulai diinisialisasi ke 0 - itu seharusnya menyimpan jumlah baris, tetapi karena di sini kita ingin jumlah byte kita hanya menambahnya secara manual.sumber
Mathcad, 60 "byte"
Mathcad adalah aplikasi matematika berdasarkan lembar kerja 2D yang terdiri dari "wilayah" yang masing-masing dapat berupa teks, ekspresi matematika, program, plot, atau komponen skrip.
Instruksi matematika atau pemrograman dipilih dari bilah alat palet atau dimasukkan menggunakan pintasan keyboard. Untuk tujuan bermain golf, operasi ("byte") diambil menjadi jumlah operasi keyboard yang diperlukan untuk membuat nama atau ekspresi (misalnya, untuk mengatur variabel a menjadi 3, kita akan menulis: = 3. Operator definisi : = adalah penekanan tombol tunggal ":", seperti a dan 3 yang memberikan total 3 "byte". Pemrograman untuk operator memerlukan mengetik ctl-shft- # (atau satu klik pada bilah alat pemrograman) sehingga sekali lagi setara dengan 1 byte.
Dalam Mathcad, pengguna memasukkan perintah bahasa pemrograman menggunakan pintasan keyboard (atau mengambilnya dari Bilah Alat Pemrograman) daripada menulisnya dalam teks. Misalnya, mengetik ctl-] membuat operator loop sementara yang memiliki dua "placeholder" untuk memasuki kondisi dan satu baris tubuh, masing-masing. Mengetik = pada akhir ekspresi Mathcad menyebabkan Mathcad mengevaluasi ekspresi.
(Hitung byte) Dengan melihatnya dari perspektif input pengguna dan menyamakan satu operasi input Mathcad (keyboard biasanya, klik mouse pada bilah alat jika tidak ada pintasan kbd) ke karakter dan menafsirkannya sebagai byte. csort = 5 byte seperti yang diketikkan char-by-char sebagaimana variabel / nama fungsi lainnya. Operator for adalah konstruksi khusus yang menempati 11 karakter (termasuk 3 kosong "placeholder" dan 3 spasi) tetapi dimasukkan oleh ctl-shft- #, maka = 1 byte (mirip dengan token dalam beberapa bahasa). Mengetik '(kutipan) menciptakan tanda kurung seimbang (biasanya) sehingga dihitung sebagai 1 byte. Pengindeksan v = 3 byte (tipe v [k).
sumber
Python 3, 66 byte
Jika saya menggunakan
round()
alih-alihint(.5+
dll., Itu menyimpan satu karakter, tetapi secara teknis tidak sesuai dengan tantangan:round()
Putaran Python membagi dua ke bilangan bulat genap terdekat, bukan ke atas. Namun, ini bekerja dengan benar pada semua input sampel.Saya juga merasa sedikit kotor karena tidak mengakhiri output dengan baris baru, tetapi tantangannya tidak mengharuskan ...
sumber
print(end=chr(int(...))
untuk menghemat beberapa byteJavaScript (ES6), 75 byte
Saya tidak percaya tidak ada jawaban JS dengan teknik ini ...
sumber
Python 2, 71
Dengan setiap karakter baru, perbarui jumlah karakter
s
dan jumlah karakteri
untuk menghitung dan menambahkan karakter rata-rata.sumber
print
. Apakah itu bekerja dengan Python 2? Saya lupa sekarang bagaimana menekan baris baru dalamprint
pernyataan ... koma membuatnya menjadi ruang sebagai gantinya, kan?)print _,
untuk meninggalkan spasi daripada baris baru, tetapi tidak ada cara yang baik untuk menghilangkan spasi. Panggilan bagus denganend
argumen Python 3 , saya lupa tentang itu.print'\b'+_,
Ruby 59
61Uji: http://ideone.com/dT7atau
sumber
c+=1;(s/c)
→(s/c+=1)
ideone.com/H2tB9WJawa, 100
Sama seperti banyak jawaban lain di sini, saya menjumlahkan dan rata-rata dalam satu lingkaran. Hanya di sini untuk mewakili Java :)
Kode asli saya adalah 97, tetapi hanya mengembalikan yang dimodifikasi
char[]
daripada mencetaknya:Sekarang, cukup lama bar scrollbar muncul untuk saya, jadi inilah versi dengan beberapa jeda baris, hanya karena:
sumber
test
adalah array char, gunakan sajaf(test);
. Jika objek String, maka Anda akan menggunakanf(test.toCharArray());
. String literal juga baik-baik saja seperti itu:f("Hello!".toCharArray());
toCharArray()
Aku bodoh, aku mencoba melanggarnya dengan beberapa casting. Terima kasih.C, 62 byte
(tautan ideone)
Hasilnya sedikit berbeda dari contoh OP, tetapi hanya karena kode ini membulatkan 0,5 ke bawah, bukan ke atas. Tidak lagi!
sumber
R,
135127 BytesIni sangat cepat dan saya benar-benar salah pertama kali :) Perlu membaca pertanyaan dengan benar.
Uji Coba
sumber
utf8ToInt
akan membantu! Saya memiliki 68 byte golf ini jika Anda ingin memperbarui.Perl 5, 41 byte
jalankan sebagai
sumber
TSQL, 118 byte
Mengembalikan karakter vertikal
sumber
> <> , 30 byte
&
registerAnda dapat mencobanya pada juru bahasa online tetapi kemudian Anda harus menggunakan versi berikut ini, karena juru bahasa online tersebut memasukkan kotak kode ke kotak dan berlaku
?
untuk spasi.sumber
05AB1E , 15 byte [Non-bersaing?]
Cobalah online!
sumber
D
dan}
, dan menggantis
dengany
..p
juga seorang yang sekarang menjadi lebih baikη
xDJapt , 13 byte (tidak bersaing)
Uji secara online!
Bagaimana itu bekerja
sumber
Japt , 11 byte
Cobalah
sumber
PHP , 176 byte
Contoh:
Solusi terbesar sejauh ini, tetapi berdasarkan pada php, saya rasa tidak bisa lebih pendek. 2 byte dapat disimpan dengan menghapus baris baru.
sumber
JavaScript ES7, 122 byte
Sebagian besar semuanya terjadi dalam bagian ini
Sisanya adalah pengulangan / konversi kode karakter
Berpisah:
Jika fungsi tidak diizinkan:
133 byte
Cuplikan ES5:
sumber
Python 2, 106 byte
Itu tidak cukup pendek. Karena itu python, terlalu bertele-tele, Anda bahkan dapat membaca apa yang dilakukannya dengan melihat kode. Tapi itu berhasil.
sumber
Matlab, 43
Menggunakan fungsi anonim:
Contoh:
sumber
JavaScript ES6, 111 byte
Ini sangat panjang, sebagian berkat fungsi
String.fromCharCode
dan panjang JavaScriptcharCodeAt
. Cuplikan tumpukan berisi kode yang tidak ditandai, dikomentari, dapat diuji.sumber
Faktor, 80 byte
sumber