Hitung rata-rata karakter string

24

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 , jadi jawaban tersingkat (dalam byte) dalam kemenangan.

Contohnya

  • Hello!HW^adY
  • testtmop
  • 4243
  • StackExchangeSdccd_ccccddd
Hannes Karppila
sumber
Pertanyaan yang diedit. Sekarang harus jelas: Anda harus membulatkan separuh ke atas.
Hannes Karppila
1
" Input dapat dibaca dari stdin atau sebagai argumen baris perintah ": atau sebagai argumen fungsi (karena Anda mengizinkan fungsi), bukan?
Luis Mendo
Tentu saja diedit lagi.
Hannes Karppila
2
Maaf mengganggu Anda sekali lagi, tetapi apakah fungsi sebenarnya harus mencetak output ke STDOUT atau dapatkah mereka mengembalikan string yang diinginkan?
Dennis
Maaf, lupa mengeditnya sebelumnya. Sekarang seharusnya tidak apa-apa.
Hannes Karppila

Jawaban:

11

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.

Panda Merah
sumber
9

Pyth, 16 byte

smCs+.5csaYCdlYz

Cukup mudah. Menggunakan s+.5alih-alih pembulatan, karena karena alasan tertentu round(0.5, 0)0 di Python.

orlp
sumber
1
Python 3 putaran setengah menuju genap, yang memperkenalkan bias kurang. Pertanyaannya tidak secara eksplisit menentukan bagaimana setengah harus dibulatkan, jadi saya telah meminta klarifikasi dari OP.
Dennis
Pertanyaan yang diedit. 0.5harus bulat 1.
Hannes Karppila
7

Q, 15 12 byte

12 byte sebagai ekspresi

"c"$avgs"i"$

q)"c"$avgs"i"$"Hello!"
"HW^adY"
q)"c"$avgs"i"$"test"
"tmop"
q)"c"$avgs"i"$"42"
"43"
q)"c"$avgs"i"$"StackExchange"
"Sdccd_ccccddd"

atau 15 byte sebagai fungsi

{"c"$avgs"i"$x}

q){"c"$avgs"i"$x} "Hello!"
"HW^adY"
q){"c"$avgs"i"$x} "test"
"tmop"
q){"c"$avgs"i"$x} "42"
"43"
q){"c"$avgs"i"$x} "StackExchange"
"Sdccd_ccccddd"

mengambil keuntungan dari

  1. "i" $ cast untuk mengonversi string (daftar karakter) ke daftar bilangan bulat
  2. fungsi avgs, yang menghitung rata-rata running dari daftar sebagai daftar float
  3. $ "c" $ cast untuk mengonversi daftar float ke daftar karakter, dan yang secara otomatis membulatkan setiap float ke integer terdekat sebelum melakukannya [ie ("c" $ 99.5) = ("c" $ 100) dan ("c "$ 99,4) = (" c "$ 99)]
scottstein37
sumber
Apakah Q memerlukan pembungkus fungsi di sini atau Anda dapat pergi hanya dengan ekspresi diam-diam "c"$avgs"i"$? Saya tidak berpikir solusi bisa menjadi lebih mudah dari itu. :)
JohnE
Anda benar - tidak perlu pembungkus fungsi, karena "c" $ avgs "i" $ "Hello!" berfungsi dengan baik
scottstein37
Saya pikir Anda dapat menyimpan 2 byte dengan mengubah "c"ke `c dan "i"ke` i.
kirbyfan64sos
sayangnya, saya pikir itu tidak berhasil. Untuk menggunakan representasi tipe simbol untuk casting saya harus menggunakan `char dan` int sesuai code.kx.com/wiki/JB:QforMortals2 / ... Saya mempertimbangkan menggunakan 10h dan 6h alih-alih "c" dan "i" tetapi yang tidak akan menghemat byte - 10 jam sama panjang dengan "c" dan mengganti 6 jam untuk "i" membutuhkan ruang tambahan, menjadikannya sama panjangnya.
scottstein37
4

CJam, 19 byte

Uq{i+_U):Ud/moco}/;

Cobalah online di juru bahasa CJam .

Dennis
sumber
4

Perl: 31 30 karakter

(29 karakter kode + 1 opsi baris perintah karakter.)

s!.!chr.5+($s+=ord$&)/++$c!ge

Contoh dijalankan:

