Podziel ciąg

23

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", 7nie 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 , 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.

musicman523
źródło
1
Punkty bonusowe? O rany, muszę to zrobić
Matthew Roh
Dla premii, Galaretka, 3 bajty;⁹/
Jonathan Allan
Powiązane , ale żadna część nie jest taka sama jak to wyzwanie.
musicman523
Aby było to jaśniejsze, dodaj testcase PPCG, 7więc pozostała część toPPCG
Jörg Hülsermann
@ JörgHülsermann To wejście jest niedozwolone. Dodałem więcej szczegółów dotyczących tego rodzaju danych wejściowych i sformatowałem rzeczy, aby były bardziej jasne.
musicman523

Odpowiedzi:

6

Python 2 , 63 bajty

s,n=input()
b=len(s)/n
while n:print s[:b];s=s[b:];n-=1
print s

Wypróbuj online!

ovs
źródło
Dobra robota! Naprawdę nie sądzę, że można to dalej grać w golfa.
musicman523,
5

PHP> = 7,1, 75 bajtów

[,$s,$d]=$argv;print_r(preg_split('/.{'.(strlen($s)/$d^0).'}\K/',$s,$d+1));

Przypadki testowe

PHP> = 7.1, 52 bajty

wydrukuj tylko resztę

[,$s,$d]=$argv;echo substr($s,(strlen($s)/$d^0)*$d);

Przypadki testowe

Jörg Hülsermann
źródło
5

Pip , 21 bajtów

20 bajtów kodu, +1 dla -nflagi.

a~C(#a//b*XX)XbP$$$'

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 abcdefgjako nasz ciąg i 3jako 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".

                      a,b are cmdline args; XX is the regex `.` (match any one character)
    #a//b             Len(a) int-divided by b: the length of each chunk
         *XX          Apply regex repetition by that number to `.`, resulting in something
                        that looks like `.{n}`
  C(        )         Wrap that regex in a capturing group
             Xb       Repeat the whole thing b times
a~                    Match the regex against a
               P$$    Print $$, the list of all capture groups (newline separated via -n)
                  $'  Print $', the portion of the string after the match
DLosc
źródło
5

Haskell , 62 bajty

#jest operatorem biorąc Stringi Int, a powrót listy Strings.

Użyj jako "Hello, world!"#4.

s#n|d<-length s`div`n=[take(d+n*0^(n-i))$drop(i*d)s|i<-[0..n]]

Wypróbuj online!

Jak to działa

  • sjest łańcuchem wejściowym i njest liczbą nie-pozostałych kawałków.
  • djest długością każdego „normalnego” kawałka. divjest dzieleniem całkowitym.
  • Zrozumienie listy tworzy n+1elementy, z których ostatnia jest resztą.
    • iiteruje od 0do nwłącznie.
    • Dla każdego kawałka najpierw odpowiednia ilość ( i*d) początkowych znaków to dropped od początku s, a następnie początkowy podciąg jest taken od wyniku.
    • Długość podciągu powinna wynosić d, z wyjątkiem pozostałej części.
      • Rzeczywista reszta musi być krótsza niż n, ponieważ w przeciwnym razie normalne elementy zostałyby wydłużone.
      • takezwraca cały ciąg, jeśli podana długość jest zbyt duża, więc możemy użyć dowolnej liczby >=n-1dla pozostałej części.
      • Wyrażenie d+n*0^(n-i)daje djeśli i<ni d+njeśli i==n. Wykorzystuje 0^xto 1wtedy x==0, ale 0kiedy x>0.
Ørjan Johansen
źródło
Będę musiał uważać na to, gdzie mogę używać wyrażeń listowych.
qfwfq
4

Python 2 , 68 67 65 bajtów

  • @ musicman123 zapisał 2 bajty: wyjście bez dołączania []
  • Dzięki @Chas Brown za 1 Byte: x[p*i:p+p*i]asx[p*i][:p]
def f(x,n):p=len(x)/n;print[x[p*i:][:p]for i in range(n)],x[p*n:]

Wypróbuj online!

Officialaimm
źródło
1
Zapisz 1 bajt zastępując x[p*i:p+p*i]zx[p*i:][:p]
Chas Brown
1
+1 za :p😛 Dobra robota, przebijanie innych odpowiedzi w Pythonie!
musicman523
Haha .. to wcale nie było zamierzone ....: p
officialaimm
1
Ta odpowiedź została teraz rozegrana
musicman523
4

C ++ 14, 209 180 bajtów

To trochę za długo, ale używa operatora podziału:

#include<bits/stdc++.h>
using q=std::string;using z=std::vector<q>;z operator/(q s,int d){int p=s.length()/d,i=0;z a;for(;i<d+1;){a.push_back(s.substr(i++*p,i^d?p:-1));}return a;}

Stosowanie:

vector<string> result = string("abc")/3;

Wersja online: http://ideone.com/hbBW9u

Ra8
źródło
4

Pyth, 9 bajtów

cz*L/lzQS

Wypróbuj online

Jak to działa

Pierwszy Qjest inicjowany automatycznie eval(input())i zjest inicjowany automatycznie input().

cz*L/lzQSQ
     lz      length of z
    /  Q     integer division by Q
  *L         times every element of
        SQ       [1, 2, …, Q]
cz           chop z at those locations
Anders Kaseorg
źródło
3

Galaretka , 11 bajtów

Ld⁹x,1$}R⁸ṁ

