Wejście Code Kod źródłowy


70

Wprowadzenie

Wyzwanie polega na utworzeniu programu / funkcji, która wypisze przecięcie własnego kodu źródłowego i danych wejściowych z ciągu. To jest kod golfowy, a ściślej:

  • Niech Ibędzie zestawem wejściowym
    • {"a","b","c"}
  • Niech Sbędzie ustawiony kod źródłowy
    • {"b","f"}
  • Następnie przecięcie jest tym, co dzielą
    • I ∩ S = {"b"}

Wejście

Dane wejściowe są elastyczne. Powinien być w stanie obsłużyć kodowanie znaków użyte w kodzie źródłowym.

Wynik

Dane wyjściowe są elastyczne. Powinien to być zestaw znaków współdzielonych przez kod wejściowy i kod źródłowy. Również zestawy są nieuporządkowane kolekcje różnych obiektów. W podsumowaniu:

  • Dane wyjściowe są elastyczne:
    • Może to być dowolna struktura danych (łańcuchowa lub inna)
    • Może nieuporządkowane
    • Może mieć końcowy \n
    • Powinien być wyraźny

Ograniczenie

Podobnie jak w przypadku wyzwania, program / funkcja może nie odczytać własnego kodu źródłowego, a rozwiązania 0-bajtowe są niedozwolone.

Przykłady

  • # 1
functor x(I){ return I ∩ self; }

Inputs                                Outputs
------                                -------
enter preformatted text here      ->  {"e","n","t","r","f","o","x"}

["Albrt"," Einstin"]              ->  {"l","r","t","n","s"}
  • # 2
(_)->_&"(_)->&\"\\"

Inputs                                Outputs
------                                -------
"Security at the expense of       ->  "
usability comes at the expense 
of security."

(0____0)                          ->  (_)
  • # 3
ಠa益длф


Inputs                                Outputs
------                                -------
Far out in the uncharted backwaters ->"a"    
of the unfashionable end of the 
Western Spiral arm of the Galaxy lies 
a small unregarded yellow sun. 
Orbiting this at a distance of roughly 
ninety-eight million miles is an 
utterly insignificant little blue-green 
planet whose ape-descended life forms 
are so amazingly primitive that they 
still think digital watches are a pretty 
neat idea.

(ノಠ益ಠ)ノ彡┻━┻                      ->"ಠ益"

Przypadki testowe

Albert Einstein

\__( O__O)_/

!@#$%^&*()_+{}|:"<>?

1234567890-=[]\;',./

(ノಠ益ಠ)ノ彡┻━┻

“¤>%,oỊȤʠ“ØụĊ5D³ṃṠɼQ»j;Ç;“;}¶”

┬──┬ ノ( ゜-゜ノ)

Far out in the uncharted backwaters of the unfashionable end of the Western Spiral arm of the Galaxy lies a small unregarded yellow sun. Orbiting this at a distance of roughly ninety-eight million miles is an utterly insignificant little blue-green planet whose ape-descended life forms are so amazingly primitive that they still think digital watches are a pretty neat idea.

Aktualizacja

  • [16-08-10]: zestawy są nieuporządkowanymi zbiorami różnych obiektów
  • [16-08-10]: końcowy znak nowej linii jest dopuszczalny

2
Czy dane wyjściowe mogą zawierać zduplikowane znaki?
Cyfrowa trauma

1
@DigitalTrauma Z przykładów # 1, # 2 i # 3 wydaje się, że nie
Luis Mendo,

@DigitalTrauma Przepraszamy za dwuznaczność, zestawy (w sensie matematycznym) ignorują porządek i nie mają powtórzeń.
NielinioweOwoce

22
Gratulujemy opracowania uogólnionego quine, w którym najlepsze rozwiązania nie są oparte na standardowym quine. :)
Martin Ender,

