Wyzwanie:
Wkład:
Podajesz dwa dane wejściowe:
- Ciąg znaków zawierający tylko drukowalny kod ASCII (bez spacji, tabulatorów i nowych wierszy)
- Drukowalny znak ASCII
Wydajność:
Pierwszy wiersz będzie zawierał ciąg wejściowy. Każde i
pierwsze -modulo-3 pierwsze pojawienie się tej postaci będzie poruszać się w kierunku południowo-wschodnim; każde i
-modulo-3 sekundy wystąpi w kierunku południowym; i każde i
trzecie wystąpienie -modulo-3 będzie poruszać się w kierunku południowo-zachodnim. Będziesz kontynuował, aż znaki znów znajdą się w początkowej pozycji początkowej (co oznacza, że w razie potrzeby będzie się przewijał z jednej strony na drugą), a następnie wydrukujesz ostatni wiersz z ciągiem znaków wejściowych, aby skończ to. (Zauważ, że wszystkie przypadki testowe kończą się przy początkowym wprowadzeniu co najwyżej length(input)
wierszy, w tym wiersz zawierający dane końcowe. Może być jednak wcześniej, jak widać w pierwszym przypadku testowym poniżej, o długości 14, ale kończącym się po 9.)
To wszystko może być dość niejasne, więc oto przykład:
Przypadek testowy 1:
Ciąg znaków: "This_is_a_test"
Znak znaków:'s'
Wydajność:
This_is_a_test
s s s
ss s
s s
sss
sss
s s
ss s
s s s
This_is_a_test
Oto ten sam przypadek testowy z kolorowymi ścieżkami trzech s
:
gdzie pierwszy 's'
podąża zieloną ścieżką w kierunku południowo-wschodnim; drugi 's'
podąża żółtą ścieżką w kierunku południowym; a trzeci 's'
podąża jasnoniebieską ścieżką w kierunku południowo-zachodnim. (Gdyby był czwarty 's'
, znów poszedłby w kierunku południowo-wschodnim, co można zobaczyć w niektórych innych przypadkach testowych poniżej.)
Zasady konkursu:
- Dane wejściowe będą zawierać tylko ASCII do wydruku (z wyłączeniem spacji, tabulatorów i nowych wierszy)
- Formaty we / wy są elastyczne. Może być ciągiem rozdzielanym znakiem nowej linii, macierzą znaków itp. Twoje połączenie.
- Możliwe jest, że dany znak nie jest obecny w ciągu, w którym to przypadku możesz albo wypisać ciąg wejściowy raz, albo dwa razy (tzn.
"test", 'a'
Możesz mieć jeden z tych, jak to możliwe:"test\ntest"
/"test"
). - Wiodące miejsca są obowiązkowe; końcowe spacje są opcjonalne. Dozwolona jest jedna lub wiele nowych / wiodących nowych linii.
Główne zasady:
- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
Nie pozwól, aby języki gry w golfa zniechęcały Cię do publikowania odpowiedzi w językach niekodujących golfa. Spróbuj znaleźć możliwie najkrótszą odpowiedź na „dowolny” język programowania. - Do odpowiedzi mają zastosowanie standardowe reguły , więc możesz używać STDIN / STDOUT, funkcji / metody z odpowiednimi parametrami i zwracanymi typami, pełnych programów. Twoja decyzja.
- Domyślne luki są zabronione.
- Jeśli to możliwe, dodaj link z testem swojego kodu.
- W razie potrzeby dodaj również wyjaśnienie.
Przypadki testowe / więcej przykładów:
Przypadek testowy 2:
Ciąg znaków: "abcabcabcabcabc"
Znak znaków:'b'
Wydajność:
abcabcabcabcabc
b b b b b
bbb bb
b b
bbb bb
b b b b b
b b b b
b b b b b
bb b bb
b b b
bb bbb
b b bbb
b b b b
b bb bb
b b bb b
abcabcabcabcabc
Oto ten sam przypadek testowy z kolorowymi ścieżkami pięciu a
:
Przypadek testowy 3:
Ciąg znaków: "only_two_paths?"
Znak znaków:'o'
Wydajność:
only_two_paths?
o o
o o
o o
o o
o o
oo
o
oo
o o
o o
o o
o o
o o
o o
only_two_paths?
Oto ten sam przypadek testowy z kolorowymi ścieżkami dwóch o
:
Przypadek testowy 4:
String-input: "lollollollollol"
Input character:'l'
Wydajność:
lollollollollol
lll ll ll
ll ll ll
l ll ll ll ll
lll l ll l ll
llllll ll ll
l l ll ll
ll lll ll
l l l lll ll l
ll l ll l l
l l l l llll l
ll lll lll
l l l ll
ll lll lllll
l l l ll l ll
lollollollollol
Oto ten sam przypadek testowy z kolorowymi ścieżkami dziesięciu l
:
Przypadek testowy 5:
String-input: "AbCdEeDcBaAbCdEeDcBa_CCCCC"
Input character:'C'
Wydajność:
AbCdEeDcBaAbCdEeDcBa_CCCCC
C C C C C
C C C C CCC
C C C C C C C
C C C C C C C
C C C C C C C
C C C C C C C
C C C C C C C
C C C CC C C
C C CC C C
C C CC C C
C C CC C
CC CC C C
CC CC C C
C C CC C C
C C CC C C C
C C C C C C
C C CC C C C
C C C C C C C
C C C C C C C
C C C C C CC
C C C C C C
C C C C CCC
C C C CCCC
C C C C
C C CCCCC
AbCdEeDcBaAbCdEeDcBa_CCCCC
Oto ten sam przypadek testowy z kolorowymi ścieżkami siedmiu C
:
Przypadek testowy 6:
String-input: "XyX"
Input character:'X'
Wydajność:
XyX
XX
X
XyX
Oto ten sam przypadek testowy z kolorowymi ścieżkami dwóch X
:
Przypadek testowy 7:
String-input: "aaaa"
Input character:'a'
Wydajność:
aaaa
aa
aaa
aaa
aaaa
Oto ten sam przypadek testowy z kolorowymi ścieżkami czterech a
:
length(input)
wszystko się zgadza, ale może być wcześniej, jak pokazuje pierwszy przypadek testowy. Ale wygląda na to, że rzeczywiście masz rację co do wielokrotności 3 części (chociaż nie jestem w 100% pewien).Odpowiedzi:
Stax , 24 bajty
Uruchom i debuguj online
Jest to reprezentacja ascii tego samego programu.
Pobiera indeksy wszystkich postaci, a następnie mutuje je, aż zostaną ustawione na poziomie równym pierwotnym indeksom. Dla każdej zmiany wypisz ciąg znaków ze znakiem przy tych indeksach.
źródło
Perl 5 ,
-plF
10110099989796 bajtówZastąp
\0
literał 0 bajtem 0, aby otrzymać 96. Zauważ, że link Try It Online ma 97 bajtów, ponieważ wydaje się, że nie można wprowadzić tam literału 0.Zakreślacz perlowy kod golfowy myśli
#
rozpocząć komentarz. Jak naiwny 😈Wypróbuj online!
Jak to działa
$l
jest licznikiem, dla którego linii po pierwszym jesteśmy (odlicza się w dół, więc np. -3 dla 3 linii poniżej górnego ciągu). Po wydrukowaniu początkowego ciągu, gdy robi to wielokrotnie.Wyszukaj pierwszy ciąg znaków pod kątem występowania znaku docelowego i oblicz, przy jakim przesunięciu powinien się pojawić:
(++$#$l%3*$l-$l+"@-")%@F
która jest obecna pozycja plus liczba linii (ujemna) razy-1, 0, 1
(cyklicznie). Skonstruować ciąg z tym wiele razy\0
, po czym charakteru docelowej ior
że w akumulatorze$$l
(to jest inna dla każdego akumulatora$l
i powód$l
odlicza zamiast w górę, ponieważ$1
,$2
etc są tylko do odczytu). Jednocześnie$#$l
odnosi się do innej tablicy za każdym razem przez pętlę. Wynikiem jest$l
linia th, ale\0
zamiast spacji.Znaki docelowe w pierwszym ciągu są zastępowane przez,
\0
więc kończy się na oryginalnym ciągu z „dziurami” (z\0
) w pierwotnych pozycjach znaku docelowego. Jeśli to zrobiszxor
z akumulatorem, dziury zostaną wypełnione tylko wtedy, gdy akumulator ma znaki docelowe w oryginalnych pozycjach, więc wynikiem będzie oryginalny ciąg. Służy do zakończenia pętli. Jeśli pętla nie jest jeszcze zakończona, wydrukuj akumulator z\0
zastąpionym spacją.Kiedy pętla się kończy,
-p
opcja ponownie drukuje pierwszy ciąg i program jest wykonywany.Postać docelowa jest wybierana w dość trudny sposób. W
${\<>}
przekształca odczytanej linii od standardowego wejścia do odniesienia, który jest następnie od razu dereferencjonowane, podstawione w wyrażeniu regularnym.\Q
Prefiks ucieka wszystkie znaki, które są wyjątkowe w regex (jak.
i*
). Jest\E
to domniemane.o
Modyfikator powoduje, że część wyszukiwania, aby nigdy nie zostać ponownie ocenione, ale po prostu powtarza się we wszystkich kolejnych meczów (co jest dobre, ponieważ nie ma nic na STDIN już).źródło
Python 2 ,
199193191 bajtówWypróbuj online!
Jeśli pętla może wyjść za pośrednictwem wyjątku:
Python 2 , 187 bajtów
Wypróbuj online!
źródło
(j[i]-i%3+1)%l
na dwa bajty.C (gcc) , 261 bajtów
Wypróbuj online!
źródło
JavaScript (Node.js) ,
197194 bajtówWypróbuj online!
Pobiera dane wejściowe w składni curry, tj
f(s)(c)
.Wcale nie jest idealny, ale potrzebuję JS. Wiele funkcji w funkcji.
źródło
Rubinowy ,
189 176 171 156 150 146 144137 bajtówWypróbuj online!
źródło
Galaretka , 33 bajty
Wypróbuj online!
Wywołaj jako funkcję. (link dynastyczny)
Znalazłem kilka 33-bajtowych alternatyw , ale bez rzeczywistej poprawy.
źródło