Oblicz średnie znaki ciągu

24

Zadanie

Twoim zadaniem jest wytworzenie ciągu zawierającego przeciętne znaki ciągu. Pierwszy znak wyniku byłby średnim znakiem pierwszego znaku (który jest pierwszym znakiem), a drugi znak średnio dwóch pierwszych znaków i tak dalej.

Co to jest przeciętny charakter?

Ciągi to tablice bajtów. Średni znak ciągu można znaleźć, obliczając średnią wartości ASCII znaków w ciągu i biorąc odpowiedni znak ASCII.

Na przykład ciąg "Hello!"może być zapisany jako sekwencja bajtów 72 101 108 108 111 33. Średnia z wartości ascii wynosi 533/6 = 88,833 ... a gdy zostanie zaokrąglona do najbliższej liczby całkowitej, otrzymamy 89, co jest kodem ascii dla litery oznaczonej literą Y.

Zasady

  • Możesz założyć, że dane wejściowe zawierają tylko drukowalne znaki ASCII
  • Dane wejściowe można odczytać ze stdin lub jako argumenty wiersza poleceń lub jako argumenty funkcji
  • Wyjście musi być standardowe. Jeśli twój program działa, możesz również zwrócić ciąg, który w innym przypadku wydrukowałbyś.
  • Musi to być cały program lub funkcja, a nie fragment kodu
  • Standardowe luki zastosowanie
  • Liczby całkowite są zaokrąglane według funkcji floor(x+0.5)lub podobnej funkcji.

Jak wygrać?

To jest , więc najkrótsza odpowiedź (w bajtach) w zwycięstwach.

Przykłady

  • Hello!HW^adY
  • testtmop
  • 4243
  • StackExchangeSdccd_ccccddd
Hannes Karppila
źródło
Edytowane pytanie. Teraz powinno być jasne: musisz zaokrąglić połówki w górę.
Hannes Karppila
1
„Dane wejściowe mogą być odczytywane ze standardowego wejścia lub jako argumenty wiersza poleceń ”: lub jako argumenty funkcji (ponieważ zezwalasz na funkcje), prawda?
Luis Mendo,
Oczywiście edytowane ponownie.
Hannes Karppila
2
Przepraszam, że przeszkadzam jeszcze raz, ale czy funkcje rzeczywiście muszą wypisywać dane wyjściowe do STDOUT, czy mogą zwrócić żądany ciąg?
Dennis
Przepraszam, zapomniałem go wcześniej edytować. Teraz powinno być dobrze.
Hannes Karppila

Odpowiedzi:

11

Brainfuck 106 bajtów

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

To mój pierwszy udział w golfie kodowym, proszę, bądź delikatny! Działa, ale pieprzenie mózgu nie radzi sobie z liczbami zmiennoprzecinkowymi (nie wiem o tym), więc zaokrąglona wartość jest zawsze dolna (może naprawić mój algorytm później).

Ponadto algorytm uśrednia wartości 2 na 2, co oznacza, że ​​w niektórych miejscach może być niedokładny. I muszę naprawić błąd, który wypisuje również liczbę na końcu danych wyjściowych.

Czerwona panda
źródło
9

Pyth, 16 bajtów

smCs+.5csaYCdlYz

Całkiem proste. Używanie s+.5zamiast zaokrąglania, ponieważ z jakiegoś powodu round(0.5, 0)w Pythonie jest 0.

orlp
źródło
1
Python 3 zaokrągla połowę w stronę parzystej, co wprowadza mniejszą tendencję. Pytanie nie określa wprost, w jaki sposób należy zaokrąglać połówki, dlatego poprosiłem o wyjaśnienie w PO.
Dennis
Edytowane pytanie. 0.5zaokrąglone powinno być 1.
Hannes Karppila
7

Q, 15 12 bajtów

12 bajtów jako wyrażenie

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

lub 15 bajtów jako funkcja

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

wykorzystuje

  1. rzut „i” $ do konwersji ciągu (listy znaków) na listę liczb całkowitych
  2. funkcja avgs, która oblicza średnią bieżącą listy jako listę liczb zmiennoprzecinkowych
  3. rzut „c” $ do konwersji listy liczb zmiennoprzecinkowych na listę znaków i który automatycznie zaokrągla każdą liczbę zmiennoprzecinkową do najbliższej liczby całkowitej przed zrobieniem tego [tj. („c” 99,5 $) = („c” 100 $) i („c „99,4 USD) = („ c ”99 USD)]
