문자열을 그 자체로 대치하십시오!


24

문자열을 자체로 대체

목표는 원래 문자열의 각 문자를 첫 번째 문자로 시작하여 줄 바꿈하여 원래 문자열의 각 문자를 대체하여 문자열을 자체로 대체하는 것입니다. 의미하는 바를 보여주는 몇 가지 예는 다음과 같습니다.

첫 번째 예 :

Input: program
Output: apgopra

How:
Program -> mrogram (replace p by m in program)
-> mpogpam (replace r by p in mrogram)
-> mprgpam (replace o by r in mpogpam)
-> mpropam (replace g by o in mprgpam)
-> mpgopam (replace r by g in mpropam)
-> mpgoprm (replace a by r in mpgopam)
-> apgopra (replace m by a in mpgoprm)

두 번째 예 :

Input: robot
Output: orbro

How:
Robot -> tobot (replace r by t in robot)
-> trbrt (replace o by r in tobot)
-> trort (replace b by o in trbrt)
-> trbrt (replace o by b in trort)
-> orbro (replace t by o in trbrt)

세 번째 예 :

Input: x
Output: x

How:
x -> x (replace x by x in x)

네 번째 예 :

Input: xy
Output: xx

How:
xy -> yy (replace x by y in xy)
-> xx (replace y by x in yy)

각주 :

  • 문자열 x은 소문자 영숫자와 공백 만 포함합니다
  • 이것은 이므로 바이트 단위의 가장 짧은 코드가 승리합니다!

편집 내용이 원래 아이디어와 일치합니까?
LegionMammal978

나는 사람들이 모든 라운드마다 기본적으로 문자를 교체하여 암호화 된 문자열을 암호화한다는 것을 이해하기를 바랍니다. 예제를 통해이를 명확하게 알 수있을 것입니다.
Thomas W

답변:


20

CJam, 11 바이트

q__1m>.{er}

여기에서 테스트하십시오.

설명

q__    e# Read input and make two copies.
1m>    e# Rotate the second copy one character to the right.
.{er}  e# For each pair of characters from the second and third string,
       e# replace occurrences of the first with the second.

9

티 스크립트 , 17 바이트 19 21 24

TeaScript는 골프를위한 JavaScript입니다

xd(#lg(i,xC(1#a))

좋고 짧은

온라인으로 시도하십시오 (입력에서 공백을 확인하십시오)

언 골프 및 설명

x.reduce     // Reduce over input
  (#         // Anonymous function expands to ((l,i,a)=>
    l.g(        // global replace...
     i          // replace var i with...
     x.cycle(1) // Cycle x 1
     [a]        // At position a
    )
  )

7

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

s=>[...s].reduce((p,c,i)=>p.replace(RegExp(c,'g'),s.slice(i-1)[0]),s)


3
F=바이트 수에서 를 건너 뛸 수 있습니다 .
Ypnypn

@Ypnypn 고마워이 물건을 지정하지 않으면 어떻게해야할지 몰라
George Reith

s.slice(i-1)[0]같지 s.slice(i-1,i)않습니까?
edc65

1
@ edc65 안 언제i=0
조지 Reith

3

루비, 50 48 바이트

->s{t=s.dup;t.size.times{|i|t.tr!s[i],s[i-1]};t}

테스트:

f=->s{t=s.dup;t.size.times{|i|t.tr!s[i],s[i-1]};t}
f["program"]
=> "apgopra"

3

Mathematica, 89 75 74 57 바이트

""<>Fold[#/.#2&,c=Characters@#,Thread[c->RotateRight@c]]&

""<>Fold[#/.#2&,c=Characters@#,Thread[c->RotateRight@c]]&
alephalpha

@alephalpha 고마워, 나는 그것을 시도 Transpose하고 실패했다.
LegionMammal978


3

k2-17 자

1 개의 인수를 취하는 함수.

{_ssr/[x;x;-1!x]}

K2라는 내장이 _ssr에 대한 S 트링 S의 earch 및 R의 eplace을. 에서 _ssr[x;y;z]찾아서 바꿉니다 . 따라서 우리는 교체하고자하는 각 교체마다이 기능을 접습니다. 폴딩에 익숙하지 않은 사용자에게는 (기능 프로그래밍과 마찬가지로) 본질적으로 가됩니다 . 문자열은 해당 문자의 목록이므로 간단히 입력을 한 단계 뒤로 회전하고 대체물을 가져 와서 바로 연결할 수 있습니다.yxz/_ssr/[x; (y1; y2; y3); (z1; z2; z3)]_ssr[_ssr[_ssr[x; y1; z1]; y2; z2]; y3; z3]

  {_ssr/[x;x;-1!x]} "program"
"apgopra"
  {_ssr/[x;x;-1!x]} "robot"
"orbro"
  {_ssr/[x;x;-1!x]} (,"x")   / one-letter strings are ,"x" and parens are required
,"x"
  {_ssr/[x;x;-1!x]} "xy"
"xx"

2

하스켈, 76 바이트

[]#_=[];(x:y)#g@(a,b)|x==a=b:y#g|2>1=x:y#g;h x=foldl(#)x$zip x$last x:init x

너무 나쁘다. 하스켈에는 내장 대체 기능조차 없다.


2

PHP, 76 바이트

function($s){$f=str_split;echo str_replace($f($s),$f(substr($s,-1).$s),$s);}

ungolfed 버전은 다음과 같습니다.

function selfSubstitute($originalString)
{
    $shiftedString = substr($originalString, -1) . $originalString;

    $splitOriginalString = str_split($originalString);
    $splitShiftedString = str_split($shiftedString);

    echo str_replace($splitOriginalString, $splitShiftedString, $originalString);
}

2

파이썬, 67 64 62 57 바이트

간단한 해결책은 이것을 단축하기 위해 무언가를 조사 할 것입니다. 5 바이트를 절약 한 @RandyC에게 감사합니다.

c=input()
for x in zip(c,c[-1]+c):c=c.replace(*x)
print c

입력은 따옴표로 묶어야합니다.


[:-1]zip이 잘리는 iterable로 잘라서 몇 바이트를 절약 할 수 있습니다 .
랜디

@ 랜디 와우, 좋은 전화! 감사.
Kade

1

하스켈, 58 바이트

r(x,y)c|x==c=y|0<1=c;f s=foldl(flip$map.r)s.zip s$last s:s

Christian의 솔루션과 매우 유사하지만 목록의 길이가 다른 경우 불필요한 요소 mapzip무시 한다는 사실과 사용 및 사실 . 교체 목록 (형식 (from,to))을 접어 r각 문자에 손으로 쓴 교체 기능 을 매핑하여 문자열을 업데이트합니다 .

이 표현 flip$map.r은 LambdaBot의 "Pointless"플러그인을 사용하여 파생되었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.