Wkład:
Dwa ciągi znaków (UWAGA: kolejność wprowadzania jest ważna).
Wydajność:
Oba słowa / zdania zaczynają się od linii z jedną pustą linią między nimi. „Chodzą” poziomo „obok siebie”. Ale kiedy mają tę samą postać w tej samej pozycji, krzyżują się, a następnie idą „obok siebie”.
Mylące mówisz? Podajmy przykład:
Dane wejściowe: Words crossing over
i Ducks quacking
:
Word quack n
s i g
Duck cross n over
Zasady konkursu:
- Zawsze najpierw wracamy idąc po linii prostej po „przekroczeniu”, zanim będziemy mogli przejść ponownie (patrz przypadek testowy powyżej {1} - gdzie
ing
jest równy, ale po przekroczeniui
musimy najpierw wrócić iść prosto (w ten sposób ignorującn
), zanim znów będziemy mogli przejść dalejg
). - Wejścia mogą mieć różną długość, w którym to przypadku dłuższy przechodzi w linii prostej (patrz przypadki testowe 1, 2, 4 i 6).
- Oba wejścia mogą być takie same (patrz przypadek testowy 3).
- Dane wejściowe nie będą zawierać tabulatorów ani nowych wierszy.
- Spacje są ignorowane jako znaki, które są takie same (jak przypadek na krawędzi) , w którym to przypadku następny (niebędący spacją) znak po nim - jeśli w ogóle - przecina się (patrz przypadki testowe 3, 5 i 6).
- Wejścia nie mogą mieć żadnych sąsiednich (spacji) znaków w tej samej pozycji, w którym to przypadku oba po prostu idą w linii prostej w poziomie (patrz przypadki testowe 2).
- Nawet jeśli pierwszy znak jest równy, zawsze zaczynamy od dwóch linii od siebie (patrz przypadki testowe 3 i 6).
- Końcowe spacje i pojedyncza nowa linia są opcjonalne.
- Możesz założyć, że dane wejściowe będą zawierać tylko drukowalne znaki ASCII (z wyjątkiem nowych wierszy i tabulatorów).
- Wejścia są rozróżniana, więc
A
ia
nie są równe, nie będzie przechodzić (patrz przypadek testowy 7). - Obie długości wejściowe zawsze będą wynosić co najmniej 2.
- Dane wejściowe i wyjściowe mogą być w dowolnym rozsądnym formacie. Może być pojedynczym ciągiem z nowymi wierszami; tablica / lista łańcuchów; wydrukowano do STDOUT; Tablica znaków 2D; itp.
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:
1. Input: "Words crossing over" & "Ducks quacking"
1. Output:
Word quack n
s i g
Duck cross n over
2. Input: "bananas" & "ananas"
2. Output:
bananas
ananas
3. Input: "I see my twin!" & "I see my twin!"
3. Output:
I e y w n
s e m t i !
I e y w n
4. Input: "Is the weather nice?" & "Not really, no.."
4. Output:
Is th ally, no..
e
Not r weather nice?
5. Input: "Codegolf & Programming Puzzles" & "The golfer might solve puzzles"
5. Output:
Code o f & Programming P z l s
g l u z e
The o fer might solve p z l s
6. Input: "Can you turn the lights off?" & "Can you try to solve this?"
6. Output:
C n o urn the ve s off?
a y u t l t
C n o ry to so igh his?
7. Input: "one Ampere" & "two apples"
7. Output:
one Am les
p
two ap ere
8. Input: "Words crossing" & "Words Quacking"
8. Output:
W r s cross n
o d i g
W r s Quack n
Węgiel drzewny , 69 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
źródło
Python 2 ,
217210 bajtów-1 bajt dzięki oficjalnemu
Wypróbuj online!
źródło
s=' '
Haskell,
142138 bajtówWypróbuj online!
Jak to działa:
źródło
g 0
. Jeśli chodzi o brakujące słowo: zmienna „a” jak w „o nazwie a”, ale to rzeczywiście mylące, więc przeredagowałem to.a
. :) Osobiście używama
w moich wyjaśnieniach, wskazując zmienne, chociaż zwykle jest to dość jasne bez. Dzięki za wyjaśnienie, i rzeczywiście spodziewałem się dość łatwego rozwiązania problemu.'
zastąpieniem zaznaczenia wstecznego) w komentarzu, co chciałem powiedzieć… (Więc używam zaznaczania wstecznego wokół zmiennych, wewnątrz moich bloków kodu.)JavaScript (ES6), 112 bajtów
Nie golfowany:
Przypadki testowe:
Pokaż fragment kodu
źródło
APL (Dyalog) , 50 bajtów
Wypróbuj online!
⍵⍀⍨¯1*⍳4
daje macierz:(kropki oznaczają spacje). Jego kolumny będą obracane o różne kwoty, więc pierwsze trzy rzędy będą wyglądały jak pożądany wynik - stąd
3↑
blisko początku. Reszta algorytmu oblicza wielkości obrotu.W obrębie parens:
3↑⍵
tworzy matrycę podobną doi
2=⌿
porównuje swoje rzędy parami, tj. pierwszy ciąg vs drugi ciąg i drugi ciąg vs rząd wszystkich spacji.Interesuje nas, gdzie pierwsze jest prawdziwe (1), a drugie fałszywe (0), więc zmniejszamy za pomocą,
>⌿
aby uzyskać wektor boolowski o nazwiea
.Teraz na każdym odcinku 1 s musimy wyzerować parzyste zdarzenia, ponieważ nie mogą wystąpić dwa skręty obok siebie. Najpierw otrzymujemy numerację:
przez luźno mówiąc, zastępując
a[i]
za[i]*max(a[i-1]+1, a[i])
aż wynik ustabilizuje:{⍵⌈a×1+1,¯1↓⍵}⍣≡
i bierzemy ten mod 2:2|
Teraz wiemy, gdzie dojdzie do zwrotów akcji. Kopiujemy każdy
1
w lewo -2∨/
(parami „lub”):i obliczyć sumy częściowe -
+\
To daje nam wartości obrotu kolumny, których potrzebowaliśmy na początku. Implikowany jest Modulo 4.
źródło
Perl 5 , 211 bajtów
Wypróbuj online!
# Perl 5 , 234 bajtównaprawiono błąd, na który zwrócił uwagę Kevin
Wypróbuj online!
źródło
"Can you turn the lights off?" & "Can you try to solve this?"
, wydaje mi się,Modification of non-creatable array value attempted, subscript -1 at .code.tio line 1, <> line 2.
że pojawia się błąd: czy to błąd, czy robię coś nieprawidłowego? Oto TIO.05AB1E , 31 bajtów
Port odpowiedzi JET @ETHproductions , ale z dwiema drobnymi różnicami:
1) Biorę dane wejściowe jako listę znaków 2D zamiast listy ciągów.
2) W
counter_variable
05AB1E jest domyślnie 0, zamiast 11 (lub 3) jakB
w Japt, więcNĀ
jest dodawany jako dodatkowe sprawdzenie wewnątrz mapy (i w prawo zamiast w lewo).Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
źródło