Pomnóż ciąg przez liczbę!

34

Było to wyzwanie się jakiś czas temu o pomnożenie sznurki. Pokazało nam, jak możemy pomnożyć nie tylko liczby, ale także łańcuchy. Jednak nadal nie możemy poprawnie pomnożyć liczby przez ciąg. Nastąpił jedna próba , aby to zrobić, ale jest to oczywiście błędne. Musimy to naprawić!

Twoje zadanie:

Napisz funkcję lub program, który zwielokrotnia dwa wejścia, ciąg znaków i liczbę całkowitą. Aby (poprawnie) pomnożyć ciąg przez liczbę całkowitą, należy podzielić ciąg na znaki, powtórzyć każdy znak kilka razy równy liczbie całkowitej, a następnie ponownie skleić znaki. Jeśli liczba całkowita jest ujemna, używamy jej wartości bezwzględnej w pierwszym kroku, a następnie odwracamy ciąg. Jeśli wartością wejściową jest 0, nic nie wypisuje (cokolwiek pomnożone przez 0 nic nie znaczy).

Wkład:

Ciąg, który składa się wyłącznie z drukowalnych znaków ASCII i znaków nowej linii oraz liczby całkowitej (możliwej ujemnej).

Wydajność:

Ciąg pomnożony przez liczbę całkowitą.

Przykłady:

Hello World!, 3            --> HHHeeellllllooo   WWWooorrrlllddd!!!
foo, 12                    --> ffffffffffffoooooooooooooooooooooooo
String, -3                 --> gggnnniiirrrtttSSS
This is a fun challenge, 0 --> 
Hello
World!, 2                  --> HHeelllloo

                               WWoorrlldd!!

Punktacja:

To jest , wygrywa najmniej bajtów!

Gryphon - Przywróć Monikę
źródło
4
Czy możemy założyć, że ciąg jest drukowalny tylko ASCII plus znaki nowej linii?
mbomb007,
Czy możemy wypisać listę ciągów?
całkowicie ludzki,
Częściowe rozwiązanie w siatkówce. Działa tylko dla dodatnich wartości liczb całkowitych. Prawdopodobnie nie zdążę go ukończyć, jeśli ktoś będzie chciał. tio.run/##K0otycxL/P8/…
mbomb007 11.07.17
@ mbomb007, tak, przepraszam za tyle czasu na to.
Gryphon - Przywróć Monikę
@ totalniehuman, nie możesz nie.
Gryphon - Przywróć Monikę

Odpowiedzi:

31

Galaretka , 6 5 4 bajtów

²Ɠxm

Wypróbuj online!

Jak to działa

²Ɠxm  Main link. Argument: n (integer)

²     Yield n².
 Ɠ    Read and eval one line of input. This yields a string s.
  x   Repeat the characters of s in-place, each one n² times.
   m  Takes each |n|-th character of the result, starting with the first if n > 0, 
      the last if n < 0.
Dennis
źródło
1
OK, teraz jestem pod wrażeniem. Chciałbym wyjaśnić ten szczególny cud w miniaturze.
Gryphon - Przywróć Monikę
Pewnie. Jak tylko zrobiłem zestaw testowy i skończyłem grać w golfa.
Dennis
4
OK, jeśli możesz to zmniejszyć, przestanę próbować zadać pytanie, które zajmie ci> 10 bajtów.
Gryphon - Przywróć Monikę
13
Ok, to wszystko. Uczę się galaretki. Chcę też być w stanie robić magię.
Gryphon - Przywróć Monikę
2
Wszyscy wiemy, jak dyskusja na temat łańcuchów
galaretek
9

JavaScript (ES6), 63 bajty

Pobiera dane wejściowe w składni curry (s)(n).

s=>n=>[...s].reduce((s,c)=>n<0?c.repeat(-n)+s:s+c.repeat(n),'')

Przypadki testowe

