문자열을 제거


39

많은 언어에는 중복을 제거하거나 목록이나 문자열을 "중복 제거"하거나 "고정화"하는 기본 제공 방법이 있습니다. 덜 일반적인 작업은 문자열을 "중복 제거"하는 것입니다. 즉, 나타나는 모든 문자에 대해 처음 항목이 유지됩니다.

삭제해야 할 문자에 다음과 ^같이 레이블이 지정된 예는 다음과 같습니다.

aaabcbccdbabdcd
  ^    ^ ^^^ ^^
aabcbcdd

당신의 임무는 정확히이 작업을 구현하는 것입니다.

규칙

입력은 하나의 빈 문자열 일 수 있습니다. ASCII 범위의 소문자 만 포함한다고 가정 할 수 있습니다.

출력은 문자열에서 이미 두 번 이상 나타난 모든 문자가 제거 된 단일 문자열이어야합니다 (그래서 가장 왼쪽에있는 두 항목은 유지됨).

문자열 대신 문자 목록 (또는 싱글 톤 문자열)으로 작업 할 수 있지만 형식은 입력과 출력간에 일관되어야합니다.

당신은 쓸 수 있습니다 프로그램이나 기능을 하고, 우리의 사용 표준 방법 입력을 수신하고 출력을 제공합니다.

모든 프로그래밍 언어를 사용할 수 있지만 이러한 허점 은 기본적으로 금지되어 있습니다.

이것은 이므로 바이트 단위로 측정 된 가장 짧은 유효한 답변이 이깁니다.

테스트 사례

모든 라인 쌍은 하나의 테스트 케이스이며, 입력과 출력이 뒤 따릅니다.



xxxxx
xx
abcabc
abcabc
abcdabcaba
abcdabc
abacbadcba
abacbdc
aaabcbccdbabdcd
aabcbcdd

리더 보드

이 게시물의 하단에있는 스택 스 니펫은 답변 a) 언어별로 가장 짧은 솔루션 목록으로, b) 전체 리더 보드로 답변에서 리더 보드를 생성합니다.

답변이 표시되도록하려면 다음 마크 다운 템플릿을 사용하여 헤드 라인으로 답변을 시작하십시오.

## Language Name, N bytes

N제출물의 크기는 어디에 있습니까 ? 당신이 당신의 점수를 향상시킬 경우에, 당신은 할 수 있습니다 를 통해 눈에 띄는에 의해, 헤드 라인에 오래된 점수를 유지한다. 예를 들어 :

## Ruby, <s>104</s> <s>101</s> 96 bytes

헤더에 여러 숫자를 포함하려는 경우 (예 : 점수가 두 파일의 합계이거나 인터프리터 플래그 페널티를 별도로 나열하려는 경우) 실제 점수가 헤더 의 마지막 숫자 인지 확인하십시오 .

## Perl, 43 + 3 (-p flag) = 45 bytes

언어 이름을 링크로 만들면 스 니펫에 표시됩니다.

## [><>](http://esolangs.org/wiki/Fish), 121 bytes


5
싱글 톤 스트링 ...
dkudriavtsev

답변:



15

자바 스크립트 (ES6), 42 48

편집 6 바이트 저장 들으 무려 @Neil

s=>s.replace(k=/./g,c=>(k[c]+=c)[11]?'':c)

설명 : 객체의 속성 'a'... 'z' k를 사용하여 각 문자에 대한 정보를 저장합니다 (이 경우 객체 k는 바이트를 절약하기 위해 정규 표현식입니다). 이러한 속성은 처음에 undefined있습니다. 자바 스크립트에서 숫자를 undefined제공하면 NaN(꽤), 문자열 'X'를 추가하면 "undefinedX"길이가 10 (실리) 인 문자열이 나타납니다. 더 많은 문자를 추가하면 더 긴 문자열이 나타납니다. 주어진 문자에 대해 얻은 문자열이 11보다 길면 해당 문자가 출력으로 복사되지 않습니다.

테스트

F=
s=>s.replace(k=/./g,c=>(k[c]+=c)[11]?'':c)

test=`

xxxxx
xx
abcabc
abcabc
abcdabcaba
abcdabc
abacbadcba
abacbdc
aaabcbccdbabdcd
aabcbcdd`.split`\n`
for(i=0;i<test.length;)
  a=test[i++],b=test[i++],r=F(a),
  console.log(r==b?'OK':'KO',a,'->',r,b)


빈 줄을 엄격하게 말하면 테스트 사례 중 하나입니다.
Neil

