줄임표를 복수하는 방법?


14

분명히 타원체입니다.

채팅 메시지에서 영감을 얻었습니다 .

당신의 도전

목록이나 공백 또는 쉼표로 구분 된 단어가 주어지면 줄임표로 묶습니다.

말줄임표를 수정하려면 :

  1. 단어부터 시작하십시오.
  2. 원래 단어의 첫 글자를 끝에 추가하십시오.
  3. 원래 단어의 마지막 문자 2를 끝에 추가하십시오.
  4. 원래 단어의 마지막 두 번째 문자를 끝에 추가하십시오.
  5. 원래 단어의 첫 글자를 끝에 추가하십시오.
  6. 원래 단어의 마지막 문자를 끝에 추가하십시오.
  7. 5-6 단계를 한 번 반복하십시오.
  8. 끝났습니다!

당신은 가정 할 수 있습니다 :

  • 입력 단어는 영숫자 만됩니다
  • 입력 및 출력은 공백으로 구분 된 문자열 또는 목록 일 수 있습니다.
  • 입력은 단어 만 포함합니다
  • 단어는 2 자 이상이어야합니다.
  • 입력은 정규식과 일치합니다 /^[a-z0-9]{2,}( [a-z0-9]{2,})*$/i
  • 다른 입력 및 출력 형식을 가질 수 있습니다
  • 더 올 ...

테스트 사례 :

ellipsis -> ellipsisessieses
goat -> goatgttagtgt
covfefe -> covfefeceefcece
programmer5000 -> programmer5000p000p0p0
up vote down goat -> upuppuupup voteveetveve downdnnwdndn goatgttagtgt
it is golf yo -> itittiitit isissiisis golfgfflgfgf yoyooyyoyo
crossed out 44 is still 44 -> crossedcddecdcd outottuotot 4444444444 isissiisis stillslllslsl 4444444444

최단기 응답자 이니 니닌 바이트 bssebsbs winswssnwsws!


"ellipsisessieses"의 "e"는 "ellipses"(첫 번째 "e"제외)에서 온 것입니다.
Leaky Nun

15
나는 아직도 줄임표를 복수화하는 방법을 모른다 ... 편집 : 분명히 타원입니다.
완전히 인간적인

1
2 단계의 경우 첫 글자를 추가하지 말고 e 만 추가해야한다고 생각합니다
벤젠

@ 벤젠이 더 이해가 되겠지만 너무 늦었습니다.
programmer5000

2
그것은의 타원 . -is로 끝나는 단어와 -e로 끝나는 단어에 대해 철자가 같지만 발음이 다른 다른 복수형은 입니다.

답변:


16

자바 스크립트 (ES6), 58 57 바이트

NB :이 젤리 답변 에서 Jonathan Allan과 같은 트릭을 사용하는 것으로 나타났습니다 (게시 후 알았지 만).

Jonathan Allan 덕분에 1 바이트 절약

문자열 배열에서 작동합니다.

s=>s.map(s=>s+'01120101'.replace(/./g,n=>s.substr(-n,1)))

테스트 사례


우와, 멋지다! 좋은 작업!
programmer5000

나는 당신이 대체하여 바이트를 저장할 수 있다고 생각 2110212101120101n-2함께 -n.
Jonathan Allan

@JonathanAllan 잘 잡아라. 감사!
Arnauld

11

젤리 ,  13 12  11 바이트

⁽×ʠb3’ịṭµ€K

문자 목록을 가져와 공백으로 구분 된 출력을 인쇄하는 전체 프로그램입니다.

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

어떻게?

⁽×ʠb3’ịṭµ€K - Main link: list of lists of characters e.g. ["this","is","it"]
        µ€  - for each word in the input:            e.g. "this"
⁽×ʠ         -   base 250 literal 5416                     5416
   b3       -   converted to base 3                       [2,1,1,0,2,1,2,1]
     ’      -   decrement                                 [1,0,0,-1,1,0,1,0]
      ị     -   index into the word                       "tssitsts"
       ṭ    -   tack to the word                          ["this",["tssitsts"]]
          K - join the results with spaces                ["this",["tssitsts"]," is",["issiisis"]," it",["ittiitit"]]
            - implicit print                              thistssitsts isissiisis itittiitit

또는 단어 목록을 단어 목록으로도 11 바이트로 사용할 수 있습니다 .

⁽×ʠb3’ị;@µ€

⁽×ʠb3’또한 치환 될 수 4,⁵Bj-동일한 바이트 카운트
( [4,10]이진된다 [[1,0,0],[1,0,1,0]]의해 결합 -1이다 [1,0,0,-1,1,0,1,0]).


공백으로 결과를 결합해야합니까? 리스트 /리스트리스트를 출력 할 수 있습니다.
programmer5000 1

@ programmer5000 예, 공백과 결합하는 것은 선택 사항입니다.
ASCII 전용

@ programmer5000 대체 답변은 11 번입니다. 주요 답변 아래에 제공 한 목록을 반환합니다 ( K모나 딕 링크로 반환 된 목록이 1이 아니기 때문에 기본 목록 을 10으로 낮추는 방법은 없습니다) 레벨 심도는 lax I / O를 너무 멀리 밀어 넣는 것으로 생각합니다. 즉 ["this", "is", "it"], 반환 값을 입력하는 경우 [['t','h','i','s',"tssitsts"],['i','s',"issiisis"],['i','t',"ittiitit"]]( "..."는 문자 목록 임) 전체 프로그램으로 인쇄하도록 남겨두면 스매쉬됩니다. – All 함께 thistssitstsisissiisisitittiitit)
Jonathan Allan

