Napisz funkcję (taką jak placeAt
), która pobiera tablicę nieujemnych liczb całkowitych i indeks, który jest nieujemną liczbą całkowitą. Powinien umieścić 1 przy danym indeksie, prawdopodobnie przesuwając inne wpisy o jedno miejsce, aby opuścić to miejsce, przy czym 0 oznacza puste miejsca.
- Jeśli wpis o pożądanym indeksie to 0, wypełnij go 1.
- W przeciwnym razie poszukaj najbliższego 0 po lewej stronie indeksu. Przesuwaj wpisy o jedno miejsce w lewo na 0, aby zrobić miejsce, a następnie wypełnij indeks 1.
- Jeśli po lewej nie ma 0, zrób to samo w prawo.
- Jeśli żadna z nich nie jest możliwa (tzn. Jeśli nie ma wartości 0), zwróć tablicę bez zmian.
Pozycje są indeksowane według 0. Nazwa funkcji może być dowolna.
Przykłady:
(Litery oznaczają dowolne dodatnie wartości całkowite.)
[a, b, 0, c, d, 0] placeAt 2 // output [a, b, 1, c, d, 0] place 2 is 0, just fill
[a, b, 0, c, d, 0] placeAt 3 // output [a, b, c, 1, d, 0] place 3 is filled, shift items left
[a, b, 0, c, d, 0] placeAt 0 // output [1, a, b, c, d, 0] place 0 is filled, can't shift left, shift items right
[a, b, 0, c, d, 0] placeAt 1 // output [a, 1, b, c, d, 0] place 1 is filled, can't shift left, shift items right
[0, a, b, 0, c, d, 0] placeAt 2 // output [a, b, 1, 0, c, d, 0] place 2 is filled, shift items left
[0, a, b, 0, c, d, 0] placeAt 4 // output [0, a, b, c, 1, d, 0] place 4 is filled, shift items left (notice you keep shifting up until a 0)
[0, 2, 0, 2] placeAt 3 // output [0, 2, 2, 1] place 3 is filled, shift items left
To wyzwanie dla golfa. Wygrywa najkrótszy wpis na koniec 9 dni.
0
?[0, 2, 0, 2] placeAt 3
czy produkcja jest legalna[2, 0, 2, 1]
? Czy kod musi być faktycznie wywoływaną funkcjąplaceAt
? Pamiętaj, że niektóre języki nie mają dokładnie takich funkcji. „Zgłaszanie wyjątku” może również nie dotyczyć niektórych języków; Sugeruję zezwolenie na wyjście wskazujące na błąd.[2, 0, 2, 1]
nie jest to legalne wyjście, ponieważ zawsze powinieneś przesunąć jak najmniej elementów i możesz nazwać funkcję, jak chcesz.Odpowiedzi:
JavaScript (ES6), 85
Przetestuj uruchomienie fragmentu kodu w dowolnej przeglądarce zgodnej z EcmaScript 6 (zwłaszcza Chrome nie MSIE. Testowałem na Firefoxie, Safari 9 może przejść)
(Znalazłem to, nie patrząc na żadną z pozostałych odpowiedzi, teraz widzę, że jest bardzo podobny do lodowiska. Ale dość krótszy. Prawdopodobnie nie otrzymam wielu pozytywnych opinii na ten temat)
źródło
splice
jest lepsze niż mój przecinekJulia, 122 bajty
Po prostu naiwna implementacja specyfikacji, aby zacząć.
Nie golfowany:
źródło
JavaScript (ES6), 98 bajtów
Prawie takie samo podejście, jak w mojej odpowiedzi CoffeeScript, ale jestem bardzo zwarty w celu zapisania
return
instrukcji:Wyjaśnienie
Aby ułatwić wyjaśnienie, nieco zmieniłem kod:
Oto kilka informacji na temat oceny zwarcia JS.
Próbny
W tej chwili ta wersja demonstracyjna działa tylko w Firefoksie i Edge dzięki zastosowaniu ES6:
źródło
f(['a', 'b', 0, 'c', 'd', 0], 2)
[a..b]
.f(['a', 'b', 0, 'c', 'd', 0], 1)
Rubinowy, 208 bajtów
źródło
.rindex 0
zaoszczędzić jeden bajt za każdym razem. Można również zaoszczędzić trochę bajtów przez zastosowanie proc zamiast metody, które nawet nie muszą być nazywany->a,i{...}
. If / elsif / elsif można prawdopodobnie skrócić za pomocą zagnieżdżonego operatora trójskładnikowego...?...:...?...:...
.Haskell, 119 bajtów
Przykład użycia:
Jak to działa: Podziel listę danych wejściowych w danej pozycji na lewą część
a
, element na samej pozycjix
i prawą częśćb
. Jeśli istnieje0
wa++x
, zrobić miejsce aż do pierwszego0
w odwrociea++x
. Jeśli istnieje0
wx++b
, producent tam pokój. Jeśli nie ma0
wcale, połącz wszystkie części bez zmian, aby ponownie uzyskać oryginalną listę.źródło
CoffeeScript, 96 bajtów
źródło
Python 2, 102 bajty
Oblicza indeks zera, który ma zostać usunięty, łącząc listę odwróconą do indeksu wstawiania z częścią po indeksie w normalnej kolejności, a następnie znajdując indeks pierwszego zera. Zero jest dodawane na końcu, aby uniknąć
ValueError
wyjątków, gdy nie zostanie znalezione zero. Następnie wystarczy usunąć, wstawić i zwrócić.źródło
R, 87 bajtów
Wyjaśnienie
Testy
źródło
C #, 265 bajtów
Gra w golfa (265 znaków)
Z białymi spacjami i wcięciami
Cały program
Przypadki testowe
źródło
([0, 'a', 'b', 0, 'c', 'd'], 2)
String[] Q, int P
doString[]Q,int P
.C, 154 bajtów
Przechodzi podane przypadki testowe, a jest wskaźnikiem do tablicy, l jest długością tablicy (mam nadzieję, że to nie psuje skrótu), i jest indeksem wstawki, a c jest używane wewnętrznie. Można to poprawić, łącząc lewe i prawe wyszukiwanie pętli.
Przykład
Nie golfił
Prosto i nie ma żadnych sztuczek poza deklaracją stylu K&R.
źródło