Flippign Lettesr Aroudn


33

채팅에서 우리는 종종 빠른 타이 퍼이며 메시지를 게시하기 전에 글자 순서 를 보지 않습니다 . 우리는 게으 르기 때문에 마지막 두 글자를 자동으로 바꾸는 프로그램이 필요하지만 너무 늦게 응답하고 싶지 않기 때문에 코드가 짧아야합니다.

당신의 임무는 당신이 그것을 받아들이고 싶다면 주어진 문자열에서 각 단어의 마지막 두 글자를 뒤집는 프로그램을 작성하는 것입니다 (따라서 단어 Thansk는로 바뀝니다 Thanks). 단어 로 구분 영어 알파벳에서 두 개 이상의 문자 시퀀스입니다 하나의 공간.

  • 입력으로 수신 한 문자열 / 문자 목록은 알파벳 문자와 공백 (ASCII [97-122], [65-90] 및 32) 만 포함합니다.

  • 이러한 허점 은 기본적으로 금지되어 있음을 유의하면서 모든 프로그래밍 언어로 표준 방법을 통해 입력을 받고 출력을 제공 할 수 있습니다 .

  • 출력에는 하나의 후행 공백 및 / 또는 하나의 후행 줄 바꿈이있을 수 있습니다.

  • 입력은 항상 단어 만 포함하며 해당 공백은 하나 이상의 단어로 구성됩니다.

이것은 코드 골프이므로 각 언어에서 가장 짧은 제출 (바이트로 표시)이 승리합니다!

테스트 사례

문자열은 가독성을 위해 따옴표로 묶습니다.

입력-> 출력

"Thansk"-> "감사합니다"
"환영"-> "환영합니다"
"이것은 사과입니다"-> "Thsi si na appel"
"Flippign Lettesr Aroudn"-> "플립 핑 레터"
"스왑 팔레트가 포함 된 채점"-> "스왑 팔레트가 포함 된 채점표"

또는 테스트 스위트의 편의를 위해 입력 및 해당 출력이 별도로 있습니다.

탄 스크
유어 웰컴
이것은 사과 야
Flippign Lettesr Aroudn
교환 대와 함께 할 수있는 기회
감사
천만에요
시 씨 나 아펠
주위에 편지를 내리고
교체 된 팔레트가있는 테크놀로지

타이틀을위한 DJMcMayhem 에게 감사합니다 . 원래는 CMC 였습니다.


단어 배열을 출력 할 수 있습니까?
얽히고 설킨

@Shaggy 아니요, 출력은 문자열 (또는 기본적으로 문자 목록)이어야합니다.
Mr. Xcoder

각 입력에 후행 공백을 요청할 수 있습니까?
FlipTack

@FlipTack 초기 버전에서는 허용 되었지만 게시 된 답변을 사용하기 전에 해당 규칙을 제거했습니다. (일부 채팅 사용자 중 일부는 내가 이것을 너무 쉽게 만들고 있다고 말했기 때문에 동의합니다). 아니요, 허용되지 않습니다.
Mr. Xcoder

1
@Fabian 단어 순서입니다 두 개 이상의 글자
씨 Xcoder

답변:


16

V , 4 5 바이트

òeXp

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

|| 커서를 나타냅니다

버퍼가 시작 |w|ord and more words하고 커서가 첫 번째 문자에 있습니다.

재귀 적으로 ò

e한마디 로 가다

wor|d| and more words

X커서 왼쪽의 문자를 제거

wo|d| and more words

p다음 캐릭터에 걸쳐

wod|r| and more words

암시 적 종료 ò, 버퍼의 끝에 도달 할 때까지 다른 단어에 대해 동일한 프로세스를 반복하십시오.


2
작업에 적합한 언어 :)
DJMcMayhem

"재귀 적으로"대신 "반복적으로"를 의미합니까?
NieDzejkob

브이 위키 단어 "재귀"를 설명하기 위해 사용 @NieDzejkob ò명령 github.com/DJMcMayhem/V/wiki/Normal-Mode-Commands을
Kritixi LITHOS을

10

젤리 , 7 바이트

Ḳœ?@€2K

문자 목록을 가져오고 리턴하는 모나드 링크

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

방법?