7

05AB1E , 12 바이트

εD•Lz•3вÍèJ«

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

설명

ε              # apply on each word in input
 D             # duplicate the word
  •Lz•         # push the base-255 compressed number 5416
      3в       # convert to a list of base-3 digits (yields [2, 1, 1, 0, 2, 1, 2, 1])
        Í      # subtract 2 from each (yields [0, -1, -1, -2, 0, -1, 0, -1])
         è     # index into the word with these numbers
          J    # join to string
           «   # append to the original word

1
Hehe, 좋은 마음 ...
Jonathan Allan

@JonathanAllan : 예, 우리는 그것과 똑같은 생각을 가지고있었습니다. 젤리 압축이 이번에 당일 승리 :)
Emigna




4

, 20 바이트

F⪪S «ι↑E”o∨↙8”§ι±Iκ→

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 이것을 코딩 한 후에 @Arnauld의 답변을 읽었을 뿐이지 만 이것은 기본적으로 포트입니다. 설명:

F   «                   Loop over
  S                     Input string
 ⪪                       Split at spaces
     ι                  Print the word
        ”o∨↙8”          Compressed string 01120101
       E                Map over each character
                 Iκ     Cast character to integer
                ±       Negate
              §ι        Circularly index into word
      ↑                 Print array upwards, prints each element rightwards
                    →    Move right


@ ASCII-only -rs플래그에 여분의 바이트를 추가 할 필요가 없습니까?
Neil

잘 모르겠습니다. -rs그래도 입력 프롬프트 인쇄를 비활성화 할 수
ASCII 전용

-rs대신 모드를 기본값으로 만들어야 합니까?
ASCII 전용


3

자바 스크립트 (ES6), 74 60 바이트

s=>s.map(s=>s+(a=s[l=s.length-1],b=s[0])+a+a+s[l-1]+b+a+b+a)

입력을 배열로 받아서 배열을 출력합니다.

Programmer5000 덕분에 -9 바이트

테스트 사례 :


3

Mathematica, 89 바이트

((f[a_]:=#~StringTake~a;k=#<>(q=f@1)<>(w=f[-1])<>w<>f@{-2}<>q<>w<>q<>w)&/@StringSplit@#)&

1
Ellipsisessieses내장 수학이 없습니까? :(
programmer5000



3

파라 독 (v0.2.10), 13? 바이트 (CP-1252)

µ96Qó3BÌDX=v+

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

단어 목록을 가져 와서 스택에 단어 목록을 만듭니다.

기본 3 트릭의 작은 변형입니다. 어쩌면 내 기본 250 압축기에 대해 작업해야 할 때입니다.

설명:

μ             .. Map the following block over each word (the block is
              .. terminated by }, but that doesn't exist, so until EOF)
              .. (The word is on the stack now.)
 96Qó         .. 96 * 26 (Q in base 26) = 2496, a hack to prevent us from
              .. needing a space to separate this from the following number.
     3B       .. Convert 2496 to base 3 to get [1,0,1,0,2,1,1,0]
       ÌD     .. Negate and reverse to get [0,-1,-1,-2,0,-1,0,-1]
         X    .. Push the loop variable: the word being mapped over
          =v  .. Index, vectorize; map over the indices by indexing them
              .. into the word
            + .. Concatenate with the original word

(바이트 계산 질문 : 이제 TIO에서 이것을 실제로 보여 드리겠습니다. 스택에서 단어 목록을 가져 와서 스택에 단어 목록을 표시하지만 실제로는 해당 단어 목록으로 많은 것을 할 수 없습니다 µ로 시작한 블록을 닫지 않으면 닫는 중괄호를 세어야합니까?)


1
닫는 버팀대를 묶어야합니까? 예, 필요한 경우
Outgolfer Erik

3

Wolfram 언어 / 수학, 66 바이트

StringJoin[StringSplit[#,""]/.{a_,___,b_,c_}:>{#,a,c,c,b,a,c,a,c}]&

그냥 빨리 채찍질하면 여기 저기 약간의 개선이있을 수 있습니다.




2

자바 8, 117 바이트

a->{int i=0,l;for(String s:a){char c=s.charAt(0),d=s.charAt(l=s.length()-1);a[i++]+=""+c+d+d+s.charAt(l-1)+c+d+c+d;}}

입력을 문자열 배열로 가져 와서 바이트를 절약하기 위해 새 배열을 반환하는 대신이 원래 배열을 수정했습니다.

골프를 더 많이 할 수 있습니다 ..

설명:

여기에서 시도하십시오.

a->{                          // Method with String-array as parameter and no return-type
  int i=0,                    //  Index-integer (starting at 0)
      l;                      //  Length-integer which we use multiple times
  for(String s:a){            //  Loop over the input array
    char c=s.charAt(0),       //   The first character of the word
         d=s.charAt(          //   The last character of the word
            l=s.length()-1);  //    and set `l` at the same time to `length()-1`
    a[i++]+=                  //   Append to the current value in the array:
      ""                      //    String so the characters aren't appended as integers
      +c                      //    + the first character
      +d+d                    //    + two times the last character
      +s.charAt(l-1)          //    + the single-last character
      +c+d+c+d;               //    + the first + last character two times
  }                           //  End of loop
}                             // End of method

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