Lepaskan string


39

Banyak bahasa memiliki cara bawaan untuk menghilangkan duplikat, atau "deduplicate" atau "uniquify" daftar atau string. Tugas yang kurang umum adalah "melumpuhkan" sebuah string. Artinya, untuk setiap karakter yang muncul, dua kejadian pertama disimpan.

Berikut adalah contoh di mana karakter yang harus dihapus diberi label dengan ^:

aaabcbccdbabdcd
  ^    ^ ^^^ ^^
aabcbcdd

Tugas Anda adalah untuk mengimplementasikan operasi ini dengan tepat.

Aturan

Input adalah string tunggal, mungkin kosong. Anda dapat berasumsi bahwa itu hanya berisi huruf kecil dalam rentang ASCII.

Keluaran harus berupa string tunggal dengan semua karakter yang dihapus yang telah muncul setidaknya dua kali dalam string (sehingga dua kejadian paling kiri disimpan).

Alih-alih string Anda dapat bekerja dengan daftar karakter (atau string tunggal), tetapi formatnya harus konsisten antara input dan output.

Anda dapat menulis program atau fungsi dan menggunakan salah satu metode standar kami untuk menerima input dan memberikan output.

Anda dapat menggunakan bahasa pemrograman apa pun , tetapi perhatikan bahwa celah ini dilarang secara default.

Ini adalah , sehingga jawaban terpendek yang valid - diukur dalam byte - menang.

Uji Kasus

Setiap pasangan garis adalah satu test case, input diikuti oleh output.



xxxxx
xx
abcabc
abcabc
abcdabcaba
abcdabc
abacbadcba
abacbdc
aaabcbccdbabdcd
aabcbcdd

Papan peringkat

Cuplikan Stack di bagian bawah posting ini menghasilkan papan peringkat dari jawaban a) sebagai daftar solusi terpendek per bahasa dan b) sebagai papan peringkat keseluruhan.

Untuk memastikan bahwa jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama, menggunakan templat Penurunan harga berikut:

## Language Name, N bytes

di mana Nukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda dapat menyimpan skor lama di headline, dengan mencoretnya. Contohnya:

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

Jika Anda ingin memasukkan beberapa angka dalam tajuk Anda (mis. Karena skor Anda adalah jumlah dari dua file atau Anda ingin membuat daftar hukuman penterjemah secara terpisah), pastikan bahwa skor sebenarnya adalah angka terakhir di tajuk:

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

Anda juga dapat membuat nama bahasa menjadi tautan yang kemudian akan muncul di cuplikan:

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


5
String singleton ... tali senar?
dkudriavtsev

Jawaban:



15

JavaScript (ES6), 42 48

Sunting 6 byte kekalahan disimpan thx @Nil

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

Penjelasan: Saya menggunakan properti 'a' ... 'z' objek kuntuk menyimpan info untuk setiap karakter (objek k adalah regexp dalam hal ini hanya untuk menyimpan byte). Properti ini awalnya undefined. Dalam javascript menambahkan angka untuk undefinedmemberi NaN(cukup masuk akal), tetapi menambahkan string 'X' memberi "undefinedX"- string dengan panjang 10 (konyol). Menambahkan lebih banyak karakter Anda mendapatkan string lebih lama. Jika string yang diperoleh untuk karakter yang diberikan lebih panjang dari 11, karakter itu tidak akan disalin ke output.

Uji

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)


Sebenarnya, garis kosong adalah salah satu kasus uji.
Neil

@Neil ok menambahkan tes string kosong
edc65

Jika Anda beralih ke input dan output array, Anda dapat menggunakan .filter untuk menyimpan 12 karakter lainnya. v=>v.filter(x=>!(v[x]+=x)[11]). Kudos pada hack "tidak terdefinisi".
Grax32

@ Gex thanx tetapi terlalu berbeda. Harus mempostingnya sendiri
edc65

14

Python 2, 48 byte

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

c[r.count(c)/2:]adalah alternatif dengan panjang yang sama c*(r.count(c)<2).


49 byte:

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

12

Retina , 17 byte

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

Cobalah online!

Ganti regex sederhana - cocokkan karakter jika sudah muncul dua kali, dan hapus.


Saya juga mencoba loop , dan grup yang diulang dengan{2} , keduanya dengan 18 byte.
Kobi