bash-4.3$ perl -pe 's!.!chr.5+($s+=ord$&)/++$c!ge' <<< 'StackExchange'
Sdccd_ccccddd
manatwork
sumber
3

C # 189 135 134 106 Bytes

var x=s.Select((t,i)=>Math.Round(s.Select(a=>(int)a).Take(i+1).Average())).Aggregate("",(m,c)=>m+(char)c);

Bisa dilihat di sini

Pegolf waktu pertama

Alex Carlsen
sumber
2

K, 36 byte

`0:_ci_.5+{(+/x)%#x}'.0+1_|(-1_)\_ic

Pemakaian:

  `0:_ci_.5+{(+/x)%#x}'.0+1_|(-1_)\_ic"Hello!"
HW^adY
  `0:_ci_.5+{(+/x)%#x}'.0+1_|(-1_)\_ic"test"
tmop
  `0:_ci_.5+{(+/x)%#x}'.0+1_|(-1_)\_ic"42"
43
  `0:_ci_.5+{(+/x)%#x}'.0+1_|(-1_)\_ic"StackExchange"
Sdccd_ccccddd

_cidan _icmengonversi 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.

JohnE
sumber
Jika Anda menggunakan K5, ini dapat disingkat menjadi 35 bytes: {[s]`0:`c${_.5+(+/u)%#u:x#s}'1+!#s}.
kirbyfan64sos
Atau 30:`0:`c$_.5+{(+/x)%#x}'1_|(-1_)\
JohnE
`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 _cidan _ictidak ada dalam spesifikasi K5 sejauh yang saya tahu, sementara 0:tidak mencetak ke stdout tetapi membaca file txt dari disk.
tmartin
@martin: benar- _cidan _icseluruhnya 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.
JohnE
1
Ah saya mengerti, masuk akal bagi saya. Saya pikir ini adalah solusi K5 lainnya. Inilah solusi 28 char kona`0:_ci_0.5+{(+\x)%1.+!#x}_ic
tmartin
2

Mathematica, 75 byte

FromCharacterCode@Floor[.5+Accumulate@#/Range@Length@#]&@ToCharacterCode@#&
jcai
sumber
2

Julia, 85 81 byte

s->(i=[int(c)for c=s];print(join([char(iround(mean(i[1:j])))for j=1:length(i)])))

Ini 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.

Alex A.
sumber
2

Ruby, 46

s=0.0
$<.bytes{|b|s+=b;$><<'%c'%(0.5+s/$.+=1)}

ideone .

Dengan permintaan maaf kepada w0lf, jawaban saya akhirnya cukup berbeda sehingga sepertinya layak dikirim.

$<.bytesiterates 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.

histokrat
sumber
2

Mathcad, 60 "byte"

masukkan deskripsi gambar di sini

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).

Stuart Bruff
sumber
2

Python 3, 66 byte

Jika saya menggunakan round()alih-alih int(.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 ...

n=t=0
for c in input():n+=1;t+=ord(c);print(end=chr(int(.5+t/n)))
Tim Pederick
sumber
1
Jika Anda menambah n sebelum mencetak, Anda dapat menghindari menyesuaikannya dengan 1.
xnor
1
@ xnor: Wajah, telapak tangan. Palm, wajah. Terima kasih telah menunjukkannya.
Tim Pederick
lakukan print(end=chr(int(...))untuk menghemat beberapa byte
FlipTack
@ Flp.Tkc: Terima kasih! Jawaban diperbarui.
Tim Pederick
2

JavaScript (ES6), 75 byte

let f =
s=>s.replace(/./g,x=>String.fromCharCode((t+=x.charCodeAt())/++i+.5),i=t=0)
<input oninput="O.value=f(this.value)" value="Hello!"><br>
<input id=O value="HW^adY" disabled>

Saya tidak percaya tidak ada jawaban JS dengan teknik ini ...

Produksi ETH
sumber
1

Python 2, 71

i=s=0
r=''
for c in input():s+=ord(c);i+=1.;r+=chr(int(s/i+.5))
print r

Dengan setiap karakter baru, perbarui jumlah karakter sdan jumlah karakter iuntuk menghitung dan menambahkan karakter rata-rata.

Tidak
sumber
Pendekatan yang hampir persis sama dengan saya, hanya Python 2, bukan 3, dan diposting jam sebelumnya: +1. (Juga, saya menemukan saya menyimpan beberapa byte mencetak masing-masing karakter saat itu datang daripada menyimpannya untuk satu akhir print. Apakah itu bekerja dengan Python 2? Saya lupa sekarang bagaimana menekan baris baru dalam printpernyataan ... koma membuatnya menjadi ruang sebagai gantinya, kan?)
Tim Pederick
Python 2 dapat dilakukan print _,untuk meninggalkan spasi daripada baris baru, tetapi tidak ada cara yang baik untuk menghilangkan spasi. Panggilan bagus dengan endargumen Python 3 , saya lupa tentang itu.
xnor
@TimPederick Mungkin kontrol backspace dapat dibenarkan untuk terminal yang menggunakannya, sebagai peretasan untuk menghapus ruang:print'\b'+_,
xnor
1

Ruby 59 61

->w{s=c=0.0;w.chars.map{|l|s+=l.ord;(s/c+=1).round.chr}*''}

Uji: http://ideone.com/dT7atau

Cristian Lupascu
sumber
1
c+=1;(s/c)(s/c+=1) ideone.com/H2tB9W
manatwork
@manatwork Terlihat dengan baik! Terima kasih! Saya menerapkan perubahan.
Cristian Lupascu
1

Jawa, 100

Sama seperti banyak jawaban lain di sini, saya menjumlahkan dan rata-rata dalam satu lingkaran. Hanya di sini untuk mewakili Java :)

void f(char[]z){float s=0;for(int i=0;i<z.length;System.out.print((char)Math.round(s/++i)))s+=z[i];}

Kode asli saya adalah 97, tetapi hanya mengembalikan yang dimodifikasi char[]daripada mencetaknya:

char[]g(char[]z){float s=0;for(int i=0;i<z.length;z[i]=(char)Math.round(s/++i))s+=z[i];return z;}

Sekarang, cukup lama bar scrollbar muncul untuk saya, jadi inilah versi dengan beberapa jeda baris, hanya karena:

void f(char[]z){
    float s=0;
    for(int i=0;
            i<z.length;
            System.out.print((char)Math.round(s/++i)))
        s+=z[i];
}
Geobit
sumber
Menarik. Bisakah Anda menunjukkan kepada kami contoh panggilan juga? Java saya sangat berkarat.
manatwork
Seperti bagaimana cara menyebutnya? Dengan asumsi testadalah array char, gunakan saja f(test);. Jika objek String, maka Anda akan menggunakan f(test.toCharArray());. String literal juga baik-baik saja seperti itu:f("Hello!".toCharArray());
Geobits
Oh Yakin. toCharArray()Aku bodoh, aku mencoba melanggarnya dengan beberapa casting. Terima kasih.
manatwork
Akan terlalu mudah untuk melemparkannya. Para dewa Jawa akan sangat marah: P
Geobits
1

C, 62 byte

c;t;main(n){for(;(c=getchar())>0;n++)putchar(((t+=c)+n/2)/n);}

(tautan ideone)

Hasilnya sedikit berbeda dari contoh OP, tetapi hanya karena kode ini membulatkan 0,5 ke bawah, bukan ke atas. Tidak lagi!

osifrque melengking
sumber
1

R, 135 127 Bytes

Ini sangat cepat dan saya benar-benar salah pertama kali :) Perlu membaca pertanyaan dengan benar.

cat(sapply(substring(a<-scan(,''),1,1:nchar(a)),function(x)rawToChar(as.raw(round(mean(as.integer(charToRaw(x)))+.5)))),sep='')

Uji Coba

cat(sapply(substring(a<-scan(,''),1,1:nchar(a)),function(x)rawToChar(as.raw(round(mean(as.integer(charToRaw(x)))+.5)))),sep='')
1: Hello!
2: 
Read 1 item
HW^adY
MickyT
sumber
seseorang memposting tantangan dupe di kotak pasir jadi saya menemukan ini ... Ini adalah waktu yang lama lalu, tetapi utf8ToIntakan membantu! Saya memiliki 68 byte golf ini jika Anda ingin memperbarui.
Giuseppe
@Giuseppe Silakan dan kirim sendiri jika Anda mau. Saya menduga bahwa ini sangat berbeda dengan apa yang saya lakukan di sini.
MickyT
1

Perl 5, 41 byte

say map{$s+=ord;chr($s/++$c+.5)}pop=~/./g

jalankan sebagai

$ perl -E 'say map{$s+=ord;chr($s/++$c+.5)}pop=~/./g' StackExchange
Sdccd_ccccddd
hobbs
sumber
1

TSQL, 118 byte

DECLARE @ varchar(400) = 'StackExchange'

SELECT
top(len(@))char(avg(ascii(stuff(@,1,number,''))+.5)over(order by number))FROM
master..spt_values
WHERE'P'=type

Mengembalikan karakter vertikal

S
d
c
c
d
_
c
c
c
c
d
d
d
t-clausen.dk
sumber
1

> <> , 30 byte

i:0(?v
v &l~<
\+l2(?
\&,12,+o;
  • Baris pertama membaca dari stdin dan meletakkan karakter di stack
  • Yang kedua akan menghapus char EOL, mengambil ukuran tumpukan dan memasukkannya ke dalam &register
  • Baris ketiga akan menambahkan angka pada tumpukan sementara ada dua atau lebih dari itu
  • Baris keempat akan membagi angka yang dihasilkan dengan nilai register, lalu menambahkan 1/2, menampilkan nilai sebagai karakter dan berhenti. Saat dihadapkan dengan nilai float saat menampilkan char,> <> akan menambahkannya, itulah sebabnya kami menambahkan 1/2

Anda 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.

i:0(?v
v &l~<
\+l2(   ?
\&,12,+o;
Harun
sumber
1

05AB1E , 15 byte [Non-bersaing?]

.pvyDSÇOsg/îç}J

Cobalah online!

Guci Gurita Ajaib
sumber
-2 byte dengan menghapus Ddan }, dan mengganti sdengan y.
Kevin Cruijssen
1
@KevinCruijssen untuk berapa umur jawaban ini ada lebih dari itu: P. .pjuga seorang yang sekarang menjadi lebih baik
Magic Octopus Urn
Ah lol, lupa tentang ηxD
Kevin Cruijssen
1

Japt , 13 byte (tidak bersaing)

£T±Xc)/°Y r d

Uji secara online!

Bagaimana itu bekerja

£   T± Xc)/° Y r d
mXY{T+=Xc)/++Y r d}
                     // Implicit: U = input string, T = 0
mXY{              }  // Replace each char X and index Y in the string by this function:
    T+=Xc            //   Add X.charCodeAt() to T.
         )/++Y       //   Take T / (Y + 1).
               r d   //   Round, and convert to a character.
                     // Implicit: output result of last expression
Produksi ETH
sumber
Ah, gila; Saya pikir filter "tidak bersaing" telah dihapus dari papan peringkat, jadi saya tidak melihat ini sebelum memposting ini .
Shaggy
1

PHP , 176 byte

<?=(implode('',array_reduce(str_split($argv[1]),function($c,$k){array_push($c[1],chr(floor(((ord($k)+$c[0])/(count($c[1])+1))+0.5)));return[ord($k)+$c[0],$c[1]];},[0,[]])[1]));

Contoh:

>php cg.php Hello!
HW^adY
>php cg.php test  
tmop
>php cg.php 42
43

Solusi terbesar sejauh ini, tetapi berdasarkan pada php, saya rasa tidak bisa lebih pendek. 2 byte dapat disimpan dengan menghapus baris baru.

cb0
sumber
Hmm, poin bagus. Saya pikir saya mungkin meninggalkan mereka di pos agar lebih mudah dibaca. Tapi ya, ini kode golf. Saya akan menghapusnya;)
cb0
1
Anda selalu dapat menyertakan versi tambahan dengan padding agar mudah dibaca di samping versi pendek Anda. Saya sering melakukan ini ketika kode saya terlalu panjang untuk sepenuhnya terlihat pada kebanyakan monitor.
Wheat Wizard
0

JavaScript ES7, 122 byte

s=>String.fromCharCode(...[for(i of s)i.charCodeAt()].map((l,i,a)=>Math.round(eval((t=a.slice(0,++i)).join`+`)/t.length)))

Sebagian besar semuanya terjadi dalam bagian ini

eval((t=a.slice(0,++i)).join`+`)/t.length)

Sisanya adalah pengulangan / konversi kode karakter

Berpisah:

s=> 
 String.fromCharCode(...                        ) // Converts average character code array to string, ... allows it to take an array
   [for(i of s)i.charCodeAt()]                    // Converts string to char code array
   .map((l,i,a)=>                             )   // Loops through each character
     Math.round(                    /t.length)    // Rounds sum of previous char codes, divides by position + 1
       eval(                       )              // evals string of char codes seperated with +
            (                ).join`+`            // joins previous char codes with +
             t=a.slice(0,++i)                     // creates an array with all the char codes

Jika fungsi tidak diizinkan:

alert(String.fromCharCode(...[for(i of prompt())i.charCodeAt()].map((l,i,a)=>Math.round(eval((t=a.slice(0,++i)).join`+`)/t.length))))

133 byte


Cuplikan ES5:

function _toConsumableArray(r){if(Array.isArray(r)){for(var e=0,t=Array(r.length);e<r.length;e++)t[e]=r[e];return t}return Array.from(r)}function _taggedTemplateLiteral(r,e){return Object.freeze(Object.defineProperties(r,{raw:{value:Object.freeze(e)}}))}var _templateObject=_taggedTemplateLiteral(["+"],["+"]),f,t=function t(s){return String.fromCharCode.apply(String,_toConsumableArray(function(){var r=[],e=!0,t=!1,a=void 0;try{for(var n,i=s[Symbol.iterator]();!(e=(n=i.next()).done);e=!0){var o=n.value;r.push(o.charCodeAt())}}catch(l){t=!0,a=l}finally{try{!e&&i["return"]&&i["return"]()}finally{if(t)throw a}}return r}().map(function(l,i,a){return Math.round(eval((f=a.slice(0,++i)).join(_templateObject))/f.length)})))};

// Demo
document.getElementById('go').onclick=function(){
  document.getElementById('output').innerHTML = t(document.getElementById('input').value)
};
<div style="padding-left:5px;padding-right:5px;"><h2 style="font-family:sans-serif">Average of Words Snippet</h2><div><div  style="background-color:#EFEFEF;border-radius:4px;padding:10px;"><input placeholder="Text here..." style="resize:none;border:1px solid #DDD;" id="input"><button id='go'>Run!</button></div><br><div style="background-color:#EFEFEF;border-radius:4px;padding:10px;"><span style="font-family:sans-serif;">Output:</span><br><pre id="output" style="background-color:#DEDEDE;padding:1em;border-radius:2px;overflow-x:auto;"></pre></div></div></div>

Downgoat
sumber
0

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.

a=[.0]+[ord(i)for i in raw_input()]
print"".join([chr(int(.5+(sum(a[:i+1])/i)))for i in range(1,len(a))])
Hannes Karppila
sumber
1
"Karena itu python, terlalu verbose" ... tidak dibandingkan dengan Java. Dan saya tidak setuju. Kurang verbose dan itu tidak akan sehebat itu. Gunakan Pyth jika Anda ingin sedikit verbose.
mbomb007
0

Matlab, 43

Menggunakan fungsi anonim:

f=@(s)char(round(cumsum(+s)./(1:numel(s))))

Contoh:

>> f=@(s)char(round(cumsum(+s)./(1:numel(s))))
f = 
    @(s)char(round(cumsum(+s)./(1:numel(s))))

>> f('Hello!')
ans =
HW^adY

>> f('test')
ans =
tmop

>> f('42')
ans =
43

>> f('StackExchange')
ans =
Sdccd_ccccddd
Luis Mendo
sumber
0

JavaScript ES6, 111 byte

w=>w.replace(/./g,(_,i)=>String.fromCharCode([for(f of w.slice(0,++i))f.charCodeAt()].reduce((a,b)=>a+b)/i+.5))

Ini sangat panjang, sebagian berkat fungsi String.fromCharCodedan panjang JavaScript charCodeAt. Cuplikan tumpukan berisi kode yang tidak ditandai, dikomentari, dapat diuji.

f=function(w){
  return w.replace(/./g,function(e,i){
    return String.fromCharCode(w.slice(0,++i).split('').map(function(f){
      return f.charCodeAt()
    }).reduce(function(a,b){
      // Adds all numbers in the array
      return a+b
      // String.fromCharCode automatically floors numbers, so we add .5 to round up
    })/i+.5)
  })
}

run=function(){document.getElementById('output').innerHTML=f(document.getElementById('input').value)};document.getElementById('run').onclick=run;run()
<input type="text" id="input" value="Hello!" /><button id="run">Run</button><br />
<pre id="output"></pre>

NinjaBearMonkey
sumber
0

Faktor, 80 byte

[ cum-sum [ dup zero? 1 0 ? + / ] map-index [ .5 + floor >fixnum ] map >string ]
kucing
sumber