Eingabe ∩ Quellcode


70

Intro

Die Herausforderung besteht darin, ein Programm / eine Funktion zu erstellen, die die Schnittmenge des eigenen Quellcodes und einer bestimmten Zeichenfolge ausgibt. Das ist Code Golf und um genau zu sein:

  • Sei Ider Eingangssatz
    • {"a","b","c"}
  • Sei Sder Quellcode-Satz
    • {"b","f"}
  • Dann ist der Schnittpunkt das, was sie teilen
    • I ∩ S = {"b"}

Eingang

Die Eingabe ist flexibel. Es sollte in der Lage sein, die für den Quellcode verwendete Zeichenkodierung zu verarbeiten.

Ausgabe

Die Ausgabe ist flexibel. Es sollte sich um den Zeichensatz handeln, den der Eingabe- und der Quellcode gemeinsam nutzen. Auch Sets sind ungeordnete Sammlung von verschiedenen Objekten. In Summe:

  • Die Ausgabe ist flexibel:
    • Könnte eine beliebige Datenstruktur sein (String oder anders)
    • Könnte ungeordnet sein
    • Könnte ein Trailing haben \n
    • Sollte unterschiedlich sein

Beschränkung

Ähnlich wie bei Challenges liest das Programm / die Funktion möglicherweise nicht den eigenen Quellcode und 0-Byte-Lösungen sind nicht zulässig.

Beispiele

  • # 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.

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

Testfälle

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.

Aktualisieren

  • [16-08-10]: Mengen sind ungeordnete Sammlungen verschiedener Objekte
  • [16-08-10]: Zeilenumbruch ist akzeptabel

2
Darf die Ausgabe doppelte Zeichen enthalten?
Digital Trauma

1
@DigitalTrauma Aus den Beispielen 1, 2 und 3 geht hervor, dass dies nicht der Fall ist
Luis Mendo

@DigitalTrauma Sorry für die Mehrdeutigkeit, Sets (im mathematischen Sinne) ignorieren Reihenfolge und haben keine Wiederholung.
NonlinearFruit

22
Herzlichen Glückwunsch zu einem verallgemeinerten Quine, bei dem die besten Lösungen nicht auf dem Standardquine der Sprache basieren. :)
Martin Ender

1
Wenn ein Satz keine Wiederholung haben soll, sollten die Eingabesätze auch keine Wiederholung enthalten? Oder ist der Eingang eigentlich kein Set?
user81655

Antworten:


24

Gelee , 10 6 Bytes

“Ṿf”Ṿf

Probieren Sie es online!

Wie es funktioniert

“Ṿ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 Bytes

Danke Karl, dass du mir ein Byte gespart hast :-) Danke Dada, dass du mir zwei Byte gespart hast!

Ich denke, das funktioniert, aber es ist meine erste Herausforderung, also bin ich mir nicht zu 100% sicher. : \

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

Lambda-Version mit 43 Bytes: lambda a:set(" lambdaset()&'"+':+"')&set(a)


8
'eroticpuns\()&\''ist kürzer als das Hinzufügen der Zeichenfolgen. (entkam der 'aber dann brauchst du ein zusätzliches `\`) Warum ist der Punkt da?
Karl Kastor

Woops, das .war ein Relikt aus weniger Golf Code. Die Verwendung von Backslash funktioniert nicht, da dann die Ausgabe von \` is \\ `und das Duplizieren des Eingabezeichens meiner Meinung nach nicht zulässig sind.
Jeremy

1
Deinem Lambda fehlt das :.
Dennis

Danke @Dennis. Meine Augen fangen an, sich zu trüben, nachdem ich versucht habe, alle Charaktere im Programm zu finden;)
Jeremy

1
@Dada: Wenn Sie es vorziehen würden, könnte es sein inspectour, nicestupor, poeticurns, nopictures, recountspi, oder inputscore. Oder für die neue, die Sie verwenden prunesit(eine genaue Beschreibung dessen, was Code-Golfer tun!) ipunster, Oder nursepitunter anderem.
Deusovi

11

Dyalog APL , 8 Bytes

'∩''⊢'∩⊢