1
Saya punya 14 menggunakan fitur yang baru ditambahkan. ;)
Martin Ender

Saya tahu ada sesuatu. Saya melihat batas, mungkin bukan itu. Saya akan periksa lagi.
Kobi

3
Ah, kurasa aku menemukan jawaban Martin. Saya mempunyai beberapa masalah ketika saya mencoba sebelumnya, saya pikir karena saya tidak mempertimbangkan bagaimana deduplicate akan bekerja pada input multi-line. Spoiler (dengan 5 byte ditambahkan untuk mengaktifkan mode per-line): retina.tryitonline.net/…
FryAmTheEggman

@FryAmTheEggman - Bagus, saya tidak menemukan yang ini. Jangan ragu untuk menambahkan jawaban - saya pikir ini terlalu berbeda dari jawaban saya dan saya merasa tidak nyaman mengeditnya :P. Terima kasih!
Kobi

6

Brachylog , 25 byte

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

Cobalah online! atau verifikasi semua kasus uji .

Penjelasan

Ini berfungsi karena s - Subsetakan menyatukan dengan himpunan bagian yang lebih besar terlebih dahulu, jadi misalnya untuk "aaa"itu akan mencoba "aa"sebelumnya "a".

  • Predikat utama:

      .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
    
  • Predikat 1: Periksa bahwa semua karakter hanya muncul paling banyak dua kali. Input =[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
    
  • Predikat 2: Dapatkan kemunculan karakter. Input =[String:Char]

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

6

> <> , 22 byte

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

Cobalah online! Menggunakan kotak kode untuk melacak jumlah sejauh ini.

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 byte

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

Ini mendefinisikan fungsi monadik yang mengambil dan mengembalikan string. Coba di sini . Pemakaian:

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

Penjelasan

Saya beralih ke algoritma yang sama yang menggunakan beberapa solusi lain, karena ternyata lebih pendek ...

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

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

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

Simpan char berikutnya cjika string semua csejauh ini kurang leksikografis atau sama dengan string tunggal [c].

Sunting: @xnatau menyimpan byte dengan beralih dari pemahaman daftar ke filter. Terima kasih!


Alternatif Anda bisa lakukan filter(==c)s<=[c]untuk menghemat satu byte.
xnor

5

Perl, 22 byte

21 byte kode +1 untuk -p.

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

Pemakaian

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

5

C, 57 byte

Panggil f()dengan string untuk melumpuhkan. Fungsi memodifikasi parameternya. Membutuhkan C99 karena fordeklarasi -loop.

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

Tidak bisakah Anda menempatkan deklarasi ske dalam pernyataan pertama for?
Martin Ender

Di C99 Anda bisa. Saya hanya tidak melakukannya karena saya ingin menjaga agar golf tetap kompatibel.
owacoder

5

JavaScript (ES6), 35 byte

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

Mengambil array karakter sebagai input dan mengembalikan array detriplicated.


Bagus. Anda dapat melakukannya c=>(s[c]=-~s[c])<3untuk menghemat beberapa byte.
ETHproduk

Saya melewatkan bahwa Anda dapat menggunakan array sebagai input dan menulis fungsi menggunakan map. Golf itu pada dasarnya tampak seperti milikmu. perbedaan utama adalah penugasan, yang jika Anda beralih akan menghemat beberapa byte. Coba s.filter(c=>(s[c]=s[c]+1|0)<3)selama 33 byte. EDIT: Ups, merindukan komentar di atas saya, yang bahkan lebih baik :)
Jan

4

PowerShell v2 +, 31 byte

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

Menggunakan regex yang sama dengan jawaban Retina Kobi , hanya dienkapsulasi di -replaceoperator PowerShell . Bekerja karena keduanya menggunakan .NET-flavor regex di latar belakang.

Atau, tanpa regex, 56 byte

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

Membuat array pembantu yang $bdiisi sebelumnya dengan 0s. Melemparkan string input $args[0]sebagai char-array, mengirimkannya melalui loop |%{...}. Setiap iterasi mengeluarkan karakter saat ini $_sebagai string "$_"dikalikan dengan Boolean yang hanya $TRUE(secara implisit dilemparkan ke 1sini) jika titik yang sesuai dalam array pembantu kurang dari 2(yaitu, kita belum melihat karakter ini dua kali). Koleksi string yang dihasilkan dienkapsulasi dalam parens dan diedit -joinbersama untuk membentuk string output tunggal. Yang tersisa pada pipa dan output tersirat.


