Bir dizeyi detriplicate


39

Birçok dilde, yinelenenlerden kurtulmanın ya da bir listeyi ya da dizgiyi "tekilleştirmeyi" ya da "benzersizleştirmeyi" önleyici yöntemleri vardır. Daha az yaygın olan bir görev bir dizgiyi "detriplicate" etmektir. Yani görünen her karakter için ilk iki oluşum tutulur.

İşte silinmesi gereken karakterlerin etiketlendiği bir örnek ^:

aaabcbccdbabdcd
  ^    ^ ^^^ ^^
aabcbcdd

Göreviniz tam olarak bu işlemi uygulamaktır.

kurallar

Giriş tek, muhtemelen boş bir dizedir. ASCII aralığında yalnızca küçük harfler içerdiğini varsayabilirsiniz.

Çıktı, dizede en az iki kez görünmüş olan tüm karakterleri kaldırılmış tek bir dize olmalıdır (bu nedenle en soldaki iki oluşum korunur).

Dizeler yerine karakter listeleriyle (veya singleton dizeleriyle) çalışabilirsiniz, ancak biçim girdi ve çıktı arasında tutarlı olmalıdır.

Bir program veya fonksiyon yazabilir ve standart girdi alma ve çıktı alma yöntemlerimizden herhangi birini kullanabilirsiniz .

Herhangi bir programlama dilini kullanabilirsiniz , ancak bu boşlukların varsayılan olarak yasak olduğunu unutmayın .

Bu , yani en kısa geçerli cevap - bayt cinsinden - kazanır.

Test Kılıfları

Her satır çifti bir test durumu, girdi ve çıktı.



xxxxx
xx
abcabc
abcabc
abcdabcaba
abcdabc
abacbadcba
abacbdc
aaabcbccdbabdcd
aabcbcdd

Liderler Sıralaması

Bu yazının altındaki Yığın Parçacığı, cevaplardan a) dil başına en kısa çözümün bir listesi olarak ve b) genel bir lider tablosu olarak oluşturur.

Cevabınızın göründüğünden emin olmak için, lütfen aşağıdaki Markdown şablonunu kullanarak cevabınızı bir başlık ile başlatın:

## Language Name, N bytes

Gönderinizin Nbüyüklüğü nerede ? Puanınızı artırmak varsa, olabilir onları içinden vurarak, başlığa eski hesapları tutmak. Örneğin:

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

Başlığınıza birden fazla sayı eklemek istiyorsanız (örneğin, puanınız iki dosyanın toplamı olduğundan veya tercüman bayrağı cezalarını ayrı ayrı listelemek istediğiniz için), gerçek puanın başlıktaki son sayı olduğundan emin olun :

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

Dil adını, daha sonra pasajda görünecek bir bağlantı da yapabilirsiniz:

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


5
Singleton dizeleri ... stringletons?
dkudriavtsev

Yanıtlar:



15

JavaScript (ES6), 42 48

Düzenle Bir kuyruklu 6 bayt kaydedildi thx @Neil

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

Açıklama: kHer karakter için bilgi saklamak için 'a' ... 'z' özelliklerini kullanırım (k nesnesi sadece baytları kaydetmek için bu durumda bir regexp'dir). Bu özellikler başlangıçta undefined. Bir sayı ekleyerek javascript undefinedveren NaNbir dize 'X' (oldukça mantıklı), fakat ekleme verir "undefinedX"- uzunluğunda 10 (saçma) bir dizi. Daha fazla karakter ekleyerek daha uzun dizeler elde edersiniz. Belirli bir karakter için elde edilen dize 11'den uzunsa, bu karakter çıktıya kopyalanmaz.

Ölçek

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)


Kesin olarak boş bir çizgiyi konuşmak, test durumlarından biridir.
Neil

@Neil tamam boş dize sınamasını ekledi
edc65

Dizi girişine ve çıkışına geçerseniz, 12 karakter daha kaydetmek için .filter komutunu kullanabilirsiniz. v=>v.filter(x=>!(v[x]+=x)[11]). "Tanımsız" kesmede Kudos.
Grax32

@Grax thanx ama çok farklı. Kendiniz yayınlamalısınız
edc65

14

Python 2,48 bayt

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

c[r.count(c)/2:]aynı uzunlukta bir alternatiftir c*(r.count(c)<2).


49 bayt:

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

12

Retina , 17 bayt

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

Çevrimiçi deneyin!

Basit regex değiştirme - zaten iki kez göründüyse bir karakterle eşleştirin ve kaldırın.


Ayrıca bir döngü ve her ikisi de 18 bayt olan tekrarlanan bir grup{2} denedim .
Kobi