@Neil ok 빈 문자열 테스트 추가
edc65

배열 입력 및 출력으로 전환하면 .filter를 사용하여 12자를 더 저장할 수 있습니다. v=>v.filter(x=>!(v[x]+=x)[11]). "정의되지 않은"해킹에 대한 전문가.
Grax32

@Grax 고맙지 만 너무 다릅니다. 직접 게시해야 함
edc65

14

파이썬 2, 48 바이트

lambda s:reduce(lambda r,c:r+c*(r.count(c)<2),s)

c[r.count(c)/2:]의 길이가 같은 대안 c*(r.count(c)<2)입니다.


49 바이트 :

r=''
for c in input():r+=c*(r.count(c)<2)
print r

12

레티 나 , 17 바이트

(.)(?<=\1.*\1.+)

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

간단한 정규식 바꾸기-문자가 이미 두 번 나타나면 일치하고 제거하십시오.


또한 루프반복 그룹을{2} 모두 18 바이트로 시도 했습니다 .
Kobi

1
최근에 추가 된 기능을 사용하여 14가 있습니다. ;)
Martin Ender

나는 무언가가 있다는 것을 알았습니다. 나는 아마 그 한계가 아닌 한계를 보았습니다. 다시 확인하겠습니다.
Kobi

3
아, 나는 Martin의 답을 찾았다 고 생각합니다. 이전에 시도했을 때 문제가 발생했습니다. 중복 제거가 여러 줄 입력에서 어떻게 작동하는지 고려하지 않았기 때문에 생각합니다. 스포일러 (라인 당 모드를 활성화하기 위해 5 바이트 추가) : retina.tryitonline.net/…
FryAmTheEggman

@FryAmTheEggman-니스, 나는 이것을 찾지 못했습니다. 답변을 자유롭게 추가하십시오. 답변과 너무 다르다고 생각하여 편하게 편집 할 수는 없습니다 :P. 감사!
Kobi

6

Brachylog , 25 바이트

.v|s.g:.z:1a
:2fl<3
he~t?

온라인으로 사용해보십시오! 또는 모든 테스트 사례를 확인하십시오 .

설명

s - Subset더 큰 하위 집합을 먼저 통합하므로 예를 들어 이전에 "aaa"시도 "aa"하기 때문에 작동합니다 "a".

  • 주요 술어 :

      .v         input = Output = ""
    |          Or
      s.         Output is an ordered subset of the input
      g:.z       Zip each character of the output with the output itself
      :1a        Apply predicate 1 on each element of the zip
    
  • 술어 1 : 모든 문자가 최대 두 번만 나타나는지 확인하십시오. 입력 =[String:Char]

    :2f        Find all valid outputs of predicate 2 (i.e. one output per occurence
                   of the char)
    l<3        There are less than 3 occurences
    
  • 술어 2 : 캐릭터의 등장. 입력 =[String:Char]

    he         Take a character of the string in the input
      ~t?      That character is the char of the input
    

6

> <> , 22 바이트

