Zadanie:
Twoim zadaniem jest stworzenie programu, który, biorąc pod uwagę liczbę nici i liczbę iteracji warkocza, powie, gdzie idzie każda nić. Zasady są następujące:
- Liczba pasm będzie zawsze nieparzysta i będzie wynosić od 3 do 6000 (włącznie)
- Kiedy zaczniesz, nici zostaną podzielone na 2 (prawie) równe pęczki,
left
orazright
.left
Będzie miał jeszcze jedną nić po uruchomieniu.
Dla wejścia 7:
/ / / / \ \ \
1 2 3 4 5 6 7
- Podczas każdej iteracji najbardziej zewnętrzna część boku z większą liczbą pasm zostanie umieszczona na środku w kierunku przeciwnym. Środek jest zdefiniowany między przeciwnych nici przeciwległych:
////middle\\\
.
1 iteracja wejścia 7 (nić 1 została przesunięta na środek):
/ / / \ \ \ \
2 3 4 1 5 6 7
Przykład:
Wejście:
3 4
Obliczenia:
1 2 3
\
2 1 3
/
2 3 1
\
3 2 1
/
3 1 2
Wynik:
3 1 2
Zasady:
- Nie trzeba wyświetlać ukośników dla kierunku nici, tylko liczby.
- Musisz tylko wyświetlić liczby po ostatniej iteracji.
- Twój wynik to rozdzielone spacjami identyfikatory pasm
- Dane wejściowe będą miały postać:
strands [space] iterations
- Liczba pasm zawsze będzie nieparzysta, a 3 <= x <= 6000
- To jest kod-golf , więc wygrywa najkrótszy kod!
11 2
byłby2345611178910
?123 -> 213 -> 231 -> 321 -> 312
.Odpowiedzi:
GolfScript, 33 znaki
Dane wejściowe należy podać na standardowym wejściu.
Przykłady (możesz przetestować online ):
źródło
Python: 179
240, 152 znakówPo pierwsze, 179
W przypadku
N
nici ii
iteracji ta odpowiedź wykorzystujeO(1)
przestrzeń iO(N)
czas. Po prostu obliczam pozycję końcową każdego pasma, nigdy nie iterując po pozycjach pośrednich!duża edycja: przejrzałem tę odpowiedź, zmieniając warunkową na algebrę logiczną. Napisałem też obszerne wyjaśnienie, jak to działa. TL; DR: wzory formalne, podział modulo.
Teraz 152
To jest bardziej rozsądny golfowy python. (edycja: dzięki Alexowi Thorntonowi za edycję od 165 do 152)
źródło
l
iv
zmienne oraz zmianęinsert
do przypisania plasterka.Python 2 (109) / Python 3 (121)
Python 2
Python 3
Kod musiał zostać przekupiony przez Python 2, aby pokazać zalety gry w golfa w porównaniu do Pythona 3: zakresy są listami, podział zaokrągla w dół do liczby całkowitej, druk nie rozpoczyna nowej linii. Dziwne
0-i%2
jest, ponieważ-i%2
ocenia jako(-i)%2
.Prawdopodobnie istnieje bardziej wydajne podejście niż iteracja, a mianowicie bezpośrednie obliczanie każdego wyniku końcowego. Operacja oplatania ma okres 2 * s, więc nie może być tak skomplikowana.
źródło
Ruby, 105
Po prostu dużo manipulacji zestawem. Pchaj, pop, cofaj i przesuwaj! Próbowałem nie konwertować danych wejściowych na liczby całkowite, ale dodało to około 20 znaków.
l
ir
(left
iright
) są kolejkami „wątkowymi”.right
jest odwrócony, więc zaczynamy ciągnąć z zewnątrz.t
orazf
(to
ifrom
) zacząć jakoright
ileft
, ale w miarę upływu czasu wymieniamy je, dzięki czemu zawsze możemy przesunąć ostatni „wątek”from
i przesunąć go doto
(f,t=t<<f.shift,f
). To oszczędza dużo miejsca.Następnie po prostu cofamy
right
na końcu.Dziennik zmian:
2.2 105 o tak, mapa może zająć proc
2.1 108 I właściwie, po prostu przerzucaj rzeczy w ramach manipulacji.
2.0 116 nie używają tej tymczasowej tablicy. Zamiast tego użyj dwóch zmiennych wskaźnikowych, którymi możemy manipulować i ciągle przekierowywać. Następnie wyświetl tylko koniec
1.0 123 wstępny pomysł
źródło
Java, 270 znaków
grał w golfa:
bez golfa:
Uruchom online
źródło