문자열의 평균 문자 계산


24

태스크

당신의 작업은 평균 문자열 문자를 포함하는 문자열을 생성하는 것입니다. 결과의 첫 번째 문자는 첫 번째 문자의 첫 번째 문자 (첫 번째 문자)와 두 번째 첫 번째 문자의 두 번째 문자 평균 등입니다.

평균 문자 란 무엇입니까?

문자열은 바이트 배열입니다. 문자열의 평균 문자 는 문자열에서 문자 의 ASCII 값 평균을 계산하고 해당 ASCII 문자를 가져와 찾을 수 있습니다.

예를 들어 문자열 "Hello!"은 바이트 시퀀스로 쓸 수 있습니다 72 101 108 108 111 33. ascii 값의 평균은 533/6 = 88.833 ...이며 가장 가까운 정수로 반올림되면 captial letter의 ASCII 코드 인 89를 얻습니다 Y.

규칙

  • 입력에 인쇄 가능한 ASCII 문자 만 포함되어 있다고 가정 할 수 있습니다.
  • 입력은 stdin 또는 명령 행 인수 또는 함수 인수로 읽을 수 있습니다.
  • 출력은 stdout이어야합니다. 프로그램이 작동하면 인쇄 할 문자열을 반환 할 수도 있습니다.
  • 스 니펫이 아닌 전체 프로그램 또는 기능이어야합니다.
  • 표준 허점 적용
  • 정수는 함수 floor(x+0.5)또는 유사한 함수 로 반올림됩니다 .

어떻게 이길 수 있습니까?

이것은 이므로 가장 짧은 대답 (바이트)이 승리합니다.

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

질문을 수정했습니다. 이제 분명해야합니다 : 반쪽을 반올림해야합니다.
Hannes Karppila 님이

1
" 입력을 stdin 또는 명령 행 인수로 읽을 수 있습니다 "또는 함수 인수 (함수를 허용하기 때문에)?
Luis Mendo

물론 다시 편집했습니다.
Hannes Karppila

2
다시 한 번 귀찮게해서 죄송하지만 함수가 실제로 출력을 STDOUT으로 인쇄해야합니까 아니면 원하는 문자열을 반환 할 수 있습니까?
Dennis

죄송합니다. 전에 편집하지 않았습니다. 이제 괜찮을거야.
Hannes Karppila

답변:


11

Brainfuck 106 바이트

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

이것이 코드 골프에 대한 나의 첫 참여입니다. 그것은 작동하지만 brainfuck은 float을 처리 할 수 ​​없습니다 (알지 못합니다) 둥근 값은 항상 맨 아래 값입니다 (나중에 알고리즘을 수정할 수 있습니다).

또한 알고리즘은 2에서 2까지의 값을 평균하므로 일부 지점에서는 정확하지 않을 수 있습니다. 그리고 출력 끝에 숫자를 인쇄하는 버그를 수정해야합니다.


9

Pyth, 16 바이트

smCs+.5csaYCdlYz

꽤 직설적 인. s+.5반올림 대신에 사용 하는 이유 round(0.5, 0)는 어떤 이유로 파이썬에서는 0입니다.


1
파이썬 3은 반으로 반올림하여 편향이 적습니다. 이 질문은 반쪽 반올림 방법을 명시 적으로 지정하지 않았으므로 OP에서 설명을 요청했습니다.
Dennis

질문을 수정했습니다. 0.5반올림해야합니다 1.
Hannes Karppila

7

Q, 15 12 바이트

표현식으로 12 바이트

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

또는 함수로서 15 바이트

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

이용하다

  1. 문자열 (문자 목록)을 정수 목록으로 변환하기위한 "i"$ 캐스트
  2. avgs 함수는 목록의 실행 평균을 부동 목록으로 계산합니다.
  3. "c"$ 캐스트를 사용하여 부동 목록을 문자 목록으로 변환하고 각 부동 소수점을 가장 가까운 정수로 자동 반올림합니다 (예 : ( "c"$ 99.5) = ( "c"$ 100) 및 ( "c "$ 99.4) = ("c "$ 99)]

Q는 여기에 함수 래퍼를 필요로합니까 "c"$avgs"i"$? 솔루션이 그보다 훨씬 간단 해 질 수 있다고 생각하지 않습니다. :)
JohnE

"c"$ avgs "i"$ "Hello!"와 같이 함수 래퍼가 필요하지 않습니다. 잘 작동
scottstein37

"c"`c와 "i"`i 로 바꾸면 2 바이트를 절약 할 수 있다고 생각합니다 .
kirbyfan64sos

