Einmal habe ich ein JavaScript-Programm geschrieben, das eine Zeichenfolge und ein Zeichen als Eingabe verwendet und alle Zeichen mit Ausnahme des ersten und des als Eingabe angegebenen Zeichens nacheinander entfernt.
Berechnen Sie dies beispielsweise mit Eingaben codegolf.stackexchange.com
und e
für die Zeichenerträge:
codegolf.stackexchange.com
cdegolf.stackexchange.com
cegolf.stackexchange.com
ceolf.stackexchange.com
celf.stackexchange.com
cef.stackexchange.com
ce.stackexchange.com
cestackexchange.com
cetackexchange.com
ceackexchange.com
ceckexchange.com
cekexchange.com
ceexchange.com
ceechange.com
ceehange.com
ceeange.com
ceenge.com
ceege.com
ceee.com
ceeecom
ceeeom
ceeem
ceee
Es behält das erste Zeichen und alle e
s. Alle anderen Zeichen werden einzeln entfernt.
Ihre Aufgabe ist es, ein Programm (oder eine Funktion) zu schreiben, das zwei Ein- und Ausgaben (oder Rückgaben) eines Strings verwendet, der diesen Effekt erzielt.
Spezifikationen
- Sie können davon ausgehen, dass die Zeichenfolge keine Zeilenumbrüche enthält.
- Die zweite Eingabe ist immer ein Zeichen.
- Wenn die Antwort in Form einer Funktion vorliegt, können Sie ein Array von Zeichenfolgen zurückgeben, die jede Zeile in der Ausgabe enthalten.
- Die Ausgabe kann einen nachgestellten Zeilenumbruch enthalten.
Testfälle
Test Cases
, s
:
Test Cases
Tst Cases
Ts Cases
TsCases
Tsases
Tsses
Tsss
Make a "Ceeeeeeee" program
, e
:
Make a "Ceeeeeeee" program
Mke a "Ceeeeeeee" program
Me a "Ceeeeeeee" program
Mea "Ceeeeeeee" program
Me "Ceeeeeeee" program
Me"Ceeeeeeee" program
MeCeeeeeeee" program
Meeeeeeeee" program
Meeeeeeeee program
Meeeeeeeeeprogram
Meeeeeeeeerogram
Meeeeeeeeeogram
Meeeeeeeeegram
Meeeeeeeeeram
Meeeeeeeeeam
Meeeeeeeeem
Meeeeeeeee
Hello World!
, !
:
Hello World!
Hllo World!
Hlo World!
Ho World!
H World!
HWorld!
Horld!
Hrld!
Hld!
Hd!
H!
Hello World!
, z
:
Hello World!
Hllo World!
Hlo World!
Ho World!
H World!
HWorld!
Horld!
Hrld!
Hld!
Hd!
H!
H
alphabet
, a
:
alphabet
aphabet
ahabet
aabet
aaet
aat
aa
upperCASE
, e
:
upperCASE
uperCASE
uerCASE
ueCASE
ueASE
ueSE
ueE
ue
Das ist Code-Golf , also gewinnt der kürzeste Code (in Bytes).
Meeeeeeeeegram
Antworten:
V , 12 Bytes
Probieren Sie es online!
Hexdump:
Ich habe dies mit der neuesten Version von V getestet, die vor der Herausforderung verfügbar war , und alles läuft ordnungsgemäß, sodass diese Antwort konkurriert.
Erläuterung:
Der komprimierte reguläre Ausdruck wird in übersetzt
Was bedeutet
Nicht konkurrierende Version (11 Bytes)
Diese Version verwendet eine Verknüpfung, die zum
Yp
Zeitpunkt der Veröffentlichung dieser Herausforderung nicht verfügbar war.quelle
cat filename | vim
oder würde ich etwas anderes tun?Vim,
27, 26, 25 BytesProbieren Sie es online!
Die Eingabe erfolgt in folgendem Format:
Mein naiver erster Ansatz ist drei Bytes länger:
Ich bin auch glücklich mit dieser Antwort, weil sie mit meinem Namen beginnt.
Sehen Sie die Ähnlichkeit? Wie?
Weniger erfolgreiche Ansätze:
Erläuterung:
quelle
k
zu viel :)(...)comk
Derzeit steht In Zeile 5.:t
hier zu verwenden . NormalYp
würde ein Byte speichern. Sie müssen<C-R>-
natürlich wechseln . Typische PPCG-Regeln sind frustrierend, weil für jeden vernünftigen Testfall:t.|s
mit99@:
oder sogar999@:
richtig wäre, aber es gibt keine gute Möglichkeit, eine unendliche Wiederholung auf diese Weise zu erhalten. Sie müssen weniger interessante Strats verwenden.MATL ,
2016 BytesProbieren Sie es online! Oder überprüfen Sie die Testfälle: 1 , 2 , 3 , 4 , 5 .
Bonus
Geänderter Code, um zu sehen, dass die Zeichenfolge allmählich verkleinert wird (Offline-Compiler):
Oder probieren Sie es bei MATL Online!
Erläuterung
quelle
Haskell, 50 Bytes
Definiert eine Funktion,
(%)
die eine Liste von Zeichenfolgen zurückgibt.Erläuterung
(%)
heißt asw%c
, wobeiw
es sich um die Eingabezeichenfolge undc
das zu behaltende Zeichen handelt. Kurz gesagt, diese Definition teilt sichw
in das erste Zeichen (a
) und den Rest (x
) auf, teilt sichx
beim ersten Auftreten eines anderen Zeichens aufc
und ruft sich rekursiv auf, wobei dieses eine Zeichen fallengelassen wird.quelle
Retina ,
2827 BytesDie Anzahl der Bytes setzt die Kodierung nach ISO 8859-1 voraus.
Probieren Sie es online!
Erläuterung
Hier gibt es viel Konfiguration. Die Bühne selbst ist wirklich gerecht
G1`
und behält nur die erste Zeile bei und verwirft das eingegebene Zeichen.*
verwandelt es in einen Trockenlauf, was bedeutet, dass das Ergebnis (dh die erste Zeile der Zeichenfolge) gedruckt wird, ohne die Zeichenfolge tatsächlich zu ändern.{
weist Retina an, beide Phasen in einer Schleife auszuführen, bis sich der String nicht mehr ändert und;
die Ausgabe am Ende des Programms verhindert.Dies verwirft das erste Zeichen, das a) nicht am Anfang der Eingabe steht, b) nicht dem separaten Eingabezeichen entspricht.
quelle
Pip ,
22262422 BytesNimmt Zeichenfolge als erstes Befehlszeilenargument, Zeichen als zweites. Probieren Sie es online!
Erläuterung
Schleifen über Zeichen der Eingabe; Wenn das Zeichen dem Sonderzeichen entspricht, fahren Sie mit dem nächsten fort. Wenn nicht, löschen Sie es und drucken Sie die Zeichenfolge.
Eine ungolfed-Version (
a
,b
get cmdline args;o
beginnt mit einem Wert von1
,x
is""
):Golftricks:
L
wird nur einmal ausgewertet, damit wir den ersten Ausdruck dort hineinschleichen können.#Pa-1
wird nicht funktionieren, weilP
es eine niedrige Priorität hat (es würde als geparst werden#P(a-1)
), aber wir können es neu anordnenv+#Pa
, indem wir diev
vorinitialisierte Variable verwenden-1
.RA:
Operator gibt den neuen Wert von zurücka
, sodass wir diesen Ausdruck drucken können, anstatt eine separatePa
Anweisung zu haben.?
stattdessen den ternären Operator verwenden können.quelle
Perl 5, 29 Bytes
Ich habe 35 Bytes mit Strawberry Perl: 31 Bytes plus 1 für
-nE
anstelle von-e
plus 3 für Leerzeichen +-i
(für die Eingabe mit einem Buchstaben verwendet; die längere Zeichenfolge stammt von STDIN).Ich habe jedoch keinen Zweifel daran, dass dies ohne die
chomp;
Verwendung von<<<
29 Byte möglich ist, obwohl ich es nicht selbst mit Strawberry testen kann.Somit:
quelle
-l
Option, mit der ein automatischer Zeilenumbruchs-Bearbeitungsmodus aktiviert wird, in demprint
ein zusätzlicher Zeilenumbruch gedruckt wird (hier irrelevant) und-p
/-n
input den Zeilenumbruch entfernt (sehr relevant). Es ist auch veraltet, aber ich denke, Sie können das^I
durch ein buchstäbliches Steuerelement ersetzen, um zusätzliche Einsparungen zu erzielen. Schließlich denke ich,s/.\K[^$^I]/redo/e
wäre ein Zeichen kürzer, obwohl ich nicht 100% sicher bin, dass das ein legaler Ort ist, um eine zu setzenredo
.^I
, das gilt für die meisten Kontrollbuchstabenvariablen, aber nicht für diese, IIRC. Re\K
und setzenredo
in den Ersatz mit/e
, danke! Ich werde es testen, wenn ich die Chance habe ...Perl 6 ,
47 4038 BytesErweitert:
...^
Stattdessen wurde der Grund verwendet,...
dass der Wert&[eq]
erst dann zurückgegeben wird,True
wenn der letzte Wert wiederholt wurde.quelle
05AB1E ,
2625 BytesProbieren Sie es online!
Bitte beachten Sie, dass
¬²k0Q
dies möglicherweise umgeschrieben wird¬²Q
, aber aus irgendeinem Grund nicht funktioniert, wenn das aktuelle Zeichen ein Anführungszeichen ist: Q gibt die tatsächliche Zeichenfolge anstelle eines Booleschen zurück und verursacht eine Endlosschleife.Dieser Code kann weiter verwendet werden, da er
¯J?
dupliziert wird. Das Verschieben dieses Teils in der Schleife würde die Duplizierung entfernen und es auch ermöglichen, die schließende eckige Klammer fallen zu lassen.quelle
DˆćUΔD²KRнõ.;DXìˆ}¯¨»
für 21, aber das verwendet neue Befehle.Python 2,
7166 Bytes:Ein volles Programm. Nimmt 2 Eingaben über STDIN im Format auf
'<String>','<Char>'
.Außerdem gibt es hier eine rekursive Lösung mit derzeit 140 Byte :
Dieser sollte im Format aufgerufen werden
print(Q('<String>','<Char>'))
.quelle
Python 3 , 72 Bytes
Probieren Sie es online!
Diät machen:
quelle
JavaScript (ES6), 74 Byte
quelle
f('test cases', 's')
(endet mitstss
, anstatttsss
). Ich denke, dies liegt daran, dassreplace
das erste Vorkommen entfernt wird, sodass das erstet
statt des zweiten Vorkommenst
in der vierten Iteration dermap
Schleife entfernt wird.Ruby,
1481399790837762 BytesSie sind sich nicht sicher, ob Amateur-Code für diesen Austausch akzeptiert wird, aber ich bin daran interessiert, das Codieren von Golf zu lernen, obwohl ich schrecklich darin bin. Gibt es eine Hilfe, wie ich dieses Programm so klein wie die anderen hier aussehen lassen könnte?
BEARBEITEN:
Ersetzte Puts durch p
Dank des Weizen-Assistenten wurden eine Tonne Leerzeichen entfernt und die Bytes korrekt gezählt
Dank Challenger5 ging von
s=gets.chop;c=gets.chop;
biss,c=gets.chop,gets.chop;
ersetzt
then
mit;
undgets.chop
mitgets[0]
Dank Mhutter!Eingabe jetzt als Kommandozeilenvariable übernehmen, z.
prog.rb helloworld l
Dank zahlreichen Verbesserungen durch jeroenvisser101 ersetzt
a=s.dup
mits=""+a
und die vorherige if - Anweisungif s[i]!=c;s[i]="";p s;else i+=1;end
mit(d!=c)?(s[i]="";p s):i+=1;
großem Fortschritt!quelle
=
s. Umfassendere Tipps finden Sie auf unserer Tipps-Seite .s=gets.chomp
. Ich bin mir nicht sicher, ob Sie dies in Ruby tun können, aber in einigen Sprachen wie Python können Sie mehrere Zuweisungen in einer Anweisung kombinieren, za,b,c=0,1,2
.do
,then
undend
), und um das vierte=
.c90,
129125 Bytesmit Leerzeichen:
ohne Leerzeichen:
ungolfed:
Dadurch wird ein Zeiger auf den Anfang der Zeichenfolge gesetzt und eine Schleife ausgeführt, die diesen Zeiger durchläuft, bis das Ende der Zeichenfolge erreicht ist. Innerhalb der Schleife wird das erste Zeichen und dann alle Instanzen des zweiten Arguments ausgegeben, die zwischen dem Anfang der Zeichenfolge und dem Zeiger gefunden werden. Danach setzt es den Zeiger auf und druckt den Rest der Zeichenkette aus.
Dies muss auf einem System mit sizeof (int) == sizeof (char *) kompiliert werden. +3 Bytes sonst.
Dies ist das erste Mal, dass ich Code Golfing hier ausprobiert habe, daher bin ich sicher, dass einige Optimierungen vorgenommen werden müssen.
quelle
Dyalog APL , 27 Bytes
{×i←⊃1+⍸⍺≠1↓⎕←⍵:⍺∇⍵/⍨i≠⍳≢⍵}
⍺
der ausgeschlossene Charakter ist,⍵
ist die anfängliche ZeichenketteArgument drucken; Index
i
des ersten nicht⍺
nach dem ersten Zeichen suchen ; Wenn gefunden, rekursiv miti
entfernt aufrufenquelle
Mathematica, 64 Bytes
Anonyme Funktion. Nimmt zwei Zeichenfolgen als Eingabe und gibt eine Liste von Zeichenfolgen als Ausgabe zurück. Entfernt wiederholt die erste Nichtinstanz des Zeichens.
quelle
FixedPointList
.PHP,
88848685828178 Bytes1 Byte gespeichert dank @IsmaelMiguel, 3 Byte dank @ user59178, 3 Byte inspiriert von @ user59178
Nimmt Eingaben von Befehlszeilenargumenten entgegen. renn mit
php -r <code> '<string>' <character>
Das fügt
54 Bytes Code hinzu, spart aber bei der Ausgabe und zusätzlichecho$a;
.quelle
$argv[1]."\n"
kann geschrieben werden als"$argv[1]\n"
$b
eine neue Zeile hinzugefügt wird, wird sie immer wahrheitsgemäß, solange sie eine Länge> = 1 hat. Daher""<
ist die unnötig.substr()
anstelle der Zuweisung verwenden$b
.substr
Ergebnis sowohl für die Bedingung als auch für dieprint
; also sollte ich es irgendwo zuweisen. Aber du hast mich inspiriert.for(;$b=substr($b?:".$argv[1]\n",1);)
doch was du jetzt noch besser hast.05AB1E,
262423 BytesDanke @Kade für 2 Bytes!
Danke @Emigna für 1 Byte!
Verwendet die CP-1252- Codierung. Probieren Sie es online!
y²k0Ê
könnte seiny²Ê
aber die sein"
vermasseln sein.Dies könnte wahrscheinlich mehr Golf gespielt werden, da
«
es zweimal wiederholt wird. Bitte hinterlassen Sie einen Kommentar, wenn Sie Vorschläge oder Möglichkeiten zum Golfspielen haben.quelle
Java 10,
155140139124 BytesProbieren Sie es online aus.
Erläuterung:
Alte 139 Bytes rekursive Antwort:
-1 Bytes dank @Eugene . (Machen Sie das nächste Mal einen Kommentar, anstatt den Beitrag eines anderen zu bearbeiten.)
Probieren Sie es online aus.
Erläuterung:
quelle
C #,
122117112 BytesUngolfed:
Gibt eine Auflistung von Zeichenfolgen zurück.
quelle
c
. In diesem Fall versucht loop, für immer zu funktionieren.TSQL, 127 Byte (ohne Variablendefinitionen)
Formatiert:
quelle
patindex
, aber dasalphabet
Beispiel scheint nicht ganz richtig zu sein, es wirdaaphabet
durchgehend angezeigtaaa
. Erwähnenswert ist auch, dass dies auf einem Server oder einer Datenbank mit einer Sortierung ausgeführt werden sollte, bei der die Groß- und Kleinschreibung beachtet wird. AndernfallsupperCASE
schlägt das Beispiel ebenfalls fehl und wirdueE
in der letzten Zeile angezeigt.C #,
135138 :(137 BytesGolf gespielt:
Ungolfed:
Die Funktion gibt eine Sammlung von Zeichenfolgen zurück.
EDIT1: @psycho hat festgestellt, dass der Algorithmus nicht richtig implementiert wurde.
EDIT2: Variable für erstellt
s.Length
. Ein Byte gespart dank @TheLethalCoder.quelle
codeegolf e
würde gebence
stattcee
.if
mitwhile
und es funktioniert.s.Length
zum Speichern eines Bytes:int i=1,l;for(;;){yield return s;l=s.Length;while(i<l&&s[i]==c)i++;if(i>=l)break;s=s.Remove(i,1);}}
Python 2 -
6573 BytesUnd eine rekursive 76- Byte-Lösung, denn obwohl sie länger als die erste ist, gefällt sie mir irgendwie besser:
quelle
Schläger 194 Bytes
Ungolfed:
Testen:
Ausgabe:
quelle
JavaScript (ES6),
64-69Zurückgeben einer einzelnen Zeichenfolge mit Zeilenumbrüchen
quelle
.map
kumulativ war. Ich sah das.map().filter()
und dachte: "Das würde ein großartiges Array-Verständnis ergeben!", Aber das Fehlen eines Index im Array-Verständnis hat es getötet und es endete mit der gleichen Länge:s=>c=>[for(x of(i=0,z=[...s]))if(--i&&x!=c)(z[~i]=~i?'':x,z.join``)]
(Übrigens zähle ich 68 Bytes für all diese.)([...z],c,i=0)=>[for(x of z)if(--i&&x!=c)(z[~i]=~i?'':x,z.join``)]
Swift 3 -
151147 BytesSwift ist nicht die ideale Sprache zum Golfen, besonders wenn es um das Indizieren von Saiten geht. Das ist das Beste, was ich tun kann:
Leider braucht Swift Leerzeichen
!=
(aber nicht für==
), und Swift 3 hat den++
Operator fallen gelassen . Der Trick für beide besteht darin, in ein Zeichenarray zu konvertieren, das die Indizierung von Ganzzahlen ermöglicht, und die Zeichenfolge-Interpolation zu verwenden, um zurück in aString
("\(c)"
) zu konvertieren .Ungolfed:
Vorherige, nicht rekursive Lösung
quelle
while
benötigte Platz zum kompilieren. Ich habe auch mit Typealiasing gespieltString
und versucht,print
eine Schließung herbeizuführen , aber sie haben keinen Platz gespart.Pyke,
261917 BytesProbieren Sie es hier aus!
quelle
Mathematica, 78 Bytes
Verdammt, Martin Ender, ich war fast der Erste: p
Unbenannte Funktion; einfache Implementierung mit einer
While
Schleife und einigen temporären Variablen.quelle
JavaScript ES6, 89 Bytes
Ich dachte, das wäre eine leichte Herausforderung, aber ich bin mir ziemlich sicher, dass mir hier etwas fehlt.
Verwendet die Rekursion und gibt ein Array von Zeichenfolgen zurück
quelle
Groovy, 34 Bytes
quelle