Arnauld
źródło
3
+1 za reduce!
Neil,
9

Python 3 , 44 bajty

f=lambda s,n:s and s[0]*n+f(s[1:],n)+s[0]*-n

Wypróbuj online!

Dennis
źródło
Przypadek podstawowy wydaje się ignorować ostatni znak.
xnor
Nie jestem pewien, dlaczego to zrobiłem ... Dzięki!
Dennis
1
41 bajtów . ale idk, jeśli wywołanie funkcji, jak f(n,*s)uważa się za prawidłowe
Felipe Nardi Batista
9

Python 2 , 59 57 50 46 bajtów

-2 bajty dzięki Andersowi Kaseorgowi. -4 bajty dzięki Dennisowi.

lambda s,n:''.join(i*n**2for i in s)[::n or 1]

Wypróbuj online!

całkowicie ludzki
źródło
6

05AB1E , 10 bajtów

S²Ä×J²0‹iR

Wypróbuj online!

S          # Split the string into characters
 ²Ä×       # Repeat each character abs(integer) times
    J      # Join into a string
     ²0‹i  # If the integer is less than 0...
         R #   Reverse the string
Riley
źródło
TFW spędzasz 30 minut próbując wymyślić coś, co udowodni @Riley, że ²0‹ito nie jest najlepsza droga i wymyślić dosłownie 0 alternatyw.
Magic Octopus Urn
@MagicOctopusUrn Użyłem czegoś takiego jak ²0‹iwcześniej i zawsze myślę, że musi być coś lepszego.
Riley,
Myślę, że próbowałem znaleźć alternatywę około 10 razy teraz ... marnując łącznie 3 godziny mojego życia. Ä.D)øJ¹0‹iRto najlepsze, co mogę zrobić bez kopiowania ciebie. Myślę, że twój jest zoptymalizowany.
Magiczna Urna Ośmiornicy
Jeśli zależy Ci, Emigna stosowane è tutaj , choć nie mogę znaleźć sposób, aby zastosować go w tym scenariuszu. Jeśli tak, zaoszczędziłby maksymalnie 1 bajt.
Magic Octopus Urn
SÂΛ@²Ä×J, za pomocą Î przycisku push 0, a wejście działa, jeśli zmienisz kolejność. Oszczędza 1 bajt! (Zastąpiłem także if, więc nie trzeba go zamykać)
kalsowerus,
5

MATL , 9 bajtów

y|Y"w0<?P

Dane wejściowe to: liczba, a następnie ciąg.

Struny z nowej linii są wprowadzane przy użyciu char 10w następujący sposób: ['first line' 10 'second line'].

Wypróbuj online! Lub sprawdź wszystkie przypadki testowe .

Wyjaśnienie

Rozważ dane wejściowe -3i'String' .

y      % Implicitly take two inputs. Duplicate from below
       % STACK: -3, 'String', -3
|      % Absolute value
       % STACK: -3, 'String', 3
Y"     % Run-length decoding
       % STACK: -3, 'SSStttrrriiinnnggg'
w      % Swap
       % STACK: 'SSStttrrriiinnnggg', -3
0<     % Less than 0?
       % STACK: 'SSStttrrriiinnnggg', 1
?      % If so
  P    %   Flip
       %   STACK: 'gggnnniiirrrtttSSS'
       % End (implicit). Display (implicit)
Luis Mendo
źródło
5

Haskell , 41 36 bajtów

f n|n<0=reverse.f(-n)|1<3=(<*[1..n])

Wypróbuj online!

Przykładowe użycie: f (-3) "abc"daje"cccbbbaaa" .

Edycja: -5 bajtów dzięki xnor!

Laikoni
źródło
1
Jest (<*[1..n])za ((<$[1..n])=<<).
xnor
@xnor Thanks! Dobrze wiedzieć.
Laikoni,
5

V , 29, 23, 18 , 17 bajtów

