lwap 그녀는 갈증을 해소!


27

목록 또는 구분 된 문자열이 제공되면 한 단어 후에 각 단어의 첫 문자가 포함 된 목록 또는 구분 된 문자열을 출력하십시오.

이 문제를 해결하기 위해 "단어"는 공백, 줄 바꿈 및 탭 문자를 제외한 인쇄 가능한 모든 ASCII 문자로만 구성됩니다.

예를 들어, "좋은 오후, 세계!"라는 문자열을 사용하십시오. (공백으로 구분) :

1. String
"Good afternoon, World!"

2. Get the first characters:
"[G]ood [a]fternoon, [W]orld!"

3. Move the characters over. The character at the end gets moved to the beginning.
"[W]ood [G]fternoon, [a]orld!"

4. Final string
"Wood Gfternoon, aorld!"

이것은 이므로 가장 짧은 코드가 승리합니다!

테스트 사례 :

Input -> output (space-delimited)

"Good afternoon, World!" -> "Wood Gfternoon, aorld!"
"This is a long sentence." -> "shis Ts i aong lentence."
"Programming Puzzles and Code Golf" -> Grogramming Puzzles Pnd aode Colf"
"Input -> output" -> "onput I> -utput"
"The quick brown fox jumped over the lazy dog." -> "dhe Tuick qrown box fumped jver ohe tazy log."
"good green grass grows." -> "good green grass grows."

출력에 후행 공백이 허용됩니까?
비즈니스 고양이

단어 사이에 최대 하나의 공백이 있다고 가정 할 수 있습니까?
math junkie

글자가 서로를 따라갈 수있는 몇 가지 규칙을 사용하면 수저 생성기 en.wikipedia.org/wiki/Spoonerism
표시 이름

@BusinessCat 예.
스파클 포니 동지

@mathjunkie 예.
스파클 포니 동지

답변:



8

Japt , 11 10 9 8 바이트

Japt의 인덱스 줄 바꿈 및 음수 인덱싱을 활용합니다.

ËhUgEÉ g

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


설명

        :Implicit input of array U (each element is an individual word).
Ë       :Map over the array.
h       :Replace the first character of the current element (word) ...
Ug      :  with the word in the array at index ...
EÉ      :    current index (E) -1's ...
g       :  first character.
        :Implicit output of array of modified words

목록으로 입력을 받아 더 많은 바이트를 절약 할 수 있다고 생각합니다.¸
ETHproductions

그것은 @ETHproductions의 확장 일지 모르지만 물어볼 것입니다. 편집 : 여기에
Shaggy

1
예, 게시물 맨 처음에 "목록 또는 구분 된 문자열 제공"이라고 표시되어 있지만 얼마나 오래 있었는지 확실하지 않습니다 (챌린지가 처음 게시 된 이후로 추측).
ETHproductions

좋은 것! 사용 h하는 것이 좋습니다. 나는 당신의 기술을 사용하여 £ XhUg´Y ¯1£g´Y ¯1 +XÅ 이 될 수 있는 것을 생각해 냈습니다 .
Oliver

5

하스켈 , 43 바이트

p%((a:b):r)=(p:b):a%r
_%e=e
(%)=<<head.last

온라인으로 사용해보십시오! 입력 및 출력에 문자열 목록을 사용합니다.

이전 단어의 첫 글자를 기억하고 p새로운 첫 글자를 체인으로 보내면서 재귀 적으로 현재 단어의 첫 글자를 만듭니다. 이전 첫 글자는 마지막 단어의 첫 글자로 초기화됩니다.


4

루비, 85 77 63 바이트

이것이 훨씬 짧을 수 있습니다.

편집 : 수집에 대한 @manatwork 감사합니다->지도

a=gets.split;$><<a.zip(a.rotate -1).map{|x,y|y[0]+x[1..-1]}*' '

당신은 모두 대체 할 수 .collect.each함께을 .map.
manatwork

1
-p플래그 (+1 바이트) 및 i=-2;gsub(r=/\b\w/){$_.scan(r)[i+=1]}최고의 골프를위한
Value Ink


4

CJam , 12 10 9 바이트

jimmy23013 덕분에 1 바이트 절약

q~Sf+:()o

단어 목록으로 입력을받습니다.

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

설명

     e# Example input: ["Good" "afternoon," "World!"]
q~   e# Read and eval the input.
     e# STACK: [["Good" "afternoon," "World!"]]
Sf+  e# Append a space to each word.
     e# STACK: [["Good " "afternoon, " "World! "]]
:(   e# Remove the first character from each substring.
     e# STACK: [["ood " 'G "fternoon, " 'a "orld! " 'W]]
)o   e# Remove and print the last element of the array.
     e# STACK: [["ood " 'G "fternoon, " 'a "orld! "]]
     e# Implicitly join the remaining array with no separator and output.

입력과 출력을 목록으로 가져올 수 있습니다.
스파클 포니 동지

@ComradeSparklePony 당신은 내가 대답 한 후에 확인했습니다 : P Golfing it now
Business Cat

)o에 대한 1m>.
jimmy23013

3

