Bei einem String s aus Kleinbuchstaben bestehen, wie zum Beispiel
aabaaababbbbaaba
und eine positive ganze Zahl n , wie der 4
Ausgang A längen- n Zeichenfolge t , dass , wenn t auf die Länge der wiederholt s , sie haben so viele Zeichen wie möglich gemeinsam. Für das gegebene Beispiel wäre die optimale Ausgabe aaba
, da es dreizehn Zeichen gemeinsam mit der Zielzeichenfolge hat:
s: aabaaababbbbaaba
t: aabaaabaaabaaaba (aaba)
^^^^^^^^ ^ ^^^^
und kein mögliches t hat mehr. Es aaaaaab
gibt jedoch zwei mögliche Ausgaben: aaaa
und aaba
, die jeweils 6 Zeichen gemeinsam mit der Zielzeichenfolge haben:
s: aaaaaab
t: aaaaaaaa (aaaa)
^^^^^^
s: aaaaaab
t: aabaaaba (aaba)
^^ ^^^^
Entweder aaaa
oder aaba
kann ausgegeben werden, oder beides, wenn Sie möchten. Beachten Sie, dass s nie wiederholt wird. Das Nachlaufen a
beider Wiederholungswerte von t wird einfach ignoriert.
Testfälle
Inputs -> Valid outputs
1 a -> a
1 aa -> a
2 aa -> aa
1 ab -> a b
2 ab -> ab
1 abb -> b
2 abb -> ab bb
2 ababa -> ab
2 abcba -> ab
2 aabbbbb -> bb (ab is not a valid output here)
3 aababba -> aab abb
3 aababbaa -> aab
3 asdasfadf -> asf
3 asdasfadfsdf -> asf adf
2 abcdefghijklmnopqrstuvwxyzyx -> yx
2 supercalifragilisticexpialidocious -> ic ii
3 supercalifragilisticexpialidocious -> iri ili ioi
4 supercalifragilisticexpialidocious -> scii
5 supercalifragilisticexpialidocious -> iapic
2 eeeebaadbaecaebbbbbebbbbeecacebdccaecadbbbaceebedbbbddadebeddedbcedeaadcabdeccceccaeaadbbaecbbcbcbea -> bb be
10 bbbbacacbcedecdbbbdebdaedcecdabcebddbdcecebbeeaacdebdbebaebcecddadeeedbbdbbaeaaeebbedbeeaeedadeecbcd -> ebbbdbeece ebdbdbeece
20 aabbbaaabaaabaaaabbbbabbbbabbbabbbbbabbaaaababbbaababbbaababaaaabbaaabbaabbbabaaabbabbaaabbaaaaaaaba -> aabbbbaaabbabbbaabba
Regeln
- Sie können davon ausgehen, dass die Eingabe immer nur eine nicht leere Zeichenfolge aus Kleinbuchstaben und eine positive Ganzzahl ist, die nicht länger als die Zeichenfolge ist.
- Sie können die Eingaben in jedem Standardformat und in jeder Reihenfolge vornehmen.
- Sie können eine einzelne Zeichenfolge oder mehrere Zeichenfolgen in Form eines Arrays ausgeben, die durch Zeilenumbrüche, Leerzeichen usw. getrennt sind.
- Auf einem modernen Computer muss Ihr Code für jeden Testfall in weniger als 1 Minute fertig sein.
- Das ist Code-Golf , also mach deinen Code so kurz wie möglich.
2 abb -> ba
Wenn sie wie folgt aufgebaut sind(b)[ab]a
: Führende Zeichen werden(b)
ignoriert und[ab]
stimmen überein.Antworten:
Jelly , 11 Bytes
Probieren Sie es online!
Ich hatte nicht damit gerechnet, Dennis in diesem Spiel zu schlagen, also habe ich versucht, es mit FGITW zu versuchen (nachdem ich mehrere Möglichkeiten ausprobiert hatte; es gibt mehr als einen Weg, 11 zu machen). Ich kam zu meiner Überraschung kürzer herein.
Übernimmt die Zeichenfolge dann die Zählung als Kommandozeilenargumente. Ausgänge auf Standardausgang.
Erläuterung
Dies basiert auf der Erkenntnis, dass der Buchstabe an jeder Position des Musters der häufigste Buchstabe sein muss, der dieser Position entspricht. Wir können die Buchstaben finden, die einem bestimmten Muster entsprechen, indem wir sie in mustergroße Gruppen aufteilen und transponieren. Der Hauptgrund, warum diese Lösung so lang ist, besteht darin, dass Jelly anscheinend keinen kurzen Weg hat, um den Modus einer Liste zu finden (ich habe mehrere Versuche unternommen, aber sie sind alle mindestens sechs Bytes lang).
Jelly , 10 Bytes, basierend auf der @ Tennis-Lösung
Probieren Sie es online!
Dies ist eine Kombination aus @Dennis 'und meiner eigenen Lösung. In dieser Lösung gab es einen Fünf-Byte-Modus, den ich für diese Lösung gestohlen habe. (Ich hatte bereits Lösungen basierend auf
⁸ċ
, konnte aber nicht unter sechs Bytes damit kommen. Ich hatte nicht daran gedacht, sie zu verwendenÞ
.)Erläuterung
µ…µ€
undǀ
(mit der…
in der vorherigen Zeile) sind beide drei Bytes lang (die letztere benötigt eine neue Zeile) und äquivalent. Normalerweise verwende ich das erstere, aber das letztere ist flexibler, da Sie damit⁸
das Argument erwähnen können.Dies ermöglicht es, (
Þ
) nach der Anzahl der Vorkommen in⁸
(⁸ċ
) zu sortieren und dann das letzte Element (Ṫ
) zu nehmen, um den Modus in nur fünf Zeichen zu finden.quelle
Mathematica, 51 Bytes
Eingabe und Ausgabe sind Listen von Zeichen.
Auch basierend auf den Modi der Linien der Transponierung. Ich glaube, sie nannten das eingebaute Programm für den Modus einer Liste
Commonest
nur, um Code-Golfern zu trotzen.quelle
MostCommon
...Python 3,
99, 73,61 Bytes-12, danke an @Rod
Dieselbe Idee, aber umgeschrieben, um die Importanweisung zu entfernen.
Original
Erläuterung:
quelle
''.join()
, um eine Liste von Zeichenfolgen zurückzugeben''.join(...)
ein Generator zurückgegeben, nicht sicher, ob die Ausgabe zulässig ist.Python 2, 106
Jetzt ist es eine andere Antwort! Ich habe von Anfang an an einen (fast) Liner gedacht. Jetzt noch kürzer, basierend auf der Zip-Nutzung von @Rod.
Vielen Dank an @ L3viathan und @Rod für die Erläuterung der Verwendung von Lambdas als Antwort
Probieren Sie es online aus
Erläuterung:
combinations(S,N)
Erzeugt alle Kombinationen der Länge N aus den Zeichen von Smax()
Argument,key
das als Eingabefunktion zum Vergleichen von Elementen verwendet wirdlambda s:sum(x==y for x,y in zip(S,s*len(S)))
als solche Funktion übergebenDieses Lambda zählt die Anzahl der übereinstimmenden Zeichen in der Liste der Tupel, die von erzeugt werden
zip(S,s*len(S))
s
- eine der Kombinationen und es wird multipliziert,len(S)
wodurch eine Saite entsteht, die garantiert länger als S istzip
Erstellt Tupel von Zeichen jeder ZeichenfolgeS
unds*len(S)
ignoriert alle Zeichen, die nicht übereinstimmen können (falls eine Zeichenfolge länger als eine andere ist).Also
max
wählt man eine Kombination, die maximale Summe ergibtquelle
[]
Listenverständnis nicht in Funktionen verwenden,1 for ... if <cond>
Sie können es auch direkt verwenden,<cond> for ...
da es fürsum
PythonTrue
als1
undFalse
als verwendet wird0
f=
Sie nicht einmal die (es sei denn, es ist rekursiv)JavaScript (ES6),
10410194 ByteDank @Arnauld wurden zweimal 3 Bytes gespeichert. 97-Byte-Lösung, die mit allen Nicht-Newline-Zeichen funktioniert:
Die vorherige 104-Byte-Lösung funktioniert auch mit Zeilenumbrüchen:
quelle
o
Sie das Array,map
an das Sie den dritten Parameter übergeben haben, einfach wiederverwenden, anstatt es auf ein neues Objekt zu initialisieren ?(n,s)=>s.replace(/./g,(_,i)=>i<n?[...s].map((c,j,a)=>j%n-i||(a[c]=-~a[c])>m&&(m++,r=c),m=0)&&r:'')
sollte 3 weitere Bytes sparen. (Oder 4 Bytes unter Verwendung der Currying-Syntax.)Jelly ,
1211 BytesProbieren Sie es online!
Wie es funktioniert
quelle
Pyth, 11 Bytes
Nimmt Eingaben als
s,n
und Ausgaben als Liste von Zeichen.Erläuterung
quelle
Japt ,
1615 Bytes1 Byte dank @obarakon gespeichert
14 Byte Code + 1 Byte für das
-P
Flag. Probieren Sie es online!Ungolfed und Erklärung
quelle
gJ
mito
Python 2 , 132 Bytes
Probieren Sie es online!
quelle
05AB1E , 17 Bytes
Probieren Sie es online!
Erläuterung
quelle
PHP, 245 Bytes
Online Version
Nervenzusammenbruch
quelle
Haskell, 84 Bytes
Anwendungsbeispiel:
n
Teilen Sie die Eingabezeichenfolge in Abschnitte mit einer Länge auf , transponieren Sie und finden Sie für jede Unterliste das häufigste Element.quelle
Röda , 68 Bytes
Probieren Sie es online!
Diese Funktion druckt die Ausgabe ohne Zeilenumbruch.
Dies wurde durch diese Antwort inspiriert .
quelle