Herausforderung
Teilen Sie die Zeichenfolge anhand einer Zeichenfolge und einer Zahl in so viele gleich große Teile. Wenn die Zahl beispielsweise 3 ist, sollten Sie die Zeichenfolge in 3 Teile teilen, unabhängig davon, wie lang die Zeichenfolge ist.
Wenn sich die Länge der Zeichenfolge nicht gleichmäßig in die angegebene Zahl aufteilt, sollten Sie die Größe der einzelnen Teile abrunden und einen "Rest" der Zeichenfolge zurückgeben. Wenn die Länge der Eingabezeichenfolge beispielsweise 13 und die Zahl 4 beträgt, sollten Sie jeweils vier Zeichenfolgen der Größe 3 plus eine Restzeichenfolge der Größe 1 zurückgeben.
Wenn es keinen Rest gibt, können Sie einfach keinen oder den leeren String zurückgeben.
Es wird garantiert, dass die angegebene Anzahl kleiner oder gleich der Länge der Zeichenfolge ist. Die Eingabe "PPCG", 7
wird beispielsweise nicht ausgeführt, da "PPCG"
sie nicht in 7 Zeichenfolgen unterteilt werden kann. (Ich nehme an, das richtige Ergebnis wäre (["", "", "", "", "", "", ""], "PPCG")
. Es ist einfacher, dies als Eingabe zu verbieten.)
I / O ist wie gewohnt flexibel. Sie können ein Paar der Zeichenfolgen und die verbleibende Zeichenfolge oder eine Liste von Zeichenfolgen mit dem Rest am Ende zurückgeben.
Testfälle
"Hello, world!", 4 -> (["Hel", "lo,", " wo", "rld"], "!") ("!" is the remainder)
"Hello, world!", 5 -> (["He", "ll", "o,", " w", "or"], "ld!")
"ABCDEFGH", 2 -> (["ABCD", "EFGH"], "") (no remainder; optional "")
"123456789", 5 -> (["1", "2", "3", "4", "5"], "6789")
"ALABAMA", 3 -> (["AL", "AB", "AM"], "A")
"1234567", 4 -> (["1", "2", "3", "4"], "567")
Wertung
Das ist Code-Golf , also gewinnt die kürzeste Antwort in jeder Sprache.
Bonuspunkte (nicht wirklich 😛) dafür, dass Ihre Lösung tatsächlich den Teilungsoperator Ihrer Sprache verwendet.
;⁹/
PPCG
,7
der Rest ist alsoPPCG
Antworten:
Python 2 , 63 Bytes
Probieren Sie es online!
quelle
PHP> = 7.1, 75 Bytes
Testfälle
PHP> = 7.1, 52 Bytes
drucke nur den Rest aus
Testfälle
quelle
Pip , 21 Bytes
20 Byte Code, +1 für
-n
Flag.Übernimmt Eingaben als Befehlszeilenargumente; gibt Strings und Rest Newline-Separated aus. Probieren Sie es online!
Erläuterung
Spaß mit Regex-Operationen!
Nehmen wir
abcdefg
als unsere Zeichenfolge und3
als unsere Nummer. Wir konstruieren den regulären Ausdruck(.{2})(.{2})(.{2})
, der drei Reihen von zwei Zeichen entspricht und diese in drei Erfassungsgruppen speichert. Dann können wir unter Verwendung der regulären Übereinstimmungsvariablen von Pip 1) die Liste der Erfassungsgruppen["ab";"cd";"ef"]
und 2) den Rest der Zeichenfolge drucken , die nicht übereinstimmt"g"
.quelle
Haskell , 62 Bytes
#
ist ein Operator, der einString
und einInt
nimmt und eine Liste vonString
s zurückgibt.Verwenden Sie als
"Hello, world!"#4
.Probieren Sie es online!
Wie es funktioniert
s
ist die Eingabezeichenfolge undn
die Anzahl der nicht verbleibenden Teile.d
ist die Länge jedes "normalen" Stückes.div
ist eine Ganzzahldivision.n+1
Stücke, wobei das letzte der Rest ist.i
iteriert von0
bisn
einschließlich.i*d
) von Anfangszeichendrop
vom Anfang an eingegebens
, dann ist eine erste Teilzeichenfolgetake
n vom Ergebnis.d
Ausnahme des Reststücks betragen.n
, da sonst die normalen Teile verlängert würden.take
Gibt den gesamten String zurück, wenn die angegebene Länge zu groß ist, sodass wir>=n-1
für das Reststück eine beliebige Zahl verwenden können .d+n*0^(n-i)
gibtd
obi<n
undd+n
obi==n
. Es nutzt das0^x
ist1
wannx==0
, aber0
wennx>0
.quelle
Python 2 ,
68 6765 Bytes[]
x[p*i:p+p*i]
asx[p*i][:p]
Probieren Sie es online!
quelle
x[p*i:p+p*i]
durchx[p*i:][:p]
:p
😛 Gut gemacht, die anderen Python-Antworten übertroffen!C ++ 14,
209180 BytesDas ist ein bisschen zu lang, benutzt aber den Divisionsoperator:
Verwendung:
Online-Version: http://ideone.com/hbBW9u
quelle
Pyth, 9 Bytes
Probieren Sie es online aus
Wie es funktioniert
Erstens
Q
wird automatisch initialisierteval(input())
undz
automatisch initialisiertinput()
.quelle
Jelly , 11 Bytes
Probieren Sie es online!
quelle
Rust , 107 Bytes
Probieren Sie es online!
Formatiert:
Dies indiziert einfach
map
die richtigen Schichten der Quellestr
(collect
in aVec
) und schneidet den Rest heraus.Leider kann ich dies nicht zu einem Abschluss machen (74 Bytes):
wie der Compiler mit ausfällt
und wenn ich den typ
s:&str
angabe, sind die lebensdauern falsch:quelle
Netzhaut , 92 Bytes
Probieren Sie es online! Erläuterung: Die erste Stufe konvertiert die Anzahl der Teile in unär und nimmt auch die Länge der Zeichenfolge an. Die zweite Stufe teilt dann die Länge durch die Anzahl der Teile, so dass der Rest übrig bleibt. Die dritte Stufe multipliziert das Ergebnis erneut mit der Anzahl der Teile. Dies gibt uns die richtige Anzahl von Zeichenfolgen mit der richtigen Länge, aber sie haben noch nicht den Inhalt. Die Anzahl der Teile kann jetzt in der vierten Stufe gelöscht werden. Die fünfte Stufe kehrt alle Zeichen um. Dies hat den Effekt, dass der ursprüngliche Inhalt mit den Platzhalterzeichenfolgen umgeschaltet wird, aber obwohl er sich jetzt an der richtigen Stelle befindet, ist die Reihenfolge umgekehrt. Die Platzhalter haben ihren Zweck erfüllt und werden in der sechsten Stufe gelöscht. Schließlich kehrt die siebte Stufe die Charaktere in ihre ursprüngliche Reihenfolge zurück.
quelle
Perl 6 , 36 Bytes
Probieren Sie es online!
Gibt eine Liste mit Listen von Zeichenfolgen zurück, wobei das letzte Element der Rest ist (sofern vorhanden).
Erläuterung:
quelle
JavaScript (ES6), 77 Byte
Gibt ein Array mit zwei Elementen zurück: den geteilten Zeichenfolgeteilen und dem restlichen Teil.
Testschnipsel
quelle
Japt , 18 Bytes
Online testen! (benutzt
-Q
flag um die Ausgabe zu visualisieren)Erläuterung
quelle
Python,
827674 BytesNun, so wie es aussieht, qualifiziert es sich für die Bonuspunkte. Darf ich stattdessen bitte ein Cookie erhalten? Oh warte, sie sind nicht echt? Verdammt...
Probieren Sie es online!
quelle
len(h)
? :)Python,
95, 87, 76,73 BytesProbieren Sie es online!
quelle
05AB1E , 12 Bytes
Probieren Sie es online!
Erläuterung
quelle
Brachylog , 16 Bytes
Probieren Sie es online!
Nimmt Eingaben als Liste
[string, number]
und gibt sie als Liste aus[remainder, parts]
. (In den Testfällen "Hallo Welt!" Wurden die Kommas aus Gründen der Übersichtlichkeit durch Semikolons ersetzt, da die Zeichenfolgenfragmente nicht in Anführungszeichen gedruckt werden.)(Ich habe auch ein Komma im Code durch ein Semikolon ersetzt, um ein konsistentes Ausgabeformat zu erhalten. Mit dem Komma Fälle ohne Rest nur die Teile ohne leeren Rest aus, und so schön das für manche Zwecke ist, tue ich es nicht weiß eigentlich warum es so funktioniert ...)
Nachdem das Ganze 16 Bytes lang war, habe ich versucht, etwas basierend auf der
+₁ᵗ⟨ġl⟩
Arbeit zu machen , aber als die Korrekturen immer länger wurden, habe ich beschlossen, dass ich erst einmal bei meiner ursprünglichen Lösung bleiben würde.quelle
C (gcc), 72 Bytes
Probieren Sie es online
quelle
Excel Formula,
185173165161149 ByteFolgendes sollte als Matrixformel ( Ctrl+ Shift+ Enter) eingegeben werden :
Wo
A1
enthält Ihre Eingabe (zB12345678
) undB1
enthält den Divisor. Hierfür wird auch der Divisionsoperator von Excel als Bonus verwendet.Nachdem Sie die Formel als Matrixformel eingegeben haben, markieren Sie sie in der Formelleiste und werten Sie sie mit aus F9, um das Ergebnis zurückzugeben. Beispiel:
-12 Byte: jeweils ersetzen
INDIRECT("1:"&B1+1)
durchOFFSET(A1,,,B1+1)
, um 2 Bytes pro Vorkommen zu sparen, plus etwas Aufräumen, indem Sie redundante Klammern entfernen.-8 Bytes: Redundante entfernen
INDEX
Funktion .-4 Bytes: Überarbeitung der "Rest" -Behandlung.
-12 Bytes: Entfernen Sie redundante
INT(LEN(A1)/B1)
Daten, indem Sie dasROW(OFFSET(A1,,,B1+1))
durch -1 erzeugte Array versetzen.quelle
Python 2 ,
7776 Bytes-1 Byte dank musicman523.
Probieren Sie es online!
quelle
Ruby , 53 Bytes
Probieren Sie es online!
quelle
Mathematica, 58 Bytes
Reine Funktion, die eine Liste von Zeichen und eine positive Ganzzahl als Eingabe verwendet. Beispielsweise wird der letzte Testfall von aufgerufen
und kehrt zurück:
quelle
Haskell,
12088 Bytes (danke an Ørjan Johansen!)Zählt
div
als der Teilungsoperator?Ich bin gespannt, wie ich das reduzieren kann, ich habe noch nicht alle Tricks gelernt.
quelle
t=splitAt;x!s|n<-div(length s)x,let g""=[];g s|(f,r)<-t n s=f:g r,(a,b)<-t(n*x)s=(g a,b)
. (1) Ein wiederholt verwendeter Bezeichner wird möglicherweise abgekürzt, insbesondere wenn er lang ist. (2) Guards und Musterschutz sind fast immer kürzer alslet
...in
,where
undif
then
else
. (3) Pattern Matching ist oft besser als Gleichheitstests. (OK, daslet
in einem Muster Wache ist nicht so einfach, ich es von jemandem vor kurzem erfahren , sonst hier) . Und überprüfen codegolf.stackexchange.com/questions/19255/... .let
in der Wache ziemlich hinterhältig ist. Aber kürzerer Code ist besser lesbar, oder?Ohm, 3 Bytes (nicht konkurrierend?)
Nicht konkurrierend, weil das eingebaute noch nicht in TIO implementiert ist und ich keinen PC zur Hand habe, um zu testen, ob es in der neuesten Version des Repos funktioniert.
Eingebautes ¯ \\ _ (ツ) _ / ¯. Ich habe das falsche eingebaut ... Aber hey, da liegt noch ein anderes herum.Jetzt habe ich zwei Mal das falsche eingebaute verwendet (oder ein eingebautes funktioniert falsch mit Resten).Erhalte ich Bonuspunkte, weil
v
es sich um eine Aufteilung handelt?quelle
Hello, world!
5
Testfall ist falsch. Probieren Sie es online!CJam , 16 Bytes
Anonymer Block erwartet die Argumente auf dem Stapel und hinterlässt das Ergebnis auf dem Stapel.
Probieren Sie es online!
Erläuterung
Erwartet Argumente als
number "string"
.quelle
J , 26 Bytes
Abgesehen von der Beseitigung von Räumen und Zwischenschritten wurde hier nicht golfen. Ich gehe davon aus, dass ich irgendwie den langen Weg gegangen bin, was mit meinen Klammern und Argumentationshinweisen (
[
und]
) zu .Im Jupyter-Notizbuch finden Sie Testfälle wie die folgenden:
quelle
R ,
7963 Bytes-16 von Giuseppe beim Reparieren der Indexierung
Probieren Sie es online!
Gebaut um Vektoreingaben zu geben
substring()
quelle
PHP , 152 Bytes
Danke @ JörgHülsermann (Klammertipp!)
Probieren Sie es online!
quelle
preg_replace
ist eine Alternative, oder Sie können verwenden[,$s,$d]=$argv;print_r(array_slice(str_split($s,$l=strlen($s)/$d^0),0,$d)+[$d=>substr($s,$l*$d)]);
A
im ersten DurchgangPython 3 , 94 Bytes
Probieren Sie es online!
quelle
PowerShell v3 + ,
72, 80 BytesAngenommen,
$s
enthält die Eingabezeichenfolge;$n
enthält die Anzahl der Zeichen pro "Stück". Dies setzt auch voraus, dass "StrictMode" ausgeschaltet ist. Andernfalls würde ein Fehler zurückgegeben, weil weiter in ein Array indiziert wird, als tatsächlich vorhanden ist (dh wenn das Array 4 Elemente enthält und ich das nicht vorhandene fünfte Element nenne). Wenn StrictMode deaktiviert ist, kümmert sich PS nicht darum und ignoriert den Fehler.Notation verwenden
($s|% ToCharA*)
ich 1 Zeichen speichern im Vergleich zu$s.ToCharArray()
:)Aktualisieren:
Der Code wurde aktualisiert, um die Anforderungen der Herausforderungen zu erfüllen. Wieder nimmt an,
$s
enthält die Eingabezeichenfolge; Diese Zeit$n
enthält jedoch die Anzahl der "Teile". Der Rest wird zuletzt ausgedruckt. Und ich habe den Divisionsoperator von PowerShell verwendetProbieren Sie es online!
quelle