Ḳœ?@€2K - Link: list of characters
Ḳ       - split at spaces
     2  - literal two
    €   - for €ach:
   @    -   with sw@pped arguments:
 œ?     -     nth permutation (the 2nd permutation has the rightmost elements swapped)
      K - join with spaces

그것은 순열의 좋은 남용입니다. 대안
Mr. Xcoder

@ Mr.Xcoder Ḳ2œ?ЀK도 작동하며 하나의 빠른 기능을 사용합니다.
Dennis

7

Brain-Flak , 122 바이트

{(({})[((((()()){}){}){}){}])((){[()](<{}>)}{}){{}<>(({}({}))[({}[{}])])(<>)}{}({}<>)<>}<>(({}({}))[({}[{}])]){({}<>)<>}<>

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

직업에 대한 최악의 언어 :)

읽을 수있는 약간 더 읽기 쉬운 버전 :

{
    (({})[((((()()){}){}){}){}])((){[()](<{}>)}{})

    {
        {}
        <>

        (({}({}))[({}[{}])])

        (<>)
    }
    {}

    ({}<>)<>

}<>

(({}({}))[({}[{}])])

{

    ({}<>)
    <>
}<>

나는 이것이 Brainfuck 버전보다 길다는 것을 믿을 수 없다 ...
Pureferret

@pureferret Brain-flak는 brainfuck보다 길다. 대부분의 경우 기본 명령 당 2 바이트가 필요합니다. 여기서 brain-flak에는 2 바이트가 필요합니다.
DJMcMayhem



6

파이썬 3 , 50 바이트

print(*(w[:-2]+w[:-3:-1]for w in input().split()))

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

이 답변은 Python 3의 인쇄 동작을 남용합니다. 여러 인수가 공백 사이에 단일 공백으로 인쇄됩니다. 물론, 우리는 입력에 몇 단어가 있는지 알지 못하기 때문에 여러 개의 인수를 줄 수는 없습니다. 그래서 우리는 splat 연산자를 사용합니다 . 원래

print(*[a,b,c])

정확히 같은 것입니다

print(a,b,c)

그것을 남용하면 전체 프로그램이 우리가 사용해야 할 함수 / 람다보다 짧아집니다 ' '.join.


Python 2는 다음과 같이 작성하여 2 바이트를 절약 for w in input().split():print w[:-2]+w[:-3:-1],합니다. 파이썬 3에서 마지막 두 문자를 추출하면 문자열로 다시 만들어야 print(*(''.join(a)+c+b for*a,b,c in input().split()))한다는 점 을 제외하고는 잘 작동 a합니다.
xnor

5

Matlab (R2016b), 51 50 바이트

저장된 49 50 (!) @Giuseppe 덕분에 바이트.

function s(a),regexprep(a,'(\w)(\w)( |$)','$2$1 ')

그리고 내 이전 답변 :

Matlab (R2016b), 100 바이트

(그냥 재미를 위해 : P)

function s(a),a=regexp(a,' ','split');for i=1:length(a),fprintf('%s ',a{i}([1:end-2 end end-1])),end

설명:

function s(a) % Defining as a function...
a=regexp(a,' ','split'); % Splits the input string at the spaces
for i=1:length(a) % Loops through each word
    fprintf('%s ',a{i}([1:end-2 end end-1])) % And prints everything with the last two characters swapped.
end

1
단어가 두 개 이상의 문자로 정의되어 있기 때문에 한 문자 단어는 발생할 수 없습니다.
주세페

regexprep여기서 일? 같은 것 regexprep(a,'(\w*)(\w)(\w)','\1\3\2')?
주세페

D = 이것. 였다. 서사시! 내 답변과 완전히 다르기 때문에이 답변을 게시해야한다고 생각합니다. 유일한 것은 Matlab이 일치 $1하지 않는로 참조를 참조 \1한다는 것입니다 regexprep(a,'(\w*)(\w)(\w)','$1$3$2').
Thiago Oleinik

1
이 답변에 별도의 답변으로 게시해야합니다. 정규식이 문자열 도전에 도움이되는지 아닌지를 항상 보는 것이 좋습니다! 게다가, 나는 MATLAB의 정규식 엔진을 분명히 이해하지 못하기 때문에 크레딧을 얻는 것이 공평하지 않을 것입니다.
Giuseppe