scottstein37
źródło
Czy Q wymaga tutaj otoki funkcji, czy potrafisz uciec od zwykłego wyrażenia "c"$avgs"i"$? Nie sądzę, aby rozwiązanie mogło stać się o wiele prostsze. :)
JohnE
masz rację - nie potrzebujesz opakowania funkcji, ponieważ „c” $ avgs ”i„ $ „Hello!” działa dobrze
scottstein37
Myślę, że możesz zaoszczędzić 2 bajty, zmieniając "c"na `c i "i"na 'i.
kirbyfan64sos
nie sądzę, że to działa. Aby użyć reprezentacji typu symbolu do rzutowania, musiałbym użyć `char i` int zgodnie z code.kx.com/wiki/JB:QforMortals2 /... Zastanawiałem się nad użyciem 10h i 6h zamiast „c” i „i”, ale nie zaoszczędziłoby to żadnych bajtów - 10h ma taką samą długość jak „c”, a podstawienie 6h na „i” wymaga spacji końcowej, co czyni je również taką samą długością.
scottstein37
4

CJam, 19 bajtów

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

Wypróbuj online w interpretatorze CJam .

Dennis
źródło
4

Perl: 31 30 znaków

(Kod 29 znaków + opcja wiersza poleceń 1 znak).

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

Przykładowy przebieg:

bash-4.3$ perl -pe 's!.!chr.5+($s+=ord$&)/++$c!ge' <<< 'StackExchange'
Sdccd_ccccddd
człowiek w pracy
źródło
3

C # 189 135 134 106 bajtów

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

Można zobaczyć tutaj

Pierwszy raz golfista

Alex Carlsen
źródło
2

K, 36 bajtów

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

Stosowanie:

  `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