is gibt die Zeichen aus dem linken Argument zurück, die im rechten Argument vorhanden sind (wenn das linke Argument - wie in diesem Fall - keine Duplikate enthält, enthält das Ergebnis auch keine Duplikate

ist das Argument

Dann hat die Zeichenkette nur diese zwei plus das Anführungszeichen (verdoppelt, wie es in einer Zeichenkette ist).

TryAPL online!


10

GolfScript, 6 Bytes

"`&"`&

Probieren Sie es online!

Wie es funktioniert

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

-1 Byte dank @Jeremy

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

anonyme Lambda-Funktion, nimmt einen String, gibt eine Menge zurück

alte Version:

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

Ich mag das, aber es gibt zwei Backslashes auf "\" anstelle von nur einem zurück.
Jeremy

Außerdem denke ich, dass Sie ein Byte speichern können, indem Sie den Namen des Lambda ina
Jeremy

1
@Jeremy Danke für den Tipp, dies '\\'ist nur Pythons Art, einen Backslash in String-Form darzustellen, da ein einzelner einen Backslash mit einem Backslash ersetzen muss, damit er funktioniert. Geben print '\\'Sie ein und Sie werden sehen, dass es nur die Darstellung für einen Backslash ist.
KarlKastor

Sie können mit bis 36 bekommen lambda a:{*''' lambda&':{}*'''}&{*a}.
Morgan Thrapp

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

9

Perl 6 , 56, 55 Bytes

" French " / Unicode-Version (55 Bytes)

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

" Texas " / ASCII-Versionen (56 Byte)

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

Nicht golfen:

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

Beispiele:

$ 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
Greift nicht $*PROGRAMauf den Quellcode des Programms zu und verstößt damit gegen die Regeln?
Celtschk

@celtschk Ich hätte die Frage vor dem Posten nochmal durchlesen sollen, behoben. (Technisch gesehen konnte der Compiler sehen, dass $*PROGRAMaus dem kompilierten Programm gelesen und die gesamte Quelle als Zeichenfolge gespeichert wurde, wodurch sie in eine graue Fläche
geraten

8

MATL , 8 Bytes

'X&'''X&

Probieren Sie es online!

Die Eingabe ist eine Zeichenfolge in einfachen Anführungszeichen. Wenn die Zeichenfolge ein einfaches Anführungszeichen enthält, sollte es dupliziert werden, um es zu maskieren.

Erläuterung

'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

Eigentlich 6 Bytes

`∩è`è∩

Probieren Sie es online!

Erläuterung:

`∩è`è∩
`∩è`    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 Bytes)

Das ist so eine langweilige Lösung ... Aber ich könnte es nicht besser machen. :(

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

5

Brachylog , 23 Bytes

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

Probieren Sie es online!

Erläuterung

:{                 }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
Können Sie sich unseren Chatroom ansehen?
Undichte Nonne

1
+1 für Schnurrbart Mann :{und überrascht Schnurrbart Mann:{}
Destructible Lemon


4

C 142 Bytes

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

Probiere es auf ideone aus .


2
Eine ungolfed Version und / oder Erklärung wäre toll!
YSC

Sie hätten sizeof astatt strlen(a)für ein Byte speichern können, aber noch besser ist es, dem Array eine bekannte Größe zu geben: a[99]="..."und strlen(a)durch 99zu ersetzen , um 5 Bytes zu sparen .
G. Sliepen

Weitere 3 oder 4 Bytes kann durch Ersetzen gespeichert werden (i=getchar())>=0mit read(0,&i,1). Dies funktioniert auf Little-Endian-Maschinen. iwird auf 1 initialisiert, wenn Sie das Programm nicht mit Argumenten ausführen. Wenn Sie möchten, dass es auch auf Big-Endian-Rechnern funktioniert, entfernen Sie i aus der Argumentliste von main()und deklarieren Sie es im Rumpf als char (aber dann sparen Sie nur 3 Bytes). read()gibt bei EOF günstigerweise 0 zurück.
G. Sliepen

4

CJam, 8 Bytes

"`q&"`q&

Probieren Sie es hier aus.

Erläuterung:

"`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

Netzhaut, 21 bis 20 Bytes

Entfernt Zeichen, die nicht im Quellcode enthalten sind, und doppelte Zeichen.

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

Ds`.

Probieren Sie es online aus


Ihr Quellcode enthält einen Zeilenvorschub (Ihre Ausgabe nicht).
Martin Ender

Ich hatte im Grunde die gleiche Lösung früher aber vergessen, es zu posten. Sie können mit dem Bereich einige Bytes speichern [-a(und dann einen Unterstrich und einen Bindestrich einfügen und das Backtick in der zweiten Zeile ablegen). Aber zum späteren Nachschlagen ]wäre kein Escapezeichen erforderlich, wenn Sie es als erstes Zeichen eingeben würden. Oh und für die Nizza, können Sie die zwei Stufen tauschen, um den nachlaufenden Zeilenvorschub zu vermeiden.
Martin Ender

@MartinEnder Dies dedupliziert immer noch keine Zeilenvorschübe. Ist das ein Problem?
mbomb007

Oh du hast recht, das habe ich nicht bemerkt. Sie müssen dann sdie Optionen Dund die Zeichenklasse hinzufügen .
Martin Ender

4

Mathematica, 35 Bytes

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

Anonyme Funktion. Ignorieren Sie alle generierten Nachrichten. Nimmt eine Liste von Zeichen als Eingabe und gibt eine Liste von Zeichen als Ausgabe zurück. Das Unicode-Zeichen ist U + 22C2 für \[Intersection].


4

C #, 36 Bytes

s=>s.Intersect("s=>.Interc(\"\\);");

Die beabsichtigte Besetzung ist Func<string, IEnumerable<char>>( stringEingabe, IEnumerable<char>Ausgabe).



4

Vim, 78 68 78 79 61 Tastenanschläge

Hat meine Herangehensweise komplett geändert:

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

Wie es funktioniert:

Zuerst wird eine Zeile mit allen Programmzeichen erstellt, dann wird die erste Instanz der einzelnen Programmzeichen gefunden, die sich entweder in der Eingabe befindet, wenn sich die Eingabe und die Ausgabe überschneiden, oder die Ausgabe, wenn sie nicht gelöscht wird es bewegt sich zum letzten Zeichen der Datei (so dass es umbrochen wird) und tut dies für jedes eindeutige Zeichen in der Quelle, mit Ausnahme von d, wo es, anstatt zum Ende der Datei zu gelangen, die Eingabe löscht


Backslash ist in deinem Code, scheint aber nicht in deinem String zu sein.
Titus

Ist es nicht der dritte?
Destructible Lemon

4

Bash , 45 50 41 39 37 34 29 Bytes

-9 Bytes dank Geoff Reedy
-4 Bytes dank Dennis
-5 Bytes dank Nahuel Fouilleul

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

Probieren Sie es online!


Benötigen Sie nicht nur einen grep-Befehl?
Geoff Reedy

@GeoffReedy Der erste grep-Befehl teilt die Eingabe in ein Zeichen pro Zeile auf.
Dennis

Richtig, aber das -o konnte nicht auf den zweiten Grep gesetzt werden
Geoff Reedy

Sie haben recht, und das erspart es, nach dem '.' Zu suchen. Vielen Dank!
Riley

1
@Titus Nachdem BASH es geschafft hat, bekommt grep -ound [] [|\'grepouniq-]. So ist es die Suche nach etwas davon: [ ] {space} [ | {slash} ' g r e p o u n i q - ].
Riley

3

PowerShell v4 +, 122 104 Bytes

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

Pfui. Quines oder quine-ähnlicher Code in PowerShell sind zum Kotzen, weil die Formatierung der Zeichenfolgenersetzung so umständlich ist.

Die Zeichenfolge ace...{2}in der Mitte ist jedes Zeichen, das im Rest des Codes vorhanden ist. Das {0}{1}{2}wird in Verbindung mit dem -format-Operator verwendet, um die '{}Zeichen in die Zeichenfolge zu ziehen .

Dies wird als char-Array mit der Eingabe kombiniert $argsund dann in die Pipeline eingespeist. Der erste Stopp ist, Group-Objectwelcher (im Wesentlichen) eine Hash-Tabelle der Eingabeobjekte erstellt und wie oft sie in der Eingabe auftreten. Das ist zu verrohrt |?{...}die Where-Objectnur die Elemente auswählen , die eine hat .countmehr als 1. Wir kapseln das in parens und pflücken den .NameTeil der Hashtabelle heraus (wo die v4 + -Anforderung ins Spiel kommt, sonst bräuchten wir eine zusätzliche |Select NameStufe zur Pipeline).

Diese Elemente verbleiben in der Pipeline (als Array), und das Drucken ist implizit.


3

Python 2, 44 Bytes

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

Nur zum Spaß, hier ist eine quine-artige vollständige Programmeinreichung. Gibt die Zeichenfolgendarstellung eines Python 2-Sets aus.


3

JavaScript (ES6), 59-57 Byte

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

Gibt ein Array von Zeichen zurück, das sowohl im ursprünglichen String- / Zeichen-Array als auch im Quellcode vorhanden ist. Bearbeiten: 2 Bytes dank @ user81655 gespeichert.


f=s=>[...new Set(f+'')]...könnte Bytes sparen.
user81655

Oder noch kürzer:f=s=>[...s].filter(c=>(new Set(f+'')).has(c))
user81655

@ user81655 Zumindest in Firefox f+''funktioniert das Lesen fdes Quellcodes. (In bestimmten Fällen kann es vorkommen, dass Firefox abstürzt, indem Sie die Quelldatei ändern und dann versuchen, eine daraus geladene Funktion zu stringifizieren.)
Neil,

@ user81655 Ihr zweites Beispiel schlägt fehl, wenn ssich Elemente wiederholen, und indexOfist kürzer als new Setohnehin.
Neil

In diesem Fall können Sie versuchen, Zeichen zu speichern (z. B. indem Sie den cParameter in ein Zeichen ändern, das bereits in der Liste enthalten ist).
user81655

3

Matlab, 37 Bytes

Ziemlich einfach:

Verwendet das eingebaute Werkzeug intersect, um die Kreuzung zu finden. Der Quellcode ist fest codiert. Die Eingabe muss in Anführungszeichen erfolgen''

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

Sie sollten eine anonyme Funktion verwendet haben ... schlagen Sie um 5 Bytes
Sanchises

Hehe, ich denke, das war nicht mein bestes Golfspiel ...
Stewie Griffin

3

JavaScript (Chrome 58 auf OS X 10), 12654 12426 11992 Bytes

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

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

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

Der ursprüngliche Code:

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

Dies wurde dann in einen Programmierstil namens jsfk konvertiert, der nur diese sechs Zeichen verwendet:

(+)[!] 

mit einem Online-Compiler.


Wenn jsfk die Sprache ist, sollten Sie dies im Header anstelle von Javascript verwenden.
NonlinearFruit

1
@NonlinearFruit jsfk ist ein Programmierstil . Es ist gültiges Javascript
Tornado547

2

R, 129 Bytes

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="")}

Wenn ich es unscharf mache, müssen sich seltsame Dinge wie ein Zeilenvorschub in der Zeichenfolge geändert haben b. Wie auch immer, es ist super einfach - erstellt einen Vektor mit allen Zeichen in der Funktion darin. Anschließend wird die Eingabe in einen Vektor gezogen und die Mitgliedschaft überprüft.


Sie haben die Site seit fast einem Jahr nicht mehr besucht, haben aber f=function(s)cat(instersect(strsplit(s,"")[[1]],strsplit("f=unctio(s)aerpl,\\\"[1]","")[[1]]),sep="")101 Bytes und ich denke, das E / A-Format kann einfacher sein, ohne cat...
Giuseppe

2

Ruby, 34 + nFlag = 35 Bytes

Funktioniert nicht genau mit mehrzeiligen Eingaben, da -ndas Programm STDIN zeilenweise verarbeitet. In diesem Code sind keine Zeilenumbrüche enthalten. Wenn Sie jedoch versuchen, so etwas einzugeben, werden mehrere Arrays anstelle eines Arrays ausgegeben. Wenn das nach Spezifikation nicht gut ist, informieren Sie mich bitte und ich werde reparieren.

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

2

ListSharp , 222 Bytes

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

lächerlich, aber ich bin unterhalten


2

sed, 47 zeichen

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

Ich bin ein wenig enttäuscht darüber, wie lange dies gedauert hat, insbesondere darüber, wie oft sich wiederholende Zeichen entfernt werden müssen.


Welche Version von sed ist das? GNU sed sagt sed: -e expression #1, char 47: unterminated `s' command.
Dennis

43 Bytes einschließlich 1 für -r: sed -r ':;ss[^][str().*\12;:^]ss;ss(.)(.*\1)s\2s;t' Ich habe es geschrieben, bevor ich deins bemerkt habe, und es stellte sich als sehr ähnlich heraus
izabera

@ Tennis behoben; Es stellte sich heraus, dass ein: nach dem [versucht wurde, eine Charakterklasse zu analysieren
Geoff Reedy

@izabera schön, ich bin ziemlich überrascht, dass der Befehl: eigentlich keine Bezeichnung benötigt und dass er die Bedeutung von t ohne Bezeichnung ändert
Geoff Reedy

Ja, es ist ein Gnuismus
Izabera

2

Java 8 Lambda, 152 142 140 Zeichen

Ziemlich kurz:

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

Oder ungolfed hier:

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());

    }
}