1
function s(a),regexprep(a,'(\w)(\w)( |$)','$2$1 ')여전히 더 짧은 바이트입니다!
Giuseppe


4

프롤로그 (SWI) , 60 바이트

[A,B]+[B,A].
[A,B,32|U]+[B,A,32|Y]:-U+Y,!.
[A|U]+[A|Y]:-U+Y.

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

설명

먼저 기본 사례를 정의합니다.

p([A,B],[B,A]).

이것은 마지막 두 글자가 항상 바뀌는 것을 의미합니다.

그런 다음 공간 바로 옆에 있으면 어떻게 될지 정의합니다.

p([A,B,32|U],[B,A,32|Y]):-p(U,Y),!.

공백 바로 앞에 있으면 공백 앞의 문자가 바뀌고 문자열이 일치하면 나머지 두 문자열이 일치합니다. 그런 다음 !잘라 내기 위해 사용 합니다.

마지막 경우는 우리가 공백 옆에 ​​있지 않으면 처음 두 글자가 일치해야합니다.

p([A|U],[A|Y]):-p(U,Y).

4

Wolfram 언어 , 117 바이트

StringReplace[RegularExpression["\\b[[:alpha:]]{2,}\\b"]:>StringDrop[StringInsert["$0",StringTake["$0",{-1}],-3],-1]]

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

테스트 문자열에 적용됩니다.

StringReplace[
  RegularExpression["\\b[[:alpha:]]{2,}\\b"] :> 
   StringDrop[StringInsert["$0", StringTake["$0", {-1}], -3], -1]] /@
 {"Thansk", "Youer welcoem", "This is an apple", 
  "Flippign Lettesr Aroudn", "tHe oDd chALlEneg wiht swappde lettesR"} // Column
Thanks
Youre welcome
Thsi si na appel
Flipping Letters Around
teH odD chALlEnge with swapped letteRs

4
PPCG에 오신 것을 환영합니다!
Steadybox

@Steadybox 감사합니다.
Edmund

4

R , 111 51 41 바이트

@Giuseppe가 제공하는 정규식 접근 방식으로 이전 방식을 물에서 날려 버립니다.

cat(gsub("(.)(.)\\b",'\\2\\1',scan(,"")))

1
정규식은 여기에서 훨씬 더 효율적입니다. 온라인으로 사용해보십시오!
주세페

(R에서 순수한 문자열 조작 방식을 수행하는 데 도움이되는 것은 감사하지 않습니다)
Giuseppe


@ 주세페 와우, 잘 했어! 나는 당신이 당신의 자신의 대답을 원한다면 계속 진행하십시오.
rturnbull

1
아 걱정마 나는 또 다른 10 바이트를 골랐다 : 또 다른 정규식 접근 방식과 70 바이트 의 기존 접근 방식
Giuseppe

4

APL (Dyalog Classic) , 28 바이트

1↓∊((¯2↓⊢),2↑⌽)¨' '(,⊂⍨⊣=,)⍞

⎕ML그리고 ⎕IO모두 1,

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

설명

  • ... (,⊂⍨⊣=,) ... 분할 (테두리를 유지하고 시작 부분에 테두리를 추가하는 동안) ...
  • ... ⍞ ... 입력 ...
  • ... ' ' ... ... 공간에서.
  • ... ( ... )¨ ... 그런 다음 각 요소에 대해
    • ... , ... 연결 ...
    • ... (¯2↓⊢) ... ... 마지막 두 항목을 제외한 모든 항목 ...
    • ... 2↑⌽ ... ... 마지막 두 요소의 역순으로.
  • 1↓∊ ... 마지막으로, 병합 된 결과의 첫 번째 요소를 제외한 모든 요소를 ​​반환하십시오.

첫 번째를
Adám




3

Alice , 24 바이트

/0RR'.%$1\' o
\ix*o ne@/

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

설명

/...\' o
\.../

이것은 루프 본문이 선형 서수 스 니펫 인 루프를 형성하며 ' o매 두 루프 반복마다 카디널 모드로 실행 됩니다. 후자는 단지 공백을 인쇄합니다.

서수 코드의 지그재그 구조를 펼치면 선형 루프 몸체는 실제로 다음과 같습니다.

iR*' %e10xRo.n$@

이것을 분해 :