_cii _ickonwertować odpowiednio ascii na znaki i odwrotnie.{(+/x)%#x}jest klasycznym idiomem K do obliczania średniej. Całkiem proste.

Edycja: och, źle odczytałem specyfikację. `0: jest potrzebne do wydrukowania wyniku na standardowe wyjście. Oczekiwanie na wyjaśnienie na temat danych wejściowych. Pytanie Dennisa.

JohnE
źródło
Jeśli używasz K5, może zostać skrócony do 35 bajtów: {[s]`0:`c${_.5+(+/u)%#u:x#s}'1+!#s}.
kirbyfan64sos
Lub 30:`0:`c$_.5+{(+/x)%#x}'1_|(-1_)\
JohnE
`c$_.5+{(+\x)%+\~^x}`i$dla 24. Może być krótszy ( `c$`i${(+\x)%+\~^x}`i$), ale twoja REPL ( johnearnest.github.io/ok/index.html ) nie zaokrągla poprawnie podczas rzutowania z float na int. Będę wahał się nazwać ak rozwiązanie, ponieważ _cii _icnigdzie w specyfikacji K5 O ile mi wiadomo, natomiast 0:nie drukuje na stdout lecz odczytuje plik txt z dysku.
tmartin
@tmartin: correct- _cii _icsą całkowicie zastąpione w K5 formularzami podobnymi `c$. Oryginalne rozwiązanie, które opublikowałem, jest zgodne z Kona, która jest oparta na K2 / K3. Zasadniczo staram się nie publikować rozwiązań za pomocą OK, ponieważ semantyka wciąż się zmienia i jest częściowo niedokładna.
JohnE
1
Ach, rozumiem, ma to dla mnie sens. Uznałem, że to kolejne rozwiązanie K5. Oto rozwiązanie 28 char kona`0:_ci_0.5+{(+\x)%1.+!#x}_ic
tartart
2

Mathematica, 75 bajtów

FromCharacterCode@Floor[.5+Accumulate@#/Range@Length@#]&@ToCharacterCode@#&
jcai
źródło
2

Julia, 85 81 bajtów

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

Tworzy to nienazwaną funkcję, która akceptuje ciąg znaków i tworzy wektor punktów kodowych ASCII. Dla każdej sekwencyjnej grupy są pobierane środki, zaokrąglane do liczb całkowitych, konwertowane na znaki, łączone w łańcuch i drukowane do STDOUT.

Alex A.
źródło
2

Ruby, 46

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

ideone .

Z przeprosinami dla w0lf moja odpowiedź okazała się na tyle inna, że ​​wydawało się, że warto ją opublikować.

$<.bytesiteruje się na każdym bajcie w stdin, więc wypisujemy średnią kroczącą w każdej pętli. '% c' przekształca liczbę zmiennoprzecinkową w postać, zaokrąglając w dół i biorąc ASCII, więc wystarczy dodać 0,5, aby poprawnie zaokrąglić. $.to magiczna zmienna, która zaczyna się od zinicjowania na 0 - ma przechowywać liczbę linii, ale ponieważ tutaj chcemy liczby bajtów, zwiększamy ją ręcznie.

histocrat
źródło
2

Mathcad, 60 „bajtów”

wprowadź opis zdjęcia tutaj

Mathcad to aplikacja matematyczna oparta na arkuszach 2D składających się z „regionów”, z których każdy może być tekstem, wyrażeniem matematycznym, programem, fabułą lub komponentem skryptowym.

Instrukcja matematyczna lub programowa jest wybierana z paska narzędzi palety lub wprowadzana za pomocą skrótu klawiaturowego. Do celów gry w golfa przyjmuje się, że operacja („bajt”) to liczba operacji na klawiaturze niezbędnych do utworzenia nazwy lub wyrażenia (na przykład, aby ustawić zmienną a na 3, napisalibyśmy a: = 3. Operator definicji : = to pojedyncze naciśnięcie klawisza „:”, podobnie jak a i 3, co daje w sumie 3 „bajty”. Programowanie dla operatora wymaga wpisania ctl-shft- # (lub pojedynczego kliknięcia na pasku narzędzi programistycznych), więc znowu jest to równoważne z 1 bajt.

W Mathcad użytkownik wprowadza polecenia języka programowania za pomocą skrótów klawiaturowych (lub wybierając je z paska narzędzi programistycznych) zamiast pisać je w tekście. Na przykład wpisanie ctl-] tworzy operator pętli while, który ma dwa „symbole zastępcze” odpowiednio do wprowadzenia warunku i jedną linię treści. Wpisanie = na końcu wyrażeń Mathcada powoduje, że Mathcad ocenia to wyrażenie.

(Policz bajty) Patrząc na to z perspektywy wprowadzania przez użytkownika i zrównując jedną operację wprowadzania Mathcada (zwykle klawiatura, kliknij pasek narzędzi, jeśli nie ma skrótu kbd) do znaku i interpretuj to jako bajt. csort = 5 bajtów, ponieważ jest wpisany char-by-char, podobnie jak inne nazwy zmiennych / funkcji. Operator for to specjalna konstrukcja, która zajmuje 11 znaków (w tym 3 puste „symbole zastępcze” i 3 spacje), ale jest wprowadzana przez ctl-shft- #, stąd = 1 bajt (podobny do tokenów w niektórych językach). Wpisanie „(cytat) tworzy zrównoważone nawiasy (zwykle), więc liczy się jako 1 bajt. Indeksowanie v = 3 bajty (wpisz v [k).

Stuart Bruff
źródło
2

Python 3, 66 bajtów

Jeśli użyję round()zamiast int(.5+itp., Zapisuje jedną postać, ale technicznie nie jest zgodna z wyzwaniem: Pythonaround() rundy zmniejszane o połowę do najbliższej parzystej liczby całkowitej, a nie w górę. Działa jednak poprawnie na wszystkich przykładowych danych wejściowych.

Czuję się trochę brudny, że nie kończę produkcji nową linią, ale wyzwanie nie wymaga tego ...

n=t=0
for c in input():n+=1;t+=ord(c);print(end=chr(int(.5+t/n)))
Tim Pederick
źródło
1
Jeśli zwiększysz n przed drukowaniem, możesz uniknąć dostosowania go o 1.
xnor.
1
@xnor: Twarz, dłoń. Dłoń, twarz. Dzięki za zwrócenie na to uwagi.
Tim Pederick,
zrobić, print(end=chr(int(...))aby zapisać niektóre bajty
FlipTack,
@ Flp.Tkc: Dzięki! Odpowiedź zaktualizowana.
Tim Pederick,
2

JavaScript (ES6), 75 bajtów

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>

Nie mogę uwierzyć, że nie ma jeszcze odpowiedzi JS tą techniką ...

ETHprodukcje
źródło
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

Z każdym nowym znakiem aktualizuje sumę znaków si liczbę znaków ido obliczenia i dołączenia przeciętnego znaku.

xnor
źródło
Prawie dokładnie takie samo podejście jak moje, tylko Python 2 zamiast 3 i opublikowany kilka godzin wcześniej: +1. (Poza tym odkryłem, że zapisałem kilka bajtów, wypisując każdy znak w takiej postaci, w jakiej się pojawił, zamiast przechowywać go w jednym finale print. Czy to zadziała z Pythonem 2? Zapomniałem właśnie, jak tłumić znaki nowej linii w printwyciągu ... przecinek czyni to spacją zamiast tego, prawda?)
Tim Pederick
Python 2 może zrobić, print _,aby zostawić spację zamiast znaku nowej linii, ale nie ma dobrego sposobu na pominięcie spacji. Dobra rozmowa z endargumentem Pythona 3 , zapomniałem o tym.
xnor
@TimPederick Może kontrola backspace może być uzasadniona dla terminala, który z niej korzysta, jako włamanie do usunięcia miejsca:print'\b'+_,
xnor
1

Ruby 59 61

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

Test: http://ideone.com/dT7orT

Cristian Lupascu
źródło
1
c+=1;(s/c)(s/c+=1) ideone.com/H2tB9W
manatwork
@manatwork Dobrze zauważony! Dzięki! Zastosowałem zmianę.
Cristian Lupascu
1

Java, 100

Podobnie jak wiele innych odpowiedzi tutaj, sumuję i uśredniam w pętli. Właśnie tutaj reprezentuję Javę :)

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ój oryginalny kod to 97, ale zwraca tylko zmodyfikowany, char[]zamiast go wydrukować:

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

Teraz, to tylko na tyle długo, aby pojawić się paski przewijania dla mnie, więc oto wersja z przerwami linii, tylko dlatego, że:

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];
}
Geobity
źródło
Ciekawy. Czy możesz nam też pokazać próbkę połączenia? Moja Java jest bardzo zardzewiała.
manatwork
Jak w jak to nazwać? Zakładając, że testjest tablicą znaków, po prostu użyj f(test);. Jeśli jest to obiekt String, wówczas możesz użyć f(test.toCharArray());. Literały łańcuchowe też są w porządku:f("Hello!".toCharArray());
Geobits
O. Pewnie. toCharArray()Głupi, próbowałem to pogodzić z jakimś castingiem. Dziękuję Ci.
manatwork
Zbyt łatwo byłoby po prostu rzucić. Bogowie Jawy byliby wściekli: P
Geobits
1

C, 62 bajty

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

(link ideone)

Wyniki nieznacznie różnią się od przykładów PO, ale tylko dlatego, że ten kod zaokrągla 0,5 w dół zamiast w górę. Nigdy więcej!

piskliwy kostuch
źródło
1

R 135 127 bajtów

Trwało to bardzo szybko i naprawdę źle pomyliłem się za pierwszym razem :) Muszę poprawnie przeczytać pytania.

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

