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

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.


9

Pyth, 16 byte

smCs+.5csaYCdlYz

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


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

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

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

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


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.


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@#&

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.


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.


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


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

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


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.


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

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];
}

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!


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

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

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

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;


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

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.


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>


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

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

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>


0

Faktor, 80 byte

[ cum-sum [ dup zero? 1 0 ? + / ] map-index [ .5 + floor >fixnum ] map >string ]
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.