i     Read all input. On subsequent iterations, this will push an empty string.
R     Reverse.
*     Join. On the first iteration, this joins the input to an implicit empty string,
      which does nothing. On subsequent iterations, it will join the empty string to
      the word on top of the string, thereby getting rid of the empty string.
' %   Split around spaces. On the first iteration, this will split the input
      into individual words. On subsequent iterations, this does nothing.
e10   Push "10".
x     Use this to permute the (reversed) word on top of the stack. In
      particular, the word is rearranged with the same permutation that is
      required to sort the string "10", which means the first two letters
      get swapped (which correspond to the last two letters of the actual
      word).
R     Reverse the swapped word.
o     Print it.
.n$@  If there are no words left on the stack, terminate the program.

문자 교환 h~Z은 4 바이트 대신 3 바이트 ( ) 로 수행 할 수 e10x있지만 실제로 전체 바이트를 저장하도록 레이아웃을 조정하는 방법은 보이지 않습니다.
마틴 엔더

2

브레인 퍽 , 109 100 바이트

편집 : 하나의 문자 단어를 처리 할 필요가 없습니다

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

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

후행 공백을 인쇄합니다

작동 원리

,[>++++[-<-------->],] Puts input on the tape and subtracts 32 from each character
                       This separates each word

>+[- Start the loop
   <[>++++[<++++++++>-]<[->>+<<]<] Add 32 to each letter of the word
                                   Skip this on the first iteration for the last word

   <<[->>+<<]>[[-<+>]>] Swaps the last two letters of the word
   <<[>+>+>]- If there is another word to the left continue loop
              Also set up to add a space to the end of the word
 <] End loop
 >>>>>>>[.>] Print the modified string

이전 버전, 109 바이트

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

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



1

PHP , 119107 바이트

편집 : 전적으로 인간 덕분에

<?php foreach(explode(" ",trim(fgets(STDIN)))as$w)echo substr($w,0,strlen($w)-2).strrev(substr($w,-2))," ";

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


1
$word단일 문자 변수 이름 을 만들 수 없습니까 ?
완전히 인간적인

@totallyhuman 응! 정식 버전을 작성한 다음 압축했지만 눈치 채지 못했습니다. 감사합니다.
Zerquix18

PHP 오픈 태그는 6 바이트를 절약하여 생략 할 수 있습니다.
Daniel W.

궁금 fgets(STDIN)생략 또는 교체 할 수 $x도 모든 대답은 대답을 입력 계산하지 좋아
다니엘 W.

trim()불필요합니다.
Titus


1

sed , 20 17 + 1 (-r) = 18 바이트

s/(.)(.)\b/\2\1/g

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


TIO 링크가 게시 된 코드와 일치하지 않습니다. TIO 링크는 몇 바이트 더 깁니다.
Xcali

으악, 링크를 수정
Noskcaj

를 제거 할 수 있습니다 |$. 아무것도하지 않습니다. ( (.)(.)(\b|$)필요한 일을하기 위해서는 \b이미 문자열의 끝과 일치 하기 때문에 필요하지 않습니다 .)
Jordan

으악, 그것을 없애려고했습니다.
Noskcaj

1

PHP, 65 바이트

PHP 7.1 이상이 필요합니다

for(;$s=$argv[++$i];$s[-1]=$s[-2],$s[-2]=$c,print"$s ")$c=$s[-1];

문장을 별도의 명령 줄 인수로 사용합니다. 로 실행하십시오 -nr.


단일 문자열, 77 + 1 바이트 작업 :

foreach(explode(" ",$argn)as$s){$c=$s[-1];$s[-1]=$s[-2];$s[-2]=$c;echo"$s ";}

로 파이프로 실행하십시오 -nR.


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


1

자바 8, 35 바이트

s->s.replaceAll("(.)(.)\\b","$2$1")

@TaylorScott 포트 의 Google 스프레드 시트 답변 은 2 바이트를 골프 후. 편집 : 나는 그것이 내 두 골프 바이트 후 이제 Neil 의 Retina 포트 포트임을 알았습니다.

설명:

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

s->                           // Method with String as both parameter and return-type
   s.replaceAll("(.)(.)       //  Replace any two characters,
                       \\b",  //  with a word-boundary after it (space or end of String)
                "$2$1")       //  With the two characters swapped

