Eingang
Ein String, der höchstens eine von jedem des Buchstaben enthält A
, B
und C
. Sie können in beliebiger Reihenfolge sein. Die leere Zeichenfolge ist eine gültige Eingabe.
Hinweis: In einer früheren Version dieser Herausforderung wurden die Buchstaben LEJ
anstelle von verwendet, ABC
und sie können weiterhin verwendet werden, wenn dies gewünscht wird.
Ausgabe
Eine Reihe von den A
, B
, C
Buchstaben , die nicht in der Eingabe waren. Sie können in beliebiger Reihenfolge sein.
Wenn es sich bei der Ausgabe um eine leere Zeichenfolge handelt, ist es nur gültig, keine Ausgabe anzugeben, wenn dies für Ihre Implementierung sinnvoll ist. (Sie müssen beispielsweise keine print
leere Zeichenfolge aufrufen .)
Beispiele
- Wenn es sich bei der Eingabe um eine Eingabe handelt, sollte
B
die Ausgabe entweder "da"CA
oder "AC
da" seinA
undC
nicht in der Eingabe vorhanden sein. - Wenn die Eingabe eine leere Zeichenfolge ist, sollte die Ausgabe eine
ABC
beliebige Permutation sein, da keiner der drei Buchstaben in der Eingabe vorhanden ist. - Wenn die Eingabe ist, sollte
CAB
die Ausgabe die leere Zeichenfolge sein, da alle drei Buchstaben in der Eingabe vorhanden sind.
Testfälle
Es gibt so wenige Eingabefälle, dass wir sie alle aufzählen können:
in -> out1 | out2 | out3 | ...
ABC -> ""
ACB -> ""
BCA -> ""
BAC -> ""
CAB -> ""
CBA -> ""
AB -> C
AC -> B
BC -> A
BA -> C
CA -> B
CB -> A
A -> BC | CB
B -> CA | AC
C -> AB | BA
"" -> ABC | ACB | BCA | BAC | CAB | CBA
Alle gültigen Ausgaben für jede Eingabe werden durch |
's getrennt angegeben. ""
steht für die leere Zeichenfolge
Wertung
Der kürzeste Code in Bytes gewinnt. Bedenken Sie jedoch, dass Sie möglicherweise mehr Anerkennung dafür erhalten, dass Sie die Herausforderung eher auf einzigartige als auf kurze Weise gelöst haben ;)
quelle
Antworten:
Python 3,
292722 Bytes-2 Bytes dank Jonathan Allan
-5 Bytes dank Rod
quelle
print(*{*"LEJ"}-{*input()})
spart 2. (getestet auf 3.5 und 3.6).Gelee , 4 Bytes
Vielen Dank an @DuctrTape für den Artikel über die Änderung und das Vorhandensein von "ABC" in Jellys Wörterbuch.
Probieren Sie es online!
“ḃ»
schlägt den Eintrag "ABC" in Jellys Wörterbuch nach,ḟ
ist die Filer-Discard-Dyade, die die in der Eingabe gefundenen Zeichen aus dieser Zeichenliste verwirft. Das Ergebnis wird implizit gedruckt.Für eine Kleinbuchstabenversion kann der zu verwendende Wörterbucheintrag entweder "abac" (
“c»
) oder "abaca" (“i»
) sein.Wenn die Herausforderung "LEJ" war, konnten in der Großbuchstabenvariante nur 6 Bytes erreicht werden, da mit diesem Zeichensatz keine Wörterbucheinträge vorhanden sind, so dass wir die Liste der Zeichen
“LEJ”
(oder eine Permutation davon) erstellen müssen .Die Kleinbuchstabenvariante lag aufgrund des Wortes "jell" ( ) besser bei 5 Bytes
“ẎṄ»
.quelle
Bash + Coreutils, 15 Bytes
Probieren Sie es online!
Ich möchte das weglassen
x
, aber danntr -d
würde ein Argument fehlen, wenn die Eingabezeichenfolge leer war. (Dasx
schadet nicht, da im LEJ der Here-Zeichenfolge keine X enthalten sind.) Normalerweise würde ich schreibentr -d "$1"
, aber so wie ich es getan habe, ist es ein Byte kürzer.quelle
Retina , 14 Bytes
Die Anzahl der Bytes setzt die Kodierung nach ISO 8859-1 voraus.
Probieren Sie es online!
Erläuterung
Fügen Sie eine zweite Zeile hinzu, die Folgendes enthält
ABC
.Deduplizieren Sie die Zeichen. Dies löscht jedes Zeichen aus der zweiten Zeile, die bereits in der ersten Zeile erscheint.
Verwerfen Sie die erste Zeile.
quelle
1`
Teil der Antigrep-Phase?1
bedeutet im Allgemeinen "nur einmal X tun". Wie genau die Grenzwerte funktionieren (dh was X ist), hängt vom verwendeten Bühnentyp ab. Bei Antigrep-Stufen prüft Retina zunächst, welche Zeilen mit dem regulären Ausdruck übereinstimmen (hier jede Zeile, da der reguläre Ausdruck leer ist), dann bedeutet das Limit "nur die erste übereinstimmende Zeile verwerfen". In ähnlicher Weise würde es bedeuten, "nur die erste übereinstimmende Zeile zu behalten", wenn es eine Grep-Stufe wäre. Die Semantik aller Limits finden Sie im Wiki .05AB1E ,
64 Bytes2 Bytes mit dem neuen
žR
Befehl gespeichert, wie von Kevin Cruijssen vorgeschlagenProbieren Sie es online! oder als Test Suite
Erläuterung
quelle
J
zurückkehrenEL, LE
?"""{input}"""
, was auch für leere Strings funktioniert :).LE
).Java 7,
7358 BytesDank @KritixiLithos werden 15 Bytes eingespart .
Testcode:
Probieren Sie es hier aus.
Ausgabe:
quelle
"["+s+"]"
anstelle von tuns.replaceAll("(.)","$1|")
?EJL
) funktioniert es wieder, was immer noch viel kürzer ist. :)Eigentlich 7 Bytes
Probieren Sie es online!
quelle
Pyth, 5 Bytes
Teste es hier
Erweitert sich zu
quelle
<G3
MATL,
108 BytesZwei Bytes gespart dank Suever.
setdiff
ist kürzer alsismember
.Probieren Sie es hier aus!
Erläuterung
Ja, dies mag eine triviale Aufgabe gewesen sein, aber ich bin sehr zufrieden, dass ich es geschafft habe, sie mit MATL ganz alleine zu lösen. Ich habe nie gesagt, dass es die kürzeste Lösung ist ... Danke, Suever!
quelle
JavaScript ES6,
41 3938 Bytes2 Bytes dank Arnauld gespeichert. Dank LarsW 1 Byte gespeichert.
quelle
s=>eval`'ABC'.replace(/[${s}]/g,'')`
.join``
erspart Ihnen zwei Zeichen über die Lösung , die ich mit hatte kommen:f=s=>"ABC".replace(RegExp(`[${s}]`,'g'),"")
.V , 10 Bytes
Probieren Sie es online!
Hexdump:
Erläuterung
Die Eingabe erfolgt in der ersten Zeile des Puffers. Also so etwas wie:
und der Cursor befindet sich auf dem ersten Zeichen. Also löschen wir den Eingang (der ihn im Register speichert
"
) und gehen gleichzeitig mit in den EinfügemodusC
.Sobald
LEJ
ich mich im Einfügemodus befinde, werden die Zeichen eingefügt. Danach kehre ich mit in den normalen Modus zurück<ESC>
.Jetzt müssen wir alle Zeichen entfernen, die in der Eingabe vorhanden sind.
Und sobald dies passiert ist, verbleiben die restlichen Buchstaben im Puffer.
quelle
Ruby,
27 1918 Bytes-1 Byte dank Martin Ender
quelle
Haskell ,
2726 BytesProbieren Sie es online! Verbrauch:
("ABC"\\) "CB"
Erträge"A"
.\\
ist der gesetzte Differenzoperator, die Klammern bilden einen sogenannten Abschnitt, der eine Kurzform für das Lamda ist(\x -> "ABC" \\ x)
.Ohne Import: (gleiche Byteanzahl dank @nimi)
Probieren Sie es online! Verbrauch:
f "CB"
Erträge"A"
.Andere Ansätze:
quelle
(\\)
dass wir bald zu Prelude wechseln.Data.Set.difference
.(\\)
respektiert nichts davon. Datentypen, die für dieses Verhalten vorgesehen sind, weisen eine Struktur auf, die sie im Allgemeinen effizienter, sicherer (da keine möglichen Annahmen zu Stabilität usw. verletzt werden können) und komfortabler macht.GNU sed ,
3429 BytesBeinhaltet +1 für
-r
-5 dank Digital Trauma
Probieren Sie es online!
Aus irgendeinem Grund funktioniert TIO nicht mit Extended Regex (
-r
), daher musste ich es in BASH packen.quelle
-n
undP
sind unnötig. Sie können dies auch in bash packen, damit es in TIO funktioniert. Keine Ahnung warum-r
nicht funktioniert. tio.run/nexus/bash#DcmxDYAwDATA/qdIR4JELCjp7F8jooIFCPubb@/…Brain-Flak , 120 + 3 = 123 Bytes
Es wird mit dem
-c
Flag ausgeführt und fügt 3 Bytes hinzuProbieren Sie es online!
Erläuterung
Insgesamt setzt dieses Programm so ziemlich den rechten Stapel minus den linken Stapel, auf den der rechte Stapel initialisiert ist
CBA
und der linke Stapel auf die Eingabe initialisiert wird.Kommentierter Code
Weitere Erklärung zu kommen ...
quelle
Mathematica, 37 Bytes
quelle
Characters
Karotte , 15 Bytes, nicht konkurrierend
Nicht konkurrierend wegen eines Fehlers, den ich bei der Rückgabe von Übereinstimmungen und leeren Zeichenfolgen gefunden habe. Also habe ich es einfach behoben
Probieren Sie es online! (Kopieren Einfügen)
Erläuterung
quelle
CJam , 7 Bytes
Probieren Sie es online! (Als durch Zeilenvorschub getrennte Testsuite.)
quelle
MATLAB / Octave, 20 Bytes
Online Demo
quelle
Oktave,
2927 BytesDank Suever konnten zwei Bytes gespart werden, indem die Zeichenfolge
'ABC'
innerhalb desismember
Aufrufs erstellt wurde.Wir verwenden
~ismember()
als logische Indizes für die Variablex
. Die eigentümliche Sache ist, wir erschaffen imx='ABC'
Innerenismember
, nicht davor. Die Reihenfolge Octave sieht so aus:quelle
C #,
50 Bytes32 Bytes47 Bytes35 BytesWo
i
ist die Eingabe:Vollständige App in LINQPad getestet
Testergebnisse
quelle
string.Join("",...)
->string.Concat(...)
Spart 1 ByteAPL, 7 Bytes
~
Ist die Subtraktion gesetzt,∘
wird komponiert. Dies ist eine Funktion, dieABC
minus der Zeichen in ihrer Eingabe zurückgibt .quelle
Qualle , 9 Bytes
Probieren Sie es online!
In konventioneller Notation übersetzt dieses Programm:
I
ist die Eingabe,N
ist Listendifferenz undP
wird ausgegeben.quelle
Perl 5.9.9
79 38 3735 Bytes(Ich bin mir der Zählregeln hier nicht sicher - habe Schalter enthalten, aber nicht den Perl-Befehl).
(Angepasste Zählungen nach dem Kommentar unten)
quelle
-l
Flagge). :)perl -pe'$_=eval"ABC=~y/$_//dr"'
nur 23 Bytes (22 + 1 für-p
) ausführen .Common Lisp, 71 Bytes
Der derzeit größte Eintrag, aber zumindest lesbar ;-)
quelle
Japt ,
1312 BytesDank ETHproductions ein Byte gespart.
Probieren Sie es online!
quelle
Pyth, 4 Bytes
Probieren Sie es hier aus!
Beachten Sie, dass Kleinbuchstaben verwendet werden, die möglicherweise nicht akzeptiert werden
quelle
C 53 Bytes
Wenn implizite Deklarationen von string.h nicht zulässig sind, 72 Byte hinzugefügt werden
#include<string.h>
Probieren Sie es online!
oder etwas mehr Spaß bei 75 Bytes
Probieren Sie es online!
quelle
Batch, 101 Bytes
Übernimmt die Eingabe in STDIN, was bedeutet, dass sie
%1
leer ist, wenn der Code in die Hilfsunterroutine gelangt und nichts gedruckt wird.quelle
R ,
4740 BytesProbieren Sie es online!
Ersetzt alle Buchstaben in der Eingabezeichenfolge durch die leere Zeichenfolge.
quelle