1
Son eklenen bir özelliği kullanarak 14 var. ;)
Martin Ender

Bir şey olduğunu biliyordum. Limitlere baktım, muhtemelen o değil. Tekrar kontrol edeceğim.
Kobi

3
Ah, sanırım Martin'in cevabını buldum. Daha önce denemekte biraz sorun yaşadım, çünkü tekilleştirmenin çok satırlı bir girdi üzerinde nasıl çalışacağını düşünmedim. Spoiler (satır başına modu etkinleştirmek için 5 bayt eklenmiş): retina.tryitonline.net/…
FryAmTheEggman

@ FryAmTheEggman - Güzel, bunu bulamadım. Cevap eklemek için çekinmeyin - bunun cevabımdan çok farklı olduğunu düşünüyorum ve düzenleme konusunda rahat hissetmedim :P. Teşekkürler!
Kobi

6

Brachylog , 25 bayt

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

Çevrimiçi deneyin! veya tüm test durumlarını doğrulayın .

açıklama

Bu işe yarıyor çünkü s - Subsetilk önce daha büyük alt kümelerle birleşecek, bu nedenle örneğin "aaa"daha "aa"önce deneyecek "a".

  • Ana tahmin:

      .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
    
  • Öngörü 1: Tüm karakterlerin yalnızca en çok iki kez göründüğünü kontrol edin. Giriş =[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. Öngörü: Bir karakterin oluşumunu elde edin. Giriş =[String:Char]

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

6

> <> , 22 bayt

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

Çevrimiçi deneyin! Şimdiye kadar sayıları takip etmek için kod kutusunu kullanır.

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 bayt

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

Bu, bir dize alan ve döndüren bir monadik işlevi tanımlar. Burada dene . Kullanımı:

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

açıklama

Daha kısa olduğu ortaya çıktığından, bazı diğer çözümlerin kullandığı algoritmaya geçtim ...

#~(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

Haskell, 40 39 bayt

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

Kullanım örneği: foldl(\s c->s++[c|filter(==c)s<=[c]])"" "aaabcbccdbabdcd"-> "aabcbcdd".

Şimdiye kadarki ctüm cs dizelerinin tek kelimeyle küçük veya eşit olması durumunda , bir sonraki karakteri saklayın [c].

Düzenleme: @xnor, listeyi anlama özelliğine geçerek bir bayt kaydetti filter. Teşekkürler!


Alternatifiniz filter(==c)s<=[c]bir bayttan tasarruf etmek için yapabilir .
xnor

5

Perl, 22 bayt

İçin 21 bayt kodu + 1 -p.

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

kullanım

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

5

C, 57 bayt

Çağrı f()detriplicate için iple. İşlev parametresini değiştirir. forDöngü bildirimi nedeniyle C99 gerektirir .

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

Beyanını silk beyanına ekleyemez formisin?
Martin Ender

C99'da yapabilirsiniz. Sadece, golfleri C89 ile uyumlu tutmayı sevdiğim için yapmadım.
owacoder

5

JavaScript (ES6), 35 bayt

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

Bir karakter dizisini girdi olarak alır ve detriplicated diziyi döndürür.


Güzel. c=>(s[c]=-~s[c])<3Birkaç byte tasarruf etmek için yapabilirsiniz .
ETHProductions

Dizileri girdi olarak kullanabileceğinizi ve kullanarak bir işlev yazdığınızı özledim map. Golf aslında senin gibi görünüyordu. asıl fark, değiştirirseniz birkaç bayttan tasarruf sağlayacak olan ödevdir. s.filter(c=>(s[c]=s[c]+1|0)<3)33 bayt deneyin . DÜZENLEME: Hay aksi, cevapsız :) bile daha iyi benim yukarıdaki yorum,
Jan

4

PowerShell v2 +, 31 bayt

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

Sadece PowerShell operatörüne yerleştirilmiş olan Kobi'nin Retina cevabındakiyle aynı regex'i kullanır -replace. Her ikisi de arka planda .NET flavor regex kullandığı için işe yarıyor.

Alternatif olarak, regex olmadan, 56 bayt

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

S $bile önceden doldurulmuş bir yardımcı dizi oluşturur 0. Giriş dizesini $args[0]bir dizi olarak charatar, onu bir döngüden geçirir |%{...}. Her yineleme akım karakteri verir $_bir dize olarak "$_"sadece bir Boole çarpımına $TRUE(dolaylı için döküm 1yardımcı dizideki uygun nokta az ise burada) 2(yani, zaten iki kez this char görmedim). Sonuçta ortaya çıkan karakter dizileri parantez içine alınmış ve -jointek bir çıkış dizisi oluşturmak üzere bir araya getirilmiştir. Bu, boru hattında bırakılan ve çıktının kapalı olduğu.


