Wyobraź sobie następujące diagramy jako zestawy pionowych rur krzyżujących się.
1 2 1 2 1 2 3 4
\ / \ / \ / \ /
X | | |
/ \ / \ / \ / \
2 1 1 2 | X |
\ / \ /
X X
/ \ / \
3 1 4 2
Na schemacie najbardziej po lewej stronie 1
i 2
przesuwają się po swoich odpowiednich ukośnikach, krzyżują się X
i wychodzą po przeciwnych stronach od miejsca, w którym zaczęli.
To ten sam pomysł na środkowym schemacie, ale |
oznacza, że ścieżki się nie krzyżują, więc nic się nie zmienia.
Skrajnej prawej przedstawia schemat bardziej złożona rurka trasowania permutacji 1 2 3 4
się 3 1 4 2
.
Cel
Twoim celem w tym golfowym wyzwaniu golfowym jest narysowanie tych „schematów trasowania rur” z uwzględnieniem permutacji takiej jak 3 1 4 2
. Zwycięży najkrótszy program w bajtach.
Detale
- Dane wejściowe pochodzą ze stdin jako dowolnej permutacji liczb od 1 do n oddzielonych spacjami, gdzie n jest dodatnią liczbą całkowitą. Możesz założyć, że wszystkie dane wejściowe są dobrze sformułowane.
Wyjście ze schematu routingu przechodzi na standardowe wyjście.
- „Upuszczenie” liczb od 1 do n w kolejności na górze schematu powinno spowodować, że permutacja wejściowa wyjdzie na dole. (Góra i dół to zawsze warstwy ukośników).
- Schemat nie musi być optymalnie mały. Może to być tyle poziomów, ile to konieczne, o ile jest poprawne.
- Schemat powinien zawierać tylko znaki
\/ X|
oraz znaki nowej linii (bez cyfr). |
należy zawsze używać na najbardziej oddalonych skrzyżowaniach, ponieważ używanieX
nie ma sensu.- Kilka początkowych lub końcowych spacji jest w porządku, pod warunkiem, że schemat jest poprawnie ułożony.
Przykłady
Dane wejściowe 3 1 4 2
mogą produkować (tak samo jak powyżej)
\ / \ /
| |
/ \ / \
| X |
\ / \ /
X X
/ \ / \
Dane wejściowe 1
mogą produkować
\
|
/
|
\
|
/
Dane wejściowe 3 2 1
mogą produkować
\ / \
X |
/ \ /
| X
\ / \
X |
/ \ /
Dane wejściowe 2 1 3 4 6 5
mogą produkować
\ / \ / \ /
X | X
/ \ / \ / \
źródło
X
połączyć się bezpośrednio|
ze sposobem/
? Do innegoX
?row of slashes
,row of X's and |'s
,row of slashes
,row of X's and |'s
, ... PDF.n
być większy niż 10?Odpowiedzi:
Python 2, 218
219220222224227243247252259261264Przyjąłem nieco inne podejście: znajduję wymiany potrzebne do sortowania danych wejściowych, a następnie odwracam je pionowo, aby uzyskać wymiany potrzebne do przekształcenia posortowanej listy w dane wejściowe. Jako dodatkowy bonus tego podejścia, może on przyjąć dowolną listę liczb i podać ścieżkę permutacji, aby zmienić rodzaj danych wejściowych na dane wejściowe.
Przykład:
Ulepszenia:
264 -> 261: Przełączana zewnętrzna pętla od do do chwili.
261 -> 259: Używany
f%2
zamiast(c^m)
, ponieważ w pythonie operatory arytmetyczne mają wyższy priorytet niż operatory bitowe.259 -> 252: Przełączana pętla wewnętrzna od do chwili. Połączone
i
ic
zmienne.252 -> 247: Zmieniono kompilację, a następnie odwrócono, aby po prostu budować w odwrotnej kolejności.
247 -> 243: ręcznie dodawano nowe linie zamiast łączenia.
243 -> 227: Przyjęto metodę generowania linii cięcia przez grc (dzięki grc!) I dodano s.
227 -> 224: Przeniesiono generowanie linii ukośnika na wewnętrzną pętlę while, aby usunąć a
%4
i uratować postać za pomocą rozszerzonego krojenia.224 -> 222: Usunięto m.
222 -> 220:
f%2+n%2
->f+n&1
220 -> 219:
| 1<n-1|
->|~i>-n|
(usunięto wiodące miejsce)219 -> 218: Połączone inicjalizacje o
o
is
i przeniesiony segment do końca.źródło
Python, 290
Postawiłem na dość podstawowe podejście, ale okazało się, że było trochę dłużej, niż się spodziewałem. Rozpatruje listę parami i decyduje, czy zamienić każdą parę. Jest to powtarzane dla każdego przecinającego się wiersza, dopóki lista nie pasuje do danych wejściowych.
Przykład:
źródło
HTML JavaScript,
553419Dziękuję @izlin i @TomHart za wskazanie moich błędów.
Przetestuj tutaj: http://goo.gl/NRsXEj
źródło
JavaScript - 395
378 jeśli nie wydrukuję liczb na wydruku, ale wygląda to znacznie lepiej i poprawia czytelność.
Sprawdź to tutaj . (z wersją bez
golfa ) wersja golfowa :
Wyjaśnienie
Najpierw zastępuję dane wejściowe numerem indeksu i zmieniam pierwszy wiersz z wynikami. Na przykład
Z tym podstawieniem mogę użyć algorytmu sortowania bąbelkowego, aby posortować 2,4,1,3 do 1,2,3,4, a wykres będzie najkrótszym możliwym, którego szukamy.
Jeśli masz jakieś pomysły, jak mogę zmniejszyć kod, po prostu skomentuj :)
Przykład
źródło
<br>
tagu i textarea tylko na jsfiddle, ponieważ wygląda znacznie lepiej. Alert nie ma czcionki o stałej szerokości, więc wynik wygląda źle. W mojej wersji golfowej używam alert i \ n. Czy twoja strona jest publiczna?Kobra - 334
344356360Działa poprzez przesunięcie każdego elementu na miejsce, zaczynając od lewej. Z tego powodu często generuje absurdalnie dużą (choć nadal poprawną) mapę ścieżki.
Przykłady:
źródło