1
Jeśli zestaw nie powinien mieć powtórzeń, to czy zestawy wejściowe również nie powinny zawierać powtórzeń? A może dane wejściowe faktycznie nie są ustawione?
user81655,

Odpowiedzi:


24

Galaretka , 10 6 bajtów

“Ṿf”Ṿf

Wypróbuj online!

Jak to działa

“Ṿf”Ṿf  Main link. Argument: s (string)

“Ṿf”    Set the return value to 'Ṿf'.
    Ṿ   Uneval; yield '“Ṿf”'.
     f  Filter; remove the characters from '“Ṿf”' that do not appear in s.

15

Python 3, 44 bajty

Dzięki Karl za uratowanie mi jednego bajtu :-) Dzięki Dada za uratowanie mi dwóch bajtów!

Myślę, że to działa, ale to moje pierwsze wyzwanie quine, więc nie jestem w 100% pewien. : \

print(set("printseu()&'"+'+"')&set(input()))

Wersja Lambda z 43 bajtami: lambda a:set(" lambdaset()&'"+':+"')&set(a)


8
'eroticpuns\()&\''jest krótszy niż dodawanie ciągów. (uciekł, 'ale potrzebujesz dodatkowego `\ ') Dlaczego jest tam kropka?
KarlKastor,

woops, to .był relikt z mniej golfowego kodu. Używanie odwrotnego ukośnika nie działa, ponieważ wtedy wyjście z \` is \\ `i powielanie znaku wejściowego jest niedozwolone, tak myślę.
Jeremy,

1
W twojej lambda brakuje :.
Dennis,

Dzięki @Dennis. Moje oczy zaczęły się mętnieć po próbie znalezienia wszystkich postaci w programie;)
Jeremy

1
@Dada: Jeśli wolisz, to może być inspectour, nicestupor, poeticurns, nopictures, recountspi, lub inputscore. Lub nowego, którego możesz użyć prunesit(dokładny opis tego, co robią golfiści!) ipunster, Lub nursepitmiędzy innymi.
Deusovi,

11

Dyalog APL , 8 bajtów

'∩''⊢'∩⊢

