Wyzwanie
Widziałeś kiedyś te zwiastuny filmów (mianowicie Marsjański, Międzygwiezdny itp.), W których między literami powoli się rozrastają?
Wyzwanie polega na odtworzeniu tego efektu przy użyciu ciągu, mnożnika odstępu i kierunku poprzez wstawienie odpowiedniej liczby spacji między litery.
Przykład
Dane wejściowe : „INTERSTELLAR”, mnożnik odstępu: 1,0, kierunek: zwiększenie do wewnątrz
Output: I N T E R S T E L L A R
Odstępy są następujące: [1, 2, 3, ..., 3, 2, 1]; zamieniając spacje na „.” aby lepiej zademonstrować odstępy:
I.N..T...E....R.....S......T.....E....L...L..A.R
Dane wejściowe : „INTERSTELLAR”, mnożnik szczeliny: 0,5, kierunek: zwiększenie do wewnątrz
Output: IN T E R S T E L L AR
Odstęp jest mnożony przez 0,5, dlatego otrzymujemy [0, 1, 1, 2, ... 2, 1, 1, 0] z dzielenia liczb całkowitych; za pomocą '.':
IN.T.E..R..S...T..E..L.L.AR
Dane wejściowe : „CODEGOLF”, mnożnik odstępu: 2,0, kierunek: zwiększenie na zewnątrz
Output: C O D E G O L F
Odstępy są mnożone przez 2, zwiększając się na zewnątrz, dlatego otrzymujemy [8,6,4,2,4,6,8]; zastępując „.”:
C........O......D....E..G....O......L........F
Dane wejściowe : „CODEGOLF”, mnożnik odstępu: 0,4, kierunek: zwiększenie na zewnątrz
Output: C O DEGO L F
Odstępy są mnożone przez 0,4, zwiększając się na zewnątrz, dlatego otrzymujemy [1,1,0,0,0,1,1]; zastępując „.”:
C.O.DEGO.L.F
Zasady
- Pobiera 3 dane wejściowe: ciąg, mnożnik odstępu i kierunek
- Jeśli łańcuch wejściowy ma nieparzystą długość (nawet w # przerwach) np. „CZEŚĆ”, odstępy między najbardziej wewnętrznymi 2 przerwami powinny być takie same
H E L L O
- Mnożnik kierunku i odstępu można analizować w dowolny sposób, np. Można użyć -2 jako „zwiększenie do wewnątrz za pomocą mnożnika 2”, 1 jako „zwiększenie na zewnątrz za pomocą mnożnika 1” itp.
- Wymagane jest tylko użycie spacji, ale jest to bonus, jeśli wypełnienie postaci można dostosować.
Animacja odniesienia
Miłej zabawy w golfa!
Increasing
na1 => Inward, 0 => Outward
lub odwrotnie.C..O....D......E........G......O....L..F
Odpowiedzi:
JavaScript (ES6),
86828180 bajtówDane wejściowe są oczekiwane w składni curry
f(s)(r)
, z:s
= ciągr
= stosunek + kierunek: pływak ujemny dla wewnątrz lub dodatni pływak dla na zewnątrzźródło
05AB1E , 33 bajty
Wykorzystuje kodowanie CP-1252 .
Mnożnik odstępu jest uważany za ujemny, gdy rośnie na zewnątrz.
Wypróbuj online!
źródło
APL, 40 bajtów
To bierze łańcuch za prawy argument, stosunek za lewy argument, a kierunek za lewy argument (0 dla wewnątrz i 1 dla na zewnątrz).
Wyjaśnienie:
⍳⍴1↓⍵
: uzyskaj listę liczb od 1 do N-1, gdzie N jest długością łańcucha(⌽⌊+)
: odwróć listę i na każdej pozycji uzyskaj najniższą liczbę z obu list (daje to rozmiary przerw, jeśli zwiększa się do wewnątrz)(1+⌈/-+)⍣⍺⍺
: odejmij każdą liczbę na liście od najwyższej liczby na liście i dodaj 1. Zrób to⍺⍺
razy. (Jeśli⍺⍺=0
nic się nie wydarzy, a jeśli⍺⍺=1
to da rozmiary luk, jeśli zwiększą się na zewnątrz.)-⌊⍺×
: pomnóż każdą przerwę⍺
, zaokrągl ją w dół i zaneguj.∊1,⍨1,¨
: dodaj 1 przed każdą przerwą i 1 na samym końcu listy.0~⍨
: usuń wszelkie zera.⍵\⍨
: użyj wynikowej listy, aby rozwinąć⍵
. Expand (\
) działa w następujący sposób: dla każdej liczby dodatniej bieżący znak jest replikowany tyle razy, a dla każdej liczby ujemnej, że wstawianych jest wiele spacji, z zastrzeżeniem, że0
i¯1
robią to samo, dlatego wszystkie zera musiały zostać wcześniej usunięte.źródło
MATL , 31 bajtów
Dane wejściowe to: ciąg;
0
lub1
do zwiększenia wewnętrznego lub zewnętrznego; mnożnik.Wypróbuj online!
Wyjaśnienie
Rozważmy wejść
'INTERSTELLAR'
,1
,0.5
jako przykład.źródło
Rakieta 348 bajtów
Nie golfowany:
Testowanie:
Wynik:
źródło
PHP, 129 bajtów
12 bajtów zapisanych przez @Titus Dziękujemy
string = $ argv [1], stosunek = $ argv [2], kierunek = $ argv [3] do wewnątrz = 0, na zewnątrz = 1
źródło
str_pad
powinien zaoszczędzić 4 bajty. Spróbuj++$i>$l?$l-$i/2:$i/2
i$t[$i++]/2
zamiast zwiększać pętlę po stanie; to powinno oszczędzić 9. Dlaczego0^
?0^3.12
Wynik Titusa,3
który jest konieczny$i=0
jest niepotrzebne.++$i>
nadal oszczędza jeden bajt$i++>=
. I możesz zaoszczędzić jeszcze jeden bajt, przesuwając ten przyrost do warunku wstępnego:++$i<2*$l=...
zamiast$i+1<2*$l=...
zamieniać prawdziwe i fałszywe gałęzie trójskładnika zewnętrznego$i
zamiast zamiast++$i
i$t[$i/2-.5]
zamiast$t[$i++/2]
.1
i na zewnątrz jako2
powinno umożliwić zapisanie kolejnych 3 bajtów:($l>>1)
zamiast(0^$l/2+1)
; ale nie testowałem żadnego z nich.