V , 7 바이트

Îxjp
{P

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

설명:

Î       " On every line:
 x      "   Delete the first character
  j     "   Move down a line
   p    "   And paste a character (into column 2)
{       " Move to the beginning of the input
 P      " And paste the last thing we deleted (into column 1)

3

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

s=>s.map((k,i)=>s.slice(i-1)[0][0]+k.slice(1))

slice(-1)배열의 마지막 요소 를 반환 한다는 사실을 이용 합니다.

단편


조인을 제거 할 수 있습니까? 질문은 목록을 출력 할 수 있음을 나타냅니다. 그것은 8 바이트를 절약 할 것입니다
Craig Ayre

1
@CraigAyre, 감사합니다!
Rick Hitchcock

3

Vim, 16 , 9 바이트

<C-v>GdjPGD{P

@Wossname 덕분에 7 바이트가 절약되었습니다!

한 줄에 한 단어 씩 입력합니다. 예 :

Hello
world
and
good
day
to
you

나는 목록을 입력하는 것이 허용되기 때문에 이것이 잘되어야한다고 생각합니다.

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


그대로 '손으로'하면 12 번의 키 입력으로 수행 할 수 있습니다. 이 구문을 여기에 표현하는 방법을 모르거 나이 퍼즐에서 그렇게하는 것이 유효한지 확실하지 않습니다. ^vGdjPGd$ggP (여기서 ^ v는 [control + v] 키 콤보입니다. 커서는 왼쪽 상단에서 시작하여 명령 모드에 있어야합니다.)
Wossname

@Wossname 아, 그거 좋은 생각이야! 프로그래머 내가 더 많은 바이트를 저장하기 위해 추가 (예를 들어, 몇 작은 것들 dd -> D, gg -> }팁을위한) 감사합니다!
DJMcMayhem

나는 dd와 gg를 모두 짧은 버전으로 알지 못했습니다! 최고 :)
Wossname 7:26에

"<Cv>"대신 코드의 문자 v 주위에 "위 첨자 HTML 태그"를 사용하는 것은 어떻습니까? 그러면 답변에서 볼 때 코드가 올바른 길이로 표시됩니다. 따라서 코드는 다음과 같습니다. <sup> V </ sup> GdjPGD {P ... stackexchange 웹 페이지가 올바르게 포맷 될 때 매우 깔끔해 보입니다.
Wossname 7:26에

1
나는 중괄호가 단락 사이를 뛰어 다니는 것을 보았습니다. 단일 단락 만 다루기 때문에 여기에서 작동합니다. 시원한. 와우 큰 코드 파일을 빠르게 스크롤하는 것이 정말 쉽습니다! 그 팁 감사합니다. :)
Wossname

3

> <> , 44 45 바이트

90.f3+0.>&i&01.>~r&l0=?;o20.
 i:" "=?^:1+ ?!^

공백으로 구분 된 단어를 가정합니다.

Aaron에 의한 수정에 1 바이트가 추가됨



2

하스켈 , 50 바이트

f=zipWith(:).((:).last<*>init).map head<*>map tail

입력과 출력은 단어 목록입니다.


1
함수의 이름을 지정할 수 없으므로를 생략 할 수 있습니다 f=.
nimi

1
오, 멋지다, 나는 Haskell을위한 온라인 컴파일러가 있다는 것을 몰랐다. 내가 틀 렸기 때문에 내 의견을 삭제하겠습니다 ^^
Fund Monica 's Lawsuit

2

PHP, 62 바이트

$c=end($_GET);foreach($_GET as$g)echo$g|$g[0]=$c^$g^$c=$g,' ';

2

C #, 78 77 바이트

using System.Linq;a=>a.Select((s,i)=>a[i-->0?i:a.Count-1][0]+s.Substring(1));

Func<List<string>, IEnumerable<string>>전체 / 형식화 된 버전으로 컴파일합니다 .

using System;
using System.Collections.Generic;
using System.Linq;

class P
{
    static void Main()
    {
        Func<List<string>, IEnumerable<string>> f = a =>
                a.Select((s, i) => a[i-- > 0 ? i : a.Count - 1][0] + s.Substring(1));

        Console.WriteLine(string.Join(" ", f(new List<string>() { "Good", "afternoon,", "World!" })));
        Console.WriteLine(string.Join(" ", f(new List<string>() { "This", "is", "a", "long", "sentence." })));

        Console.ReadLine();
    }
}

2

Brachylog , 12 바이트

{hᵐ↻|bᵐ}ᶠzcᵐ

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

설명

Example input: ["Good","afternoon,","World!"]

{      }ᶠ       Find: [["W","G","a"],["ood","fternoon,","orld!"]]
 hᵐ↻              Take the head of each string, cyclically permute them
    |             (and)
     bᵐ           Get the strings without their heads
         z      Zip: [["W","ood"],["G","fternoon,"],["a","orld!"]]
          cᵐ    Map concatenate on each list: ["Wood","Gfternoon,","aorld!"]

2

R, 72 70 바이트

function(x)paste0(substr(x,1,1)[c(y<-length(x),2:y-1)],substring(x,2))

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

주세페 덕분에 2 바이트가 절약되었습니다.

입력과 출력은 목록입니다. 첫 글자로 구성된 부분 문자열을 가져 와서 마지막 문자를 앞뒤로 순환시킨 다음 나머지 단어의 부분 문자열과 함께 붙여 넣습니다. 자전거 단계는 살인자이지만 더 이상 줄일 수있는 방법을 알 수 없습니다.


1
2 바이트를 절약하는 것 보다 우선하기 때문에 2:y-1대신 사용할 수 있습니다 . 1:(y-1):-
주세페


2

Python 2 + Numpy, 104 바이트

from numpy import *
s=fromstring(input(),"b")
m=roll(s==32,1)
m[0]=1
s[m]=roll(s[m],1)
print s.tobytes()

1
바이트 수에 import 문을 포함시켜야합니다. 멋진 답변!
스파클 포니 동지

또한 바이트 수로 입력 및 출력 코드가 있어야합니다.
Felipe Nardi Batista

1
1 바이트의 마지막 줄 바꿈을 삭제할 수 있다고 생각합니다.
Ørjan Johansen 2016 년

@ ØrjanJohansen 예, "u1"대신 "b"도 작동하므로 -2 바이트입니다.
Mikhail V


1

수학, 59 바이트

""<>#&/@Thread@{RotateRight@#~StringTake~1,#~StringDrop~1}&

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

단어 목록을 가져 와서 반환합니다.

문자열을 가져오고 반환하는 것을 선호하는 경우 87 바이트에서 작동합니다.

StringRiffle[Thread@{RotateRight@#~StringTake~1,#~StringDrop~1}&@StringSplit@#," ",""]&


1

kdb +, 25 22 바이트

해결책:

rotate[-1;1#'a],'1_'a:

예:

q)rotate[-1;1#'a],'1_'a:("The";"quick";"brown";"fox";"jumped";"over";"the";"lazy";"dog.")
"dhe"
"Tuick"
"qrown"
"box"
"fumped"
"jver"
"ohe"
"tazy"
"log."

설명:

1_'a:             // (y) drop first character of each element of a
,'                // join each left with each right
rotate[-1;1#'a]   // (x) take first character of each element of a, rotate backwards 1 char

특별한:

일반 문자열 (37 바이트)을 사용하는 버전 :

q){" "sv rotate[-1;1#'a],'1_'a:" "vs x}"The quick brown fox jumped over the lazy dog."
"dhe Tuick qrown box fumped jver ohe tazy log."



0

수학, 134 바이트

(w=Characters@StringSplit@#;d=Drop[w,0,1];StringRiffle[StringJoin/@Table[PrependTo[d[[i]],RotateRight[First/@w][[i]]],{i,Length@w}]])&



0

C, 106 77 바이트

i,a,b;f(char*o){a=*o;for(i=0;o[i++];)if(o[i]==32){b=o[++i];o[i]=a;a=b;}*o=a;}

scottinet에서 -29 바이트

현재 위치에서 문자열을 수정합니다.

언 골프 드 :

char *f(char *o){
    char a=*o,b; // start with a as the first character of the first word
    for(int i=0;++i<strlen(o);){
        // iterate through the string with i as the index
        if(o[i]==32){ // if the current character is a space, 
                      // i.e. if a word begins after this character
            b=o[++i]; // store the beginning of the next word in b
            o[i]=a; // set the beginning of the next word to a
            a=b; // set a to what the beginning of the next work used to be
        }
    }
    *o=a; 
    // set the beginning of the first word to the old beginning of the last word
}

골퍼 버전 제안 (정확한 코드) : -29 바이트
scottinet



0

껍질 , 11 바이트

Foz:ṙ_1TmΓ,

문자열 목록으로 입력 및 출력 하고 온라인으로 시도하십시오!

(헤더는 입력을 단어 목록으로 변환하고 출력 목록을 공백으로 결합합니다.)

설명

F(z:ṙ_1)TmΓ,  -- example input: ["Good" "afternoon,","World!"]
         m    -- map the following (example on "Good")
          Γ   -- | pattern match head & tail: 'G' "ood"
           ,  -- | construct tuple: ('G',"ood")
              -- : [('G',"ood"),('a',"fternoon,"),('W',"orld!")]
        T     -- unzip: ("GaW",["ood","fternoon,","orld!"])
F(     )      -- apply the function to the pair
    ṙ_1       -- | rotate first argument by 1 (to right): "WGa"
  z:          -- | zip the two by (example with 'W' and "ood")
              -- | | cons/(re)construct string: "Wood"
              -- :-: ["Wood","Gfternoon,","aorld!"]

대체, 11 바이트

§oz:ṙ_1m←mt

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


0

AWK , 63 바이트

{for(R=substr($NF,1,1);++j<=NF;R=r)sub(r=substr($j,1,1),R,$j)}1

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

중복성을 줄일 수있는 방법이 있어야하지만 보이지는 않습니다.

참고 : TIO 링크에는 멀티 라인 입력이 가능하도록 4 바이트의 추가 바이트가 있습니다.

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