Oczywiście sieć SE ma dużą wiedzę na temat tego, jak szanować w toalecie, ale dla tych z was, którzy potrzebują podsumowania, szacunek oznacza spłukiwanie toalety itp. Co najważniejsze, oznacza to korzystanie z kabiny tak daleko od innych, jak to możliwe.
Wyzwanie
Biorąc pod uwagę plan zestawu straganów ze wskazaniem, które z nich są używane jako ciąg, musisz zwrócić lub wydrukować z funkcji lub programu, w którym najbardziej szanowane miejsce do prowadzenia działalności jest.
Dane wejściowe
0 1 2 3 4 5 <- The stall number which is not actually visible in the input.
| | |-| |-|-| <- the stalls
Stragany są ponumerowane w porządku rosnącym od lewej do prawej. Zawsze będzie co najmniej jeden pusty stragan. Wejście może zawierać do 50 przeciągnięć. Możesz również wziąć dane wejściowe jako tablicę lub ciąg znaków 0
s i 1
s lub booleans, jeśli wolisz.
Stoiska w użyciu mają -
w nich (pomiędzy rurami).
Wyjście
Najbardziej szanowanym stoiskiem, na które należy przejść, jest ten, który jest średnio najdalej od używanych. Odległość między dwoma straganami jest wartością bezwzględną różnicy liczb nad nimi.
Żeby było jasne: znajdujesz średnią odległość od wszystkich straganów - nie tylko sąsiednich.
Musisz wydać najmniejszą liczbę najbardziej szacownych przeciągnięć, aby przejść do tego miejsca, które jest puste .
Przykłady
Input:
|-| |-| OR 101
Output:
1
Input:
| | |-| |-|-| OR 001011
Output:
0
Input:
|-| |-| | | | |-|-| OR 101000011
Output:
1
Input:
|-| | | | | |-|-| | | | | OR 100000110000
Output:
11
Input:
|-|-|-|-| | | | | | |-| OR 11110000001
Output:
9
Input:
|-| | OR 10
Output:
1
Input:
|-| | |-| OR 1001
Output:
1
To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach!
W odpowiedzi możesz użyć indeksowania opartego na 0 lub 1 - w zależności od tego, co wolisz; jeśli korzystasz z indeksowania 1, musisz to wyraźnie powiedzieć w swojej odpowiedzi.
[1,0,0,1]
jako przypadek testowy. Żaden z bieżących przypadków testowych nie weryfikuje poprawności zerwania więzi.101000011
zwraca 1 (zamiast 4 lub 5)?Odpowiedzi:
Galaretka ,
109 bajtówWykorzystuje indeksowanie 1. Wypróbuj online! lub zweryfikuj wszystkie przypadki testowe .
Jak to działa
źródło
Swift,
158, 157, 128,100 bajtówPobiera dane wejściowe ze
Array<Bool>
zmienneji
, zwraca odpowiedź z ostatniego wyrażenia.Edycja 1:
Zapisano bajt, konwertując na boole poprzez porównanie ciągów
Edycja 2:
Przerobiłem mój algorytm:
Edycja 3:
Wykorzystano nową regułę, która pozwala pobierać dane bezpośrednio z tablicy boolowskiej.
Nie golfowany:
źródło
Galaretka , 13 bajtów
1-indeksowany.
Wypróbuj online!
Algorytm
Naiwne wdrożenie pytania.
źródło
Java „tylko”
270 200 196 187 196 138 148146 bajtów!zaoszczędził
4 13niezliczonych bajtów dzięki Leaky Nun!1 bajt dzięki MichealGolfedBez golfa
dane wejściowe jako tablica boolowska, gdzie true oznacza otwarte przeciągnięcie.
źródło
a
.Ruby,
797876 +n
flaga = 77 bajtówDane wyjściowe jest indeksowane w oparciu o 0. Dane wejściowe to linia STDIN zera i jedynki.
źródło
0...~/$/
to niezła sztuczka. 👍🏻MATL , 14 bajtów
Wypróbuj online!
Wyjście jest oparte na 1.
Wyjaśnienie
źródło
Perl 84 + 3 (
-alp
flagi) = 87 bajtówPotrzebuje
-alp
flagi do uruchomienia. Pobiera na wejściu ciąg 1 i 0 oddzielone spacjami. Na przykład :Pamiętaj, że dodałem
$m=0
na początku, ale to tylko w celu przetestowania wielu wpisów.źródło
+7
:F'' alp
.-
nie są liczone.Matlab, 87 bajtów
Pobiera tablicę zer i jedynek; używa indeksowania 1.
Podobnie jak niektóre inne odpowiedzi maksymalizuje całkowity, a nie średni dystans.
Prawdopodobnie jest więcej golfa ...
źródło
JavaScript (ES6),
87868275 bajtówPobiera tablicę boolowską (prawda / fałsz lub 1/0). Nie ma sensu obliczać średniej odległości, ponieważ wszyscy używają tego samego wspólnego współczynnika, więc wystarczy obliczyć całkowitą odległość dla każdego przeciągnięcia i znaleźć pierwszy indeks najwyższego. Edycja: Zapisano 1 bajt, używając
*
zamiast&&
. Zaoszczędzono 5 bajtów poprzez ręczne znalezienie największej odległości na podstawie komentarza @Dendrobium. Zaoszczędzono 7 bajtów, ponownie wykorzystującu
jako akumulator pseudo-redukcyjny na podstawie komentarza @ edc65.źródło
a=>(x=0,a.map((o,i)=>x<(t=a.reduce((r,u,j)=>r+(b=i-j)*b*u*!o,0))&&(x=t,r=i)),r)
reduce
zamiastmap
- mmmms=>s.map((u,i)=>u||(s.map((w,j)=>u-=w*Math.abs(j-i)),u<x&&(x=u,r=i)),x=0)|r
1100011101
więzi przy2
i8
przy użyciu wartości bezwzględnej,8
przy użyciu kwadratu), ale nie ma to znaczenia, ponieważ wygląda na to, że zasady zostały wyjaśnione, a więzi są teraz rozwiązywane z najbardziej lewostronnym przeciągnięciem ...J, 27 bajtów
Tłumacz online .
źródło
Rubin,
8776 bajtówSzybko zrzuciłem ten pierwszy szkic, ale w międzyczasie Value Ink opublikowało już 80-bajtową odpowiedź Ruby ...
edycja: usunął niektóre bajty z pomocą Value Ink:
Jest to anonimowa funkcja, która pobiera tablicę wartości prawdy / fałszu, na przykład:
źródło
(r=0...a.size)
, a następnie map na tym, że zamiast przy użyciuwith_index
:r.map{|j|a[j]?(i-j).abs: 0}
. To powinno dać ci 78 bajtów.Mathematica, 53 bajty
Wykorzystuje indeksowanie 1 i przyjmuje dane wejściowe jako listę zer i jedynek.
źródło
JavaScript ES6 -
989591868488 bajtówEdycja: Wydaje się, że w przypadku remisu należy użyć przeciągnięcia w lewo. Kwadratowe odległości już nie działają, przywrócono do absolutnej odległości.
Nie golfowany:
Przebiegi testowe:
źródło
Lua,
165150 PaTo oszukuje trochę, wykorzystując fakt, że ogólnie rzecz biorąc, lua przekazuje do niej tabelę o nazwie arg zawierającą wszelkie dane wejściowe z wiersza poleceń.
Jestem trochę rozczarowany, że użyłem pętli for in, ale nie mogłem wymyślić mniejszego sposobu, aby to zrobić.
Ponadto, ponieważ zastosowano indeksowanie oparte na lua, 1.
Edytuj Snipped 15 bytes z marnotrawnego gsub.
źródło
C #, 127 bajtów
Łóżko testowe
źródło