æ_ñÀuñÓ./&ò
ÀäëÍî

Wypróbuj online!

Hexdump:

00000000: e65f f1c0 75f1 d32e 2f26 f20a c0e4 ebcd  ._..u.../&......
00000010: ee                                       .

Dzięki @ nmjcman101 za zapisanie 6 bajtów, co zachęciło mnie do zapisania kolejnych 5!

Oryginalna wersja była dość okropna, ale teraz jestem naprawdę dumny z tej odpowiedzi, ponieważ zaskakująco dobrze radzi sobie z liczbami ujemnymi. (V prawie nie obsługuje liczb i nie obsługuje liczb ujemnych)

Wyjaśnienie:

æ_          " Reverse the input
  ñ  ñ      " In a macro:
   À        "   Run the arg input. If it's positive it'll give a count. If it's negative
            "   running the '-' will cause V to go up a line which will fail since we're
            "   on the first line, which will break out of this macro
    u       "   (if arg is positive) Undo the last command (un-reverse the line)
      Ó./&ò " Put every character on it's own line

W tym momencie bufor wygląda następująco:

H
e
l
l
o

w
o
r
l
d
!
<cursor>

Ważne jest, aby nie wstawiać nowej linii i aby znajdował się na niej kursor.

À           " Run arg again. If it's negative, we will move up a line, and then give the 
            " absolute value of the count. If it's positive (or 0) it'll just give the
            " count directly (staying on the last line)
 ä          " Duplicate... (count times)
  ë         "   This column. 
   Íî       " Remove all newlines.
DJMcMayhem
źródło
Kilka bajtów dla Ciebie Wypróbuj online! Zawsze nienawidzę „Liczb ujemnych oznacza coś innego!” skrzynia krawędzi też. Jest to przypadek, w którym twoje 0specjalne przypadki w V są bardzo przydatne.
nmjcman101
Przepraszamy za specjalne liczby ujemne. Wiele odpowiedzi udało się jednak włączyć do głównej odpowiedzi. Imponujące w tym V.
Gryphon - Przywróć Monikę
@ nmjcman101 O rany, to takie oczywiste, że nie wiem, jak o tym nie pomyślałem. Dziękuję Ci!
DJMcMayhem
@Gryphon Oh wiem. Wyzwanie jest w porządku, po prostu nie lubię własnego języka za to, że jestem taki zły w tym, w czym powinien być dobry. : P
DJMcMayhem
5

R, 83 78 76 bajtów

function(s,i)cat('if'(i<0,rev,`(`)(rep(el(strsplit(s,'')),e=abs(i))),sep='')

Funkcja anonimowa.

Frederic zapisał 3 bajty, Giuseppe zapisał 2 4.

Wyjaśnienie:

     el(strsplit(s,''))                      # split string into list characters
 rep(                  ,e=abs(i)))           # repeat each character abs(i) times


    'if'(i<0,rev,   ){...}                 # if i>0, reverse character list
                 `(`                       # otherwise leave it alone: `(` is the identity function
cat(                      ,sep='')         # print the result

Testy:

