줄을 뒤집어 라!


11

당신의 작업 : ASCII 문자 만 포함하는 문자열이 주어지면 문자열을 역으로 출력 / 반환하는 프로그램 / 함수를 작성하십시오.

예:

1) 입력

Hello, World!

2) 입력시 고유 한 숫자를 입력하십시오. ( |가독성을 위해 파이프 ( )로 구분 된 입력 문자열 )

H|e|l|l|o|,| |W|o|r|l|d|!
1 2 3   4 5 6 7   8   9 10

3) 중복 문자의 경우 해당 문자의 첫 번째 발생을 찾은 다음 첫 번째와 동일한 번호의 중복 문자에 번호를 매기십시오.

H|e|l|l|o|,| |W|o|r|l|d|!
1 2 3 3 4 5 6 7 4 8 3 9 10

4) 문자열을 바꾸고 숫자는 바꾸지 마십시오.

!|d|l|r|o|W| |,|o|l|l|e|H
1 2 3 3 4 5 6 7 4 8 3 9 10

5) 위의 반복되는 숫자를 삭제하십시오. (별표로 표시된 삭제 된 문자)

!|d|l|*|o|W| |,|*|l|*|e|H
1 2 3 3 4 5 6 7 4 8 3 9 10

6) 삭제 된 문자를 삭제 된 문자가 처음 나타나는 숫자 위에 나타나는 문자로 바꿉니다.

!|d|l|l|o|W| |,|o|l|l|e|H
1 2 3 3 4 5 6 7 4 8 3 9 10

7) 출력

!dlloW ,olleH

테스트 사례 :

Input -> Output
"Hello, World!" -> "!dlloW ,olleH"
"18464399" -> "99343488"
"Code Golf" -> "floG eloC"
"abcdefgABCDEFG" -> "GFEDCBAgfedcba"
"Mmm, marshmallows" -> "swwllwmhsrwm  mms"
"15147" -> "74751"

삭제 된 게시물을 볼 수있는 사람들을 위해 샌드 박스가 여기 있었습니다.
동지 SparklePony

문자열에 ASCII 문자 만 포함되어 있습니까?
Leaky Nun

@LeakyNun 예, 편집하겠습니다.
동지 SparklePony

답변:


19

Pyth , 1 바이트

X

모든 테스트 사례를 확인하십시오.

Pyth에는 멋진 내장 기능이 있습니다 :-)


Pyth ,  8  7 바이트

sm@_QxQ

모든 테스트 사례를 확인하십시오.

작동 원리

이것은 더 흥미로운 비 내장 접근 방식입니다.

sm@_QxQ  - Full program.

 m       - Map over the input.
  @_Q    - Get the index in the reversed input.
     xQ  - Of the first index of each character in the String.
s        - Join the list.

4
왜 Pyth가 이것을 내장 한 것입니까? 이 질문 외에 어떻게 유용합니까?
Jerry Jeremiah

@JerryJeremiah이 함수에 대한 자세한 내용은 여기를 참조하십시오 . Pyth의 변환 함수이지만 세 번째 인수가 누락 된 경우 두 번째 인수의 반대가 대신 사용됩니다.
Mr. Xcoder



5

CJam , 7 바이트

q__W%er

온라인으로 사용해보십시오!

설명

q   e# Read all input.
__  e# Make two copies.
W%  e# Reverse the third copy.
er  e# Transliterate the input, mapping the input to its own reverse. Due
    e# to the way transliteration works in CJam, if a character in the source
    e# of the mapping is repeated, all but the first occurrence of that
    e# character are ignored.

젤리가 y그렇게 일 했으면 좋겠다 .
Outgolfer Erik

@EriktheOutgolfer Alice가 y 그렇게 작동하기를 바랍니다 . : P
Martin Ender



3

Alice , 17 바이트

/?.R?y.@
\i.!yDo/

온라인으로 사용해보십시오!

설명

/...@
\.../

이것은 서수 모드에서 선형 코드의 일반적인 템플릿입니다. 이것을 전개하면 실제 프로그램은 다음과 같이됩니다.

i.!?D.?.Ryyo

이 아이디어는 내 CJam 답변 과 비슷합니다 . Alice는 정수를 사용하여 문자열로 색인을 생성하는 쉬운 방법이 없으므로이 동작을 음역 ( yAlice) 으로 복제하는 것이 가장 쉽습니다 . 그러나 Alice의 음역 의미는 CJam보다 훨씬 일반적이므로 Alice는 반복되는 매핑을 무시하지 않습니다. 예를 들어, Mmm, marshmallows역순 으로 음역 하려면 다음과 같은 매핑 목록을 나타냅니다.

M -> s
m -> w
m -> o
, -> l
  -> l
m -> a
a -> m
r -> h
s -> s
h -> r
m -> a
a -> m
l ->  
l -> ,
o -> m
w -> m
s -> M

