Tính các ký tự trung bình của chuỗi


24

Bài tập

Nhiệm vụ của bạn là tạo ra chuỗi chứa các ký tự trung bình của chuỗi. Ký tự đầu tiên của kết quả sẽ là ký tự trung bình của ký tự đầu tiên (là ký tự đầu tiên) và ký tự trung bình thứ hai của hai ký tự đầu tiên, v.v.

Nhân vật trung bình là gì?

Chuỗi là mảng byte. Có thể tìm thấy ký tự trung bình của chuỗi bằng cách tính trung bình các giá trị ASCII của các ký tự trong chuỗi và lấy ký tự ASCII tương ứng.

Ví dụ chuỗi "Hello!"có thể được viết dưới dạng chuỗi byte 72 101 108 108 111 33. Giá trị trung bình của ascii là 533/6 = 88.833 ... và khi nó được làm tròn đến số nguyên gần nhất, chúng ta sẽ nhận được 89 mã ascii cho chữ cái bị giam cầm Y.

Quy tắc

  • Bạn có thể giả sử rằng đầu vào chỉ chứa các ký tự ASCII có thể in
  • Đầu vào có thể được đọc từ stdin hoặc dưới dạng đối số dòng lệnh hoặc dưới dạng đối số hàm
  • Đầu ra phải là thiết bị xuất chuẩn. Nếu chương trình của bạn là chức năng, bạn cũng có thể trả về chuỗi bạn sẽ in.
  • Nó phải là toàn bộ chương trình hoặc chức năng, không phải đoạn trích
  • Áp dụng sơ hở tiêu chuẩn
  • Số nguyên được làm tròn bởi chức năng floor(x+0.5)hoặc chức năng tương tự.

Làm thế nào để tôi chiến thắng?

Đây là , vì vậy câu trả lời ngắn nhất (tính bằng byte) trong chiến thắng.

Ví dụ

  • Hello!HW^adY
  • testtmop
  • 4243
  • StackExchangeSdccd_ccccddd

Chỉnh sửa câu hỏi. Bây giờ cần phải rõ ràng: bạn phải làm tròn một nửa lên trên.
Hannes Karppila 24/07/2015

1
" Đầu vào có thể được đọc từ stdin hoặc dưới dạng đối số dòng lệnh ": hoặc dưới dạng đối số hàm (vì bạn cho phép hàm), phải không?
Luis Mendo

Tất nhiên, chỉnh sửa lại.
Hannes Karppila 24/07/2015

2
Xin lỗi đã làm phiền bạn một lần nữa, nhưng các chức năng thực sự phải in đầu ra sang STDOUT hay chúng có thể trả về chuỗi mong muốn không?
Dennis

Xin lỗi, quên chỉnh sửa trước đó. Bây giờ nó sẽ ổn thôi.
Hannes Karppila 24/07/2015

Câu trả lời:


11

Brainfuck 106 byte

,[>,<.[->+<]>>++<[>[->+>+<<]>[-<<-[>]>>>[<[>>>-<<<[-]]>>]<<]>>>+<<[-<<+>>]<<<]>[-]>>>>[-<<<<<+>>>>>]<<<<<]

Đây là lần đầu tiên tôi tham gia chơi golf mã, xin hãy nhẹ nhàng! Nó hoạt động nhưng brainfuck không thể xử lý các float (không phải tôi biết) vì vậy giá trị làm tròn luôn luôn là giá trị dưới cùng (có thể khắc phục thuật toán của tôi sau này).

Ngoài ra, thuật toán tính trung bình các giá trị 2 bằng 2, có nghĩa là nó có thể không chính xác ở một số điểm. Và tôi cũng cần sửa một lỗi đang in một số ở cuối đầu ra.


9

Bình thường, 16 byte

smCs+.5csaYCdlYz

Khá đơn giản. Sử dụng s+.5thay vì làm tròn, vì một số lý do round(0.5, 0)là 0 trong Python.


1
Python 3 vòng một nửa về phía chẵn, điều này giới thiệu ít sai lệch. Câu hỏi không chỉ định rõ ràng cách làm tròn một nửa, vì vậy tôi đã yêu cầu làm rõ từ OP.
Dennis

