Herausforderung
Ich bin sicher, Sie haben den Titel gelesen und sind hereingekommen, um Ihren Repräsentanten zu bewirtschaften. Sie müssen sich im kürzesten Code gegenseitig herausfordern, um das Auftreten einer Zeichenfolge in einer anderen zu zählen. Zum Beispiel bei folgender Eingabe:
aaaabbbbsssffhd
als Zeichenfolge und die Zeichenfolge
s
sollte ausgeben
3
Regeln
Kurz bevor Sie lächeln und sagen: "Hey, ich werde ---- verwenden", lesen Sie Folgendes:
- Keine Verwendung externer Bibliotheken oder der API Ihrer Sprache. Sie müssen es manuell implementieren. Dies bedeutet, dass Sie die integrierte Funktion oder Methode Ihrer Sprache nicht zum Zählen von Vorkommen verwenden können
- Keine Datei-E / A.
- Keine Verbindung mit einem Server, einer Website usw.
- In einem Fall von "abeba", wo es mit "aba" beginnt und wenn Sie die letzten 3 Buchstaben lesen, ist es auch "aba", zählen Sie nur einen *
Danke @ProgramFOX dafür (die letzte Regel)!
* Hinweis : Wenn Sie Vorkommen zählen, können Sie diejenigen entfernen, die Sie gezählt haben, um zu vermeiden, dass diese Regel missachtet wird
Ich denke, die letzten 2 Regeln sind nur für Regelbieger!
Gewinnkriterium
Wie bereits erwähnt, ist der Gewinner der Code mit den weniger verwendeten Bytes. Der Gewinner wird fünf Tage später (15. Juni 2014) bekannt gegeben.
Meine kleine Antwort
Hier ist meine C ++ - Antwort, in der davon ausgegangen wird, dass die li
Variable die Zeichenfolge zum Überprüfen von Vorkommen enthält und l
die Zeichenfolge ist, nach der gesucht werden muss f
:
Ungolfed
int c = 0;
while (li.find(lf) != string::npos)
{
int p = li.find(lf);
int l = p + lf.length() - 1;
for (p = p; p <= l; p++)
{
li[p] = static_cast<char>(8);
}
++c;
}
Um zu verwenden std::string
, müssen Sie natürlich die String-Header-Datei einschließen!
Golf gespielt
int c=0;while(li.find(lf)!=string::npos){int p=li.find(lf);int l=p+lf.length()-1;for(p=p;p<=l;p++){li[p]=static_cast<char>(8);}++c;}
Ergebnis
Die Variable c
gibt an, wie oft die Zeichenfolge gefunden wurde
Genießen!
Gewinner
Nach langem Warten gewinnt die @ Tennis- Antwort mit nur 3 Bytes, geschrieben in GolfScript
ababa
und istaba
, sollten wir ausgeben1
oder2
? Der drittea
ist sowohl das Ende des erstenaba
als auch der Anfang des zweitenaba
.s
mit Matching umgehen ? Wenn nicht: Ich habe eine 5-+/a=b
Antworten:
GolfScript, 3 Bytes
Angenommen, Zeichenfolge und Teilzeichenfolge befinden sich auf dem Stapel.
Probieren Sie es online aus.
Wie es funktioniert
quelle
golfscript <<< '127,32,-""+'
ist schneller als das Öffnen eines Webbrowsers.[win key] jqt [return] a. [return]
ist noch schneller;)jqt
aber interessant. Was ist es?iPython QTConsole
)JavaScript 32
Nichts wirklich interessantes hier ...
split
Hauptzweck ist das Erstellen eines Arrays aus einer Zeichenfolge mit dem Trennzeichen in argument.quelle
split()
ist nicht Teil der "API Ihrer Sprache"?a.split(b).length-1
19 erhalten. Vielleicht sollte @svidgen die Initialisierung in der Frage klären.J (7)
No use of external libraries
Prüfen!, or your language's API.
Prüfen...? Ich weiß nicht, was eine Sprach-API ist.You have to implement it manually
Prüfen!No file I/O
Prüfen!No connecting with a server, website, et cetera
Prüfen!Wie es funktioniert:
E.
istWindowedMatch
: das J Refsheet gibt're' E. 'reread'
als Beispiel. Das gibt1 0 1 0 0 0
. Dann müssen Sie dies nur noch+/
(im Grunde genommensum
) hinzufügen .Ich denke nicht, dass dies als Verwendung gilt
your language's built-in function or method for counting occurences
, aber das ist umstritten.EDIT: Nur um klar zu sein:
quelle
ababa
->aba
sollte 1 zurückgeben?@Synthetica Absolutley go for it!
als ich ihn fragte, also denke ich, dass es in Ordnung ist.C # - 73
quelle
aba
erscheint zweimal in abeba :aba ba
ab aba
.ababa
, in dem es beginntaba
und wenn Sie die letzten 3 Buchstaben lesenaba
, zählen Sie auch nur einen *" << In den Regeln ..Python 2.x -
49 2322 BytesDies setzt voraus, dass die variable Eingabe in Ordnung ist. Beide Saiten können beliebig lang sein.
@Avall verkürzt.
49-Byte-Version, zählt jede Instanz des Teilstrings ('aba' steht zweimal in 'abeba').
quelle
a='aa'
und b gleich sind. Ist das in Ordnung?a='aba'; b='ababa'
Fall ausgegeben.Powershell 32
Funktioniert so:
Erläuterung: Wird verwendet
-split
, um das erste Argument durch das zweite zu trennen. Gibt die Größe des Arrays zurück, das sich aus der Aufteilung ergibt (minus 1).quelle
Applescript, 106 Bytes
Applescript ist eine lustige, aber alberne Sprache zum Golfen.
Laufen Sie mit
osascript
:quelle
C # - 66 Bytes
quelle
C
130120Hinweis: Wird wahrscheinlich abstürzen, wenn mit falschen Argumenten aufgerufen wird.
Ungolfed (irgendwie):
Alte Version mit
strstr
undstrlen
: 103quelle
Delphi XE3 (113)
Nimmt 2 Zeichenfolgen, entfernt Teilzeichenfolgen von Zeichenfolgen und subtrahiert neue Länge von alter Länge, gefolgt von einer Division der Teilzeichenfolgenlänge.
Testen:
quelle
Lua (48)
Also dachte ich, ich könnte einfach eine andere Antwort einreichen, diesmal in Lua. Es ist sehr wahrscheinlich, dass dies sehr verbessert werden könnte, ich bin sehr neu in diesem Bereich.
quelle
Fortran 90: 101
Standardmissbrauch der impliziten Typisierung, funktioniert für Arrays beliebiger Länge
a
undb
obwohl man das erwarten solltelen(a) < len(b)
.Diese Funktion muss
contain
in einem vollständigen Programm ausgeführt werden, damit sie funktioniert.a
undb
werden von stdin empfangen und können entweder in derselben Zeile (entweder durch Komma oder durch Leerzeichen getrennt) oder in verschiedenen Zeilen eingegeben werden. Kompilieren Sie übergfortran -o main main.f90
und führen Sie es wie jedes andere kompilierte Programm aus.Tests:
Ich könnte die obige Rückgabe 1 machen, wenn ich 4 Zeichen (
,k+1
) für diedo
Schleife hinzufügequelle
Mathematica
2623Funktioniert wie Dennis 'Algorithmus, ist aber wortreicher:
Drei Zeichen von Szabolics rasiert.
quelle
Length@StringCases[a,b]
ist kürzer. Dieses Problem ist nicht genau spezifiziert, daStringCount
es nicht klar ist, ob eine der anderen integriertenString*
Funktionen zulässig sein sollte, wenn wir sie nicht verwenden dürfen. Sie basieren alle auf demselben zugrunde liegenden Code.StringCases
. Mir war nicht klar, was das OP mit der API der Sprache meinte.Length@*StringCases
. Dies ist kürzer, alsLength@StringCases[##]&
wenn wir nur eine Funktion schreiben würden, sie aber nicht aufa
und anwenden würdenb
.C ++ 225
quelle
Java (38)
(Die Frage erforderte kein vollständiges Programm oder eine vollständige Funktion.)
quelle
Cobra - 25
quelle
K / Kona 6
Wo
x
ist der String undy
der Teilstring?~
ist der Negationsoperator, mit'
wird er auf jedes Element in angewendetx
; Es wird zurückgegeben,0
wenn es nicht übereinstimmt und1
wenn es übereinstimmt. Da es elementweise angewendet wird, ist das Ergebnis vony~'x
ein Vektor, der+/
dann das Ergebnis summiert und die Gesamtzahl der Vorkommen ergibt.Leider erfordert diese Methode, dass
y
es sich nur um ein Zeichen handelt. Andernfalls vergleichen wir eine Zeichenfolge mit mehreren Zeichen mit einer einzelnen Zeichenfolge, was zu a führtlength error
.quelle