[a-zA-Z ]
Reduzieren Sie eine nicht leere Zeichenfolge, die nur aus Groß- und Kleinbuchstaben und Leerzeichen ( ) besteht, auf einen Ausschnitt des Alphabets, beginnend mit dem ersten Zeichen.
Um eine Zeichenfolge zu verkleinern, beginnen Sie mit dem ersten alphabetischen Zeichen und entfernen Sie anschließend alle Zeichen, die nicht der nächste Buchstabe des Alphabets sind. Fahren Sie damit fort, bis Sie das Ende der Zeichenfolge erreichen.
Zum Beispiel codegolf
:
Beginnen Sie mit c
, entfernen o
Sie , da dies nicht der nächste Buchstabe des Alphabets ist.
Halten Sie, d
wie es ist der nächste Buchstabe des Alphabets, und hält , e
wie es auch der nächste Buchstabe ist.
Entfernen g
, o
und l
, und zu halten f
.
Ihr letzter Ausschnitt wäre dann cdef
Regeln
- Die Kapitalisierung sollte aufrechterhalten werden, dies
CodEgolF
würde zur Folge habenCdEF
- Das Leerzeichen ist kein Buchstabe des Alphabets und sollte daher immer entfernt werden, auch wenn es der Anfang der Zeichenfolge ist
- Aufgrund der Art der Reduzierung ist das erste alphabetische Zeichen der Eingabe immer das erste Zeichen der Ausgabe.
zZ
ist der letzte Buchstabe des Alphabets. Es folgen keine Buchstaben, das Alphabet wird nicht wiederholt.
Testfälle
codegolf -> cdef
CodEgolf -> CdEf
codeolfg -> cdefg
ProgrammingPuzzles -> P
Stack Exchange -> St
The quick red fox jumped over the lazy brown dog -> Tuvw
Zebra -> Z
Abcdegfhijkl -> Abcdef
Wertung
Dies ist Code-Golf , so dass nur wenige Bytes in jeder Sprache gewinnen!
z
wir einfach aufhören, oder?<space>codegolf
Antworten:
JavaScript (ES6),
66796867 ByteWie?
Aufeinanderfolgende Buchstaben testen
Da das Konvertieren von zwei Zeichen in ihre ASCII-Codes in JS eine ziemlich lange Operation wäre, verwenden wir stattdessen die folgende Formel:
Vorausgesetzt, dass sowohl a als auch b in sind
[a-zA-Z ]
, ist der obige Ausdruck0
genau dann gleich, wenn a und b aufeinanderfolgende Buchstaben sind (dh aufeinanderfolgende Ziffern in der Basis 36), unabhängig vom Fall der Zeichen.Zum Beispiel:
Formatiert und kommentiert
Testfälle
Code-Snippet anzeigen
quelle
Python 2 , 69 Bytes
Probieren Sie es online!
Eine einfache Reduzierung der Zeichenfolge. Wir verketten einfach das nächste Zeichen genau dann, wenn
(ord(y)-ord(x[~0]))%32==1
. Sehr hässliche Prüfung - ich bin sicher, dass es verbessert werden kann, aber ich bin nicht sicher, wie!quelle
from functools import*
.import functools as f
undf.
ist viel länger alsfrom functools import*
sicher, sogar einmal verwendet. Weitere Informationen finden Sie in diesem Thread .Python 3 ,
75 85 84 91 81 7775 BytesIch denke, das ist so kurz wie es in Python 3 nur geht . Es kann in Python 2 um einige Bytes gekürzt werden, wie in Sisyphus 'Beitrag gezeigt .
Probieren Sie es online!
quelle
05AB1E , 13 Bytes
Probieren Sie es online!
-1 danke an Adnan
quelle
ðK
durchá
?Brachylog , 15 Bytes
Probieren Sie es online!
Dies wären 10 Bytes:
⊇.ḷ~sẠ&h~h
Ohne die ziemlich uninteressante Einschränkung "Zeichenfolgen können mit Leerzeichen beginnen".Erläuterung
Da dies ziemlich aussagekräftig ist, ist dies auch sehr langsam.
quelle
MATL ,
181615 BytesVielen Dank an Mr.Xcoder für den Hinweis auf einen Fehler, der jetzt korrigiert wurde
Buchstaben in der Ausgabe werden durch Zeilenumbrüche getrennt.
Probieren Sie es online! Oder überprüfen Sie alle Testfälle (der Fußzeilencode zeigt der Übersichtlichkeit halber alle ausgegebenen Buchstaben in derselben Zeile an).
Erläuterung
quelle
Java (OpenJDK 8) ,
10210174 BytesProbieren Sie es online!
-27 Bytes dank @Olivier Grégoire
quelle
s->{char c=0;for(char x:s)if(c<33&x>33|~-x%32==c%32)System.out.print(c=x);}
(mitchar[]
als Eingabe).C # (Mono) ,
129107939187 Bytes2 Bytes gespart dank @Mr. Xcoder.
4 Bytes dank @jkelm gespeichert.
Probieren Sie es online!
quelle
(c-1)%32
ist~-c%32
PHP, 64 + 1 Bytes
Laufen Sie als Pipe mit
-nR
oder probieren Sie es online aus .Neben den üblichen Tricks: Wenn
$c
erreichtZ
,++$c
ergibtAA
,und
&__
diese Länge unberührt bleibt; so$n
wird es nicht weiter passen$c
.quelle
Pyth ,
23 22 2120 Bytes-1 Byte indirekt dank @Erik the Outgolfer's Trick (
-Qd
) .-1 Byte danke an @Erik den Outgolfer.
Probieren Sie es hier aus.
quelle
Haskell,
106 10597 BytesIch habe versucht,
fromEnum
+ char-Arithmetik zu verwenden, anstatt zu importierenData.Char
, aber das endete länger ...8 Bytes gespart dank H.PWiz!
Probieren Sie es online aus.
quelle
filter
Data.List
Pyth,
212018 BytesProbieren Sie es hier aus.
Weitaus effizientere 20-Byte-Version:
Probieren Sie es hier aus.
-1 Danke an Herrn Xcoder (indirekt).
quelle
.U+b?tlrreb1rZ1kZrz6
(denke ich). Dieser Trick hat mir allerdings geholfen..U+b?tlrreb1rZ1kZr6
aber leiderr <str> 6
bedeutet dasA.strip()
, nicht führende oder nachfolgende Leerzeichen nicht zu entfernen.32
, während alle Buchstaben haben> 64
und somit die Funktionalität nicht beeinträchtigen. Ich denke, das gilt auch für Ihre Antwort.Perl 6 , 51 Bytes
Probier es aus
Erweitert:
Beachten Sie, dass dies
<!before …>
eine Aussage mit der Breite Null istquelle
Gelee , 17 Bytes
Probieren Sie es online!
quelle
Japt ,
181716 Bytes1 Byte dank @Shaggy gespeichert
Online testen!
Hatte gedacht, das wäre ein bisschen kürzer, aber ... So ist das Leben ...
Erläuterung
quelle
rS
mitx
.C # (.NET Core) ,
7060 + 18 Bytes-10 Bytes dank TheLethalCoder
Die Byteanzahl umfasst auch:
Probieren Sie es online!
1 Byte länger
(zur Zeit)(nicht mehr) als TheLethalCoder. Anderer Ansatz mit LINQ.Dies nutzt zwei C-ähnliche Funktionen in C # - eine Zeichenvariable
char
verhält sich implizit wie eine Ganzzahlint
, und der boolesche AND-Operator&&
führt keine rechte Operation aus, wenn left a zurückgibtfalse
. Code Erklärung:quelle
.ToArray()
indem Sie als ein zurückgebenIEnumerable<char>
, um Bytes zu speichern.q / kdb +
4745 BytesLösung:
Beispiele:
Erläuterung:
Nutzung des
mod 32
Tricks aus vorhandenen Lösungen zusammen mit der Konvergenzfunktion . Durchlaufen Sie die Zeichenfolge, wenn die Differenz zwischen dem letzten Element des Ergebnisses (z. B. beginnend mitT
"The quick red fox ...") und dem aktuellen Zeichen 1 ist (nachdemmod
32 eingegeben wurde), addieren wir dies zu das Ergebnis (also nehmen, warum wir nehmenlast x
), dann wirft alles zurück zu einer Zeichenfolge.quelle
Perl 5 , 30 + 1 (-n) = 31 Bytes
Probieren Sie es online!
Wie?
quelle
Netzhaut , 76 Bytes
Probieren Sie es online! Link enthält Testfälle. Erläuterung:
Leerzeichen löschen.
Verdreifachen Sie das erste Zeichen und fügen Sie ein Trennzeichen ein.
Konvertieren Sie das zweite und dritte Zeichen in Kleinbuchstaben und erhöhen Sie sie. Konvertieren Sie letzteres in Großbuchstaben. Dies sind nun die Suchzeichen.
Versuchen Sie, eines der Suchzeichen zu finden. Wenn es gefunden wird, verdreifachen Sie die Übereinstimmung, wodurch die Schleife für die nächste Suche neu gestartet wird. Andernfalls löschen Sie einfach die Suchzeichen und den Rest der Eingabe.
quelle
8 , 114 Bytes
Code
Erläuterung
Beispiel
quelle
C (gcc) ,
79787570 BytesProbieren Sie es online!
quelle
Proton , 59 Bytes
Port der Python 2-Übermittlung .
Probieren Sie es online!
quelle
Pyth, 15 Bytes
Testsuite
Im Gegensatz zu allen anderen Antworten wird hierdurch die Ausgabe nicht zusammengehalten, sondern es werden alle Teilsequenzen der Eingabe generiert. Anschließend werden sie angewiesen, die gewünschte Zeichenfolge am Ende zu platzieren und auszugeben.
quelle
J, Teillösung
Ich poste dies vor allem für Feedback und Verbesserungsvorschläge. Es funktioniert, kümmert sich aber nicht um Groß- und Kleinschreibung und ist schon lang für J.
Zuerst ein dyadisches Hilfsverb, das dir sagt, ob das linke und das rechte Argument alphabetisch benachbart sind:
Als nächstes ein Verb, das das erste Element entfernt, das nicht Teil eines alphabetischen Streifens ist, beginnend mit dem ersten Element:
Beachten Sie, dass wir Adverse verwenden
::
, um das gesamte Argument unverändert zurückzugeben, wenn kein Nicht-Streifen-Element gefunden wurde (dh, wenn das gesamte Argument ein gültiger alphabetischer Streifen ist).Schließlich wird die Lösung gegeben, indem
f
bis zur Konvergenz angewendet wird:Probieren Sie es online!
Und hier ist eine geparste Version
f
zum leichteren Lesen:Nebenfrage : Warum werden die Box-Zeichen bei der Anzeige auf SO nicht perfekt ausgerichtet (sie funktionieren in meiner Konsole):
quelle