Wypróbuj online!

Dennis
źródło
Nie powiedzie się test „123456789”, 5
Ørjan Johansen
Całkowicie błędnie odczytano wyzwanie. Dzięki!
Dennis
3

Rdza , 107 bajtów

fn f(s:&str,n:usize)->(Vec<&str>,&str){let c=s.len()/n;((0..n).map(|i|&s[i*c..i*c+c]).collect(),&s[c*n..])}

Wypróbuj online!

Sformatowany:

fn q129259(s: &str, n: usize) -> (Vec<&str>, &str) {
    let c = s.len() / n;
    ((0..n).map(|i| &s[i * c..i * c + c]).collect(), &s[c * n..])
}

To po prostu mapsindeksuje właściwe segmenty źródła str(collect wstawianie do a Vec), a wycina resztę.

Niestety nie mogę zrobić z tego zamknięcia (74 bajty):

|s,n|{let c=s.len()/n;((0..n).map(|i|&s[i*c..i*c+c]).collect(),&s[c*n..])}

ponieważ kompilator zawiedzie

error: the type of this value must be known in this context
 --> src\q129259.rs:5:18
  |
5 |          let c = s.len() / n;
  |                  ^^^^^^^

a jeśli podam typ s:&str, czasy życia są błędne:

error[E0495]: cannot infer an appropriate lifetime for lifetime parameter in function call due to conflicting requirements
 --> src\q129259.rs:6:27
  |
6 |          ((0..n).map(|i| &s[i * c..i * c + c]).collect(), &s[c * n..])
  |                           ^^^^^^^^^^^^^^^^^^^
  |
note: first, the lifetime cannot outlive the anonymous lifetime #1 defined on the body at 4:18...
 --> src\q129259.rs:4:19
  |
4 |       (|s: &str, n| {
  |  ___________________^
5 | |          let c = s.len() / n;
6 | |          ((0..n).map(|i| &s[i * c..i * c + c]).collect(), &s[c * n..])
7 | |      })(s, n)
  | |______^
note: ...so that reference does not outlive borrowed content
 --> src\q129259.rs:6:27
  |
6 |          ((0..n).map(|i| &s[i * c..i * c + c]).collect(), &s[c * n..])
  |                           ^
note: but, the lifetime must be valid for the lifetime 'a as defined on the body at 3:58...
 --> src\q129259.rs:3:59
  |
3 |   fn q129259<'a>(s: &'a str, n: usize) -> (Vec<&str>, &str) {
  |  ___________________________________________________________^
4 | |     (|s: &str, n| {
5 | |          let c = s.len() / n;
6 | |          ((0..n).map(|i| &s[i * c..i * c + c]).collect(), &s[c * n..])
7 | |      })(s, n)
8 | | }
  | |_^