> f('Hello World!', 3 )
HHHeeellllllooo   WWWooorrrlllddd!!!
> f('foo', 12)
ffffffffffffoooooooooooooooooooooooo
> f('String', -3)
gggnnniiirrrtttSSS
> f('This is a fun challenge', 0)
> f('Hello
+ World!', 2)
HHeelllloo

WWoorrlldd!!
BLT
źródło
2
Dobra robota ! Możesz zaoszczędzić kilka bajtów, pisząc rep(foo,,,3)lub rep(foo,e=3)(tej samej długości) ;-)
Frédéric
@ Frédéric, pobiłeś mnie, chciałem powiedzieć to samo!
Giuseppe,
1
tak, nie ma problemu! Zasadniczo chciałem pozbyć się aparatu ortodontycznego, więc musiałem się go pozbyć a=. Dlatego użyłem wartości ajako argumentu do funkcji odwrotnej, jeśli i<0poprzez warunkowe zwrócenie funkcji (dlatego potrzebowałem cudzysłowów). Ale musiałem również zastosować funkcję tożsamości dla i>=0sprawy, więc użyłem tego, (co jest wystarczająco blisko. (jest w rzeczywistości funkcją. R jest dziwny.
Giuseppe,
1
tak przy okazji, dokumenty R dla Parena mówią, że (jest to semantycznie równoważne z tożsamościąfunction(x)x
Giuseppe
1
76 bajtów
Giuseppe,
4

05AB1E , 10 bajtów

0‹FR}ʒ¹Ä×?

Wypróbuj online!

Wyjaśnienie

0‹F         # input_1 < 0 times do:
   R        # reverse input_2
    }       # end loop
     ʒ      # filter
      ¹Ä×   # repeat current char abs(input_1) times
         ?  # print without newline
Emigna
źródło
4

PHP> = 7,1, 65 bajtów

for([,$s,$n]=$argv;$i<strlen($s)*abs($n);)echo$s[$i++/$n-($n<0)];

PHP Sandbox Online

Jörg Hülsermann
źródło
1
W kontekście liczb całkowitych $n<0ma tę samą wartość, $n<0?:0ale jest o 3 bajty krótsza :-)
axiac
4

Brain-Flak (BrainHack) , 154 152 bajtów

([(({})(<()>))]<>)<>{({}()<([{}]()<([{}])>)<>({}<>)<>>)<>}{}<>{}<>({}<([][()]){{}({<({}<(({}<>)<>)>())>[()]}<{}{}>)([][()])}{}{}<>>){{}{({}<>)<>}(<>)}{}

Wypróbuj online!

Właśnie tutaj, aby dać DJMcMayhem trochę konkurencji. ;)

Wyjaśnienie

Oto zmodyfikowana wersja wyjaśnień DJMcMayhem

#Compute the sign and negative absolute value 
([(({})<(())>)]<>)<>{({}()<([{}]()<([{}])>)<>({}<>)<>>)<>}{}<>{}<>

#Keep track of the sign
({}<

    #For each char in the input string:
    ([][()])
    {
        {}

        #Push n copies to the alternate stack
        ({<({}<(({}<>)<>)>())>[()]}<{}{}>)

        #Endwhile
        ([][()])
    }{}{}<>

#Push the sign back on
>)

#If so...
{{}

    #Reverse the whole stack
    {({}<>)<>}

    #And toggle over, ending the loop
    (<>)
}

#Pop the counter off
{}
Kreator pszenicy
źródło
4

J , 19 15 13 bajtów

(#~|)A.~0-@>]

Wypróbuj online!

Wyjaśnienie

        0-@>]      NB. first or last index depending on sign of right arg
     A.~           NB. get first or last Anagram of left arg
