Niektórzy z was mogą znać sposób, w jaki zmienia się motocykl. Ale dla tych, którzy tego nie robią, wygląda to tak
6
5
4
3)
2)
N.
1
Teraz chcę wiedzieć, na jakim biegu jestem po kilku zmianach w górę iw dół. Program powinien działać od zera.
Przykładowe dane wejściowe:
V^^
Przykładowe dane wyjściowe:
2
Jak widać, zmniejszyłem bieg raz z N na 1 i dwukrotnie przerzuciłem na 2. bieg.
To jest golf golfowy. Najkrótsza odpowiedź w bajtach wygrywa.
Uwaga: Dane wejściowe mogą zawierać dowolne 2 znaki. Może być U i D dla wzlotów i upadków lub cokolwiek chcesz, to musi być ciąg znaków . Nie możesz zmienić biegu poza 1. lub 6. bieg. Jeśli jesteś na szóstej pozycji i ponownie przejdziesz na wyższy bieg, pozostanie na szóstej pozycji. Powodzenia!
Odpowiedzi:
JavaScript (ES6),
49484746 bajtówOczekuje:
1
na dół7
aż doSformatowane i skomentowane
Koła zębate są mapowane w następujący sposób:
Co pozwala nam łatwo sprawdzić ważność aktualnego sprzętu za pomocą:
Próbny
Pokaż fragment kodu
źródło
05AB1E ,
2220 bajtówWypróbuj online!
Wyjaśnienie
źródło
MATL,
322823 bajtów5 bajtów zapisanych dzięki @Luis
To rozwiązanie wykorzystuje
'2'
do zmiany biegu na wyższy i'0'
niższy.Wypróbuj w MATL Online
Wyjaśnienie
źródło
V ,
20, 15 bajtówWypróbuj online!
Dane wejściowe to ciąg znaków
h
(w górę) il
(w dół).Dzięki @nmjcman za uratowanie 5 bajtów i nauczenie mnie o funkcji vima, o której nigdy nie wiedziałem!
Gdybyśmy mogli założyć, że dane wejściowe nigdy nie wykraczają poza granice, byłoby to po prostu 9 bajtów:
Ale niestety nie jest to dozwolone.
Wyjaśnienie:
źródło
n
, a nie1
.Java 7,
106105103 bajtówWyjaśnienie:
Kod testowy:
Wypróbuj tutaj.
Wydajność:
źródło
Haskell,
595351 bajtówUżywa
0
w dół i2
w górę. Przykład użycia:Dzięki @xnor za zdjęcie 6 bajtów! Okazuje się też, że nie potrzebuję nazwy funkcji ani nawiasów, więc to kolejne 2 bajty.
źródło
read[c]-2
.g=
.g=
ponieważ jest jaśniejszeJavaScript (ES6),
4858 bajtówStosowanie
Przypisz ją do funkcji, a następnie wywołaj. Dane wejściowe to ciąg znaków zawierający znak zmiany biegu
1
na wyższy i zmiany0
biegu na niższy.źródło
f("001")
który powinien zwrócić N (bieg do 1, bieg poniżej 1, bieg do N)PHP 7.1, 71 bajtów
przesuwa się
$g
z -1 na 5, używa ujemnego przesunięcia struny dla pierwszego biegu.Uruchom z
-nr
, podaj ciąg przesuwający jako argument wiersza poleceń.źródło
Galaretka ,
1714 bajtówUżywa
6
w górę i0
w dół.Wypróbuj online!
Jak to działa
źródło
Rubinowy, 58 bajtów
Oczekiwanym wejściem jest „v” dla zmiany biegu na niższy i „^” dla zmiany biegu na wyższy
źródło
Przetwarzanie JS (zmodyfikowane) 121 bajtów
Bez golfa
Wypróbuj online!
Poszedłem z PJ, ponieważ dobrze to wiem. Jedynym problemem jest to, że wersja, której używam, jest bardzo ściśle wpisana. Nie mogę pominąć nawiasów i wielu innych sztuczek. To jest dość proste. Dane wejściowe powinny przejść do zmiennej
a
i zajmuje małe literyu d
. Program zapętla się, dopóki nie osiągnie końca łańcucha i każdej iteracji, którą sprawdza, aby sprawdzić, czy jest to au czy d. Jeśli tak jest i nie będzie próbował „przesunąć” przeszłości tam, gdzie to możliwe, przesunie się. Na koniec drukuję wyniki!źródło
The input should go into the variable a
Używanie wejścia zakodowanego na stałe nie jest domyślną metodą wprowadzania, zobacz tutaj .void f(String[] a){...}
To prawie 100 bajtów.k, 25 bajtów
Pobiera dane wejściowe jako ciąg znaków i używa ich
[
do zmiany biegów na niższy i]
wyższy, ponieważ są one dogodnie usytuowane.Przykłady:
źródło
GNU sed ,
8987 + 1 (flaga r) = 88 bajtówPonieważ sed nie ma żadnych liczb całkowitych ani operacji arytmetycznych, rozwiązanie jest osiągane przy użyciu tylko wyrażeń regularnych.
Działa poprzez przesuwanie wskaźnika
x
na podstawie każdego przesunięcia wejściowego, w lewo (dlaU
p) lub w prawo (dlaD
własnego), wzdłuż taśmy bez opakowania, która zawiera tylko komórki65432N1
. Odpowiedź na końcu to wartość w komórce po lewej stronie wskaźnika.Przykład uruchomienia: lub Wypróbuj online!
Wyjaśnienie:
źródło
GNU sed ,
7673 bajtówObejmuje +1 dla
-r
Wyjście jest jednomyślne, z wyjątkiem neutralnego, który jest nadal
N
(patrz ten konsensus ).Wypróbuj online!
Zasadniczo liczy się to w górę i w dół, a następnie konwertuje 1 na N i 0 na 1.
źródło
1
wartością początkową, jakoN
i niczym jako1
.s/$/1/;:;/1{6}/!s/^U(.*)/\11/;s/^D(.*)1/\1/;t;s/U|D//;t;s/^1$/N/;s/^$/1/
Rebol,
9693 bajtówNie golfowany:
Przykładowe użycie (w konsoli Rebol):
źródło
> <> , 35 bajtów
Entuzjastyczny fragment kodu, który zachęca do jazdy powyżej limitu prędkości.
Akceptuje dowolne dwa wejścia, których kod modulo 3 to 0 i 2, na przykład 0i 2.
Dla dodatkowej rybności polecam użycie <i >.
Objaśnienie:
Możesz spróbować tutaj !
źródło
SpecBAS - 102
Przesuwa indeks łańcucha w zależności od danych wejściowych i drukuje odpowiedni znak.
źródło
Pyth, 32 bajty
Wykorzystuje spację i znak nowej linii do przewijania w dół i w górę.
Wyjaśnienie
Jest prawie na pewno lepszy sposób na zwiększenie i wyjście.
źródło
CJam ,
2422 bajtówUżywa
(
w dół i)
w górę.Wypróbuj online!
Wyjaśnienie
źródło
Partia, 144 bajty
Pobiera dane wejściowe na STDIN, używając,
0
aby przejść na niższy bieg i6
przejść na wyższy bieg. Liczby te zostały wybrane, aby ułatwić zignorowanie obecnego sprzętu. Wreszcie, jeżeli narzędzie jest1
następnieN
drukowany jest inaczej0
przekształca się1
, a narzędzie jest drukowany.źródło
JavaScript ES6 bez ograniczeń,
136120 znaków136 znaków dla
V^
120 znaków dla
-+
źródło
Siatkówka , 65 bajtów
Używa
u
id
do wzlotów i upadków.Wypróbuj online!
Wyjaśnienie
Ten program działa z zachowaniem
1N23456
sekwencji instrukcji. Śledzi bieżący bieg, mając za sobą miejsce. Potem wymaga jednej instrukcji na raz, aż nie będzie już więcej.Zacznij od umieszczenia
1 N23456
przed wejściem. Poprzednia spacjaN
wskazuje, żeN
jest to bieżący bieg.Są to dwa etapy wymiany, zgrupowane razem i trwają do momentu, aż przestaną zmieniać ciąg:
Pierwszy obsługuje zmianę biegów w górę. Będzie szukał dowolnej liczby biegów po spacji, a następnie a
6
, a następnieu
(u
wskazuje instrukcję zmiany biegu na wyższy). Jeśli przed 6 znajdowały się znaki, zamienia spację znakiem bezpośrednio po nim, usuwau
i pozostawia nienaruszoną resztę ciągu. Ponieważ6
jest to obowiązkowe w meczu, zamieni przestrzeń tylko dowolną postacią przed6
. Nigdy nie zamieni się z6
.Drugi etap obsługuje zmianę biegów i działa podobnie. Opcjonalnie szuka postaci przed spacją, a następnie kilku innych biegów po zakończeniu
6
, a następnied
. Zamienia przestrzeń z postacią przed nią, usuwad
i pozostawia resztę nietkniętą. Jeśli spacja znajdowała się na początku łańcucha, przed znakiem nie było żadnego znaku, więc nie następuje zamiana.Po tym, jak nie można już wykonać żadnej z powyższych wymian, wszystkie zmiany biegów zostały zakończone. Linia jest oczyszczona ze wszystkiego oprócz sprzętu bezpośrednio po spacji. To jest ostatni bieg.
źródło
PowerShell,
1128785 bajtów$i=1;switch([char[]]$args[0]){'^'{if(5-gt$i){$i++}}'v'{if(1-le$i){$i--}}}'1N2345'[$i]
bez golfa
zaoszczędzono 25 bajtów, czytając wskazówki codegolfa PowerShell
zapisano 2 bajty, odwracając operatorów gt / le
źródło
Perl 6, 144 bajtów
Wierzę, że działa tak, jak powinno. Ulepszenia są mile widziane. Pierwszy raz używam Perla do czegokolwiek, ale uwielbiałem myśl o języku, więc musiałem spróbować.
źródło
Clojure, 74 bajty
Składa się na sznurku zmiany biegów, utrzymując indeks jako akumulator. Każda iteracja albo zwiększa, albo zmniejsza indeks, a następnie zaciska go do zakresu 0–6. Na końcu ciąg przytrzymujący koła zębate jest indeksowany i zwracany.
Zwraca postać Clojure reprezentującą bieżący sprzęt. Bieg 1 jest zwracany jako
\1
, a bieg „N” jest zwracany jako\N
.Wyjaśnienie przed golfem. Podążaj za liczbami, ponieważ nie odczytuje dobrze od góry do dołu.
źródło
Python 3,
6763 bajtówCałkiem proste rozwiązanie.
-4 bajty dzięki @ovs!
źródło