1

Google 스프레드 시트, 33 바이트

셀에서 입력을 받아서 A1호출 셀로 출력 하는 익명의 워크 시트 함수

=RegExReplace(A1,"(.)(.)\b","$2$1

-2 Bytes 이상 을 사용한 @KevinCruijssen 에게 감사합니다(.)(\w)


내가 실수하지 않으면 둘 다 (\w)골프를 칠 수 있습니다 (.). 는 \b이미 만 단어를 찾는 나타냅니다. (완전히 확실하지는 않지만 Java에서 작동합니다.)
Kevin Cruijssen

@KevinCruijssen-당신은 절대적으로 정확합니다. 고맙습니다!
Taylor Scott

1

자바 스크립트 (Node.js) , 38 36 32 바이트

s => s.replace (/ (.) (.) (| $) / g, "$ 2 $ 1") 
s=>s.replace(/(.)(.)\b/g,"$2$1")

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

RegExp 접근 방식 @Giuseppe (단지 공백으로 구분 된 단어를 가정하여 독립적으로 생각했지만)

-1 개의 공백 만 고려하고 후행 공백을 추가하는 경우 -2

-4 감사합니다 @Shaggy


더 많은 공간이
있는지는

@ l4m2 그러나 더 많은 공간이 있으면에 대한 38이됩니다 s=>s.replace(/(.)(.)( +|$)/g,"$2$1$3").
Shieru Asakoto

@ l4m2 BTW 내 원래의 대답이었다s=>s.replace(/(.)(.)(\s|$)/g,"$2$1$3")
Shieru Asakoto

ab abc abcd abcde abcdef 합니까 ab_, bc_, cd_, de_, ___, ef_,___
l4m2

1
F=s=>s.replace(/(.)(.)(?!\w)/g,"$2$1")같은 길이
l4m2

1

K (oK) , 23 22 바이트

" "/{x@prm[!#x]1}'" "\

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

예:

" "/{x@prm[!#x]1}'" "\"Hello World"
"Helol Wordl"

설명:

1 바이트 를 절약하기위한 FrownyFrog 포트 솔루션 .

다시 돌아 올게요.

" "/{prm[x]1}'" "\ / the solution
              " "\ / split input on " "
    {       }'     / apply lambda to each
     prm[x]        / permute input x
           1       / and take the 2nd result
" "/               / join with " "

이전 솔루션 :

  • " "/-2{(x_y),|x#y}'" "\ 23 바이트

1

05AB1E , 7 바이트

#vy`sðJ

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

Magic Octopus Urn 에게 -1 감사합니다 .

하나의 후행 공백을 인쇄합니다.


이것은 11 바이트입니다
Daniel W.

2
@DanFromGermany 아니오, 05AB1E에는 8 바이트로 표시 될 수 있는 코드 페이지 가 있습니다.
Outgolfer Erik

8 바이트로 표시된 프로그램을 실행할 수 있습니까?
Daniel W.

@DanFromGermany 예, 05AB1E 인터프리터는 05AB1E 인코딩의 파일에서이 프로그램을 실행할 수 있습니다.
Outgolfer Erik

1
@MagicOctopusUrn 그것은 목록이 아니지만, 이후 `입니다.
Erik the Outgolfer


0

SNOBOL4 (CSNOBOL4) , 136 (119) 바이트

	I =INPUT
B	I SPAN(&LCASE &UCASE) . Y ARBNO(' ') =:F(O)
	Y RPOS(2) REM . Z =REVERSE(Z)
	O =O Y ' '	:(B)
O	OUTPUT =O
END

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

후행 공백으로 인쇄합니다. 언어가 StriNg Oriented 및 symBOlic Language의 약자 이고 코드가 Brain-Flak보다 길면 잘못된 일을 알고 있습니다. ( 지금은 조금 나아졌습니다.

B은 빈 문자열을 가져 와서 I바꿉니다 (alphabetic characters saved as Y)(some number of spaces).

다음 행은 Yas 의 마지막 두 문자를 추출하여 반대로 Z바꾸고 Z다음 행 OY, 및 단일 공백 ​​문자를 연결 합니다.

마지막으로 Iline in에서 필요한 패턴과 더 이상 일치하지 않을 때 인쇄합니다 B.


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