i:0(?;::9g:}2(?o{1+$9p

온라인으로 사용해보십시오! 코드 박스를 사용하여 지금까지 카운트를 추적합니다.

i                       Read a char c of input
 :0(?;                  Halt if EOF
      :                 Make a copy - stack has [c c] at the top
       :9g              Get count stored at (c, 9)
          :}            Copy the count and move to bottom of stack
            2(?o        If the count is less than 2, output c
                {1+     Move the count back to the top of the stack and increment
                   $9p  Update cell at (c, 9)
                        [Instruction pointer moves to start as ><> is toroidal]

6

J, 20 15 바이트

#~(3>[+/@:={:)\

문자열을 받아서 리턴하는 모나드 함수를 정의합니다. 여기서 사용해보십시오 . 용법:

   f =: #~(3>[+/@:={:)\
   f 'abaacbb'
abacb

설명

더 짧은 것으로 판명 되었기 때문에 다른 솔루션에서 사용하는 것과 동일한 알고리즘으로 전환했습니다 ...

#~(3>[+/@:={:)\  Input is y.
  (          )\  For each prefix of y:
          =        compute the equality vector
     [     {:      of the prefix and its last element, and
      +/@:         take its sum. Now we have a vector r such that y[i] has its
                   r[i]'th occurrence at position i.
   3>              Mark those coordinates where r[i] < 3.
#~               Remove the non-marked characters from y.

6

하스켈, 40 39 바이트

foldl(\s c->s++[c|filter(==c)s<=[c]])""

사용 예 : foldl(\s c->s++[c|filter(==c)s<=[c]])"" "aaabcbccdbabdcd"-> "aabcbcdd".

지금까지 c의 모든 문자열 c이 사전 형이거나 싱글 톤 문자열보다 작 으면 다음 문자를 유지하십시오 [c].

편집 : @xnor은 목록 이해에서로 전환하여 바이트를 저장했습니다 filter. 감사!


당신의 대안은 filter(==c)s<=[c]바이트를 저장하기 위해 할 수 있습니다.
xnor

5

펄, 22 바이트

21 바이트 코드 + 1 -p.

s/./$&x(2>${$&}++)/ge

용법

perl -pe 's/./$&x(2>${$&}++)/ge' <<< 'aaabcbccdbabdcd'
aabcbcdd

5

C, 57 바이트

전화 f()detriplicate하는 문자열. 이 함수는 매개 변수를 수정합니다. for-loop 선언으로 인해 C99가 필요합니다 .

f(char*p){for(char*s=p,m[256]={0};*s=*p;s+=++m[*p++]<3);}

의 선언을 s첫 번째 문에 넣을 수 없습니까 for?
Martin Ender

C99에서는 가능합니다. 나는 골프 C89와의 호환성을 유지하고 싶기 때문에하지 않았다.
owacoder

5

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

s=>s.filter(c=>(s[c]=(s[c]|0)+1)<3)

문자 배열을 입력으로 받아서 중복 제거 된 배열을 반환합니다.


좋은. 당신이 할 수있는 c=>(s[c]=-~s[c])<3몇 바이트를 저장합니다.
ETHproductions

배열을 입력으로 사용할 수 있고를 사용하여 함수를 작성했다는 것을 놓쳤습니다 map. 골프는 본질적으로 당신처럼 보였다. 가장 큰 차이점은 할당이었습니다.이를 전환하면 몇 바이트가 절약됩니다. s.filter(c=>(s[c]=s[c]+1|0)<3)33 바이트를 시도하십시오 . 편집 : 으악, 나보다 위의 의견을 그리워, 그것은 더 낫다 :)
1

4

PowerShell v2 +, 31 바이트

$args-replace'(.)(?<=\1.*\1.+)'

PowerShell 연산자로 캡슐화 된 Kobi의 Retina answer 와 동일한 정규식을 사용합니다 -replace. 둘 다 백그라운드에서 .NET-flavor 정규식을 사용하기 때문에 작동합니다.

또는 정규 표현식없이 56 바이트

$b=,0*200;-join([char[]]$args[0]|%{"$_"*($b[$_]++-lt2)})

으로 $b미리 채워진 도우미 배열을 만듭니다 0. 입력 문자열 $args[0]char배열 로 캐스트하고 루프를 통해 파이프합니다 |%{...}. 각 반복은 현재 문자 $_를 도우미 배열의 적절한 지점이 (즉, 이미이 문자를 두 번 보지 않은 경우)보다 적을 경우 "$_"에만 $TRUE(내재적으로 1여기에 캐스트되는 ) 부울을 곱한 문자열로 출력합니다 2. 결과로 생성 된 문자열 모음은 -join단일 출력 문자열을 형성하기 위해 Parens로 캡슐화되고 함께 연결됩니다. 그것은 파이프 라인에 남아 있으며 출력은 암시 적입니다.


정규식은 무적입니다. :) 해시 테이블이 regex가없는 변형에 대한 배열보다 낫다는 것을 믿습니다 $b=@{};-join($args|% t*y|?{++$b.$_-lt3}).
mazzy

1
@mazzy 정규식과 코드가없는 변형의 경우 PowerShell 2보다 최신 버전이어야합니다. 결과적 으로이 답변을 변경하지 않고 유지한다고 생각합니다. 그래도 코드를 별도의 답변으로 게시 할 수 있습니다!
AdmBorkBork

해시 테이블이 버전 3.0에 나타 났습니까? 승인. 감사.
mazzy

4

Mathematica, 39 바이트

Fold[If[Count@##<2,Append@##,#]&,{},#]&

익명의 기능. 문자 목록을 입력으로 취하고 중복 제거 된 목록을 출력으로 리턴합니다. 목록을 접고 3 중 요소를 거부하는 방법을 사용합니다. 너무 복잡하지는 않습니다.



4

MATL , 8 바이트

t&=Rs3<)

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

설명

t      % Input string implicitly. Push another copy
&=     % Matrix of all pairwise equality comparisons of string elements
R      % Keep only upper triangular part, making the rest of the entries zero
s      % Sum of each column. This gives a vector with number of occurrences
       % of the current character up to the current position
3<     % True for entries that are less than 3
)      % Use as logical index into initial copy of the input. Display implicitly

input을 가정하면 'aaababbc'스택은 표시된 명령문 뒤에 다음을 포함합니다.

  • t

    'aaababbc'
    'aaababbc'
    
  • t&=

    'aaababbc'
    [ 1 1 1 0 1 0 0 0;
      1 1 1 0 1 0 0 0;
      1 1 1 0 1 0 0 0;
      0 0 0 1 0 1 1 0;
      1 1 1 0 1 0 0 0;
      0 0 0 1 0 1 1 0;
      0 0 0 1 0 1 1 0;
      0 0 0 0 0 0 0 1 ]
    
  • t&=R

    'aaababbc'
    [ 1 1 1 0 1 0 0 0;
      0 1 1 0 1 0 0 0;
      0 0 1 0 1 0 0 0;
      0 0 0 1 0 1 1 0;
      0 0 0 0 1 0 0 0;
      0 0 0 0 0 1 1 0;
      0 0 0 0 0 0 1 0;
      0 0 0 0 0 0 0 1 ]
    
  • t&=Rs

    'aaababbc'
    [ 1 2 3 1 4 2 3 1 ]
    
  • t&=Rs3<

    'aaababbc'
    [ true true false true false true false true ]
    
  • t&=Rs3<)

    'aabbc'
    

4

레티 나 , 14 바이트

D`(.)(?<=\1.*)

모든 테스트 사례를 확인하십시오. ( %라인 별 모드 활성화)

새로운 "중복 제거"단계를 사용하여 Kobi의 접근 방식 보다 몇 바이트를 절약합니다 . 중복 제거는 정규식과 일치하는 모든 목록을 수집하고 첫 번째를 제외한 모든 문자열을 빈 문자열로 바꿉니다. 정규식은 문자열에 이미 한 번 나타나는 문자와 일치하므로 처음 두 문자는 유지됩니다.



3

K, 18 바이트

  g:{x{?x@<x}@,/2#'=x}
  g "abc"
"abc"
  g "aaabcbccdbabdcd"
"aabcbcdd"

  /k4 request test vectors from internet
  R:"GET /raw/ftHe0bpE HTTP/1.0\r\nHost: pastebin.com\r\n\r\n"
  t:+0N 2#t@1_&|\(0=#:)'t:1_"\r\n"\:`:http://pastebin.com:80 R 

  /k4 no internet? use a file called "t.txt" in current directory
  t:+0N 2#0:`:t.txt

  /k6?
  t:+0N 2#0:"t.txt"

  /visually inspect test cases
  g't[0]
(();"xx";"abcabc";"abcdabc";"abacbdc";"aabcbcdd")

  /do all tests pass?
  |/ t[1] {$[0=#x;0=#y;x~y]}' g't[0]
1b

K4는 무료로 다운로드 할 수 있습니다 . K6가 개발 중 입니다. KDB를 다운로드했다면 백 슬래시 로 K를 사용할 수 있습니다 .

이것을 구분하는 것이 가장 쉬운 방법이지만 먼저 구문을 g:x설정 g합니다 x. {x+1}인수 x 를 취하는 함수입니다 . K에서 함수에 대한 첫 번째 인수는 x(두 번째는 y세 번째는 z입니다. 네 번째는 필요하지 않습니다).

지금:

x:"aaabcbccdbabdcd"

=x수단 성 그룹 X를 생성한다 :

"abcd"!(0 1 2 10;3 5 9 11;4 6 7 13;8 12 14)

2#'각각 생산 된 2 개를 의미 합니다.

"abcd"!(0 1;3 5;4 6;8 12)

보시다시피, 이것은 각 문자의 처음 두 경기의 오프셋입니다. 2 일반화 될 수있다.

,/각각에 참여 한다는 것을 의미하며 종종 raze 라고 합니다. 사전 값만 가져옵니다. 따라서 다음을 ,/"abcd"!(0 1;3 5;4 6;8 12)생성합니다.

0 1 3 5 4 6 8 12

정렬해야합니다. {x@<x}@K 프로그래머는 종종 볼 관용구 (Q 그것을 호출이다 오름차순 말한다), 학년까지 X에서 X는 . 그것을 분리 :

  <0 1 3 5 4 6 8 12
0 1 2 4 3 5 6 7

정렬 된 배열의 인덱스를 반환했습니다. 원래 배열에서 가져 왔습니다. x@yx에서 y를 의미 하므로 정렬 인덱스를 사용하여 배열을 색인화합니다 (그렇다면 의미가 있음).

  {x@<x}@0 1 3 5 4 6 8 12
0 1 3 4 5 6 8 12

우리는 이제 원래 배열로 색인을 생성합니다. 우리는 할 수 라고 x@여기지만, K는 우리가 여기서 활용할 수있는 정말 강력한 개념을 지원 : 기능 응용 프로그램 색인입니다. 즉 a[0],의 0 번째 슬롯을 a찾 거나을 ( 0를)라는 함수에 적용 할 수 있습니다 a. 우리가 @이전에 필요 했던 {x@<x}이유 x<yxs가 ys보다 작은 것을 의미 하기 때문 입니다. Q 에는이 "호환성"이 없습니다.


PPCG에 오신 것을 환영합니다! 좋은 첫 번째 대답. :)
Martin Ender

몇 가지 질문이 있습니다. 1. K4가 (Q / kdb +)와 동일한 언어입니까? 2. 입력에서 함수를 호출하는 방법 또는 testVectors.txt의 항목을 어떻게 형식화해야하는지 보여줄 수 있습니까?
Dennis

@ 데니스 1. 예. 백 슬래시를 눌러 Q에서 K로 이동합니다. 2. 질문에 나오는 것처럼 pastebin.com/ftHe0bpE 예제 호출 :g"aaabcbccdbabdcd"
geocar

알았어 고마워. 파일 부분을 작동시킬 수 없지만 g"..."트릭을 수행합니다. 불행히도 코드는 aabbccinput을 반환 합니다 abc.
Dennis

@Dennis 뭔가 잘못했을 수도 있습니다 : {x{?x@<x}@,/2#'=x}"abc"확실히 Returns "abc". "aabbcc"당신이 ?구별 을 그리워하면 반환 됩니다 .
geocar


2

Java 8 람다, 90 자

i->{int[]o=new int[128];String r="";for(char c:i.toCharArray())if(++o[c]<3)r+=c;return r;}

언 골프 버전 :

public class Q86503 {

    static String detriplicate(String input) {
        int[] occurences = new int[128];
        String result = "";
        for (char c : input.toCharArray()) {
            if (++occurences[c] < 3) {
                result += c;
            }
        }
        return result;
    }
}

모든 ASCII 문자에 대한 배열을 만듭니다. 문자가 발생하면 해당 카운터가 증가합니다. 2를 초과하면 문자가 결과 문자열에 추가되지 않습니다. 매우 쉽고 매우 짧음;)


2

펄 6, 27 바이트

{.comb.grep({++%.{$_} <3})}

설명:

{.comb.grep({++%.{$_} <3})}
{                         } # a function
 .comb                      # get all the characters in the argument
      .grep({           })  # filter
               %.           # an anonymous hash (shared between calls to grep)
             ++  {$_}       # increment the value at the current key (current letter).
                            # if the key doesn't exist, it defaults to 0 (then gets incremented)
                      <3    # return True if it wasn't seen 3 times

(참고 : Perl 6은 여동생 Perl 5만큼 "골프 지향" <이 아닙니다. 따라서 예, 그 전에 필요한 공간 이 필요합니다. %.{}익명의 해시입니다.



2

SmileBASIC, 77 72 69 68 바이트

DIM R[#Y]READ S$WHILE""<S$Q=ASC(S$)INC R[Q]?SHIFT(S$)*(R[Q]<3);
WEND

설명 :

DIM R[128] 'array to store letter frequencies
READ S$ 'get input string
WHILE""<S$ 'much shorter than LEN(S$)
 Q=ASC(S$) 'get ascii value of first character in S$
 INC R[Q]
 ?SHIFT(S$)*(R[Q]<3); 'remove the first character of S$, and print it if there are less than 3 occurrences.
WEND

ppcg에 오신 것을 환영합니다! 좋은 첫 포스트!
Rɪᴋᴇʀ

1

커먼 리스프, 127

(lambda(s)(map()(lambda(x)(flet((p(b)(1+(position x s :start b))))(setf s(remove x s :start(p(p 0))))))(remove-duplicates s))s)

예쁜 인쇄

(lambda (s)
  (map nil
       (lambda (x)
         (flet ((p (b)
                  (1+ (position x s :start b))))
           (setf s (remove x s :start (p (p 0))))))
       (remove-duplicates s))
  s)

1

Q , 52 바이트

q)f2:{x asc raze{distinct 2#where x}each x~'/:distinct x}
q)f2 each testList
"xx"
"abcabc"
"abcdabc"
"abacbdc"
"aabcbcdd"
q)

1

K , 27 바이트

    f:{x{x@<x}@,/{?2#&x}'x~'/:?x}
    testList:("xxxxx";"abcabc";"abcdabcaba";"abacbadcba";"aaabcbccdbabdcd")
    f'testList
("xx";"abcabc";"abcdabc";"abacbdc";"aabcbcdd")

1

루비 , 79 62 57 바이트

이것은 다루기 힘들지만, 현재 골프를 훨씬 잘 할 수 있을지 모르겠습니다. 모든 골프 제안은 환영합니다. 온라인으로 사용해보십시오!

편집 : 3 배 문자를 제거하는 골퍼 방법을 제안하여 Value Ink 덕분에 -17 바이트. .uniq메소드 제거에서 -5 바이트

->s{s.chars.map{|a|s[s.rindex a]=""while s.count(a)>2};s}

언 골프 드 :

def g(s)
 s.chars.each do |a|
  while s.count(a) > 2
   i = s.rindex(a)
   s[i] = ""
  end
 end
 return s
end

62 바이트 :->s{s.chars.uniq.map{|a|s[s.rindex a]=""while s.count(a)>2};s}
가치 잉크

1

자바 스크립트, 30 바이트

v=>v.filter(x=>!(v[x]+=x)[11])

@ edc65에서 계산 방법을 사용했지만 배열 필터를 사용했습니다. 문자가 처음 나타날 때 개체 값에 "정의되지 않은"+ 문자 (예 : "정의되지 않은")가 추가됩니다. 다음에 객체 값이 "undefinedxx"가됩니다.

그런 다음 v [x] [11]은 true를 반환하고 not 연산자와 결합하면 false가 이미 두 번 나타난 문자가 필터링됨을 의미합니다.


0

자바 스크립트 (외부 라이브러리 사용) (80 바이트)

이것은 좋은 것이었다! 이기는 않았지만 재미있었습니다.

n=>{a={};return _.From(n).Where(x=>{b=a[x]?a[x]++:a[x]=1;return b<2}).Write("")}

lib에 링크 : https://github.com/mvegh1/Enumerable/

코드 설명 : 메서드는 문자열을 받아들이고 라이브러리는이를 문자열 배열로 구문 분석하며 Where 절은 현재 문자가 있는지 'a'해시 맵을 검사하는 복잡한 필터링 조건 자입니다. 존재하는 경우 증가 카운터, 그렇지 않으면 1로 설정하십시오. <2 인 경우 술어 (및 현재 문자)가 통과하면 실패합니다.

여기에 이미지 설명을 입력하십시오


을 사용하지 않고 return함수를 쉼표로 구분 된 표현식 목록을 괄호로 묶지 마십시오 n=>(a={},_From(n)....). 마지막 표현식은 반환 값입니다. 당신의에서 Where기능, 당신은 중간을 제거 할 수 b완전히 할당 또는 증가의 결과에 대해 비교 : x=>(a[x]?a[x]++:a[x]=1)<2.
apillers

마지막으로, 당신은 문자열 분할 생략하고 사용하는 모든 (바이트 저장)에서 외부 라이브러리를 사용하여 피할 수 filter로를 join: [...n].filter(...).join(""). 변경할 때 참 / 거짓 논리를 뒤집기 Wherefilter.
apillers

아 좋은 관측! 아픈 당신의 제안에 나중에 자세히 살펴
applejacks01

0

클로저, 72 바이트

#(apply str(reduce(fn[r c](if(<(count(filter #{c}r))2)(conj r c)r))[]%))

너무 많은 바이트 ...


0

파스칼 (FPC) , 103 바이트

var a:array['a'..'z']of word;c:char;begin repeat read(c);inc(a[c]);if a[c]<3then write(c)until eof end.

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

설명:

var a:array['a'..'z']of word; //used for counting occurences of characters in the input
                              //array indices are accessed by chars
    c:char;
begin
  repeat
    read(c);                  //read a character from input
    inc(a[c]);                //increment the count of that character (its number in array)
    if a[c]<3 then write(c)   //if this is character's 1st or 2nd occurence, output it
  until eof                   //go back to reading if input is not read completely
end.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.