Natürlich ist die ungolfed Lösung falsch, da sie nicht mit den geschweiften Klammern und einigen weiteren Zeichen übereinstimmt, sondern nur der Vollständigkeit halber.

Die Funktion nimmt Eingaben als Stringund gibt ein zurück, java.util.Set<Character>das die Zeichen enthält, die sowohl in der Eingabe als auch in der Quelle vorhanden sind.

Aktualisierung

Es stellte sich heraus, dass die Lösung nicht funktionierte. Ich dachte, String#containsTests für ein Regex-Match, aber es ist nur ein wörtliches Matching. Ich fügte einige Fluchtzeichen hinzu, um die Zeichen wie zu zitieren, .aber dies war nicht notwendig, sondern ruinierte stattdessen alles. Jetzt ohne dies zu entkommen, speichern wir einige Zeichen und jetzt funktioniert es tatsächlich :)

Vielen Dank an @NonlinearFruit, der mich an die Verwendung von Variablen mit einem Zeichen erinnert hat.


Umbenennen inin einen einzelnen Buchstaben wiea
NonlinearFruit

3
@NonlinearFruit du hast recht: O wie könnte ich das vergessen ?!
Frozn

2

SQF , 71 69 64 Bytes

Verwenden des Formats "Datei als Funktion":

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

Anrufen als "STRING" call NAME_OF_COMPILED_FUNCTION

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.