note: ...so that expression is assignable (expected (std::vec::Vec<&'a str>, &'a str), found (std::vec::Vec<&str>, &str))
 --> src\q129259.rs:4:5
  |
4 | /     (|s: &str, n| {
5 | |          let c = s.len() / n;
6 | |          ((0..n).map(|i| &s[i * c..i * c + c]).collect(), &s[c * n..])
7 | |      })(s, n)
  | |_____________^
CAD97
źródło
3

Siatkówka , 92 bajty

(.+)¶(.+)
$2$*1¶$.1$*1¶$1
(1+)¶(\1)+
$1¶$#2$*1¶
\G1(?=1*¶(1+))
$1¶
¶¶1+

O^$`.

¶1+$

O^$`.

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ść.

Neil
źródło
3

Perl 6 , 36 bajtów

{$^a.comb.rotor($a.comb/$^b xx$b,*)}

Wypróbuj online!

Zwraca listę list ciągów znaków, przy czym ostatnim elementem jest pozostała część (jeśli istnieje).

Wyjaśnienie:

{                                  }  # Anonymous code block
 $^a.comb                             # Split the string into a list of chars
         .rotor(                  )   # And split into
                            xx$b      # N lists
                $a.comb/$^b           # With string length/n size
                                ,*    # And whatever is left over  
Jo King
źródło
2

JavaScript (ES6), 77 bajtów

(s,d,n=s.length)=>[s.match(eval(`/.{${n/d|0}}/g`)).slice(0,d),s.slice(n-n%d)]

Zwraca tablicę dwóch elementów: podzielonych części łańcucha i pozostałej części.

Test Snippet

f=
(s,d,n=s.length)=>[s.match(eval(`/.{${n/d|0}}/g`)).slice(0,d),s.slice(n-n%d)]
<div oninput="O.innerHTML=I.value&&J.value?JSON.stringify(f(I.value,+J.value)):''">String: <input id=I> Number: <input id=J size=3></div>
<pre id=O>

Justin Mariner
źródło
2

Japt , 18 bajtów

¯W=Ul fV)òW/V pUsW

Przetestuj online! (używa -Qflagi do wizualizacji wyniku)

Wyjaśnienie

¯W=Ul fV)òW/V pUsW  : Implicit: U = input string, V = input integer
   Ul fV            : Floor U.length to a multiple of V.
 W=                 : Assign this value to variable W.
¯       )           : Take the first W characters of U (everything but the remainder).
         òW/V       : Partition this into runs of length W / V, giving V runs.
              pUsW  : Push the part of U past index W (the remainder) to the resulting array.
                    : Implicit: output result of last expression
ETHprodukcje
źródło
2

Python, 82 76 74 bajty

def G(h,n):l=len(h);r=l/n;print[h[i:i+r]for i in range(0,n*r,r)],h[l-l%n:]

Wyglą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. Kap
źródło
1
Czy wolisz ciasteczko , czy oszczędzasz 6 bajtów poprzez faktoringlen(h) ? :)
musicman523
2

Python, 95, 87, 76 73 bajtów

def f(s,n):
 a=[];i=len(s)/n
 while n:a+=s[:i],;s=s[i:];n-=1
 print a+[s]

Wypróbuj online!

Ankit
źródło
Witamy w PPCG! Do Twojego wpisu dodałem link „Wypróbuj online”. Myślę, że możesz nieco skrócić swoje rozwiązanie, czyniąc z niego pełny program, a nie funkcję. Wypróbuj online!
musicman523
2

05AB1E , 12 bajtów