불행히도, 나는 그것이 효과가 있다고 생각하지 않습니다. 내가 따라`문자와`INT를 사용해야 할 것 캐스팅에 대한 심볼 유형 표현을 사용하려면 code.kx.com/wiki/JB:QforMortals2/... 고려 I "C"를 대신 10H 및 6 시간을 사용하여 "I"하지만, 바이트를 저장하지 않습니다. 10h는 "c"와 길이가 같고 "i"를 6h로 바꾸려면 후행 공백이 필요하므로 같은 길이가됩니다.
scottstein37


4

펄 : 31 30 자

(29 자 코드 + 1 자 명령 행 옵션)

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

샘플 실행 :

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


2

K, 36 바이트

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

용법:

  `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그리고 _ic각각 문자와 그 반대에 변환 아스키. {(+/x)%#x}평균을 계산하기위한 고전적인 K 관용구입니다. 전반적으로 매우 간단합니다.

편집 : 오, 사양을 잘못 읽습니다. `0 : 결과를 stdout에 출력하기 위해 필요하다. 입력 re에서 설명을 기다리는 중입니다. 데니스의 질문.


K5를 사용하면 35 바이트로 단축 할 수 있습니다 {[s]`0:`c${_.5+(+/u)%#u:x#s}'1+!#s}.
kirbyfan64sos

또는 30 :`0:`c$_.5+{(+/x)%#x}'1_|(-1_)\
JohnE

`c$_.5+{(+\x)%+\~^x}`i$float (int)로 캐스팅 할 때 `c$`i${(+\x)%+\~^x}`i$REPL ( johnearnest.github.io/ok/index.html )이 더 짧아 질 수 있습니다 ( johnearnest.github.io/ok/index.html ). 나는 이후이 AK 솔루션을 전화를 주저 것 _ci그리고 _ic내가 말할 수있는 지금까지와 K5의 사양에 아무데도, 동안 0:표준 출력에 인쇄되지 않는 대신 디스크에서 txt 파일을 읽습니다.
tmartin

@tmartin : 다시 보정 _ci_ic완전히 같은 형태의 K5에 대체된다 `c$. 내가 게시 한 원래 솔루션은 K2 / K3을 기반으로하는 Kona와 호환됩니다. 의미 체계가 여전히 바뀌고 있고 부분적으로 부정확하기 때문에 일반적으로 oK로 솔루션을 게시하지 않습니다.
JohnE

1
아, 알겠습니다. 나는 이것이 또 다른 K5 솔루션이라고 생각했다. 여기에 28 개의 문자 코나 솔루션이 있습니다`0:_ci_0.5+{(+\x)%1.+!#x}_ic
tmartin

2

Mathematica, 75 바이트

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

2

줄리아, 85 81 바이트

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

문자열을 받아들이고 ASCII 코드 포인트로 구성된 벡터를 생성하는 명명되지 않은 함수를 만듭니다. 각 순차 그룹에 대해 의미가 취해지고, 정수로 반올림되고, 문자로 변환되고, 문자열로 결합되어 STDOUT에 인쇄됩니다.


2

루비, 46

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

이데온 .

w0lf에 사과하면서 내 답변은 게시 할 가치가있는 것처럼 달라졌습니다.

$<.bytesstdin에서 각 바이트를 반복하므로 각 루프에서 롤링 평균을 인쇄합니다. '% c'는 반올림하고 ASCII를 가져 와서 부동 소수점을 문자로 변환하므로 0.5를 더하면 반올림됩니다. $.0으로 초기화되는 마법 변수입니다. 줄 수를 저장해야하지만 여기서는 바이트 수를 원하기 때문에 수동으로 증가시킵니다.


2

Mathcad, 60 "바이트"

여기에 이미지 설명을 입력하십시오

Mathcad는 "영역"으로 구성된 2D 워크 시트를 기반으로하는 수학 응용 프로그램으로, 각각 텍스트, 수학 표현, 프로그램, 플롯 또는 스크립팅 된 구성 요소 일 수 있습니다.

수학 또는 프로그래밍 명령어는 팔레트 도구 모음에서 선택하거나 키보드 단축키를 사용하여 입력합니다. 골프 목적으로, 작업 ( "바이트")은 이름 또는 표현식을 작성하는 데 필요한 키보드 작업의 수로 간주됩니다 (예 : 변수 a를 3으로 설정하기 위해 a : = 3을 작성합니다). = 하나의 키는 "". 등의 3가 (3)의 총주는 "바이트"프로그래밍 을위한 연산자 그래서 다시 타이핑 CTL-shft- # (또는 프로그래밍 도구에 한 번의 클릭)이 필요에 상당 1 바이트

Mathcad에서 사용자는 텍스트로 작성하지 않고 키보드 단축키를 사용하여 프로그래밍 언어 명령을 입력하거나 프로그래밍 도구 모음에서 선택합니다. 예를 들어, ctl-]을 입력하면 조건을 입력하기위한 두 개의 "자리 표시 자"와 본문의 한 줄이있는 while 루프 연산자가 만들어집니다. Mathcad 표현식 끝에 =를 입력하면 Mathcad가 표현식을 평가합니다.

(바이트 수) 사용자 입력 관점에서보고 하나의 Mathcad 입력 작업 (일반적으로 kbd 바로 가기가없는 경우 도구 모음에서 마우스 클릭)을 하나의 문자와 동일시하고이를 바이트로 해석하면됩니다. csort = 다른 변수 / 함수 이름과 마찬가지로 char-by-char로 입력되므로 5 바이트입니다. for 연산자는 11 개의 문자 (3 개의 공백 "자리 표시 자"및 3 개의 공백 포함)를 차지하지만 ctl-shft- #로 입력되므로 1 바이트 (일부 언어의 토큰과 유사)로 입력되는 특수 구문입니다. '(따옴표)를 입력하면 균형 괄호 (일반적으로)가 만들어 지므로 1 바이트로 계산됩니다. 인덱싱 v = 3 바이트 (유형 v [k).


2

파이썬 3, 66 바이트

round()대신에 사용 int(.5+하면 하나의 문자를 저장하지만 기술적으로 도전 과제를 준수하지 않습니다. 파이썬의 round()반은 위쪽이 아닌 가장 가까운 짝수로 반으로 반올림합니다. 그러나 모든 샘플 입력에서 올바르게 작동합니다.

나는 또한 줄 바꿈으로 출력을 끝내지 않아 약간 더러워 지지만 도전은 그것을 요구 하지 않습니다 ...

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

1
인쇄하기 전에 n을
늘리면

1
@ xnor : 얼굴, 손바닥. 손바닥, 얼굴. 지적 해 주셔서 감사합니다.
Tim Pederick

않는 print(end=chr(int(...))일부 바이트를 저장
FlipTack

@ Flp.Tkc : 감사합니다! 답변이 업데이트되었습니다.
Tim Pederick

2

자바 스크립트 (ES6), 75 바이트

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>

이 기술로 아직 JS 답변이 없다고 믿을 수 없습니다 ...


1

파이썬 2, 71

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

각각의 새 문자로 문자 합 s과 문자 수를 업데이트 i하여 평균 문자를 계산하고 추가합니다.


내 것과 거의 똑같은 접근법, 3 대신 Python 2 만 사용하고 몇 시간 일찍 게시했습니다 : +1. (또한, 나는 하나의 최종 문자를 저장하는 대신 각 문자를 인쇄하는 데 몇 바이트를 절약한다는 것을 알았 print습니다 .Python 2에서 작동합니까? 지금은 print문장 에서 줄 바꿈을 억제하는 방법을 잊어 버렸습니다 ... 쉼표는 공백으로 만듭니다. 대신에, 맞습니까?)
Tim Pederick

파이썬 2는 print _,줄 바꿈이 아닌 공백을 남기기 위해 할 수 있지만 공백을 생략하는 좋은 방법은 없습니다. 파이썬 3의 end주장을 잘 들어 보면 잊어 버렸습니다.
xnor

@TimPederick 공간을 삭제하기위한 핵으로 백 스페이스 제어를 사용하는 터미널에 대해 백 스페이스 제어를 정당화 할 수 있습니다.print'\b'+_,
xnor


1

자바, 100

다른 많은 답변과 마찬가지로 루프에서 합산하고 평균을 내고 있습니다. 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];}

내 원래 코드는 97이지만 char[]인쇄하지 않고 수정 된 것만 반환 합니다.

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

자, 그건 단지 , 그래서 여기에 단지 때문에 일부 줄 바꿈 버전의 나를 위해 표시 스크롤바를 위해 충분히 :

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

흥미 롭군 통화 샘플도 보여줄 수 있습니까? 내 자바는 매우 녹슨입니다.
manatwork

그것을 부르는 방법 에서처럼? test문자 배열 이라고 가정하면을 사용하십시오 f(test);. String 객체 인 경우을 사용 f(test.toCharArray());합니다. 문자열 리터럴도 이와 같습니다.f("Hello!".toCharArray());
Geobits

오. 확실한. toCharArray()나 바보, 나는 약간의 캐스팅으로 그것을 위반하려고했습니다. 고맙습니다.
manatwork

그냥 캐스팅하기가 너무 쉽습니다. 자바 신들은 분노 할 것이다 : P
Geobits

1

C, 62 바이트

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

(아이디어 링크)

결과는 OP의 예제와 약간 다르지만이 코드는 위가 아닌 0.5를 반올림하기 때문입니다. 더 이상은 아닙니다!


1

R, 135 127 바이트

시간이 오래 걸리고 처음에는 틀 렸습니다.) 질문을 제대로 읽어야합니다.

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

시운전

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

누군가가 샌드 박스에 듀프 도전을 게시 했으므로 이것을 발견했습니다 ... 이것은 오래 전 일 이었지만 utf8ToInt도움이 될 것입니다! 업데이트하려면 68 바이트 골프가 있습니다.
주세페

@Giuseppe 원하는 경우 직접 게시하십시오. 나는 그것이 내가 여기서 한 것과 크게 다르다고 생각합니다.
MickyT

1

펄 5, 41 바이트

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

로 실행

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

1

TSQL, 118 바이트

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

문자를 세로로 반환

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

1

> <> , 30 바이트

i:0(?v
v &l~<
\+l2(?
\&,12,+o;
  • 첫 번째 줄은 stdin에서 읽고 문자를 스택에 넣습니다.
  • 두 번째는 EOL 문자를 제거하고 스택 크기를 가져 와서 & 레지스터에
  • 세 번째 줄은 스택에 숫자를 추가하는 동안 두 개 이상이 있습니다
  • 네 번째 줄은 결과 숫자를 레지스터 값으로 나눈 다음 1/2를 더한 다음 값을 문자로 출력하고 중지합니다. 문자를 표시 할 때 부동 소수점 값에 직면하면> <>는 그것을 바닥에 놓을 것이므로 1/2을 추가했습니다.

온라인 인터프리터 에서 시도 할 수 있지만 온라인 인터프리터는 코드 상자를 사각형 ?으로 채우고 공백에 적용되므로 다음 버전을 사용해야합니다 .

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


1

Japt , 13 바이트 (비경쟁)

£T±Xc)/°Y r d

온라인으로 테스트하십시오!

작동 원리

£   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

아, 견과류; 내가 게시하기 전에이 보지 않았다 있도록 "비 경쟁"필터는, 리더 보드에서 제거 된 생각 .
얽히고 설킨


1

PHP , 176 바이트

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

예:

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

지금까지 가장 큰 솔루션이지만 PHP를 기반으로하면 훨씬 짧아 질 것이라고 생각합니다. 줄 바꾸기를 제거하여 2 바이트를 절약 할 수 있습니다.


흠, 좋은 지적이다. 가독성을 높이기 위해 게시물에 그대로 둘 수도 있다고 생각했습니다. 그러나 이것은 코드 골프입니다. 나는 그들을 제거합니다;)
cb0

1
짧은 버전과 함께 가독성을 위해 패딩이있는 추가 버전을 항상 포함 할 수 있습니다. 코드가 너무 길어서 대부분의 모니터에서 완전히 보이지 않을 때 종종이 작업을 수행합니다.
밀 마법사

0

자바 스크립트 ES7, 122 바이트

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

대부분이 모든 일이이 비트에서 일어나고 있습니다

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

나머지는 루핑 / 문자 코드 변환입니다

분할 :

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

기능이 허용되지 않는 경우 :

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 바이트


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

파이썬 2, 106 바이트

짧지 않습니다. 파이썬이기 때문에 너무 장황하기 때문에 코드를 보면서 그 기능을 읽을 수도 있습니다. 그러나 작동하고 있습니다.

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
"파이썬이기 때문에 너무 장황하다"... 자바와 비교할 수 없다. 그리고 나는 동의하지 않는다. 덜 장황하고 그것은 크지 않을 것입니다. 덜 자세한 정보를 원하면 Pyth를 사용하십시오.
mbomb007

0

MATLAB, 43

익명 함수 사용하기 :

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

예 :

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

자바 스크립트 ES6, 111 바이트

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

이 성가 시게 자바 스크립트의 길이에 부분적으로 긴 덕분 String.fromCharCodecharCodeAt기능을합니다. 스택 스 니펫에는 골프화되지 않은 주석 처리 된 테스트 가능한 코드가 포함되어 있습니다.

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

팩터, 80 바이트

[ cum-sum [ dup zero? 1 0 ? + / ] map-index [ .5 + floor >fixnum ] map >string ]
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.