Testowe uruchomienie

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
źródło
ktoś opublikował wyzwanie dupe w piaskownicy, więc znalazłem to ... To był długi czas temu, ale utf8ToIntpomoże! Mam 68 bajtów tego golfa, jeśli chcesz go zaktualizować.
Giuseppe,
@Giuseppe Śmiało i opublikuj go sam, jeśli chcesz. Podejrzewam, że znacznie różni się od tego, co tutaj zrobiłem.
MickyT,
1

Perl 5, 41 bajtów

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

Uruchom jako

$ perl -E 'say map{$s+=ord;chr($s/++$c+.5)}pop=~/./g' StackExchange
Sdccd_ccccddd
Hobbs
źródło
1

TSQL, 118 bajtów

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

Znaki zwracane w pionie

S
d
c
c
d
_
c
c
c
c
d
d
d
t-clausen.dk
źródło
1

> <> , 30 bajtów

i:0(?v
v &l~<
\+l2(?
\&,12,+o;
  • Pierwszy wiersz odczytuje ze standardowego wejścia i umieszcza znaki na stosie
  • Drugi usunie znak EOL, weź rozmiar stosu i umieści go w & rejestrze
  • Trzecia linia doda liczby do stosu, gdy będą ich dwa lub więcej
  • Czwarty wiersz podzieli wynikową liczbę przez wartość rejestru, a następnie doda 1/2, wyśle ​​wartość jako znak i zatrzyma się. W obliczu wartości zmiennoprzecinkowej podczas wyświetlania znaku,> <> wyrówna go, dlatego dodaliśmy 1/2

Możesz go wypróbować na tłumaczu online, ale musisz użyć następującej wersji, ponieważ tłumacz online wypełnia pole kodu prostokątem i stosuje się ?do spacji.

i:0(?v
v &l~<
\+l2(   ?
\&,12,+o;
Aaron
źródło
1

05AB1E , 15 bajtów [Nie konkuruje?]

.pvyDSÇOsg/îç}J

Wypróbuj online!

Urna Magicznej Ośmiornicy
źródło
-2 bajty przez usunięcie Di }i zastąpienie sprzez y.
Kevin Cruijssen
1
@KevinCruijssen, ile lat ma ta odpowiedź, jest o wiele więcej: P. .pjest teraz o 1 zimę
Magic Octopus Urn
Ah lol, zapomniałem o ηxD
Kevin Cruijssen
1

Japt , 13 bajtów (niekonkurujące)

£T±Xc)/°Y r d

Przetestuj online!

Jak to działa

£   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
ETHprodukcje
źródło
Ach, orzechy; Myślałem, że filtr „niekonkurujący” został usunięty z tablicy wyników, więc nie widziałem tego przed opublikowaniem tego .
Shaggy,
1

PHP , 176 bajtów

<?=(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]));