regex tidak terkalahkan. :) Saya beleave hashtable lebih baik maka array untuk varian tanpa regex: $b=@{};-join($args|% t*y|?{++$b.$_-lt3}).
mazzy

1
@ Mazzy Untuk varian tanpa regex dan kode Anda, itu harus versi yang lebih baru dari PowerShell 2. Sebagai hasilnya, saya pikir saya akan menyimpan jawaban ini tanpa perubahan. Anda dapat memposting kode Anda sebagai jawaban terpisah!
AdmBorkBork

apakah hashtable muncul di versi 3.0? Baik. Terima kasih.
mazzy

4

Mathematica, 39 byte

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

Fungsi anonim. Mengambil daftar karakter sebagai input, dan mengembalikan daftar yang dilumpuhkan sebagai output. Menggunakan metode melipat daftar dan menolak elemen rangkap tiga, itu tidak terlalu rumit.


4

05AB1E, 12 byte

vyˆ¯y¢O3‹iy?

Penjelasan

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

Cobalah online


4

MATL , 8 byte

t&=Rs3<)

Cobalah online!

Penjelasan

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

Contoh

Dengan asumsi input 'aaababbc', stack berisi yang berikut ini setelah pernyataan yang ditunjukkan:

  • 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 byte

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

Verifikasi semua kasus uji. ( %Mode per-line diaktifkan)

Gunakan tahap "Deduplicate" baru untuk menyelamatkan beberapa byte dari pendekatan Kobi . Deduplicate mengumpulkan daftar semua pertandingan ke regex dan mengganti semua kecuali yang pertama dengan string kosong. Regex cocok dengan karakter yang sudah muncul sekali dalam string, yang berarti bahwa dua yang pertama akan disimpan.



3

K, 18 Bytes

  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 tersedia untuk diunduh gratis ; K6 sedang dalam pengembangan . Jika Anda telah mengunduh KDB, Anda dapat menggunakan K dengan backslash .

Mungkin paling mudah untuk melihat ini terpecah, tetapi pertama-tama beberapa sintaks: g:xset gke x. {x+1}adalah fungsi yang mengambil argumen x . Dalam K argumen pertama ke suatu fungsi adalah x(yang kedua adalah ydan yang ketiga adalah z. Tidak perlu yang keempat).

Sekarang:

x:"aaabcbccdbabdcd"

=xberarti grup x , yang menghasilkan:

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

2#'berarti dua diambil (dari) masing-masing yang menghasilkan

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

Seperti yang Anda lihat, ini adalah offset dari dua pertandingan pertama dari setiap karakter. The 2 bisa digeneralisasi.

,/artinya gabung masing - masing dan sering disebut raze . Ini akan memberi kita nilai-nilai kamus kita. Jadi, ,/"abcd"!(0 1;3 5;4 6;8 12)menghasilkan:

0 1 3 5 4 6 8 12

yang perlu kita sortir. {x@<x}@adalah idiom yang sering dilihat oleh pemrogram K (Q menyebutnya asc ), yang mengatakan x saat naik kelas x . Pisahkan:

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

mengembalikan indeks array yang diurutkan, yang kami inginkan diambil dari array asli. x@yberarti x at y jadi ini mengindeks array dengan indeks semacam itu (jika itu masuk akal).

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

yang sekarang kita indeks ke array asli kami. Kita dapat mengatakan di x@sini, tetapi K mendukung konsep yang sangat kuat yang dapat kita manfaatkan di sini: aplikasi fungsi sedang diindeks. Itu berarti bahwa a[0]bisa mencari slot nol aatau bisa menerapkan 0fungsi yang disebut a. Alasan kami membutuhkan yang @sebelumnya {x@<x}adalah karena x<yberarti x kurang dari ys : Operator di K memiliki bentuk diad (dua argumen) dan bentuk monadik (satu argumen) yang berasal dari APL. Q tidak memiliki "ambivalensi" ini.


Selamat datang di PPCG! Jawaban pertama yang bagus. :)
Martin Ender

