Richtlinien
Aufgabe
Schreiben Sie eine Methode, die ein Array von aufeinanderfolgenden (aufsteigenden) Buchstaben als Eingabe verwendet und den fehlenden Buchstaben im Array zurückgibt (Listen in einigen Sprachen).
Regeln
- Das ist Code Golf, also gewinnt die kürzeste Antwort in Bytes!
- Sie erhalten immer ein gültiges Array
- Es wird immer genau ein Buchstabe fehlen
- Die Länge des Arrays beträgt immer mindestens 2.
- Das Array enthält immer nur Buchstaben in Groß- oder Kleinbuchstaben.
- Sie müssen in der gleichen Schreibweise (Groß- oder Kleinschreibung) ausgeben wie die Eingabe
- Das Array wird immer nur einen Buchstaben auf einmal gehen (überspringen des fehlenden Buchstabens)
- Die Array-Länge liegt zwischen 2 und 25
- Das erste oder letzte Element des Arrays wird niemals fehlen
Beispiele
['a','b','c','d','f'] -> 'e'
['O','Q','R','S'] -> 'P'
['x','z'] -> 'y'
['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','w','x','y','z'] -> 'v'
code-golf
array-manipulation
alphabet
Amorris
quelle
quelle
['a','b','c','d','f','g']
, Ausgabe['e']
?, Wenn das den Code kürzer machtAntworten:
Pyth , 5 Bytes
Probieren Sie es online!
quelle
C # (.NET Core) ,
48 4746 Byte, Eingabe als ZeichenarrayProbieren Sie es online!
Erläuterung: Das erste Element im Array wird inkrementiert, und es wird ein Zeiger angezeigt, der die folgenden Elemente durchläuft. Wenn sowohl das erste als auch das aktuelle Element unterschiedlich sind, wird das erste Element zurückgegeben.
C # (.NET Core) ,
58 5650 Byte, Eingabe als ZeichenfolgeProbieren Sie es online!
Vorherige 58-Byte-Lösung (im ersten Kommentar angegeben):
Algorithmen mit System.Linq
Die folgenden Algorithmen müssen die Byteanzahl um
using System.Linq;
18 Byte erhöhen und sind daher länger.Mir hat dieser gefallen (52 + 18 Bytes):
Und Sie haben auch eine einzeilige (45 + 18) Byte Lösung:
Und eine sehr clevere (37 + 18) Byte Lösung mit freundlicher Genehmigung von Ed'ka:
quelle
s[i]-s[0]
, ziemlich schlau!for
Schleife keine Stoppbedingung hat. Sie wird also so lange iterieren, bis dieif
Bedingung den Wert "0" ergibttrue
.a=>{int i=0;for(;a[++i]-a[0]<=i;);return--a[i];}
(wenn Sie die Eingabe als übernehmenchar[]
). Übrigens nicht danke an mich, danke an @Nevays Kommentar zu meiner Java 8 Antwort .s=>s.Select(e=>++e).Except(s).First()
Alice , 10 Bytes
Probieren Sie es online!
Erläuterung
Dies ist nur ein Framework für lineare Programme, die vollständig im Ordinal-Modus (Zeichenfolgenverarbeitung) ausgeführt werden:
Der tatsächliche lineare Code lautet dann:
Welches tut:
quelle
Haskell ,
33-30BytesProbieren Sie es online!
quelle
until
speichert ein Byte:f(a:b)=until(`notElem`a:b)succ a
Ruby, 21 Zeichen
Gibt ein einzelnes Elementarray zurück, je nach Frage des Besitzers Kommentar Fragenbesitzers zurück .
Probelauf:
Probieren Sie es online!
quelle
Java 8,
7057564846 Bytes-14 (70 → 56) und -2 (48 → 46) Bytes dank @CarlosAlejo .
-8 (56 → 48) Bytes dank @Nevay .
Erläuterung:
Probieren Sie es hier aus.
quelle
a->{int i=0;for(;a[++i]-a[0]<=i;);return--a[i];}
.C (gcc) , 33
35364860BytesAlle Optimierungen sollten deaktiviert sein und nur auf 32-Bit-GCC.
Eingabe als String übernehmen.
Probieren Sie es online!
quelle
foo(char*a){return*a+1==a[1]?foo(a+1):++*a;}
ist ziemlich gut; Nur 1foo(char*a){while(*a+1==a[1])a++;return++*a;}
Python 3 ,
7462584440 Bytes-12 Bytes dank Erik dem Outgolfer. -18 Bytes dank Leaky Nun. -4 Bytes dank musicman523.
Nimmt die Eingabe als Bytestring.
Probieren Sie es online!
Eine andere coole Lösung:
quelle
.difference({*s})
->-{*s}
Mathematica, 46 Bytes
quelle
Min@Complement[CharacterRange@@#[[{1,-1}]],#]&
würde ein Byte sparen.JavaScript (ES6), 70 Byte
Eingabe als Zeichenfeld
Weniger golfen
Prüfung
quelle
PHP> = 7.1, 46 Bytes
Eingabe als String übernehmen
PHP Sandbox Online
quelle
Retina ,
3325 BytesProbieren Sie es online! Funktioniert mit jedem Bereich von ASCII-Zeichen. Bearbeiten: 8 Bytes dank @MartinEnder gespeichert. Erläuterung: Die erste Stufe dupliziert die Eingabe. Die Sekunde verringert alle Zeichen in der Kopie um 1 Codepunkt. Die dritte Stufe löscht alle Zeichen in der Kopie, die noch im Original vorhanden sind. Dies belässt nur die ursprüngliche Eingabe, das Zeichen vor dem ersten Zeichen der ursprünglichen Eingabe und das fehlende Zeichen. Die letzte Stufe entspricht dann nur dem fehlenden Zeichen.
quelle
SWI-Prolog, 124 Bytes
Beispiele:
Kleine Erklärung:
Dies
m
ist die "Haupt" -Prozedur, dien
das nächste erwartete Zeichen in der Liste erzeugt. Derc
Vergleich funktioniert - wenn die Erwartung mit dem nächsten Element übereinstimmt, fahren Sie fort, oder drucken Sie das erwartete Zeichen aus und springen Sie aus dem Fenster.quelle
fail
:0=1
.C ++ 14, Standardbibliothek, generischer Containertyp (
87-86Byte)Containertyp aus Namensraum
::std
wird davon ausgegangen (zBstd::string
,std::list
oderstd::vector
. Andernfallsusing namespace std;
oder ähnlich würde angenommen werden.Seht es euch an Live On Coliru
C ++ 14 keine Standardbibliothek (immer noch generisch,
6463 Bytes)Auch hier muss die Namenssuche nur unterstützt werden, wenn der Containertyp nicht aus dem Namespace stammt
::std
(oder diesem zugeordnet ist).Live On Colirufür
std::string
zBLive On Colirufür
char const[]
zBquelle
Kohle , 18 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Übernimmt die Eingabe als Zeichenfolge. Funktioniert mit nahezu zusammenhängenden Folgen von ASCII-Zeichen.
quelle
104 Bytes
Voll / Formatierte Version:
quelle
s=>s.Select(e=>++e).Except(s).First()
MATL,
87 Bytes1 Byte gespart dank @Luis
Probieren Sie es bei MATL Online aus
Erläuterung
quelle
Excel, 110 + 2 = 112 Bytes
Muss als Matrixformel ( Ctrl+ Shift+ Enter) eingegeben werden, die
{ }
an jedem Ende geschweifte Klammern und zwei Bytes hinzufügt. Die Eingabe erfolgt als String inA1
, was pro OP in Ordnung ist .Dies ist bei weitem nicht die kürzeste Antwort (Excel ist selten), aber ich mag es zu sehen, ob es getan werden kann.
quelle
Rexx (Regina) , 56 Bytes
Probieren Sie es online!
Endlich eine, die es REXX ermöglicht, seine starke String-Manipulation zu nutzen.
quelle
CJam , 6 Bytes (Vollprogramm) / 7 Bytes (Codeblock)
Probieren Sie es online!
Dies ist ein vollständiges CJam-Programm, das die Eingabezeichenfolge von der Standardeingabe liest und den fehlenden Buchstaben an die Standardausgabe ausgibt. CJam hat eigentlich keine "Methoden", was die Herausforderung verlangt, aber das Nächste wäre wahrscheinlich ein ausführbarer Codeblock, wie dieser:
Probieren Sie es online!
Wenn dieser Codeblock ausgewertet wird, nimmt er die Eingabe als Zeichenfolge (dh als Array von Zeichen) auf dem Stapel und gibt das fehlende Zeichen auch auf dem Stapel zurück.
Erläuterung:
q
Liest im vollständigen Programm die Eingabezeichenfolge und platziert sie auf dem Stapel.)
Anschließend wird das letzte Zeichen der Eingabezeichenfolge entfernt und der Bereichsoperator,
wandelt es in ein Array um, das alle Zeichen mit darunter liegenden Codepunkten enthält (einschließlich aller Buchstaben davor im Alphabet). Wenn also beispielsweise die Eingabe wärecdfgh
, dann),
würde der Stapel die Zeichenfolgen enthaltencdfg
(dh die Eingabe mit dem letzten entfernten Buchstaben) und...abcdefg
wobei...
für eine Reihe von Zeichen mit unten stehenden ASCII-Codes stehta
(dh alle Zeichen unter der zuletzt entfernten Eingabe) Brief).Der Unterschiedsoperator für symmetrische Mengen
^
kombiniert diese Zeichenfolgen zu einer einzigen Zeichenfolge, die genau die Zeichen enthält, die in einer der Zeichenfolgen, jedoch nicht in beiden, vorkommen. Es behält die Reihenfolge bei, in der die Zeichen in den Zeichenfolgen angezeigt werden. Für die Beispieleingabe lautetcdfg
das Ergebnis also "after),^
"...abe
, wobei...
wiederum eine Reihe von Zeichen mit den folgenden ASCII-Codes angegeben wirda
. Zum SchlussW=
extrahieren Sie einfach das letzte Zeichen dieser Zeichenfolge. Dies ist genau das fehlende Zeichene
, das wir suchen wollten (und verwerfen den Rest). Wenn das Programm endet, druckt der CJam-Interpreter implizit den Inhalt des Stapels aus.Bonus: GolfScript , 6 Bytes (volles Programm)
Probieren Sie es online!
Es stellt sich heraus, dass fast derselbe Code auch in GolfScript funktioniert. Wir sparen ein Byte in der Vollversion des Programms aufgrund der impliziten Eingabe von GolfScript, verlieren aber ein Byte, weil im Gegensatz zu CJam
W
keine handliche Variable mit einem Buchstaben hat, die auf -1 initialisiert ist.Außerdem hat CJam separate Ganzzahl- und Zeichentypen (und Strings sind nur Arrays, die Zeichen enthalten), während GolfScript nur einen einzigen Ganzzahlentyp hat (und einen speziellen String-Typ, der sich etwas anders verhält als normale Arrays). Das Ergebnis all dessen ist, dass, wenn der GolfScript-Interpreter den tatsächlich fehlenden Buchstaben anstelle der ASCII-Codenummer ausdrucken soll, statt nur des Zeichens selbst eine einzelne Zeichenfolge zurückgegeben werden muss. Glücklicherweise muss für diese Änderung nur der Indexierungsoperator durch den Operator
=
für die linke Kürzung des Arrays / Strings ersetzt werden>
.Dank des impliziten I / O von GolfScript kann der obige Code natürlich auch als Snippet verwendet werden, das eine Zeichenfolge aus dem Stapel liest und eine Zeichenfolge mit einem einzelnen Buchstaben zurückgibt, die den fehlenden Buchstaben enthält. Oder vielmehr ist jedes Snippet, das eine einzelne Zeichenfolge auf dem Stapel als Argument verwendet und dessen Ausgabe als druckbare Zeichenfolge auf dem Stapel zurückgibt, auch ein vollständiges GolfScript-Programm.
quelle
q
(Programm) oder{...}
(Block). +1 für den Ansatz aberSchale , 6 Bytes
Probieren Sie es online!
Diese Funktion verwendet eine Zeichenfolge (Liste von Zeichen) als Eingabe und gibt ein Zeichen als Ausgabe zurück.
Erläuterung
quelle
Python 2 - 76 Bytes
Verliert gegenüber der bestehenden Python 2-Lösung, ist aber ein etwas anderer Ansatz, sodass ich dachte, ich würde es trotzdem posten:
quelle
8. 99 Bytes
Begründung
Wenn der Abstand zwischen den Buchstaben größer als zwei ist, fehlt ein Buchstabe. Die Buchstabenentfernung wird ermittelt, indem die Differenz zwischen den ASCII-Codes der einzelnen Buchstaben berechnet wird.
Code
Ungolfed-Version
Verwendung und Beispiele
quelle
JavaScript (ES6), 64 Byte
Übernimmt die Eingabe als Zeichenfolge.
Wie?
Initialisierung: Wir beginnen mit n = 0 und p = 0 und rufen die rekursive Funktion g () auf .
Schritt 1: Wir inkrementieren n, bis
c = String.fromCharCode(n)
das erste Zeichen der Eingabezeichenfolge s [0] entspricht .Schritt 2: Jetzt, da wir synchronisiert sind, erhöhen wir sowohl n als auch p gleichzeitig, bis
c = String.fromCharCode(n)
nicht mehr s [p] entspricht .Schritt 3: Wir geben c : das erwartete Zeichen zurück, das nicht gefunden wurde.
Testfälle
Code-Snippet anzeigen
quelle
J, 20 Bytes
a.e.
Boolesche Maske für die Eingabebuchstaben im ASCII-Zeichensatz1 0 1&E.
neue Boolesche Maske, die angibt, ob die Sequenz101
an diesem Index beginnt, dh wo eine "Sprung" -Sequenz beginntI.
der Index dieser Übereinstimmung, dh das Zeichen vor dem übersprungenen>:
Inkrementiere um 1, dh den Index des übersprungenen Zeichens innerhalb des ASCII-Zeichensatzes{&a.
Wählen Sie diesen Index aus dem ASCII-Zeichensatz aus, dh geben Sie das übersprungene Zeichen zurückProbieren Sie es online!
quelle
ES6, 125 Bytes:
http://jsbin.com/vasoqidawe/edit?console
Die zurückgegebene Funktion muss mit einem Array aufgerufen werden
Man könnte weitere 9 Bytes sparen, indem man .join ("") entfernt und einen String übergibt:
ES6, 108 Bytes:
http://jsbin.com/tudiribiye/edit?console
quelle
a.join("")
könnte seina.join``
Common Lisp, 88 Bytes
Probieren Sie es online!
quelle
Python 2 , 69 Bytes
Probieren Sie es online!
Einige Erklärungen Da wir das erste und das letzte Element der Liste kennen, können wir leicht die Summe der Codes aller Zeichen in der Liste berechnen
list + the missed char
(unter Verwendung von zusammenfassenden Formeln der arithmetischen Progression ). Die Differenz zwischen dieser Summe und der Summe der Codes aller Zeichen inlist
ergibt den Code des fehlenden Buchstabens.quelle
05AB1E ,
97 BytesProbieren Sie es online!
quelle
2
dass wir den gleichen Algorithmus verwenden, obwohl ich 05AB1E kaum kenne :)APL (Dyalog) , 17 Bytes
Probieren Sie es online!
⎕AV∘∊
Boolean: Jedes Zeichen im A tomic V ector-Member (Zeichensatz) des Arguments?(
…)
Wenden folgende stillschweigende Funktion an:⊃
das erste Element von⎕AV
der A tomic V ector (der Zeichensatz)/⍨
welche∨\
folgt der Initiale (Mitglied des Arguments)∧
aber~
ist nicht (ein Mitglied des Arguments)quelle