Niezły czasownik w tytule.
Napisz program, który poda łańcuch wejściowy, „uelastyczni” ten łańcuch i wyświetli wynik. Uelastycznienie sznurka odbywa się w następujący sposób:
Pierwszy znak jest wyświetlany raz. Drugi znak jest pokazywany dwukrotnie. Trzecia postać jest pokazana trzy razy i tak dalej.
Jak widać, ilość duplikatów określonego znaku jest powiązana z indeksem znaku, w przeciwieństwie do jego poprzednich wystąpień w ciągu.
Możesz oczekiwać, że otrzymasz tylko drukowalne znaki ASCII. Oparte na poniższym linku , znaki te mają wartości dziesiętne 32-126.
Przykłady:
Why: Whhyyy
SKype: SKKyyyppppeeeee
LobbY: LoobbbbbbbYYYYY
(Zauważ, że jest 7 b, ponieważ pierwszy b jest pokazany 3 razy, a drugi b jest pokazany 4 razy, co daje w sumie 7 b).
A and B: A aaannnnddddd BBBBBBB
Najkrótsze bajty wygrywają :)
Odpowiedzi:
Galaretka , 3 bajty
Kod:
Wyjaśnienie:
Wykorzystuje kodowanie Jelly . Wypróbuj online! .
źródło
*
zwielokrotnia ciąg. To nie jest tak naprawdę zamierzone, ale działa.*
? W całej odpowiedzi nie ma czegoś takiego.P
polecenie Jelly oblicza produkt za kulisami za pomocą*
operatora Python . Ten post nadużywa nieszczelnej abstrakcji kodu źródłowego faktycznie znajdującego się w Pythonie, więc wykonanieP
polecenia (produktu) na łańcuchu działa zgodnie z oczekiwaniami.J, 4 bajty
Stosowanie
Wyjaśnienie
źródło
Brainfuck, 15 bajtów
Dość prosta implementacja, przesuwająca przestrzeń pamięci o 1 dla każdego znaku wejściowego. Wymaga interpretera, który podaje 0 na EOF i 32-bitowe / arbitralne komórki precyzji dla danych wejściowych dłuższych niż 255 znaków.
Wypróbuj online! (Uwaga: TIO używa 8-bitowych komórek)
źródło
Java,
158121 bajtówZaoszczędził aż 37 bajtów dzięki Kevin Cruijssen !
Jako bonus, ten program może obsłużyć wszystkie istniejące znaki Unicode, w tym znaki kontrolne znajdujące się na samym końcu Basic Multilingual Plane .
źródło
for(int C=c+1;C>0;C--)
zfor(int C=c+2;--C>0;)
interface a{static void main(String[]A){int x=0,i;for(char c:A[0].toCharArray())for(i=x+++2;--i>0;)System.out.print(c);}}
interface
domyślnychpublic
metod. To sprytne.Perl, 16 bajtów
+1 bajt dla
-p
flagi.źródło
Haskell, 29 bajtów
Przykład użycia:
concat.zipWith replicate[1..] $ "SKype"
->"SKKyyyppppeeeee"
.replicate n c
tworzy n kopii c iconcat
tworzy jedną listę ze wszystkich list podrzędnych.źródło
id=<<
to miły akcent. :)f = id=<<zipWith replicate[1..]
(w pliku) spowodowało brzydki błąd. Czy możesz powiedzieć, co robię źle?(id=<<zipWith replicate[1..] ) "SKype"
czy nadal powinna działać? W przeciwnym razie uznałbym to za fragment . Pełny program podałeś ma „skype” sztywno.:t
Nie uważa sięid=<<zipWith replicate[1..]
za funkcję (po prostu generuje błąd), ale(id=<<).zipWith replicate[1..]
jest uważany za funkcję. Powiedziałbym, że pierwszy jest po prostu wycięty, który działa tylko wtedy, gdy wpisujesz kod na sztywno, ale drugi, który właśnie wpisujesz, jest funkcją (i:t
zgadza się), zgadzasz się na to?CJam,
987 bajtówDzięki jimmy23013 za oszczędność 1 bajtu.
Sprawdź to tutaj.
Wyjaśnienie
Korzystając z
LobbY
przykładu:źródło
Python, 39 bajtów
Przetestuj na Ideone .
źródło
JavaScript ES6, 39 bajtów
Ta sama długość, ale więcej zabawy:
Wersja demonstracyjna fragmentu:
źródło
<pre>
zamiast<div>
, co powinno pomóc.APL (8)
To znaczy:
Wyjaśnienie:
⍴⍵
: długość danego wektora⍳
: liczby 1..N⍵/⍨
: replikuj każdy element⍵
N razy.źródło
MATLAB, 45 bajtów
Objaśnienie: Kluczem jest
hankel
utworzenie macierzy Hankela danego wektora. Z tej macierzy możemy wyodrębnić wektor indeksów, który określa, który znak ciągu znajduje się w której pozycji na wyjściu. Np.hankel(1:4)
Produkuje następującą macierz:Z tej macierzy możemy wyciągnąć wektor
1,2,2,3,3,3,4,4,4,4,4
. Ten wektor pozwala nam wypisać pierwszy znak ciągu raz , drugi dwa razy itdźródło
NARS2000 , 6 znaków = 12 bajtów
⍳∘⍴
wyliczenie argumentu ... (wskaźniki jego długości)/⊙
replikuje elementy ...⊢
niemodyfikowanego argumentuźródło
PowerShell v2 +, 36 bajtów
Pobiera dane wejściowe
$args[0]
, jawnie rzutuje je jakochar
tablicę, wysyła je do pętli|%{...}
. Przy każdej iteracji bierzemy bieżącą literę / znak"$_"
i używamy*
przeciążonego operatora, aby połączyć ciąg znaków z przyrostem$i
czasu. Wynik każdej iteracji pętli jest hermetyzowany w parens w celu utworzenia tablicy, a następnie-join
edytowany razem w celu utworzenia łańcucha. Ten ciąg jest pozostawiony w potoku, a dane wyjściowe są niejawne.Przykłady
źródło
Brachylog , 13 bajtów
Spowoduje to wydrukowanie wyniku do
STDOUT
.Wyjaśnienie
To dobry przykład wykorzystania backtracku do zapętlenia.
źródło
MATLAB, 23 bajty
Tworzy anonimową funkcję,
ans
którą można wywołać za pomocąans('stringtoelacticize')
źródło
repelem
w mojej (stosunkowo starej) wersji = (repelem
został wprowadzony w R2015aK / Kona , 14 bajtów
Stosowanie:
źródło
Perl 6 ,
22 2019 bajtówWyjaśnienie:
źródło
VBA, 75 bajtów
Wywołaj jako np. Funkcję użytkownika w arkuszu kalkulacyjnym.
= e (A1)
Obcina się, jeśli kilka razy podasz własny wynik :-).
źródło
=)
PHP, 68 bajtów
źródło
for(;$a=$argv[1][$i++];)echo str_repeat($a,$i);
.JavaScript ES6,
4241 bajtówPrzykładowe przebiegi:
źródło
s=>[...s].reduce((a,b,i)=>a+b.repeat(i+1))
s=>[,...s].map((e,i)=>e.repeat(i)).join``
Siatkówka , 22 bajty
Liczba bajtów zakłada kodowanie ISO 8859-1.
Wypróbuj online!
Zasadniczo wstawiamy odpowiednią liczbę
·
znaków zastępczych między znakami (ponieważ te rozszerzone znaki ASCII nie mogą pojawić się na wejściu), a następnie wypełniamy je sąsiednim znakiem w drugim etapie.źródło
R ,
8350 bajtów-23 Dzięki Giuseppe, choć zastosował on zasadniczo zupełnie nową metodę
Mój oryginalny post:
Wypróbuj online!
Wydaje mi się, że jest zdecydowanie lepszy sposób, aby to zrobić, ale dzięki mojej nowej wiedzy o kilku funkcjach w języku R jest to moje podejście.
źródło
scan
zapisuje 1 bajt!rep
i argumentcollapse=""
topaste
jest krótszy iutf8ToInt
jeszcze krótszy! TIOWłaściwie 7 bajtów
Wypróbuj online!
Wyjaśnienie:
źródło
Pyth - 5 bajtów
1 bajt zapisany dzięki @FryAmTheEggman.
Pakiet testowy .
źródło
Python 3,
4847 bajtówDzięki mego za uratowanie bajtu z
-~i
lewą.Jest to w większości oczywiste. Jedna rzecz dla tych, którzy nie są zaznajomieni z Pythonem:
*
operator jest przeciążony, aby zachowywać się jakx
operator Perla , powtarzając swój ciąg znaków liczbę razy określoną przez argument liczbowy. Na przykład'foo' * 3 == 'foofoofoo'
źródło
c*-~i
jest krótszy niżc*(i+1)
.C #, 81 bajtów
źródło
foreach(var a in s)Console.Write(new C(a,1*i++));
using System
lubSystem.
z przoduConsole
.int i=1;
void f(string s){s.Select((c,i)=>{Console.Write(new string(c,i+1));return c;});}
. Potrzeba (nieużywanej) wartości zwracanej jest brzydka. Edycja: właśnie znalazłem podobne fragmenty w innych odpowiedziach dalej.MATL, 5 bajtów
Wypróbuj online
Wyjaśnienie
źródło
Python, 40 bajtów
źródło
Julia, 34 bajty
Wypróbuj online!
źródło
c%n="$c"^n;~s=join([s[r=1:end]...].%r)
, ale tak naprawdę dłużej.split
był brakującym elementem układanki.TSQL, 97 bajtów
Gra w golfa:
Nie golfowany:
Wypróbuj online
źródło