zwraca te znaki z lewego argumentu, które są obecne w prawym argumencie (jeśli lewy argument nie ma duplikatów - jak w tym przypadku - to wynik również nie ma duplikatów

jest argumentem

Następnie ciąg ma tylko te dwa plus znak cudzysłowu (podwojony, ponieważ znajduje się w ciągu).

Wypróbuj APL online!


10

GolfScript, 6 bajtów

"`&"`&

Wypróbuj online!

Jak to działa

        # (implicit) Push the input on the stack.
"`&"    # Push the string '`&' on the stack.
   `    # Inspect; turn the string into '"`&"'.
     &  # Perform set intersection.

9

Python 2, 56 46 39 bajtów

-1 bajtów dzięki @Jeremy

lambda a:set(':&()smelt\ bad\'')&set(a)

anonimowa funkcja lambda, pobiera ciąg, zwraca zestaw

stara wersja:

lambda x,w=set('newmatrixbuspdl_:-)(=,\ \''):w-(w-set(x))

Podoba mi się, ale zwraca dwa ukośniki odwrotne na `\\` zamiast jednego.
Jeremy,

Ponadto myślę, że można uratować bajt, zmieniając nazwę lambda naa
Jeremy,

1
@Jeremy Dzięki za wskazówkę, '\\'jest to po prostu sposób, w jaki Python reprezentuje odwrotny ukośnik w postaci łańcucha, ponieważ jeden unikałby cudzysłowu końcowego, więc musisz uciec odwrotny ukośnik odwrotnym ukośnikiem, aby działał. Wpisz, print '\\'a zobaczysz, że to tylko reprezentacja jednego ukośnika odwrotnego.
KarlKastor,

Możesz dostać się do 36 za pomocą lambda a:{*''' lambda&':{}*'''}&{*a}.
Morgan Thrapp,

1
@MorganThrapp 35lambda a:{*' lambda&\\\':{}*'}&{*a}
patrz

9

Perl 6 , 56, 55 bajtów

Wersja „ francuska ” / Unicode (55 bajtów)

say perl q.say perlq$*IN\\\.comb:..comb$*IN.comb:

Wersje „ Texas ” / ASCII (56 bajtów)

say (q.sayq(&) $*IN\\\.combperl..comb (&)$*IN.comb).perl
say perl q.sayq(&) $*IN\\\.comb:perl..comb (&)$*IN.comb:

Nie golfowy:

my \Source = 'my \\Source = \'say ( $*IN.comb.Set ∩ Source.comb.Set ).perl\'';
say ( $*IN.comb.Set  Source.comb.Set ).perl

Przykłady:

$ echo -n 'say perl q.say perlq∩$*IN\\\.comb:..comb∩$*IN.comb:' > test-unicode.p6

$ echo -n 'say (q.sayq(&) $*IN\\\.combperl..comb (&)$*IN.comb).perl' > test-ascii.p6

$ perl6 test-ascii.p6 <<< 'abcdefghijklmnopqrstuvwxyz'
set("p","a","l","r","c","q","b","s","e","m","y","o")

$ perl6 test-unicode.p6 < test-unicode.p6
set("\\","I","p"," ","a","c","l","r","q","b","∩","*","s","m","e",".","y",":","o","N","\$")

$ perl6 test-ascii.p6 < test-ascii.p6
set("p","\\","I"," ","a","l","r","c","q","b",")","*","s","e","m","\&",".","(","y","o","N","\$")

$ perl6 test-ascii.p6 < test-unicode.p6
set("p","\\","I"," ","a","l","r","c","q","b","*","s","e","m",".","y","o","N","\$")

$ perl6 test-unicode.p6 <<< 'Albert Einstein'
set(" ","l","r","b","s","e")

$ perl6 test-unicode.p6 <<< '\__( O__O)_/'
set("\\"," ")

$ perl6 test-ascii.p6 <<< '!@#$%^&*()_+{}|:"<>?'
set(")","*","\&","(","\$")

$ perl6 test-unicode.p6 <<< "1234567890-=[]\\;',./"
set("\\",".")

$ perl6 test-unicode.p6 <<< '(ノಠ益ಠ)ノ彡┻━┻'
set()

“¤>%,oỊȤʠ“ØụĊ5D³ṃṠɼQ»j;Ç;“;}¶”
set("o")

$ perl6 test-unicode.p6 <<< '┬──┬ ノ( ゜-゜ノ)'
set(" ")


$ perl6 test-ascii.p6 <<< 'Far out in the uncharted backwaters of the unfashionable end of the Western Spiral arm of the Galaxy lies a small unregarded yellow sun. Orbiting this at a distance of roughly ninety-eight million miles is an utterly insignificant little blue-green planet whose ape-descended life forms are so amazingly primitive that they still think digital watches are a pretty neat idea.'
set("p"," ","a","l","r","c","b","s","e","m",".","y","o")

2
Nie ma $*PROGRAMdostępu do kodu źródłowego programu, a tym samym narusza zasady?
celtschk

@celtschk Powinienem ponownie przeczytać pytanie przed wysłaniem, naprawione. (Technicznie kompilator może zobaczyć, że $*PROGRAMjest odczytywany i przechowywać całe źródło jako ciąg znaków w skompilowanym programie, który umieściłby go w szarym obszarze)
Brad Gilbert b2gills

8

MATL , 8 bajtów

'X&'''X&

Wypróbuj online!

Dane wejściowe to ciąg ujęty w pojedyncze cudzysłowy. Jeśli ciąg zawiera symbol pojedynczego cudzysłowu, należy go zduplikować, aby go uniknąć.

Wyjaśnienie

'X&'''   % Push string with the three characters used by the program. The single-quote 
         % symbol needs to be escaped by duplicating it