regex rakipsiz. :) bir hashtable sonra daha düzenli ifade olmayan varyant için bir dizidir beleave: $b=@{};-join($args|% t*y|?{++$b.$_-lt3}).
mazzy

1
@mazzy Regex ve kodunuz olmayan değişken için, PowerShell 2'den daha yeni bir sürüm olması gerekir. Sonuç olarak, bu cevabı değiştirmeden tutacağımı düşünüyorum. Yine de kodunuzu ayrı bir cevap olarak gönderebilirsiniz!
AdmBorkBork

karma 3.0 sürümünde ortaya çıktı mı? Tamam. Teşekkürler.
mazzy

4

Mathematica, 39 bayt

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

Anonim işlev Girilen karakter listesini alır ve girilen listeyi çıktı olarak döndürür. Listeyi katlama ve üçlü öğeleri reddetme yöntemini kullanır, bu çok karmaşık değildir.


4

05AB1E, 12 bayt

vyˆ¯y¢O3‹iy?

açıklama

v            # for each char in input
 yˆ          # push to global array
   ¯y¢O3‹i   # if nr of occurrences are less than 3
          y? # print it

Çevrimiçi deneyin


4

MATL , 8 bayt

t&=Rs3<)

Çevrimiçi deneyin!

açıklama

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

Örnek

Girdi varsayarak 'aaababbc', yığın belirtilen ifadelerden sonra şunları içerir:

  • 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

Retina , 14 bayt

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

Tüm test durumlarını doğrulayın. ( %Satır başına modu etkinleştirir)

Kobi'nin yaklaşımından bir kaç bayt tasarruf etmek için yeni "Deduplicate" aşamasını kullanır . Deduplicate, tüm eşleşmelerin listesini regex'te toplar ve hepsini boş dize ile değiştirir. Düzenli ifade, dizede zaten bir kez görünen bir karakterle eşleşir; bu, ilk ikisinin tutulacağı anlamına gelir.



3

K, 18 Bayt

  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 ücretsiz indirmek için kullanılabilir ; K6 geliştiriliyor . KDB'yi indirdiyseniz, ters eğik çizgiyle K içine alabilirsiniz .

İlk bazı sözdizimi bu apart ayrılmış olarak görüntülemek için en kolay olabilir ama: g:xkümeler giçin x. x{x+1} değişkenini alan bir fonksiyondur . K'de bir işlevin ilk argümanı (ikincisi ve üçüncüsüdür . Dördüncü bir gerek yok).xyz

Şimdi:

x:"aaabcbccdbabdcd"

=xüreten grup x anlamına gelir :

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

2#'Her biri üreten (alınan) iki alınan anlamına gelir

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

Gördüğünüz gibi, bunlar her karakterin ilk iki karşılaşmasının ofsetleri. 2 jeneralize olabilir.

,/her birine katılmak anlamına gelir ve sık sık raze denir . Bize sadece sözlüğümüzün değerlerini kazandıracak. Böylece, ,/"abcd"!(0 1;3 5;4 6;8 12)üretir:

0 1 3 5 4 6 8 12

sıralamamız gereken. {x@<x}@K programcılar sık görmek bir deyim (Q diyor olduğunu asc diyor), sınıf-up x kaynağındaki x . Parçalara ayırmak:

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

orijinal diziden alınmasını istediğimiz dizinin dizisini döndürdü. y'nin xx@y anlamına gelir , bu yüzden diziyi dizinin indeksleriyle indeksler (eğer mantıklıysa).

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

ki şimdi sadece orijinal dizimize endeksledik. Biz olabilir ki x@burada ama K buradan yararlanabilir gerçekten güçlü bir kavram destekler: Fonksiyon uygulama indeksleme olduğunu. Bunun anlamı a[0]sıfırıncı yarığa bakıyor olabilir aya da 0çağrılan işleve uygulanıyor olabilir a. Biz gerekli nedeni @daha önce de {x@<x}çünkü x<yaraç xs az ys daha K Operatörler bir diyadik formu (iki argüman) ve APL gelen bir monadic formu (tek argüman) var. Q bu “kararsızlığa” sahip değil.


PPCG'ye Hoşgeldiniz! Harika ilk cevap. :)
Martin Ender

Birkaç sorum var. 1. K4, bağlandığınız dille aynı dilde mi (Q / kdb +)? 2. Bir girişte fonksiyonunuzu nasıl arayacağınızı ya da testVectors.txt içindeki öğelerin nasıl biçimlendirilmesi gerektiğini gösterebilir misiniz?
Dennis,