Przykład:

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

Największe jak dotąd rozwiązanie, ale myślę, że oparte na php nie może być znacznie krótsze. 2 bajty można zapisać, usuwając znaki nowego wiersza.

cb0
źródło
Hmm, dobra racja. Pomyślałem, że mogę zostawić je w poście dla lepszej czytelności. Ale tak, to jest golf golfowy.
Usunę
1
Zawsze możesz dołączyć dodatkową wersję z dopełnieniem dla czytelności obok swojej krótkiej. Często robię to, gdy mój kod jest zbyt długi, aby był całkowicie widoczny na większości monitorów.
Wheat Wizard
0

JavaScript ES7, 122 bajty

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

Przeważnie wszystko dzieje się w tym kawałku

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

Reszta to zapętlanie / konwersja kodu znaków

Rozdzielać się:

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

Jeśli funkcje nie są dozwolone:

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 bajty


Urywek 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
źródło
0

Python 2, 106 bajtów

To nie jest wystarczająco krótkie. Ponieważ jest to python, jest zbyt szczegółowe, możesz nawet przeczytać, co robi, szukając kodu. Ale działa.

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
źródło
1
„Ponieważ jest to python, jest zbyt szczegółowe” ... nie w porównaniu z Javą. I nie zgadzam się. Mniej gadatliwy i nie byłby tak świetny, jak jest. Użyj Pyth, jeśli chcesz mniej gadatliwy.
mbomb007
0

Matlab, 43

Korzystanie z anonimowej funkcji:

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

Przykłady:

>> 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
źródło
0

JavaScript ES6, 111 bajtów

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

Jest to denerwująco długie, częściowo dzięki długiemu JavaScriptowi String.fromCharCodei jego charCodeAtfunkcjom. Fragment kodu zawiera nieoznakowany, skomentowany, testowalny kod.

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
źródło
0

Współczynnik, 80 bajtów

[ cum-sum [ dup zero? 1 0 ? + / ] map-index [ .5 + floor >fixnum ] map >string ]
kot
źródło