Saya punya beberapa pertanyaan. 1. Apakah K4 bahasa yang sama dengan yang Anda tautkan (Q / kdb +)? 2. Bisakah Anda menunjukkan cara memanggil fungsi Anda pada input atau bagaimana item dalam testVectors.txt harus diformat?
Dennis

@Dennis 1. Ya. Tekan backslash untuk mendapatkan dari Q ke K. 2. Sama seperti yang muncul dalam pertanyaan: pastebin.com/ftHe0bpE contoh panggilan:g"aaabcbccdbabdcd"
geocar

Ok terima kasih. Tidak dapat membuat bagian file berfungsi, tetapi g"..."lakukan triknya. Sayangnya, kode Anda kembali aabbccuntuk input abc.
Dennis

@ Dennis Anda mungkin telah melakukan sesuatu yang salah: {x{?x@<x}@,/2#'=x}"abc"pasti kembali "abc". Ini akan kembali "aabbcc"jika Anda melewatkan ?perbedaan.
geocar

2

Python 2, 51 byte

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

Uji di Ideone .


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

Versi tidak disatukan:

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

Membuat array untuk semua karakter ascii. Jika sebuah karakter muncul, penghitung yang sesuai akan ditingkatkan. Jika lebih dari 2 karakter tidak akan ditambahkan ke string hasil. Sangat mudah, sangat singkat;)


2

Perl 6, 27 byte

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

Penjelasan:

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

(Catatan: Perl 6 tidak "berorientasi golf" seperti saudara perempuannya Perl 5 ... Jadi ya, ruang sebelum <diperlukan. Ini %.{}adalah hash anonim).



2

SmileBASIC, 77 72 69 68 byte

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

Dijelaskan:

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

Selamat datang di ppcg! Posting pertama yang bagus!
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)

Dicetak cantik

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

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 Bytes

    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 byte

Ini cukup sulit, tapi saya tidak yakin saya bisa bermain golf ini jauh lebih baik saat ini. Saran bermain golf dipersilakan. Cobalah online!

Sunting: -17 bytes berkat Value Ink dengan menyarankan cara golfier untuk menghapus karakter rangkap tiga. -5 byte dari menghapus .uniqmetode ini.

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

Tidak Disatukan:

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

1

JavaScript, 30 byte

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

Menggunakan metode yang @ edc65 buat untuk menghitung tetapi dengan filter array. Karakter pertama kali muncul, nilai objek mendapat "tidak terdefinisi" ditambah karakter (yaitu "undefinedx"). Lain kali nilai objek menjadi "undefinedxx".

Setelah itu, v [x] [11] mengembalikan nilai true dan ketika dikombinasikan dengan karakter not operator, false, yang berarti telah muncul dua kali akan disaring.


0

Javascript (menggunakan perpustakaan eksternal) (80 byte)

Ini bagus! Tidak menang tapi itu menyenangkan

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

Tautan ke lib: https://github.com/mvegh1/Enumerable/

Penjelasan kode: Metode menerima string, pustaka mem-parsingnya sebagai array char, dan klausa Where adalah predikat pemfilteran kompleks yang memeriksa hashmap 'a' untuk keberadaan char saat ini. Jika ada, penghitung kenaikan, yang lain diatur ke 1. Jika <2, predikat (dan karakter saat ini) lewat, yang lain gagal

masukkan deskripsi gambar di sini


Anda dapat menghindari menggunakan returntetapi membuat fungsi Anda daftar ekspresi yang dipisahkan koma dalam tanda kurung:n=>(a={},_From(n)....) . Ekspresi terakhir adalah nilai balik. Dalam Anda Wherefungsi, Anda dapat menghilangkan menengah bseluruhnya dengan membandingkan terhadap hasil dari tugas atau kenaikan: x=>(a[x]?a[x]++:a[x]=1)<2.
apsillers

Akhirnya, Anda dapat menghindari menggunakan perpustakaan eksternal sama sekali (dan menyimpan byte) menggunakan ellipsis string-split dan filterdenganjoin : [...n].filter(...).join(""). Balikkan logika benar / salah saat mengubah Whereke filter.
apsillers

Ahh pengamatan bagus! Saya akan melihat lebih dekat nanti saran Anda
applejacks01

0

Clojure, 72 byte

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

Begitu banyak byte ...


0

Pascal (FPC) , 103 byte

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.

Cobalah online!

Penjelasan:

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.
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.