@Dennis 1. Evet. Q'dan K'ye ulaşmak için ters eğik g"aaabcbccdbabdcd"
çizgiye

Tamam teşekkürler. Dosya kısmı çalışamadı, ama g"..."hile yapıyor. Ne yazık ki, kodunuz aabbccgiriş için döndürür abc.
Dennis,

@Dennis Yanlış bir şey yapmış olabilirsiniz: {x{?x@<x}@,/2#'=x}"abc"kesinlikle geri döner "abc". "aabbcc"Ayrımı kaçırırsanız geri ?dönerdi.
geocar 15

2

Python 2, 51 bayt

f=lambda s:s and f(s[:-1])+s[-1]*(s.count(s[-1])<3)

İdeone üzerinde test et .


2

Java 8 lambda, 90 karakter

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

Ungolfed versiyonu:

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;
    }
}

Tüm ascii karakterleri için bir dizi oluşturur. Bir karakter ortaya çıkarsa, karşılık gelen sayaç arttırılacaktır. 2'den büyükse, karakter sonuç dizgisine eklenmez. Çok kolay, çok kısa;)


2

Perl 6, 27 bayt

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

Açıklama:

{.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

(Not: Perl 6, kız kardeşi Perl 5 kadar "golf odaklı" değildir ... Öyleyse evet, <gerekli olmadan önce bu boşluk . %.{}Anonim bir karmadır).



2

SmileBASIC, 77 72 69 68 bayt

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

Açıklaması:

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'ye Hoşgeldiniz! Güzel ilk mesaj!
Rɪᴋᴇʀ

1

Common Lisp, 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)

Oldukça baskılı

(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 Bayt

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 Bayt

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

1

Ruby , 79 62 57 bayt

Bu oldukça hantal, ama şu anda daha iyi golf oynayabileceğimden emin değilim. Herhangi bir golf önerisi açıktır. Çevrimiçi deneyin!

Düzenleme: -17 bayt Value Ink sayesinde, üçlü karakterleri kaldırmak için daha kolay bir yol önerebilir. -5 byte .uniqyöntemini kaldırma .

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

Ungolfed:

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 bayt:->s{s.chars.uniq.map{|a|s[s.rindex a]=""while s.count(a)>2};s}
Value Ink

1

JavaScript, 30 bayt

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

@ Edc65'in kullandığı metodu kullanarak saymak için bir dizi filtre kullanmak mümkün oldu. İlk defa karakter görünür, nesne değeri "tanımsız" artı karakter (yani "tanımsızx") olur. Nesne değeri bir dahaki sefere "undefinedxx" olur.

Bundan sonra, v [x] [11] doğru döndürür ve işleç olmayanla birleştirildiğinde false, daha önce iki kez görünen karakterlerin filtrelenmesi gerekir.


0

Javascript (harici kütüphaneyi kullanarak) (80 bayt)

Bu iyiydi! Kazanmadı ama eğlenceliydi

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

Lib bağlantısı: https://github.com/mvegh1/Enumerable/

Kod açıklaması: Yöntem bir dize olarak kabul edilir, kütüphane onu char dizisi olarak ayrıştırır ve Where cümlesi, 'a' hashasp değerini mevcut karakterin varlığı için denetleyen karmaşık bir süzme belirtecidir. Varsa, artış sayacı, aksi halde 1 olarak ayarlanır. <2 ise, yüklem (ve geçerli karakter) geçer, başka başarısız olur.

görüntü tanımını buraya girin


Bir kullanarak önleyebilirsiniz returnancak işlev parantez içinde bir ifadelerin virgülle ayrılmış listesini yaparak: n=>(a={},_From(n)....). Son ifade, dönüş değeridir. Senin içinde Whereişlev sen ara ortadan kaldırabilir btamamen atama veya artım sonucu karşı karşılaştırarak: x=>(a[x]?a[x]++:a[x]=1)<2.
apsillers

Son olarak, string-split elipsleri ve filterile join: kullanarak harici bir kütüphane kullanmaktan kaçının (ve baytları kaydedin) [...n].filter(...).join(""). Değiştirirken doğru / yanlış mantığı çevirin Whereiçin filter.
apsillers

Ahh iyi gözlemler! Ben daha sonra önerinize daha yakından bir göz atın
applejacks01

0

Clojure, 72 bayt

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

Çok fazla bayt ...


0

Pascal (FPC) , 103 bayt

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.

Çevrimiçi deneyin!

Açıklama:

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.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.