(#~|)              NB. copy left arg, absolute-value-of-right-arg times
Tikkanz
źródło
2
(#~|)A.~0-@>]przez 13 bajtów
mile
Bardzo ładne @miles!
Tikkanz
Nie ma problemu. Nie musisz także liczyć nawiasów używanych do wywoływania czasownika.
mile
1
Również 13 bajtów:#~ ::(|.@#~|)
FrownyFrog,
3

Dyalog APL, 15 bajtów

{⌽⍣(⍵<0)⊢⍺/⍨|⍵}

Ciąg jako lewy argument, liczba jako prawy argument.

Wypróbuj online!

W jaki sposób?

⍺/⍨ - powtórz ciąg

|⍵ - abs (liczba) razy

⌽⍣ - odwrócić, jeśli

(⍵<0) - liczba jest poniżej 0

Uriel
źródło
Umm, byłoby miło, gdyby TIO jak zadziałało?
Gryphon - Przywróć Monikę
@Gryphon i oto bajt ...
Uriel
Tak, właśnie zdałem sobie z tego sprawę i pisałem mój komentarz, aby ci powiedzieć.
Gryphon - Przywróć Monikę
3

MATLAB, 37 bajtów

@(s,n)flip(repelem(s,abs(n)),(n<0)+1)

Definiuje i anonimową funkcję z danymi wejściowymi s: ciąg i n: liczba.

Przykładowe przebiegi:

>> @(s,n)flip(repelem(s,abs(n)),(n<0)+1)
ans = 
    @(s,n)flip(repelem(s,abs(n)),(n<0)+1)

>> f = ans;

>> f('String', 3)
ans =
SSStttrrriiinnnggg

>> f('String', -3)
ans =
gggnnniiirrrtttSSS

>> f('String', 0)
ans =
   Empty matrix: 1-by-0
Luis Mendo
źródło
Wybór wymiaru do przewrócenia był o wiele lepszy niż bałagan, który napisałem 😛 +1. i zawsze zapominam, że repelemistnieje.
Stewie Griffin,
@StewieGriffin Cóż, możesz to również uwzględnić w swojej odpowiedzi :-) (już +1). Myślę, że na razie nie ma go repelemw Octave
Luis Mendo,
3

Brain-Flak (Haskell) , 202 192 bajty

(({})<(([({})]<>)){({}()<([{}])<>({}<>)<>>)<>}{}([{}]<><{}>)([][()]){{}({<({}<(({}<>)<>)>[()])>()}<{}{}>)([][()])}{}{}<>>)([({}<(())>)](<>)){({}())<>}{}{((<{}>))<>{}}{}<>{}{{}{({}<>)<>}(<>)}{}

Wypróbuj online!

Jest to prawdopodobnie najgorszy możliwy język, ale można to zrobić. Dzięki @Wheatwizard za udostępnienie interpretera Haskell, który umożliwia mieszane formaty wejściowe. Bez niego byłoby to około 150 bajtów dłużej.

Wyjaśnienie:

#Keep track of the first input (n)
(({})<

    #Push abs(n) (thanks WheatWizard!)
    (([({})]<>)){({}()<([{}])<>({}<>)<>>)<>}{}([{}]<><{}>)

    #For each char in the input string:
    ([][()])
    {
        {}

        #Push n copies to the alternate stack
        ({<({}<(({}<>)<>)>[()])>()}<{}{}>)

        #Endwhile
        ([][()])
    }{}{}<>

#Push the original n back on
>)

#Push n >= 0
([({}<(())>)](<>)){({}())<>}{}{((<{}>))<>{}}{}<>{}

#If so...
{{}

    #Reverse the whole stack
    {({}<>)<>}

    #And toggle over, ending the loop
    (<>)
}

#Pop the counter off
{}
DJMcMayhem
źródło
Możesz użyć mojego 52 bajtowego abs do zapisania 2 bajtów, możesz także użyć 50 bajtów -abów, które ci dałem i zwiększać zamiast zmniejszać, aby zapisać 6 bajtów.
Wheat Wizard
3

Java (OpenJDK 8) , 99 98 89 87 85 bajtów

s->n->{for(int i=s.length*(n<0?n:-n),r=n<0?0:~i;i++<0;)System.out.print(s[(i+r)/n]);}

Wypróbuj online!

  • -2 bajty dzięki @Xanderhall
  • -2 bajty dzięki @Nevay
Olivier Grégoire
źródło
Pomysły, które nie działają (znacznie dłużej): odwróć ciąg wcześniej, użyj strumienia,
Olivier Grégoire
1
Zaoszczędź 2 bajty zs[(n<0?-l-~i:i)/n]
Xanderhall
@Xanderhall Thanks! Tak długo tego szukałem, a moje oczy krwawiły. Wiedziałem, że to możliwe, po prostu popsułem wszystko podczas jego wdrażania.
Olivier Grégoire,
1
@ user902383 Tak, jest to obowiązkowe . Gdyby były opcjonalne, wiele rzeczy byłoby nieczytelnych. Ponadto moja funkcja nie jest „pojedynczą instrukcją”, ale pętlą for, która obejmuje kilka instrukcji.
Olivier Grégoire,
1
Możesz zapisać 1 bajt, zwiększając iwarunek s->n->{for(int l=s.length*(n<0?-n:n),i=0;i++<l;)System.out.print(s[(n<0?i-l:i-1)/n]);}. Kolejny bajt można zapisać, iterując od -l do 0 zamiast ( s->n->{for(int i=s.length*(n<0?n:-n),r=n<0?0:~i;i++<0;)System.out.print(s[(i+r)/n]);}).
Nevay
2

Oktawa , 49 bajtów

@(s,n){t=repmat(s,abs(n),1)(:)',flip(t)}{2-(n>0)}

Wypróbuj online!

Wyjaśnię jutro.

Stewie Griffin
źródło
2

Rubin , 59 +1 = 60 bajtów

Używa -nflagi.

n=eval$_
a=$<.read
a.reverse!if n<0
a.chars{|i|$><<i*n.abs}

Wypróbuj online!

Pavel
źródło
1
eval$_jest krótszy niż $_.to_io 1 bajt. String#charsmoże również zaakceptować blok w ten sam sposób String#each_char. Na koniec odwróć dane wejściowe przed przetworzeniem każdego znaku, aby zamiast tego wydrukować go bezpośrednio (przełączając flagę na -n). Wszystko to łączy się w 55 + 1 = 56 bajtów.
Wartość tuszu
2

Węgiel drzewny , 16 bajtów

Fθ¿‹η0F±Iη←ιFIηι

Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:

Fθ              For each character in the input string
  ¿‹η0          If the input number is less than zero
      F±Iη      Repeat the negation of the input number times
          ←ι    Print the character leftwards (i.e. reversed)
      FIη       Otherwise repeat the input number times
         ι      Print the character
Neil
źródło
2

Japt , 12 bajtów

®pVaìr!+sVg

Wypróbuj online!

Wyjaśnienie

Domniemane wprowadzanie ciągu Ui liczby całkowitej V.

®pVaÃ

Map ( ®) każda litera U(niejawnie) do siebie powtórzona ( p) abs(V)( Va) razy.

¬r

Zamień ciąg znaków na tablicę znaków ( ¬) i zmniejsz ( r), które za pomocą ...

!+sVg

"!+".slice(sign(V))- zmniejsza się to za pomocą +a + blub !+b + a.
Dzięki @Arnauld za pomysł ograniczenia wstecz!

Justin Mariner
źródło
Wydaje mi się, że £gY*Vg)pVapowinno to doprowadzić do krótszego rozwiązania, ale mój mózg wyłączył się na wakacje, więc nie mogę tego zrozumieć. Możesz jednak być w stanie coś z tym zrobić.
Shaggy
2

WendyScript , 46 bajtów

<<f=>(s,x){<<n=""#i:s#j:0->x?x>0n+=i:n=i+n/>n}

f("Hello World", -2) // returns ddllrrooWW  oolllleeHH

Wypróbuj online!

Objaśnienie (nie golf):

let f => (s, x) {
  let n = ""
  for i : s
    for j : 0->x
      if x > 0 n += i
      else n = i + n
  ret n
}
Felix Guo
źródło
2

C89 bajtów

main(int c,char**v){for(;*v[1];v[1]++)for(c=atoi(v[2]+(*v[2]=='-'));c--;)putchar(*v[1]);}

Widziałem wersję Bena Perlina i zastanawiałem się, czy nie możesz być jeszcze krótszy, a także mieć pełny program; z pewnością atoi()i putchar()czy nie są drogie pod względem bajtów? Wygląda na to, że miałem rację!

Andrea
źródło
2

Pyth, 13 11 bajtów

*sm*.aQdz._

Spróbuj!

-2 bajty dzięki @jacoblaw

wyjaśnienie

*sm*.aQdz._   
  m     z     # map onto the input string (lambda var: d)
   *.aQd      # repeat the char d as often as the absolute value of the input number 
 s            # sum the list of strings into a single string
*        ._Q   # Multiply with the sign of the implicit input value: reverse for negative Q 

stare podejście, 13 bajtów

_W<Q0sm*.aQdz

Spróbuj!

KarlKastor
źródło
możesz zaoszczędzić dwa bajty dzięki tej logice odwracania
Jakub
2

Python 3 , 68 bajtów

h=lambda s,n:h(s[::-1],-n)if n<0 else s[0]*n+h(s[1:],n)if s else s*n

Wypróbuj online!

Kavi
źródło
Witam i witam na stronie! Niestety, ta odpowiedź jest obecnie nieprawidłowa, ponieważ nie obsługuje liczb ujemnych . Wyzwanie mówi:If the integer is negative, we use its absolute value in the first step, and then reverse the string.
DJMcMayhem
Dzięki za naprawę! BTW, możesz usunąć dwa bajty, usuwając spacje po nawiasie)
DJMcMayhem
Edytowane, dzięki za wkład
Kavi
n<0 else=>n<0else
Zacharý
1

QBIC , 32 bajty

g=sgn(c)[_l;||[:*g|?_sA,b*g,1|';

Wyjaśnienie

            Takes inputs A$ ('Hello'), and c (-3) from the cmd line
g=sgn(c)    Save the sign of c          -1
[_l;||      FOR each char in A$
[:*g|       FOR the number of repetitions wanted    (ie: -3 * -1)
            Note that : reads a number from the cmd line, and c is the first 
            available variable to save it in after a and b got used as FOR counters.
            Also note that a negative value times the sign becomes positive.
?_s         PRINT a substring
  A         of A$
 ,b*g       startng at char n, where n is the first FOR loop counter times the sign
                That means that when c is negative, so is this. A negative starting index
                on Substring instructs QBIC to take from the right.
 ,1|        taking 1 char.
';          This bit injects a literal ; in the output QBasic, to suppress newlines om PRINT
Steenbergh
źródło
1

Mathematica, 89 bajtów

(T=Table;t=""<>T[s[[i]]~T~Abs@#2,{i,Length[s=Characters@#]}];If[#2>0,t,StringReverse@t])&


wkład

[„Hello World!”, 3]

J42161217
źródło
1

Braingolf , 22 bajty

1-v{R.[v.R]v}R[v>R]v&@

Wypróbuj online!

Eee, nieźle.

Pobiera dane wejściowe jako liczbę całkowitą i tablicę znaków.

Alternatywnie:

Braingolf , 31 bajtów

l1->[M]1-v&,{R.[v.R]v}R[v>R]v&@

Wypróbuj online!

Pobiera dane wejściowe jako liczbę całkowitą i ciąg

Skidsdev
źródło
1

C, 109 bajtów

char *f(int n, char *s){char *o=calloc(n,strlen(s)+1),*t=o;while(*s){for(int i=n;i--;)*t++=*s;s++;}return o;}

Zaczynając od deklaracji funkcji, która pobiera liczbę całkowitą i ciąg znaków i generuje ciąg znaków (wydaje się, że pamięć nie jest wstępnie przydzielona i musi zostać utworzona), wydaje się, że bezpośrednie podejście jest krótsze niż wszelkie próby bycia tasakiem, które próbowałem .

char *f(int n, char *s){
  char *o=calloc(n, strlen(s)+1),
    *t=o;

  while (*s) {
    for(int i=n; i--; )
      *t++=*s;
    s++;
  }

 return o;

}

Ben Perlin
źródło
Wydaje się, że to nie działa na negatywne n.
gastropner