Chỉnh sửa câu hỏi. 0.5nên làm tròn 1.
Hannes Karppila 24/07/2015

7

Q, 15 12 byte

12 byte như một biểu thức

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

hoặc 15 byte như một hàm

{"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"

lợi ích của

  1. "i" $ cast để chuyển đổi một chuỗi (danh sách các ký tự) thành danh sách các số nguyên
  2. Hàm avss, tính trung bình đang chạy của một danh sách dưới dạng danh sách các số float
  3. "c" $ cast để chuyển đổi danh sách số float thành danh sách các ký tự và tự động làm tròn mỗi float thành số nguyên gần nhất trước khi thực hiện [tức là ("c" $ 99,5) = ("c" $ 100) và ("c "$ 99,4) = (" c "$ 99)]

Q có yêu cầu trình bao bọc hàm ở đây không hoặc bạn có thể thoát khỏi chỉ với biểu thức ngầm "c"$avgs"i"$không? Tôi không nghĩ rằng một giải pháp có thể trở nên đơn giản hơn thế nhiều. :)
JohnE 24/07/2015

bạn đã đúng - không cần trình bao bọc hàm, vì "c" $ avss "i" $ "Xin chào!" hoạt động tốt
scottstein37 24/07/2015

Tôi nghĩ bạn có thể lưu 2 byte bằng cách thay đổi "c"thành `c "i"và`.
kirbyfan64sos

thật không may, tôi không nghĩ rằng nó hoạt động. Để sử dụng biểu diễn loại biểu tượng để truyền, tôi phải sử dụng `char và` int theo mã.kx.com / wiki / JB:QforMortals2 /. Tôi đã cân nhắc sử dụng 10h và 6h thay vì" c "và" i "nhưng sẽ không lưu bất kỳ byte nào - 10h có cùng độ dài với "c" và thay thế 6h cho "i" yêu cầu một khoảng trắng ở cuối, làm cho chúng có cùng độ dài.
scottstein37 24/07/2015


4

Perl: 31 30 ký tự

(Mã 29 ký tự + 1 ký tự tùy chọn dòng lệnh.)

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

Chạy mẫu:

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

3

C # 189 135 134 106 byte

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

Có thể thấy ở đây

Người chơi gôn lần đầu


2

K, 36 byte

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

Sử dụng:

  `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

_ci_icchuyển đổi ascii thành ký tự và ngược lại, tương ứng. {(+/x)%#x}là một thành ngữ K cổ điển để tính một giá trị trung bình. Khá đơn giản về tổng thể.

Chỉnh sửa: oh, đọc sai thông số kỹ thuật. `0: là cần thiết để in kết quả ra thiết bị xuất chuẩn. Chờ làm rõ về đầu vào lại. Câu hỏi của Dennis.