²g¹‰`s¹.D)R£

Wypróbuj online!

Wyjaśnienie

²g¹‰`s¹.D)R£
²g           # Push length of string
  ¹          # Push amount of pieces
   ‰         # divmod of the two
    `s       # Flatten the resulting array and flip it around
      ¹.D    # Repeat the resulting length of the pieces amount of pieces times(wow that sounds weird)
         )   # Wrap stack to array
          R  # Reverse (so the remainder is at the end)
           £ # Split the input string into pieces defined by the array
Datboi
źródło
1
9 bajtów poprzez odwrócenie kolejności wprowadzania.
Kevin Cruijssen
2

Brachylog , 16 bajtów

kʰ↙Xḍ₎Ylᵛ&ht↙X;Y

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).

                    The input
 ʰ                  with its first element
k ↙X                having the last X elements removed
    ḍ               and being cut into a number of pieces
     ₎              where that number is the last element of the input
      Y             is Y
       lᵛ           the elements of which all have the same length,
         &          and the input
          h         's first element
           t↙X      's last X elements
              ;     paired with
               Y    Y
                    are the output.

(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.

Niepowiązany ciąg
źródło
2

C (gcc), 72 bajty

d;f(s,n)char*s;{for(d=strlen(s)/n;n--;puts(""))s+=write(1,s,d);puts(s);}

Wypróbuj online

Johan du Toit
źródło
2

Formuła Excel, 185 173 165 161 149 bajtów

Jako formułę tablicową ( Ctrl+ Shift+ Enter) należy wprowadzić:

=MID(A1,(ROW(OFFSET(A1,,,B1+1))-1)*INT(LEN(A1)/B1)+1,INT(LEN(A1)/B1)*ROW(OFFSET(A1,,,B1+1))/IF(ROW(OFFSET(A1,,,B1+1))=B1+1,1,ROW(OFFSET(A1,,,B1+1))))

Gdzie A1zawiera Twój wkład (np. 12345678) I B1zawiera 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:

Excel formula evaluation showing split groups

-12 bajtów: zastąpić każdy INDIRECT("1:"&B1+1)z OFFSET(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ą INDEXfunkcję.

-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.

i_saw_drones
źródło
1

Python 2 , 77 76 bajtów

-1 bajt dzięki musicman523.

def f(s,n):l=len(s);print[s[i:i+l/n]for i in range(0,l-n+1,l/n)]+[s[l-l%n:]]

Wypróbuj online!

całkowicie ludzki
źródło
1
Jest to o jeden bajt krótszy jako funkcja. Wypróbuj online!
musicman523
1

Mathematica, 58 bajtów

{#~Partition~a,#2}&@@TakeDrop[#,(a=Floor[Length@#/#2])#2]&

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

{#~Partition~a,#2}&@@TakeDrop[#,(a=Floor[Length@#/#2])#2]&[{"1","2","3","4","5","6","7"},4]

i zwraca:

{{{"1"}, {"2"}, {"3"}, {"4"}}, {"5", "6", "7"}}
Greg Martin
źródło
1

Haskell, 120 88 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.

q=splitAt;x!s|n<-div(length s)x,let g""=[];g s|(f,r)<-q n s=f:g r,(a,b)<-q(n*x)s=(g a,b)
qfwfq
źródło
2
Szybkie przepisać z najbardziej podstawowych sztuczek: 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, wherei if then else. (3) Dopasowywanie wzorców jest często lepsze niż testowanie równości. (OK, to letw straży wzór nie jest tak prosty, że niedawno dowiedział się od kogoś innego tutaj.) I sprawdzić codegolf.stackexchange.com/questions/19255/... .
Ørjan Johansen
1
Zapoznaj się również ze wskazówkami dotyczącymi gry w golfa w Haskell, aby uzyskać przydatne wskazówki.
sudee
@ ØrjanJohansen Thanks! Zapomniałem, że średniki są ważne i że letna straży jest dość przebiegły. Ale krótszy kod jest bardziej czytelny, prawda?
qfwfq
1

Ohm, 3 bajty (niekonkurujące?)

lvσ

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ż vjest podział (dolny)?

Roman Gräf
źródło
1
Nie dzieli się to w wymagany sposób. np. Hello, world! 5skrzynka testowa jest nieprawidłowa. Wypróbuj online!
Ørjan Johansen
Cóż, zamierzam poszukać innego wbudowanego ....
Roman Gräf
1

CJam , 16 bajtów

{_,2$//_2$<@@>s}

Anonimowy blok oczekuje argumentów na stosie i pozostawia wynik na stosie po.

Wypróbuj online!

Wyjaśnienie

Oczekuje argumentów jako number "string".

_,              e# Copy the string and get its length.
  2$            e# Copy the number.
    /           e# Integer divide the length by the number.
     /          e# Split the string into slices of that size.
      _         e# Copy the resulting array.
       2$       e# Copy the number.
         <      e# Slice the array, keeping only the first <number> elements.
          @@    e# Bring the number and original array to the top.
            >   e# Slice away the first <number> elements,
             s  e# and join the remaining elements into a string.
Business Cat
źródło
1

jot , 26 bajtów

(]$~[,(<.@%~#));]{.~0-(|#)

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:

   5 chunk test2
┌──┬───┐
│He│ld!│
│ll│   │
│o,│   │
│ w│   │
│or│   │
└──┴───┘
Duńczyk
źródło
Dzięki. Czytaj za szybko. Komentarz usunięty
Jonasz
1

R , 79 63 bajtów

-16 od Giuseppe naprawiającego indeksowanie

function(s,n,k=nchar(s),l=k%/%n)substring(s,0:n*l+1,c(1:n*l,k))

Wypróbuj online!

Zbudowany wokół danych wejściowych do substring()

Kryminalnie Wulgarne
źródło
63 bajty - nieco uprościło indeksowanie.
Giuseppe
@Giuseppe Haha, musiałem wypróbować każdy wariant dodawania i mnożenia indeksu, ale tego nie zauważyłem. Dobry chwyt
CriminallyVulgar
0

PHP , 152 bajty

Dzięki @ JörgHülsermann (wskazówka w nawiasach!)

$c=$s=explode('|',readline());
while($s[1]--)$s[0]=preg_replace('/^'.($l[]=substr($s[0],0,strlen($c[0])/$c[1])).'/','',$s[0]);
$l[r]=$s[0];
print_r($l);

Wypróbuj online!

wyrko
źródło
1
Twoja metoda PHP nie działa, ponieważ zastępuje nie tylko na początku. preg_replacejest 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)]);
Jörg Hülsermann
Czy możesz wyjaśnić mi przykładowy kod, dlaczego nie działa mój kod PHP?
kip
1
Wypróbuj online! Zastępuje wszystko Aw pierwszym uruchomieniu
Jörg Hülsermann
1
Możesz upuścić konstrukcję array_walk, jeśli używasz nawiasów. Wypróbuj online!
Jörg Hülsermann
Dobra wskazówka! Zupełnie zapomniałem
kip
0

Python 3 , 94 bajty

i=input().split('|')
s,n=i[0],int(i[1])
c=len(s)//n
while n:print(s[:c]);s=s[c:];n-=1
print(s)

Wypróbuj online!

wyrko
źródło
Zakładanie, że dane wejściowe są w zmiennej, nie jest prawidłową metodą wprowadzania .
Ørjan Johansen
Co to oznacza Jak zwykle, we / wy jest elastyczne. ? W każdym razie dzięki, edytuję swoją odpowiedź ...
kip
1
Standardowe metody PPCG dość elastyczne. Po prostu nie za bardzo.
Ørjan Johansen
0

PowerShell v3 + , 72 , 80 bajtów

Zakłada, że $szawiera ciąg wejściowy; $nzawiera 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.

for($i = 0;$i -le $s.Length;$i+=$n+1){-join($s|% ToCharA*)[$i..($i+$n)]}

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 $szawiera ciąg wejściowy; jednak ten czas $nzawiera liczbę „sztuk”. Reszta jest drukowana jako ostatnia. I użyłem operatora podziału PowerShell

0..($n-1)|%{$p=[math]::Floor($s.length/$n)}{$s|% Su*($_*$p) $p}{$s|% Su*($n*$p)}

Wypróbuj online!

GAT
źródło
Uważam, że źle zrozumiałeś pytanie. Dane wejściowe to liczba sztuk (z wyłączeniem pozostałych).
Ørjan Johansen
Masz rację. Wczoraj źle przeczytałem pytanie:) Opublikuję zaktualizowane rozwiązanie, gdy będę miał okazję.
GAT