Suchen Sie bei gegebener Zeichenfolge das erste Wort, das mit jedem Buchstaben beginnt (Groß- / Kleinschreibung wird nicht berücksichtigt).
Probe
Verwendung Ferulas flourish in gorgeous gardens.
als Eingabe:
"Ferulas flourish in gorgeous gardens."
^^^^^^^ ^^ ^^^^^^^^
| | |
| | --> is the first word starting with `g`
| --> is the first word starting with `i`
--> is the first word starting with `f`
Dann sollte die Ausgabe für dieses Beispiel die übereinstimmenden Wörter sein, die durch ein einzelnes Leerzeichen verbunden sind:
"Ferulas in gorgeous"
Herausforderung
Sowohl Eingabe als auch Ausgabe müssen eine Zeichenfolgendarstellung sein oder die nächstgelegene Alternative in Ihrer Sprache.
Programm oder Funktion erlaubt.
Sie können ein Wort mindestens eine des Seins betrachten: lowercase or uppercase letters, digits, underscore
.
Dies ist Code-Golf , die kürzeste Antwort in Bytes gewinnt.
Weitere Beispiele:
input: "Take all first words for each letter... this is a test"
output: "Take all first words each letter is"
input: "Look ^_^ .... There are 3 little dogs :)"
output: "Look _ There are 3 dogs"
input: "...maybe some day 1 plus 2 plus 20 could result in 3"
output: "maybe some day 1 plus 2 could result in 3"
Antworten:
Retina , 28 Bytes:
M!
- Ordnen Sie jede Arbeit zu und drucken Sie alle durch Zeilenumbrüche getrennten Wörter.i
- Fall ignorieren.\b(\w)
- Erfassen Sie den ersten Buchstaben jedes Wortes(?<!\b\1.+)
- Überprüfen Sie nach dem Abgleichen des Buchstabens, ob es kein vorheriges Wort gibt, das mit demselben Buchstaben beginnt.\1.+
Stellt mindestens zwei Zeichen sicher, so überspringen wir das aktuelle Wort.\w*
- Stimmen Sie mit dem Rest des Wortes überein.Das oben Gesagte stimmt nur mit Wörtern überein - alle anderen Zeichen werden entfernt.
¶\n
- Ersetzen Sie Zeilenumbrüche durch Leerzeichen.Probieren Sie es online!
quelle
Netzhaut , 45 Bytes
Verwenden Sie einfach einen einzelnen regulären Ausdruck, um spätere Wörter zu entfernen, die mit demselben
\w
Zeichen beginnen (bei deri
Option wird die Groß- / Kleinschreibung nicht beachtet), konvertieren Sie Läufe von\W
in ein einzelnes Leerzeichen und entfernen Sie dann alle führenden / nachfolgenden Leerzeichen aus dem Ergebnis.Probieren Sie es online!
Bearbeiten: Siehe @ Kobi Antwort für eine kürzere Version mit
M!`
quelle
i` \b((\w)\w*)\b(?<=\b\2\w*\b.+)
(ein Leerzeichen vor dem ersten\b
) Sind die Zeilen danach unnötig?a...a -> a
JavaScript (ES6),
73-71Byte2 Bytes gespart dank @ edc65!
Prüfung
quelle
parseInt("_",36) = NaN
? Blasphemie!s=>s.match(u=/\w+/g).filter(w=>u[w=parseInt(w[0],36)]?0:u[w]=1).join' '
Pyth, 23 Bytes
Probieren Sie es online aus: Demo oder Test Suite
J:z"\w+"1
findet alle Wörter in der Eingabe unter Verwendung des regulären Ausdrucks\w+
und speichert sie inJ
..grhk0J
gruppiert die Wörter nach dem Anfangsbuchstaben in Kleinbuchstaben,hM
nimmt den ersten aus jeder Gruppe,xDJ
sortiert diese Wörter nach dem Index in der Eingabezeichenfolge undjd
fügt Leerzeichen dazwischen ein.quelle
Perl 6, 39 Bytes
quelle
\w+
beheben, die zusammenpassen müssen, und densubstr
Teil Golf spielenC,
142132122 Bytes10 Bytes leichter dank @tucuxi!
Gibt nach dem letzten Ausgabewort ein Leerzeichen aus.quelle
c>47
undc<58
mitisalnum
anstelle von rasierenisalpha
MATL , 23 Bytes
Dies ist eine Anlehnung an Jakubes Idee , einen regulären Ausdruck zu verwenden, um unerwünschte Zeichen zu entfernen und gleichzeitig zu teilen.
Die Eingabe ist eine Zeichenfolge, die in einfache Anführungszeichen eingeschlossen ist.
Probieren Sie es online!
Erläuterung
quelle
Vim 57 Tastenanschläge
Erläuterung:
Ich bin wirklich enttäuscht, wie lange dieser ist. Die „Ungültig“ Zeichen (alles außer
a-z
,A-Z
,_
und Raum) wirft mir wirklich ab. Ich bin mir sicher, dass es einen besseren Weg gibt, dies zu tun:Da
\h
passt das alles für den Raum, aber ich kann nicht herausfinden, wie man den Metacar in eine Reihe legt. Wenn jemand Tipps hat, würde ich sie gerne hören.quelle
a-zA-Z_
nicht\w
? Ziffern sind gültigJulia,
165155151129102 BytesDies ist eine Funktion, die eine Zeichenfolge akzeptiert und eine Zeichenfolge zurückgibt.
Ungolfed:
53 Bytes mit Hilfe von Sp3000 gespeichert!
quelle
Jelly,
3231 BytesProbieren Sie es online!
quelle
C # (LINQPAD) -
136128 Bytesquelle
05AB1E , 40 Bytes
Code:
Probieren Sie es online!
Erläuterung:
Wir generieren zunächst alle Zeichen, die aus dem Eingabe-String gelöscht werden sollen, mit
94L32+ç
( Try here ). Wir verbinden diesen String mitJ
und entfernen,[a-zA-Z0-9_]
was in žj gespeichert ist ( versuchen Sie es hier ). Wir entfernen alle Zeichen, die sich in der zweiten Zeichenfolge befinden, aus der ersten Zeichenfolge.Das kann auch getestet werden hier . Wir
D
duplizieren dies und speichern esX
mit demU
-Befehl. Wir entfernen dann alle Zeichen, die in dieser Zeichenfolge enthalten sind, aus der Eingabe. Anschließend teilen wir Leerzeichen mit aufð¡
und entfernen alle leeren Zeichenfolgen (mit""K
). Wir haben jetzt diese .Dies ist die saubere Version der Eingabe, mit der wir arbeiten werden. Wir bilden jedes Element mit ab
v
. Dies wirdy
als String-Variable verwendet. Wir nehmen das erste Zeichen der Zeichenkette mit¬
und drückenX
, welches eine Zeichenkette mit allen verbotenen Zeichen (!"#$%&'()*+,-./:;<=>?@[\]^`{|}~
) enthält. Wir prüfen, ob diel
Groß- / Kleinschreibung des ersten Zeichens (das auch©
in das Register eingetragen wird) in dieser Zeichenfolge enthalten istå
. In diesem Teil behandelt:ï>i
Wenn der erste Buchstabe in der Zeichenfolge der verbotenen Zeichen (X
) nicht vorhanden ist , fügen wir diesen Buchstaben der Liste der verbotenen Zeichen (fertig mitX®«U
) hinzu und legen ihny
oben auf den Stapel.Wenn die Zeichenfolgen gefiltert werden, verbinden wir den Stapel mit Leerzeichen
ðý
.quelle
PHP
Inspiriert von der Verwendung von Regex in den meisten Antworten, habe ich ursprünglich versucht, dies zu tun, ohne Regex überhaupt zu verwenden, nur um eine ordentliche Variation vorzuführen, aber der Knackpunkt, keine sauberen Zeichenfolgen als Eingabe zu haben, ruinierte diese Idee. Traurig.
Mit Funktionswrapper 89 Bytes
Ohne Funktions-Wrapper (benötigt $ s vordeklariert), 73 Bytes
Erläuterung:
Ich bedaure nur, dass ich keinen schnelleren Weg gefunden habe, um die Groß- / Kleinschreibung zu überprüfen / zu konvertieren.
quelle
Python, 103 Bytes
quelle
Lua, 172 Bytes
Es endete viel länger, dass ich wollte ...
Ungolfed
quelle
Im Ernst, 43 Bytes
Probieren Sie es online!
Der Mangel an Regex-Fähigkeiten machte dies viel schwieriger als nötig.
Erläuterung:
quelle
Ruby 76 Bytes
Oder mit Methodendefinition 88 Bytes
Ungolfed und mit Unit Test:
quelle
\w
Enthält in Regex Zahlenzeichen,[\w\d]
kann also durch ersetzt werden\w
. Wennnil
sich beim Aufrufen Werte in einem Array befindenjoin' '
(oder besser noch*' '
eine Abkürzung, mit der Sie mehr Bytes speichern können), verschwinden diese, sodass der Aufruf von nichtcompact
erforderlich ist.\w\d
ist mir peinlich. Aber wenn ich das entferne,compact
bekomme ich zusätzliche Leerzeichen (siehe['x',nil,'x']*'y' == 'xyyx'
). Oder habe ich etwas verpasst?(list-[p])
Bytes gespeichertlist.compact
. Auch/\w/
ist gleichbedeutend mit/[\w]/
. Schließlich können Sie Ihrenil
mitp
und Ihre!p
mit ersetzen1
(da Ihr Hash nur Wahrheitswerte darin benötigt)nil
mitp
funktioniert nicht. Wenn ich es in meinem Code verwende, erhalte ich einen Syntaxfehler. Ich muss gerne kapseln(p)
- aber dann habe ich wieder 3 Zeichen.!f[j=i.upcase]?(f[j]=1;h):p
. Auch nur daran gedacht, aber wegen der Indexierung von Strings, die Verwendungs.scan(/\w+/)
und das Entferneni
vonh[0]
zu Gunsten von Werken.grep und awk,
6856 bytesDas Drehbuch:
Erläuterung:
grep -o
Stimmt mit den zulässigen Wörtern überein, wobei jedes Wort in einer eigenen Zeile gedruckt wird.awk
Nimmt den ersten Buchstaben jeder Zeile mitsubstr
, macht ihn klein und erhöht dann einen Hashtabelleneintrag mit dieser Taste. Wenn der Wert vor dem Inkrement nicht gesetzt war, wird die Zeile gedruckt.echo ...
verwandelt die Zeilen wieder in WorteIch habe versucht , vorher eine Lösung zu schaffen , ohne
awk
, mituniq
,sort
,grep
undbash
doch nur kurz fiel. Geschichte in den Bearbeitungen.Vielen Dank an Dennis für einige Verbesserungen, die ich verpasst habe.
quelle
Python 3.5, 138 Bytes:
Grundsätzlich passiert was ist ..
quelle
PHP 120 Bytes
Dies erzeugt eine Reihe von Warnungen, aber das ist in Ordnung.
quelle
function
nötig?Javascript ES6,
108107 ZeichenBei 107 Zeichen wird die Ergebniszeichenfolge gekürzt
Prüfung:
quelle
f=
zählt nicht .Tcl , 150 Bytes
Probieren Sie es online!
quelle