Od jakiegoś czasu nie mieliśmy pytania na ciąg znaków (dokładnie 5 dni), więc przejdźmy do jednego.
Biorąc pod uwagę ciąg s
i dodatnią liczbę całkowitą n
, weź każdy n
element s
, powtórz go n
razy i włóż z powrotem s
.
Na przykład, jeśli n = 3
i s = "Hello, World!"
, co trzeci znak to Hl r!
. Następnie powtarzasz każdy znak n
razy, aby wyprodukować HHHlll rrr!!!
. Następnie zastępujesz oryginalne litery powtarzanymi wersjami, aby uzyskać produkt końcowyHHHellllo, Worrrld!!!
Musisz wykonać to zadanie w możliwie najkrótszym kodzie w swoim języku!
Zasady
- Jest to golfowy kod, więc wygrywa najkrótszy kod w bajtach
n
gwarantuje się, że będzie mniejsza niż długośćs
i większa niż 0- Pierwszy znak
s
jest tam gdzien
th znaki są zaczerpnięte z, i zawsze jest powtarzanen
razy s
będzie się składać wyłącznie z drukowalnego ASCII (punkty kodowe0x20 (space)
do0x7E (~)
)
Przypadki testowe
s, n => output
"Hello, World!", 3 => "HHHellllo, Worrrld!!!"
"Code golf", 1 => "Code golf"
"abcdefghijklm", 10 => "aaaaaaaaaabcdefghijkkkkkkkkkklm"
"tesTing", 6 => "ttttttesTingggggg"
"very very very long string for you to really make sure that your program works", 4 => "vvvvery veryyyy verrrry loooong sssstrinnnng foooor yoooou toooo reaaaally makeeee surrrre thhhhat yyyyour proggggram workkkks"
s
jako tablicę znaków?s
” <- czy jest to ścisły wymóg (nadpisanie oryginalnego ciągu), czy też jest w porządku po prostu podać wynik końcowy?Odpowiedzi:
Galaretka , 3 bajty
Dane wejściowe przyjmuje się jako s, n .
Wypróbuj online!
Jak to działa
źródło
E1 B8 A2 73 C3 97
Galaretka ,
65 bajtów-1 bajt dzięki dziurawej zakonnicy (użyj mnożenia ciągów Pythona).
Pełny program, akceptujący dwa argumenty wiersza poleceń, ciąg i liczbę oraz wypisujący wynik.
Wypróbuj online!
W jaki sposób?
źródło
x
zapomnieć×
; dzięki.C3 97 4A 6D C2 A5 C2 A6
JavaScript (ES6), 46 bajtów
Pobiera dane wejściowe w składni curry
(s)(n)
.Przypadki testowe
Pokaż fragment kodu
źródło
Proton , 44 bajty
Wypróbuj online!
źródło
C # (.NET Core) ,
8482 bajtówWypróbuj online!
źródło
i++
i zmieniającn[i],i%m<1?m:1
nan[i],i++%m<1?m:1
.n=>m=>...
05AB1E ,
87 bajtów-1 bajt dzięki @Emigna
Wypróbuj online!
Wyjaśnienie
źródło
ôʒć²×ì?
}
vy
jest jednym foreach,ε
jest drugim. Co dziwne,ε
nie działa.PowerShell , 51 bajtów
Wypróbuj online!
Pobiera dane wejściowe jako
char
tablicę$a
i liczbę$n
. Pętle przechodzą$a
i każda iteracja wysyła bieżącą literę$_
lub bieżącą literę pomnożoną przez$n
, na podstawie indeksu, do pseudo-trójki. Indeks wybiera między dwoma w oparciu o inkrementację,$i
a następnie modulo$n
. Litery te są następnie-join
składane z powrotem, a ciąg zostaje pozostawiony w rurociągu; wynik jest niejawny.źródło
Python 2 ,
5453 bajtówEdycja: Zapisano 1 bajt dzięki @Rod
Wypróbuj online!
źródło
x[i]
i[1,n][i%n<1]
zaoszczędzić miejsceAlice , 25 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
R ,
827675 bajtówWypróbuj online!
Funkcja; pobiera ciąg
s
i liczbę całkowitąn
i wypisuje powtarzaną wersję na standardowe wyjście.Wyjaśnienie:
R , 55 bajtów
Wypróbuj online!
Ten sam algorytm jak powyżej, ale z
S
listą pojedynczych znaków.źródło
Python 2 , 57 bajtów
Wypróbuj online!
źródło
enumerate
byłoby krótsze?range(len())
w końcu, byłby dłuższyPython 2 , 53 bajty
Wypróbuj online!
źródło
Japt , 8 bajtów
Przetestuj online!
Wyjaśnienie
Mam do zaliczenia na pomysł, aby wykorzystać
ù
do @Shaggy odpowiedź jest tutaj . Nie wiem, czy sam bym o tym pomyślał ...źródło
ë
, dla kup i chichotów, ale niestety nie udało mi się!J, 17 bajtów
(...) # ]
wszystko w parens tworzy ciąg znaków dla wbudowanego czasownika „copy”. Na przykład, jeśli lewy argument ma wartość 3, tworzy ciąg3 1 1
powtórzony w razie potrzeby, aby zrównać liczbę znaków w prawym arg]
, który zawiera ciąg. Oznacza to, że#
rozwiązuje problem bezpośrednio, zakładając, że możemy podać poprawny lewy argument:4
należy4 1 1 1
powtórzyć i tak dalej.#@]$[,1#~<:@[
, widzimy, że używa czasownika kształtowego J$
na środku - to główny czasownik tego wyrażenia ...$
jest#@]
, co oznacza długość#
prawego arg]
.$
znajduje[,1#~<:@[
się pociąg z 5 czasownikami. Pierwszy wykonany pociąg to ...1#~<:@[
, co oznacza 1 skopiowaną#~
(pasywną formę kopii) jedną mniej niż<:
lewy argument[
. Ten wynik jest przekazywany do ostatecznego widelca:[, ...
co oznacza, że weźmy lewy argument i dołączmy właśnie obliczony wynik, który jest ciągiem1
s.Wypróbuj online!
źródło
]#~[^0=(|i.@#)
przez 14 bajtówC # (.NET Core) , 61 + 18 = 79 bajtów
Wypróbuj online!
źródło
Perl 5,
37, 29 +1 (-p) bajtów-8 bajtów dzięki komentarzowi Toma.
Wypróbuj online
źródło
$n=<>;
zamiastBEGIN
bloku i miećn
w następnym wierszu wejścia i wymienić$-[0]
z"@-"
ponieważ tylko pierwsza liczba jest oceniana w porównaniu. Ponadto, jeśli weźmiesz wkład zan
pośrednictwem-i
, możesz po prostu użyć$^I
zamiast deklarować i używać$n
, ale ponieważ jest to niestandardowe, może nie latać ... :)Procedura kodu maszynowego 6502 , 50 bajtów
Jest to podprogram niezależny od pozycji oczekujący wskaźnika do ciągu wejściowego (zakończonego 0, znanego również jako ciąg C) w
$fb
/$fc
, wskaźnika do bufora wyjściowego w$fd
/$fe
i count (n
) w$ff
. Wykorzystuje proste indeksowanie, więc jest ograniczone do maksymalnej długości 255 znaków (+ 0 bajtów) ze względu na architekturę 8-bitową.Objaśnienie (skomentowany demontaż):
Przykład używającego go kodu maszynowego C64 :
Jest to program w asemblerze w stylu ca65 dla C64 przy użyciu tej procedury (importowanej jako
rep
):Demo online
Zastosowanie:
sys49152,"[s]",[n]
npsys49152,"Hello, World!",3
Ważne: Jeśli program został załadowany z dysku (jak w wersji demonstracyjnej online),
new
najpierw wydaj polecenie! Jest to konieczne, ponieważ ładowanie programu maszynowego niszczy niektóre wskaźniki C64 BASIC.źródło
Java 8,
10076 bajtów-24 bajty dzięki @ OliverGrégoire .
Wyjaśnienie:
Wypróbuj tutaj.
źródło
n->s->{int i,k=0;for(char c:s)for(i=k++%n<1?n:1;i-->0;)System.out.print(c);}
(char[]
zamiast, zamiastString
.)MATL ,
107 bajtów-3 bajty dzięki Luisowi Mendo!
Wypróbuj online!
Pobiera dane wejściowe jako,
n
a następnieS
jako tablicę łańcuchów / znaków.źródło
Haskell ,
5146 bajtówDzięki @Laikoni za uratowanie mnie 5 bajtów!
Wypróbuj online!
Wyjaśnienie / Niegolfowany
Operator
c <$ [a..b]
zamienia każdy element listy[a,a+1...b]
przezc
- tak to tylko golfedreplicate
:źródło
Węgiel drzewny , 14 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Trwa wejście w porządku
n
,s
.źródło
V , 13 bajtów
Wypróbuj online!
To naprawdę głupie obejście.
òlhÀälÀlÀ<M-->l
powinny działać, ale nie mogę dla życia mnie zrozumieć dlaczego, zwłaszcza ręcznie robilhÀälÀlÀ<M-->l
powtarzane kilka razy wykonuje pracę.Hexdump:
Wyjaśnienie:
źródło
'l' for right
... Zgaduję, że to jest Vim? W przeciwnym razie ... dlaczego ?l
jest w vimie. może być ortograficznie odwrócony, ale jest poprawny geometrycznie:l
jest klawiszem prawej litery w środkowym rzędzie.Pyth , 12 bajtów
Wypróbuj tutaj.
źródło
Python 3 , 58 bajtów
Praca nad golfem.
Wiem, że istnieją już inne odpowiedzi w języku Python, ale pomyślałem, że też opublikuję tę, ponieważ wyniki są całkiem dobre w porównaniu do innych, mimo że są w pełni funkcjami, a nie lambda.
Pobiera dane wejściowe jako parametry funkcji i drukuje na
STDOUT
.Wypróbuj online!
Dla jednego bajtu mniej (57) kodowałem lambda, jednak podobne odpowiedzi zostały już opublikowane przez innych użytkowników:
źródło
Brain-Flak (BrainHack) , 122 + 3 (
-A
) = 125 bajtówJestem pewien, że to za długo, ale spędziłem sporo czasu, szukając i nie mogłem znaleźć żadnych ulepszeń.
Wypróbuj online!
źródło
05AB1E ,
1211 bajtówWypróbuj online!
Wyjaśnienie
źródło
Mathematica, 71 bajtów
Wypróbuj online!
zapisano -2 bajty, słuchając user202729
źródło
Map
w ciąguCharacters
może być krótszy.K (oK) ,
2319 bajtówRozwiązanie:
Wypróbuj online!
Przykłady:
Wyjaśnienie:
Uwagi:
źródło
Excel VBA, 71 bajtów
Anonimowa funkcja bezpośredniego okna VBE, która przenosi dane wejściowe z zakresu
[A1:B1]
i wyjścia do bezpośredniego okna VBE.źródło