X&       % Take input implicitly. Set intersection. Display implicitly

6

Właściwie 6 bajtów

`∩è`è∩

Wypróbuj online!

Wyjaśnienie:

`∩è`è∩
`∩è`    push the function `∩è` (which contains every character in the source code except '`')
    è   repr (same as Python repr - leaves "`∩è`", which contains every character in the source code)
      ∩ set intersection with input

5

Haskell (30 bajtów)

To takie nudne rozwiązanie ... Ale nie mogłem nic lepszego. :(

filter(`elem`"f(term)\"i`l\\")

5

Brachylog , 23 bajty

:{e.~e":{}e~\"fd\."}fd.

Wypróbuj online!

Wyjaśnienie

:{                 }f      Find all chars that verify the predicate below
                     d.    Remove duplicates and output

  e.                       Take a char from the input ; this is our output…
    ~e":{}e~\"fd\."        … if that char is in the string :{}e~"fd. (the first \ is here
                               to escape the ")

1
Czy możesz spojrzeć na nasz czat?
Leaky Nun

1
+1 za wąsy :{i zaskoczonego wąsa:{}
Destructible Lemon


4

C, 142 bajty

main(i){char*p,a[]="remain([*]){fought?>:01;,\\\"=capsv+-l}";for(;(i=getchar())>=0;p?putchar(i),memmove(p,p+1,a+strlen(a)-p):0)p=strchr(a,i);}

Wypróbuj na ideone .


2
Świetna byłaby wersja bez wytłumaczenia i / lub wyjaśnienie!
YSC

Mógłbyś użyć sizeof azamiast strlen(a)jednego bajtu zapisanego, ale jeszcze lepiej jest nadać tablicy znany rozmiar: a[99]="..."i zastąpić strlen(a)przez, 99aby zgolić 5 bajtów.
G. Sliepen

Kolejne 3 lub 4 bajty można zapisać, zastępując (i=getchar())>=0je read(0,&i,1). Działa to na maszynach little-endian. ijest inicjowany na 1, jeśli nie uruchomisz programu z żadnymi argumentami. Jeśli chcesz, aby działał również na komputerach big-endian, usuń i z listy argumentów main()i zadeklaruj go w ciele jako znak (ale wtedy zaoszczędzisz tylko 3 bajty). read()wygodnie zwraca 0 na EOF.
G. Sliepen

4

CJam, 8 bajtów

"`q&"`q&

Wypróbuj tutaj.

Wyjaśnienie:

"`q&"    e# Push that string to the stack
     `   e# Stringify, pops the string and pushes "\"`r&\"" to the stack
      q  e# Pushes the input to the stack
       & e# Union, pops two elements and pushes a list of every element that is contained in both.

4

Pyth , 9 8 bajtów

1 bajt dzięki Sp3000

@Q"\Q@\"

Wypróbuj online!

@Q"\Q@\"
@Q"\Q@\""   implicit string ending

@Q           intersect the input with
  "\Q@\""   the string containing '\', 'Q', '@', '"'.

@z"z\"@jest o 1 bajt krótszy.
drobilc

@drobilc To przegapiłoby \.
Leaky Nun

o tak, całkowicie o tym zapomniałem.
drobilc

4

Siatkówka, 21 20 bajtów

Usuwa znaki spoza kodu źródłowego, a następnie usuwa zduplikowane znaki.

[^Ds.n\n[-a_-]

Ds`.

Wypróbuj online


Twój kod źródłowy zawiera kanał (wyjście nie zawiera).
Martin Ender,

Miałem w zasadzie to samo rozwiązanie wcześniej, ale zapomniałem go opublikować. Możesz zapisać kilka bajtów z zakresem [-a(a następnie dołączyć znak podkreślenia i łącznik i upuścić znak wstecz w drugiej linii). Ale na przyszłość, ]nie musisz uciekać, jeśli umieścisz go jako pierwszą postać. Aha, a jeśli chodzi o uprzejmość, możesz zamienić dwa etapy, aby uniknąć końcowego podawania linii.
Martin Ender,

@MartinEnder To wciąż nie deduplikuje kanałów, czy to problem?
mbomb007,

Och, masz rację, nie zauważyłem tego. Musisz wtedy dodać sopcje Di klasę postaci.
Martin Ender,

4

Mathematica, 35 bajtów

Characters@"\"#&@C\acehrst⋂"⋂#&

Funkcja anonimowa. Zignoruj ​​wszelkie wygenerowane wiadomości. Pobiera listę znaków jako dane wejściowe i zwraca listę znaków jako dane wyjściowe. Znak Unicode to U + 22C2 dla \[Intersection].



4

Vim, 78 68 78 79 61 klawiszy

Całkowicie zmieniłem moje podejście:

oo/\$kjxd<esc>/o<cr>xj$/\/<cr>xj$/\\<cr>xj$/$<cr>xj$/k<cr>xj$/x<cr>xj$/j<cr>xj$/d<cr>xkdd

Jak to działa:

Najpierw tworzy wiersz ze wszystkimi znakami programu, a następnie znajduje pierwszą instancję każdego ze znaków programu, która jest albo na wejściu, jeśli wejście i wyjście przecinają się, albo na wyjściu, jeśli nie, usuwa przesuwa się do ostatniego znaku pliku (więc się zawija) i robi to dla każdego unikalnego znaku w źródle, z wyjątkiem d, gdzie zamiast przejścia na koniec pliku, kończy się poprzez usunięcie danych wejściowych


Ukośnik odwrotny znajduje się w kodzie, ale nie wydaje się, aby był w ciągu.
Tytus

Czy to nie trzeci?
Zniszczalna Cytryna

4

Bash , 45 50 41 39 37 34 29 bajtów

-9 bajtów dzięki Geoffowi Reedy
-4 bajtów dzięki Dennisowi
-5 bajtów dzięki Nahuelowi Fouilleulowi

grep -o '[] [|\'\'grepouniq-]

Wypróbuj online!


Czy nie potrzebujesz tylko jednego polecenia grep?
Geoff Reedy,

@GeoffReedy Pierwsze polecenie grep dzieli dane wejściowe na jeden znak w wierszu.
Dennis,

Zgadza się, ale nie można zastosować drugiego grepa
Geoff Reedy,

Masz rację, a to oszczędza konieczności sprawdzania „.”. Dzięki!
Riley,

1
@Tytus Po tym, jak BASH robi, grep dostaje -oi [] [|\'grepouniq-]. Więc to jest spojrzenie na wszystko z nich: [ ] {space} [ | {slash} ' g r e p o u n i q - ].
Riley,

3

PowerShell v4 +, 122 104 bajty

([char[]]($args[0]+'acegfhmnoprstu012|][()"?+_,.$-{0}{1}{2}'-f("'","}","{"))|group|?{$_.count-gt1}).name

Ugh. Quines lub kod podobny do quine w PowerShell jest do bani, ponieważ formatowanie zastępowania łańcucha jest tak niezgrabne.

Łańcuch ace...{2}pośrodku to każdy znak obecny w pozostałej części kodu. Jest {0}{1}{2}on używany w połączeniu z -foperatorem ormat do ciągnięcia '{}znaków do łańcucha.

Jest to łączone jako tablica znaków z wejściem $args, a następnie podawane do potoku. Pierwszym przystankiem jest Group-Object(zasadniczo) tworzenie tablicy mieszającej obiektów wejściowych i ile razy występują one na wejściu. To jest skierowane |?{...}do, Where-Objectaby wybrać tylko te przedmioty, które mają .countwięcej niż 1. Zawieramy to w parenach i wyrywamy .Nameczęść tablicy hashtable (czyli tam, gdzie ma zastosowanie wymóg v4 +, w przeciwnym razie potrzebowalibyśmy dodatkowego |Select Nameetapu w przygotowaniu).

Te elementy są pozostawione w potoku (jako tablica), a drukowanie jest niejawne.


3

Python 2, 44 bajty

x='c=set;print c(`x`)&c(raw_input())';exec x

Dla zabawy, oto pełne przesłanie programu w stylu quine. Wyświetla ciąg znaków reprezentujący zestaw języka Python 2.


3

JavaScript (ES6), 59 57 bajtów

f=
t=>[..."\"().=>O[\\]defilnrtx~"].filter(e=>~t.indexOf(e))
;
<input placeholder=Input oninput=o.value=f(this.value).join``><input placeholder=Output id=o>

Zwraca tablicę znaków obecnych zarówno w oryginalnej tablicy łańcuchów znaków / znaków, jak i w kodzie źródłowym. Edycja: Zapisano 2 bajty dzięki @ user81655.


f=s=>[...new Set(f+'')]...można zapisać bajty.
user81655,

Lub jeszcze krócej:f=s=>[...s].filter(c=>(new Set(f+'')).has(c))
user81655,

@ user81655 Przynajmniej w przeglądarce Firefox f+''działa, czytając fkod źródłowy. (W niektórych przypadkach można było spowodować awarię Firefoksa, zmieniając plik źródłowy, a następnie próbując skorygować załadowaną z niego funkcję.)
Neil

@ user81655 Twój drugi przykład kończy się niepowodzeniem, gdy sma powtarzające się elementy, i indexOfjest krótszy niż w new Setkażdym razie.
Neil,

W takim przypadku możesz spróbować zapisać znaki (np. Zmienić cparametr na znak, który jest już na liście).
user81655,

3

Matlab, 37 bajtów

Całkiem proste:

Używa wbudowanego intersectdo znalezienia skrzyżowania. Kod źródłowy jest zakodowany na stałe. Dane wejściowe należy podać w cudzysłowie''

intersect(input(''),'''intersc(pu),')

Powinieneś był skorzystać z anonimowej funkcji ... pokonać cię o 5 bajtów
Sanchises

Hehe, myślę, że to nie był mój najlepszy golf ...
Stewie Griffin,

3

JavaScript (Chrome 58 w systemie OS X 10), 12654 12426 11992 bajtów

https://paste.ubuntu.com/25593218/

https://paste.ubuntu.com/25595798/

https://paste.ubuntu.com/25595831/

Oryginalny kod:

var t=prompt();"!+()[]".split("").forEach(function(f){if(t.includes(f))alert(f)})

Zostało to następnie przekonwertowane na styl programowania o nazwie jsfk, który używa tylko tych sześciu znaków:

(+)[!] 

za pomocą kompilatora online.


Jeśli jsfk jest językiem, powinieneś użyć go w nagłówku zamiast Javascript.
NonlinearFruit

1
@NonlinearFruit jsfk to styl programowania . Jest to poprawny javascript
Tornado547,

2

R, 129 bajtów

f=function(s){b=strsplit("f=unctio(s){arpl;,[1]b\\\"qemh0T}",c())[[1]];cat(b[unique(pmatch(strsplit(s,c())[[1]],b,0,T))],sep="")}

Jeśli go odholfuję, trzeba zmienić dziwne rzeczy, takie jak nowa linia w ciągu b. W każdym razie jest to bardzo proste - buduje wektor ze wszystkimi znakami w funkcji. Następnie pobiera dane wejściowe do wektora i sprawdza członkostwo.


nie odwiedziłeś strony od prawie roku, ale f=function(s)cat(instersect(strsplit(s,"")[[1]],strsplit("f=unctio(s)aerpl,\\\"[1]","")[[1]]),sep="")ma 101 bajtów i myślę, że format I / O może być prostszy bez cat...
Giuseppe

2

Rubin, nflaga 34 + = 35 bajtów

Nie działa dokładnie z wejściem z wieloma -nliniami , ponieważ powoduje, że program przetwarza STDIN wiersz po wierszu. W tym kodzie nie ma znaków nowego wiersza, ale próba wprowadzenia czegoś takiego spowoduje wyświetlenie wielu tablic zamiast jednego. Jeśli to nie jest zgodne ze specyfikacją, proszę o informację, a ja to naprawię.

p $_.chars&"\\\"p $_.chars&".chars

2

ListSharp , 222 bajty

STRG S=READ[<here>+"\\S.txt"]
ROWS T=ROWSPLIT S BY [""]
ROWS R=ROWSPLIT "STRG =EAD[<her>+\".tx]OWPLIBYCFMHVNc#isn()oay\r\n" BY [""]
ROWS R=SELECT FROM T WHERE[EVERY STRG IS ANY STRG IN R]
SHOW=<c#R.Distinct().ToArray()c#>

śmieszne, ale zabawne


2

sed, 47 znaków

:s;st[^])(*\1.s2t:[;^]tt;st\(.\)\(.*\1\)t\2t;ts

Jestem trochę rozczarowany, jak długo to się wydarzyło, szczególnie jeśli chodzi o usuwanie powtarzających się postaci.


Która to wersja sed? GNU sed mówi sed: -e expression #1, char 47: unterminated `s' command.
Dennis,

43 bajty, w tym 1 dla -r: sed -r ':;ss[^][str().*\12;:^]ss;ss(.)(.*\1)s\2s;t' napisałem to przed zauważeniem twojego i okazało się, że jest bardzo podobne
izabera

@Dennis naprawiony; okazało się, że: po [spowodował, że próbował parsować klasę postaci
Geoff Reedy

@izabera fajnie, jestem dość zaskoczony, że polecenie: tak naprawdę nie potrzebuje etykiety i zmienia znaczenie t bez etykiety
Geoff Reedy

tak, to gnuizm
izabera

2

Java 8 lambda, 152 142 140 znaków

Dość krótki:

s->s.chars().mapToObj(i->(char)i).filter(c->"COSTab\"\\cefh(i)j+l-mn.oprstuv>".contains(""+c)).collect(java.util.stream.Collectors.toSet())

Lub nie golfisty tutaj:

public class Q89400 {

    static Set<Character> inAndQuine(String in) {
        return in.chars()
                .mapToObj(i->(char)i)
                .filter(c->"COSTab\"\\cefh(i)j+l-mn.oprstuv>".contains(""+c))
                .collect(java.util.stream.Collectors.toSet());

    }
}

Oczywiście nierozszerzone rozwiązanie jest złe, ponieważ nie pasuje do nawiasów klamrowych i kilku innych znaków, jest to po prostu ich kompletność.

Funkcja przyjmuje dane wejściowe jako a Stringi zwraca java.util.Set<Character>znaki zawierające znaki obecne zarówno na wejściu, jak i źródle.

Aktualizacje

Okazało się, że rozwiązanie nie działa. Myślałem o String#containstestach na dopasowanie do wyrażenia regularnego, ale jest to dosłowne dopasowanie. Dodałem trochę ucieczki, żeby zacytować takie postacie, .ale nie było to konieczne, ale zrujnowałem wszystko. Teraz bez ucieczki zapisujemy niektóre postacie i teraz to faktycznie działa :)

Dzięki @NonlinearFruit za przypomnienie mi o używaniu zmiennych jednoznakowych.


Zmień nazwę inna pojedynczą literę jaka
NonlinearFruit

3
@NonlinearFruit masz rację: O, jak mogłem o tym zapomnieć ?!
Frozn

2

SQF , 71 69 64 bajtów

Używając formatu pliku jako funkcji:

i="-_h ;""=()sSplitrng"splitString"";i-(i-(_this splitString""))

Zadzwoń jako "STRING" call NAME_OF_COMPILED_FUNCTION

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.