주 우리가 가지고 있음을, 예를 들어, m -> w, m -> o, m -> am -> a. CJam은 첫 번째 매핑을 제외한 모든 것을 버릴 것이지만 Alice는 대신 이것들을 순환합니다. 따라서 첫 번째 m는에 매핑되고 w두 번째 는에 매핑되고 o다섯 번째는 다시 매핑됩니다 w. 일반적으로 우리가 수행하는 경우 때문에, 도움이되지 않습니다이 경우 yAAB(일부 문자열 AB) 우리가 CJam에서와 마찬가지로, 우리는 언제나거야 B앨리스.

그렇다면 작동하는 매핑을 어떻게 계산합니까 y(즉, 반복 된 매핑을 수동으로 버리는 방법)? 물론 다른 음역을 사용하여. :)

우리가 원하는 매핑의 소스는 입력 (즉, 중복 제거 된 입력)의 너브 (nub) 여야합니다. 위의 매핑을 너브에 적용하면 각 문자가 한 번만 나타나므로 반복되는 각 매핑 중 첫 번째 만 사용합니다. 따라서 입력과 그 반대 방향으로 너브를 음역함으로써 복제 된 매핑을 효과적으로 버립니다. 그런 다음 nub와이 새로운 결과를 원래 입력에 대한 매핑으로 사용할 수 있습니다. 나는 그것이 누군가에게 의미가 있다고 확신합니다 ...

따라서 코드 :

i   Read input.                   ["Mmm, marshmallows"]
.!  Store a copy on the tape.
?D  Push the nub of the input.    ["Mmm, marshmallows" "Mm, arshlow"]
.   Duplicate.                    ["Mmm, marshmallows" "Mm, arshlow" "Mm, arshlow"]
?   Retrieve input.               ["Mmm, marshmallows" "Mm, arshlow" "Mm, arshlow" "Mmm, marshmallows"]
.R  Push its reverse.             ["Mmm, marshmallows" "Mm, arshlow" "Mm, arshlow" "Mmm, marshmallows" "swollamhsram ,mmM"]
y   Transliterate.                ["Mmm, marshmallows" "Mm, arshlow" "swllmhsr mm"]]
y   Transliterate.                ["swwllwmhsrwm  mms"]
o   Output.                       []



3

자바 스크립트 ES6 50 바이트

Justin Mariner 덕분에 3 바이트 절약

s=>[...s].map(x=>s.slice(~s.indexOf(x))[0]).join``

그것을 테스트하십시오 :

f=s=>s.split``.map(x=>s.slice(~s.indexOf(x))[0]).join``

let inp = document.getElementById("inp");
let out = document.getElementById("out");

function change() {
  out.innerText = f(inp.value);
}

change();
<input id="inp" type="text" oninput="change()" value="Hello, World!" /><br>
<p id="out"></p>


2

R , 68 65 바이트

function(s)chartr(paste(rev(el(strsplit(s,''))),collapse=''),s,s)

테스트 사례를 확인하십시오!

3 바이트 미만 포트 Erik의 05AB1E 방법. 처음은 아니지만 처음 본 것입니다.

구 버전:

function(s)paste(rev(s<-el(strsplit(s,'')))[match(s,s)],collapse='')

모든 테스트 사례 확인 -입력을 이름으로 사용하고 출력을 아래 따옴표로 사용하여 벡터를 인쇄합니다.

상당히 순진한 구현이지만 R에서 이것이 더 짧아 질 것이라고 생각하지 않습니다 (그리고 나는 그것에 대해 잘못되기를 기대합니다). 본질적으로 Rod의 Python 답변의 R 포트 이지만 독립적으로 개발되었습니다.

Ungolfed 설명 :

function(s){
 s <- el(strsplit(s,''))      # string to characters
 r <- rev(s)                  # reverse s
 idx <- match(s,s)            # indices of first matches
 r <- r[idx]                  # do the replacement of duplicates
 paste(r, collapse = "")      # characters to string
}                             # implicit return of last evaluated statement



0

파이썬 ,191 128 바이트

w=input("")
c=[]
for x in range(0,len(word)):
  chars.append(word[x])
back = []
for x in chars:
  back.insert(0,x)
final = ""
for x in back:
  final = final + x
print(final)

온라인으로 사용해보십시오


4
안녕하세요, PPCG에 오신 것을 환영합니다! 이것은 훌륭한 대답이지만 골치 아프지 않습니다 (필요한 것보다 많은 바이트가 있음). 예를 들어 변수 이름을 줄임으로써 일부 바이트를 제거하고 게시물을 수정 하십시오.
NoOneIsHereHere

0

자바 10, 100 99 97 바이트

s->{var a=new char[256];int l=s.length,i=l;for(;i>0;a[s[--i]]=s[l+~i]);for(;i<l;s[i]=a[s[i++]]);}

@LeakyNun의 C 답변 포트 . Java에서 비슷한 작업을 수행하지 않고 더 짧게 수행 할 수 있는지 의심 스럽습니다. @ceilingcat
덕분에 -1 바이트 .

같은 입력 char[](문자 배열)을 수정하는 대신 바이트를 저장하는 새로운 돌리는이 입력.

여기에서 시도하십시오.


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