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 golf golfowy , wygrywa najmniej bajtów!
źródło
Odpowiedzi:
Galaretka ,
654 bajtówWypróbuj online!
Jak to działa
źródło
JavaScript (ES6), 63 bajty
Pobiera dane wejściowe w składni curry
(s)(n)
.Przypadki testowe
Pokaż fragment kodu
źródło
reduce
!Python 3 , 44 bajty
Wypróbuj online!
źródło
f(n,*s)
uważa się za prawidłowePython 2 ,
59575046 bajtów-2 bajty dzięki Andersowi Kaseorgowi. -4 bajty dzięki Dennisowi.
Wypróbuj online!
źródło
05AB1E , 10 bajtów
Wypróbuj online!
źródło
²0‹i
to nie jest najlepsza droga i wymyślić dosłownie 0 alternatyw.²0‹i
wcześniej i zawsze myślę, że musi być coś lepszego.Ä.D)øJ¹0‹iR
to najlepsze, co mogę zrobić bez kopiowania ciebie. Myślę, że twój jest zoptymalizowany.è
tutaj , choć nie mogę znaleźć sposób, aby zastosować go w tym scenariuszu. Jeśli tak, zaoszczędziłby maksymalnie 1 bajt.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ć)MATL , 9 bajtów
Dane wejściowe to: liczba, a następnie ciąg.
Struny z nowej linii są wprowadzane przy użyciu char
10
w następujący sposób:['first line' 10 'second line']
.Wypróbuj online! Lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie
Rozważ dane wejściowe
-3
i'String'
.źródło
Haskell ,
4136 bajtówWypróbuj online!
Przykładowe użycie:
f (-3) "abc"
daje"cccbbbaaa"
.Edycja: -5 bajtów dzięki xnor!
źródło
(<*[1..n])
za((<$[1..n])=<<)
.V ,
29, 23, 18, 17 bajtówWypróbuj online!
Hexdump:
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:
W tym momencie bufor wygląda następująco:
Ważne jest, aby nie wstawiać nowej linii i aby znajdował się na niej kursor.
źródło
0
specjalne przypadki w V są bardzo przydatne.R,
837876 bajtówFunkcja anonimowa.
Frederic zapisał 3 bajty, Giuseppe zapisał
24.Wyjaśnienie:
Testy:
źródło
rep(foo,,,3)
lubrep(foo,e=3)
(tej samej długości) ;-)a=
. Dlatego użyłem wartościa
jako argumentu do funkcji odwrotnej, jeślii<0
poprzez warunkowe zwrócenie funkcji (dlatego potrzebowałem cudzysłowów). Ale musiałem również zastosować funkcję tożsamości dlai>=0
sprawy, więc użyłem tego,(
co jest wystarczająco blisko.(
jest w rzeczywistości funkcją. R jest dziwny.(
jest to semantycznie równoważne z tożsamościąfunction(x)x
05AB1E , 10 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
PHP> = 7,1, 65 bajtów
PHP Sandbox Online
źródło
$n<0
ma tę samą wartość,$n<0?:0
ale jest o 3 bajty krótsza :-)Brain-Flak (BrainHack) ,
154152 bajtówWypróbuj online!
Właśnie tutaj, aby dać DJMcMayhem trochę konkurencji. ;)
Wyjaśnienie
Oto zmodyfikowana wersja wyjaśnień DJMcMayhem
źródło
J ,
191513 bajtówWypróbuj online!
Wyjaśnienie
źródło
(#~|)A.~0-@>]
przez 13 bajtów#~ ::(|.@#~|)
Dyalog APL, 15 bajtów
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źródło
MATLAB, 37 bajtów
Definiuje i anonimową funkcję z danymi wejściowymi
s
: ciąg in
: liczba.Przykładowe przebiegi:
źródło
repelem
istnieje.repelem
w OctaveBrain-Flak (Haskell) ,
202192 bajtyWypró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:
źródło
Java (OpenJDK 8) ,
9998898785 bajtówWypróbuj online!
źródło
s[(n<0?-l-~i:i)/n]
i
waruneks->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]);}
).Oktawa , 49 bajtów
Wypróbuj online!
Wyjaśnię jutro.
źródło
Rubin , 59 +1 = 60 bajtów
Używa
-n
flagi.Wypróbuj online!
źródło
eval$_
jest krótszy niż$_.to_i
o 1 bajt.String#chars
może również zaakceptować blok w ten sam sposóbString#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.Węgiel drzewny , 16 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
źródło
CJam , 9 bajtów
Wypróbuj online!
źródło
Japt , 12 bajtów
Wypróbuj online!
Wyjaśnienie
Domniemane wprowadzanie ciągu
U
i liczby całkowitejV
.Map (
®
) każda literaU
(niejawnie) do siebie powtórzona (p
)abs(V)
(Va
) razy.Zamień ciąg znaków na tablicę znaków (
¬
) i zmniejsz (r
), które za pomocą ..."!+".slice(sign(V))
- zmniejsza się to za pomocą+
→a + b
lub!+
→b + a
.Dzięki @Arnauld za pomysł ograniczenia wstecz!
źródło
£gY*Vg)pVa
powinno 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ć.WendyScript , 46 bajtów
Wypróbuj online!
Objaśnienie (nie golf):
źródło
C89 bajtów
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()
iputchar()
czy nie są drogie pod względem bajtów? Wygląda na to, że miałem rację!źródło
Pyth,
1311 bajtówSpróbuj!
-2 bajty dzięki @jacoblaw
wyjaśnienie
stare podejście, 13 bajtów
Spróbuj!
źródło
Python 3 , 68 bajtów
Wypróbuj online!
źródło
If the integer is negative, we use its absolute value in the first step, and then reverse the string.
)
n<0 else
=>n<0else
QBIC , 32 bajty
Wyjaśnienie
źródło
Mathematica, 89 bajtów
wkład
źródło
Braingolf , 22 bajty
Wypróbuj online!
Eee, nieźle.
Pobiera dane wejściowe jako liczbę całkowitą i tablicę znaków.
Alternatywnie:
Braingolf , 31 bajtów
Wypróbuj online!
Pobiera dane wejściowe jako liczbę całkowitą i ciąg
źródło
C, 109 bajtów
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 .
}
źródło