Nếu bạn sử dụng K5, điều này có thể rút ngắn xuống còn 35 byte : {[s]`0:`c${_.5+(+/u)%#u:x#s}'1+!#s}.
kirbyfan64sos

Hoặc 30:`0:`c$_.5+{(+/x)%#x}'1_|(-1_)\
JohnE 24/07/2015

`c$_.5+{(+\x)%+\~^x}`i$cho 24. Nó có thể ngắn hơn ( `c$`i${(+\x)%+\~^x}`i$) nhưng REPL của bạn ( johnearnest.github.io/ok/index.html ) không làm tròn chính xác khi chuyển từ float sang int. Tôi ngần ngại gọi giải pháp ak này _ci_ickhông có trong thông số K5 như tôi có thể nói, trong khi 0:không in ra thiết bị xuất chuẩn mà thay vào đó đọc một tệp txt từ đĩa.
tmartin 24/07/2015

@tmartin: chính xác- _ci_icđược thay thế hoàn toàn trong K5 với các hình thức như `c$. Giải pháp ban đầu tôi đã đăng là tương thích với Kona, dựa trên K2 / K3. Tôi thường cố gắng không đăng các giải pháp với oK một cách cụ thể vì ngữ nghĩa vẫn đang thay đổi và không chính xác một phần.
JohnE 24/07/2015

1
Ah tôi thấy, có ý nghĩa với tôi. Tôi nghĩ rằng đây là một giải pháp K5 khác. Đây là một giải pháp 28 char kona`0:_ci_0.5+{(+\x)%1.+!#x}_ic
tmartin 24/07/2015

2

Toán học, 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)])))

Điều này tạo ra một hàm không tên chấp nhận một chuỗi và tạo một vectơ các điểm mã ASCII của nó. Phương tiện được lấy cho từng nhóm liên tiếp, được làm tròn thành số nguyên, được chuyển đổi thành ký tự, nối thành chuỗi và được in thành STDOUT.


2

Ruby, 46

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

nhàn rỗi .

Với lời xin lỗi đến w0lf, câu trả lời của tôi đã kết thúc đủ khác nhau để nó có vẻ đáng đăng.

$<.bytesLặp lại trên mỗi byte trong stdin, vì vậy chúng tôi in trung bình cán trong mỗi vòng lặp. '% c' chuyển đổi một dấu phẩy thành một ký tự bằng cách làm tròn xuống và lấy ASCII, vì vậy tất cả những gì chúng ta phải làm là thêm 0,5 để làm cho nó tròn đúng. $.là một biến ma thuật bắt đầu được khởi tạo thành 0 - nên lưu trữ số lượng dòng, nhưng vì ở đây chúng tôi muốn số byte, chúng tôi chỉ cần tăng nó theo cách thủ công.


2

Mathcad, 60 "byte"

nhập mô tả hình ảnh ở đây

Mathcad là ứng dụng toán học dựa trên các bảng tính 2D bao gồm các "vùng" mà mỗi vùng có thể là văn bản, biểu thức toán học, chương trình, cốt truyện hoặc thành phần kịch bản.

Một hướng dẫn toán học hoặc lập trình được chọn từ thanh công cụ bảng màu hoặc được nhập bằng phím tắt. Đối với mục đích chơi gôn, một thao tác ("byte") được coi là số thao tác bàn phím cần thiết để tạo tên hoặc biểu thức (ví dụ: để đặt biến a thành 3, chúng tôi sẽ viết a: = 3. Toán tử định nghĩa : = là một lần nhấn phím ":", cũng như a và 3 cho tổng cộng 3 "byte". Lập trình cho toán tử yêu cầu gõ ctl-shft- # (hoặc một lần bấm trên thanh công cụ lập trình) để một lần nữa tương đương với 1 byte.

Trong Mathcad, người dùng nhập các lệnh ngôn ngữ lập trình bằng các phím tắt (hoặc chọn chúng từ Thanh công cụ lập trình) thay vì viết chúng bằng văn bản. Ví dụ, nhập ctl-] sẽ tạo ra một toán tử vòng lặp có hai "trình giữ chỗ" để nhập điều kiện và một dòng duy nhất của cơ thể, tương ứng. Gõ = ở cuối biểu thức Mathcad khiến Mathcad đánh giá biểu thức.

(Đếm byte) Bằng cách xem xét nó từ phối cảnh đầu vào của người dùng và đánh đồng một thao tác nhập Mathcad (thường là bàn phím, nhấp chuột trên thanh công cụ nếu không có phím tắt kbd) cho một ký tự và diễn giải điều này dưới dạng byte. csort = 5 byte khi nó gõ char-by-char như các tên biến / hàm khác. Toán tử for là một cấu trúc đặc biệt chiếm 11 ký tự (bao gồm 3 "giữ chỗ" trống và 3 khoảng trắng) nhưng được nhập bởi ctl-shft- #, do đó = 1 byte (tương tự như mã thông báo trong một số ngôn ngữ). Nhập '(quote) tạo ra dấu ngoặc đơn cân bằng (thường) để tính là 1 byte. Lập chỉ mục v = 3 byte (loại v [k).


2

Python 3, 66 byte

Nếu tôi sử dụng round()thay vì int(.5+vv, nó sẽ lưu một ký tự, nhưng về mặt kỹ thuật không tuân thủ thách thức: các round()vòng của Python giảm một nửa đến số nguyên chẵn gần nhất, không lên trên. Tuy nhiên, nó hoạt động chính xác trên tất cả các đầu vào mẫu.

Tôi cũng cảm thấy hơi bẩn khi không kết thúc đầu ra bằng một dòng mới, nhưng thử thách không đòi hỏi điều đó ...

n=t=0
for c in input():n+=1;t+=ord(c);print(end=chr(int(.5+t/n)))

1
Nếu bạn tăng n trước khi in, bạn có thể tránh điều chỉnh nó thêm 1.
xnor

1
@xnor: Mặt, lòng bàn tay. Lòng bàn tay, mặt. Cảm ơn đã chỉ ra rằng.
Tim Pederick

làm gì print(end=chr(int(...))để lưu một số byte
FlipTack

@ Flp.Tkc: Cảm ơn! Trả lời cập nhật.
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>

Tôi không thể tin rằng không có câu trả lời JS với kỹ thuật này ...


1

Con trăn 2, 71

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

Với mỗi ký tự mới, cập nhật tổng ký tự svà số lượng ký tự iđể tính toán và nối thêm ký tự trung bình.


Gần như chính xác cách tiếp cận tương tự như của tôi, chỉ Python 2 thay vì 3 và được đăng trước đó: +1. (Ngoài ra, tôi thấy rằng tôi đã lưu một vài byte in mỗi ký tự thay vì lưu trữ chúng cho một bản cuối cùng print. Nó có hoạt động với Python 2 không? Tôi quên ngay cách xử lý dòng mới trong printcâu lệnh ... dấu phẩy biến nó thành khoảng trắng thay vào đó, phải không?)
Tim Pederick

Python 2 có thể làm print _,để lại một khoảng trắng thay vì dòng mới, nhưng không có cách nào tốt để bỏ qua khoảng trắng. Cuộc gọi tốt với endđối số của Python 3 , tôi đã quên mất điều đó.
xnor

@TimPederick Có thể điều khiển backspace có thể được biện minh cho một thiết bị đầu cuối sử dụng nó, như là một hack để xóa không gian:print'\b'+_,
xnor


1

Java, 100

Giống như nhiều câu trả lời khác ở đây, tôi đang tổng kết và tính trung bình trong một vòng lặp. Chỉ ở đây để đại diện cho 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];}

Mã ban đầu của tôi là 97, nhưng nó chỉ trả về sửa đổi char[]thay vì in nó:

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

Bây giờ, nó chỉ đủ dài để các thanh cuộn xuất hiện cho tôi, vì vậy đây là phiên bản có một số ngắt dòng, chỉ vì:

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

Hấp dẫn. Bạn có thể chỉ cho chúng tôi một mẫu cuộc gọi không? Java của tôi rất gỉ.
manatwork 24/07/2015

Như trong cách gọi nó? Giả sử testlà một mảng char, chỉ cần sử dụng f(test);. Nếu đó là một đối tượng String, thì bạn sẽ sử dụng f(test.toCharArray());. Chuỗi ký tự cũng tốt như vậy:f("Hello!".toCharArray());
Geobits 24/07/2015

Oh. Chắc chắn rồi. toCharArray()Tôi ngu ngốc, tôi đã cố gắng để vi phạm nó với một số đúc. Cảm ơn bạn.
manatwork 24/07/2015

Thật quá dễ dàng để chỉ đúc nó. Các vị thần Java sẽ rất tức giận: P
Geobits 24/07/2015

1

C, 62 byte

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

(liên kết ideone)

Kết quả hơi khác so với các ví dụ của OP, nhưng chỉ vì mã này làm tròn 0,5 xuống thay vì lên. Không còn nữa!


1

R, 135 127 byte

Điều này đã thực sự lâu nhanh chóng và tôi thực sự đã hiểu sai lần đầu tiên :) Cần đọc các câu hỏi đúng cách.

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

Chạy thử nghiệm

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

Ai đó đã đăng một thử thách lừa đảo trong hộp cát để tôi tìm thấy điều này ... Đây là một thời gian ngắn trước đây, nhưng utf8ToIntsẽ giúp! Tôi có một golf 68 byte này nếu bạn muốn cập nhật lên nó.
Giuseppe

@Giuseppe Hãy tiếp tục và tự đăng nó nếu bạn muốn. Tôi nghi ngờ rằng nó khác biệt đáng kể với những gì tôi đã làm ở đây.
MickyT

1

Perl 5, 41 byte

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

chạy như

$ 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

Trả lại các ký tự dọc

S
d
c
c
d
_
c
c
c
c
d
d
d

1

> <> , 30 byte

i:0(?v
v &l~<
\+l2(?
\&,12,+o;
  • Dòng đầu tiên đọc từ stdin và đặt các ký tự lên ngăn xếp
  • Thứ hai sẽ loại bỏ char EOL, lấy kích thước của ngăn xếp và đưa nó vào &thanh ghi
  • Dòng thứ ba sẽ thêm số trên ngăn xếp trong khi có hai hoặc nhiều trong số chúng
  • Dòng thứ tư sẽ chia số kết quả cho giá trị của người đăng ký, sau đó thêm 1/2, xuất giá trị dưới dạng ký tự và dừng lại. Khi phải đối mặt với giá trị float khi hiển thị char,> <> sẽ thay đổi giá trị đó, đó là lý do tại sao chúng tôi đã thêm 1/2

Bạn có thể dùng thử trên trình thông dịch trực tuyến nhưng sau đó bạn cần sử dụng phiên bản sau, bởi vì trình thông dịch trực tuyến đệm hộp mã vào hình chữ nhật và áp dụng ?cho khoảng trắng.

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


1

Japt , 13 byte (không cạnh tranh)

£T±Xc)/°Y r d

Kiểm tra nó trực tuyến!

Làm thế nào nó hoạt động

£   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, các loại hạt; Tôi nghĩ rằng bộ lọc "không cạnh tranh" đã bị xóa khỏi bảng xếp hạng, vì vậy tôi đã không thấy điều này trước khi đăng bài này .
Xù xì


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

Thí dụ:

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

Giải pháp lớn nhất cho đến nay, nhưng dựa trên php, tôi nghĩ nó không thể ngắn hơn nhiều. 2 byte có thể được lưu bằng cách loại bỏ các dòng mới.


Hmm, điểm tốt. Tôi nghĩ rằng tôi có thể để chúng trong bài viết để dễ đọc hơn. Nhưng vâng, đây là mã golf. Tôi sẽ xóa chúng;)
cb0

1
Bạn luôn có thể bao gồm một phiên bản bổ sung có phần đệm để dễ đọc dọc theo bản ngắn của bạn. Tôi thường làm điều này khi mã của tôi quá dài để có thể hiển thị hoàn toàn trên hầu hết các màn hình.
Thuật sĩ lúa mì

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

Hầu hết mọi thứ đang diễn ra trong bit này

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

Phần còn lại là chuyển đổi mã lặp / ký tự

Chia ra:

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

Nếu chức năng không được phép:

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


Đoạn trích 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

Nó không đủ ngắn. Vì nó là con trăn quá dài dòng, bạn thậm chí có thể đọc những gì nó làm bằng cách tìm mã. Nhưng nó đang hoạt động.

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
"Vì nó là con trăn nên nó quá dài dòng" ... không so với Java. Và tôi không đồng ý. Bất kỳ ít dài dòng và nó sẽ không tuyệt vời như nó là. Sử dụng Pyth nếu bạn muốn ít dài dòng hơn.
mbomb007 24/07/2015

0

Matlab, 43

Sử dụng chức năng ẩn danh:

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

Ví dụ:

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

Điều này thật khó chịu một phần nhờ vào các chức năng String.fromCharCodevà dài của JavaScript charCodeAt. Đoạn mã ngăn xếp chứa mã không được mã hóa, nhận xét, có thể kiểm tra.

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

Yếu tố, 80 byte

[ cum-sum [ dup zero? 1 0 ? + / ] map-index [ .5 + floor >fixnum ] map >string ]
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.