Wyzwanie
Biorąc pod uwagę ciąg i liczbę, podziel ciąg na tyle równych części. Na przykład, jeśli liczba wynosi 3, powinieneś podzielić ciąg na 3 części bez względu na długość łańcucha.
Jeśli długość sznurka nie dzieli się równomiernie na podaną liczbę, należy zaokrąglić w dół rozmiar każdej sztuki i zwrócić ciąg „reszty”. Na przykład, jeśli długość ciągu wejściowego wynosi 13, a liczba wynosi 4, powinieneś zwrócić cztery ciągi znaków o rozmiarze 3 plus pozostały ciąg o rozmiarze 1.
Jeśli nie ma reszty, po prostu nie możesz jej zwrócić lub zwrócić pusty ciąg.
Podana liczba jest na pewno mniejsza lub równa długości łańcucha. Na przykład dane wejściowe "PPCG", 7
nie wystąpią, ponieważ "PPCG"
nie można ich podzielić na 7 ciągów. (Przypuszczam, że byłby to właściwy wynik (["", "", "", "", "", "", ""], "PPCG")
. Łatwiej jest po prostu zabronić tego jako danych wejściowych.)
Jak zwykle I / O jest elastyczny. Możesz zwrócić parę ciągów i resztę ciągu lub jedną listę ciągów z resztą na końcu.
Przypadki testowe
"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")
Punktacja
To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w każdym języku.
Punkty bonusowe (niezupełnie 😛) za to, że Twoje rozwiązanie faktycznie używa operatora podziału języka.
;⁹/
PPCG
,7
więc pozostała część toPPCG
Odpowiedzi:
Python 2 , 63 bajty
Wypróbuj online!
źródło
PHP> = 7,1, 75 bajtów
Przypadki testowe
PHP> = 7.1, 52 bajty
wydrukuj tylko resztę
Przypadki testowe
źródło
Pip , 21 bajtów
20 bajtów kodu, +1 dla
-n
flagi.Pobiera dane wejściowe jako argumenty wiersza poleceń; wypisuje ciągi znaków, a pozostałe oddzielone znakiem nowej linii. Wypróbuj online!
Wyjaśnienie
Zabawa z operacjami regularnymi!
Weźmy
abcdefg
jako nasz ciąg i3
jako nasz numer. Konstruujemy wyrażenie regularne(.{2})(.{2})(.{2})
, które dopasowuje trzy przebiegi dwóch znaków i przechowuje je w trzech grupach przechwytywania. Następnie, używając zmiennych dopasowania regularnego Pip, możemy wydrukować 1) listę grup przechwytywania["ab";"cd";"ef"]
i 2) resztę ciągu, który nie został dopasowany"g"
.źródło
Haskell , 62 bajty
#
jest operatorem biorącString
iInt
, a powrót listyString
s.Użyj jako
"Hello, world!"#4
.Wypróbuj online!
Jak to działa
s
jest łańcuchem wejściowym in
jest liczbą nie-pozostałych kawałków.d
jest długością każdego „normalnego” kawałka.div
jest dzieleniem całkowitym.n+1
elementy, z których ostatnia jest resztą.i
iteruje od0
don
włącznie.i*d
) początkowych znaków todrop
ped od początkus
, a następnie początkowy podciąg jesttake
n od wyniku.d
, z wyjątkiem pozostałej części.n
, ponieważ w przeciwnym razie normalne elementy zostałyby wydłużone.take
zwraca cały ciąg, jeśli podana długość jest zbyt duża, więc możemy użyć dowolnej liczby>=n-1
dla pozostałej części.d+n*0^(n-i)
dajed
jeślii<n
id+n
jeślii==n
. Wykorzystuje0^x
to1
wtedyx==0
, ale0
kiedyx>0
.źródło
Python 2 ,
68 6765 bajtów[]
x[p*i:p+p*i]
asx[p*i][:p]
Wypróbuj online!
źródło
x[p*i:p+p*i]
zx[p*i:][:p]
:p
😛 Dobra robota, przebijanie innych odpowiedzi w Pythonie!C ++ 14,
209180 bajtówTo trochę za długo, ale używa operatora podziału:
Stosowanie:
Wersja online: http://ideone.com/hbBW9u
źródło
Pyth, 9 bajtów
Wypróbuj online
Jak to działa
Pierwszy
Q
jest inicjowany automatycznieeval(input())
iz
jest inicjowany automatycznieinput()
.źródło
Galaretka , 11 bajtów
Wypróbuj online!
źródło
Rdza , 107 bajtów
Wypróbuj online!
Sformatowany:
To po prostu
map
sindeksuje właściwe segmenty źródłastr
(collect
wstawianie do aVec
), a wycina resztę.Niestety nie mogę zrobić z tego zamknięcia (74 bajty):
ponieważ kompilator zawiedzie
a jeśli podam typ
s:&str
, czasy życia są błędne:źródło
Siatkówka , 92 bajty
Wypróbuj online! Objaśnienie: Pierwszy etap konwertuje liczbę części na jednoargumentowe, a także przyjmuje długość łańcucha. Drugi etap dzieli następnie długość przez liczbę części, pozostawiając resztę. Trzeci etap ponownie zwielokrotnia wynik przez liczbę części. To daje nam prawidłową liczbę ciągów o właściwej długości, ale nie mają jeszcze treści. Liczbę części można teraz usunąć do czwartego etapu. Piąty etap odwraca wszystkie postacie. Powoduje to zamianę oryginalnej treści na ciągi znaków zastępczych, ale chociaż teraz jest we właściwym miejscu, jest w odwrotnej kolejności. Symbole zastępcze spełniły swoje zadanie i zostały usunięte przez szósty etap. Wreszcie siódmy etap przywraca bohaterom ich pierwotną kolejność.
źródło
Perl 6 , 36 bajtów
Wypróbuj online!
Zwraca listę list ciągów znaków, przy czym ostatnim elementem jest pozostała część (jeśli istnieje).
Wyjaśnienie:
źródło
JavaScript (ES6), 77 bajtów
Zwraca tablicę dwóch elementów: podzielonych części łańcucha i pozostałej części.
Test Snippet
źródło
Japt , 18 bajtów
Przetestuj online! (używa
-Q
flagi do wizualizacji wyniku)Wyjaśnienie
źródło
Python,
827674 bajtyWygląda na to, że kwalifikuje się to do punktów bonusowych. Czy zamiast tego mogę otrzymać plik cookie? Och, czekaj, to nie są prawdziwe? Cerować...
Wypróbuj online!
źródło
len(h)
? :)Python,
95, 87, 7673 bajtówWypróbuj online!
źródło
05AB1E , 12 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Brachylog , 16 bajtów
Wypróbuj online!
Pobiera dane wejściowe jako listę
[string, number]
i wyniki jako listę[remainder, parts]
. (Przecinki zostały zastąpione średnikami w testach „Hello, world!” Dla zachowania przejrzystości, ponieważ fragmenty napisów nie są drukowane z cudzysłowami).(Zastąpiłem także przecinek w kodzie średnikiem, aby uzyskać spójny format wyjściowy. Przecinkiem sprawy bez reszty po prostu wyprowadzałyby części bez pustej reszty, i chociaż jest to przyjemne dla niektórych celów, nie właściwie wiem, dlaczego tak działa ...)
Po tym, jak okazało się, że to całe 16 bajtów, próbowałem zrobić coś w oparciu o
+₁ᵗ⟨ġl⟩
pracę, ale ponieważ poprawki stały się coraz dłuższe, zdecydowałem, że na razie pozostanę przy swoim oryginalnym rozwiązaniu.źródło
C (gcc), 72 bajty
Wypróbuj online
źródło
Formuła Excel,
185173165161149 bajtówJako formułę tablicową ( Ctrl+ Shift+ Enter) należy wprowadzić:
Gdzie
A1
zawiera Twój wkład (np.12345678
) IB1
zawiera dzielnik. To również używa operatora podziału Excela jako bonusu.Po wprowadzeniu formuły jako formuły tablicowej, podświetl ją na pasku formuły i oceń ją za pomocą, F9aby zwrócić wynik, na przykład:
-12 bajtów: zastąpić każdy
INDIRECT("1:"&B1+1)
zOFFSET(A1,,,B1+1)
aby zapisać 2 bajty za wystąpienie, plus kilka sprzątania usunięcie zbędnych nawiasów.-8 bajtów: usuwa zbędną
INDEX
funkcję.-4 bajty: przerób obsługę „reszty”.
-12 bajtów: usuń zbędne
INT(LEN(A1)/B1)
, kompensując tablicę wygenerowanąROW(OFFSET(A1,,,B1+1))
przez -1.źródło
Python 2 ,
7776 bajtów-1 bajt dzięki musicman523.
Wypróbuj online!
źródło
Rubin , 53 bajty
Wypróbuj online!
źródło
Mathematica, 58 bajtów
Czysta funkcja pobierająca na wejściu listę znaków i dodatnią liczbę całkowitą. Na przykład ostatni przypadek testowy jest wywoływany przez
i zwraca:
źródło
Haskell,
12088 bajtów (dzięki Ørjan Johansen!)Robi
div
liczy się jako operator podziału?Jestem ciekawy, jak mogę to ograniczyć, nie nauczyłem się jeszcze wszystkich sztuczek.
źródło
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)
. Tak więc (1) Często używany identyfikator może być skrócony, szczególnie jeśli jest długi. (2) osłony i osłony wzoru są prawie zawsze krótszy niżlet
...in
,where
iif
then
else
. (3) Dopasowywanie wzorców jest często lepsze niż testowanie równości. (OK, tolet
w straży wzór nie jest tak prosty, że niedawno dowiedział się od kogoś innego tutaj.) I sprawdzić codegolf.stackexchange.com/questions/19255/... .let
na straży jest dość przebiegły. Ale krótszy kod jest bardziej czytelny, prawda?Ohm, 3 bajty (niekonkurujące?)
Nie konkuruje, ponieważ wbudowana funkcja nie jest jeszcze zaimplementowana w TIO i nie mam komputera pod ręką, aby sprawdzić, czy działa w najnowszym ściągnięciu repozytorium.
Wbudowane ¯ \\ _ (ツ) _ / ¯. Użyłem niewłaściwego wbudowanego ... Ale hej, wciąż jest inny.Teraz użyłem niewłaściwego wbudowanego dwa razy (lub jeden wbudowany działa źle z resztą).Czy dostaję punkty bonusowe, ponieważ
v
jest podział (dolny)?źródło
Hello, world!
5
skrzynka testowa jest nieprawidłowa. Wypróbuj online!CJam , 16 bajtów
Anonimowy blok oczekuje argumentów na stosie i pozostawia wynik na stosie po.
Wypróbuj online!
Wyjaśnienie
Oczekuje argumentów jako
number "string"
.źródło
jot , 26 bajtów
Oprócz eliminacji przestrzeni i pośrednich kroków, nie zostało to zagrane w golfa. Oczekuję, że jakoś poszedłem daleko, co z moimi nawiasami i odwołaniami do argumentów (
[
i]
).Zobacz notes Jupyter dla przypadków testowych, takich jak:
źródło
R ,
7963 bajtów-16 od Giuseppe naprawiającego indeksowanie
Wypróbuj online!
Zbudowany wokół danych wejściowych do
substring()
źródło
PHP , 152 bajty
Dzięki @ JörgHülsermann (wskazówka w nawiasach!)
Wypróbuj online!
źródło
preg_replace
jest alternatywą lub możesz użyć[,$s,$d]=$argv;print_r(array_slice(str_split($s,$l=strlen($s)/$d^0),0,$d)+[$d=>substr($s,$l*$d)]);
A
w pierwszym uruchomieniuPython 3 , 94 bajty
Wypróbuj online!
źródło
PowerShell v3 + ,
72, 80 bajtówZakłada, że
$s
zawiera ciąg wejściowy;$n
zawiera liczbę znaków na „sztukę”. Zakłada się również, że „StrictMode” jest wyłączony. W przeciwnym razie błąd zostałby zwrócony z powodu indeksowania dalej do tablicy, niż faktycznie istnieje (tj. Jeśli tablica ma 4 elementy i wywołuję nieistniejący 5. element). Przy wyłączonym StrictMode PS nie dba o to i zignoruje błąd.Korzystanie notacja
($s|% ToCharA*)
udało mi się zaoszczędzić 1 znak w stosunku do$s.ToCharArray()
:)Aktualizacja:
Zaktualizowany kod, aby spełniał wymagania dotyczące wyzwań. Ponownie zakłada się, że
$s
zawiera ciąg wejściowy; jednak ten czas$n
zawiera liczbę „sztuk”. Reszta jest drukowana jako ostatnia. I użyłem operatora podziału PowerShellWypróbuj online!
źródło