Wszyscy często słyszymy idiom „spacer po tablicy”, co oznacza „zamapuj funkcję na kolejnej tablicy”. Jednak muszę to zrobić (teraz!), Więc chcę, abyś przebiegł przez tablicę.
Jak mam biegać?
Wyobraź sobie, że to dziki paczka wilków za ciebie
Przebieganie przez tablicę jest jak przechodzenie przez jedną, tyle że można pominąć elementy. Tak, czasami jest bałagan, ale (ogólnie) działa. „Które elementy są pomijane?”, Możesz zapytać. Cóż, robi się to losowo. Przejdźmy przez przebieg tablicy!
- Niech
e
będzie bieżącym elementem. - Pozwól
random
wygenerować losowy pływak[0,1)
. Jeślirandom() < 0.5
, to przejdziesz do następnego elementu, a następnie do kroku 1. (Możesz wygenerować liczbę w inny sposób, o ile istnieje (idealnie) równa szansa na pominięcie i pozostanie. Np. Możesz użyć wybrać element z zestaw dwóch członków i wykonaj akcję w oparciu o wynik). - W przeciwnym razie wykonasz funkcję
f
nae
.
Cel
Biorąc pod uwagę tablicę / listę / ciąg znaków jak dowolny z nich A
i liczbę K
, przebiegnij przez tablicę, dodając K
do każdego dostępnego elementu. Wyjdź / zwróć tę tablicę. A
będzie zawierać tylko nieujemne liczby całkowite i K
zawsze będzie nieujemnymi liczbami całkowitymi. To jest golf golfowy , więc wygrywa najkrótszy program w bajtach.
Przypadki testowe (przykłady)
K, A => possible K'
[1, 2, 3, 4], 0 => [1, 2, 3, 4]
[1, 2, 3, 4], 1 => [1, 3, 3, 5]
[0, 0, 0, 0], 2 => [2, 0, 0, 2]
źródło
[0,1)
literówka?x
taką, że0 ≤ x < 1
.Odpowiedzi:
Pyth, 7
Wypróbuj tutaj
Wykorzystuje losowy wybór zamiast porównania zmiennoprzecinkowego, ale powinien być nie do odróżnienia.
Ekspansja:
Za pomocą zmiennoprzecinkowego:
Wypróbuj tutaj
źródło
Clojure,
4137 bajtówOdrzucono kilka bajtów, mnożąc je przez 0 lub 1 i upuszczając „if”. Podziękowania dla większości pozostałych podmiotów przesyłających!
źródło
for
jest krótszy niżmap
, patrz moja odpowiedź w celach informacyjnych :) Również pozwala uniknąć wewnętrznej anonimowej funkcji, więc zamiast uruchamiać kod(fn[a k]
, możesz użyć#(
.Galaretka,
987 bajtówOd
8
do7
dzięki @FryAmTheEggman .Wypróbuj online!
Wyjaśnienie
źródło
MATL , 11 bajtów
Wykorzystuje liczby losowe zmiennoprzecinkowe.
Wypróbuj online!
Wyjaśnienie
źródło
Japt, 6 bajtów
Sprawdź to
Wyjaśnienie
Domniemane wprowadzanie tablicy
U
i liczby całkowitejV
. Map (®
) nad tablicą i do każdego elementu dodajV
pomnożoną przezMq
, która losowo generuje jeden0
lub1
. Niejawne wyjście wynikowej tablicy.źródło
Rubinowy, 28 bajtów
źródło
Julia,
332927 bajtówJest to anonimowa funkcja, która akceptuje tablicę z wewnętrzną anonimową funkcją, która akceptuje liczbę całkowitą i zwraca tablicę. Aby go wywołać, przypisz go do zmiennej i wywołaj podobnie
f(x)(k)
.Generujemy tablicę o tej samej długości co tablica wejściowa złożona z zer i zer wybranych losowo z jednakowym prawdopodobieństwem. Mnożymy to przez wejściową liczbę całkowitą i dodajemy to do tablicy wejściowej.
Wypróbuj online!
Zaoszczędzono 2 bajty dzięki Dennisowi!
źródło
Python 2,
6058 bajtówTen program okazał się bardzo prosty. Nie ma tu wielu sztuczek golfowych, oprócz oczywistego „
from module import*
”, używania lambda zamiast zwykłej funkcji i ogólnego braku białych znaków. Poza tym jest to dość idiomatyczne. Gdybym pisał to naprawdę, prawdopodobnie zrobiłbym to w bardzo podobny sposób:A może coś bardziej wymyślnego:
Ale to wystarczy popisać się :)
To jest stara, 60-bajtowa wersja, kiedy wymagane było użycie zmiennoprzecinkowe dla losowości:
Dla każdego elementu listy dodaj
k*(random()<.5)
. Booleany Pythona oceniają na 0 i 1, więc dodaje 0 do wszystkich elementów, dla których warunek nie jest spełniony.random.random()
Zwroty Pythona napływają[0, 1)
, więc nie musiałem się tym martwić.źródło
e+choice([0,k])
JavaScript (ES6), 38 bajtów
źródło
PowerShell v2 +, 34 bajty
Pobiera odpowiednio dane wejściowe
$a
oraz$k
tablicę i liczbę całkowitą. Następnie wykonujemy pętlę przez tablicę i każda iteracja pętli generuje bieżący element plus$k
czasy,(random 2)
które zostaną wykonaneGet-Random -Maximum 2
(tj. A0
lub a1
). Wszystkie są pozostawione w potoku i wyprowadzane jako niejawna tablica.źródło
CJam, 10 bajtów
Oczekuje tablicy i liczby na górze stosu w tej kolejności i zastępuje je nową tablicą.
Sprawdź to tutaj.
źródło
php 71 bajtów
źródło
k (12 bajtów)
na przykład
Mówiąc bardziej ogólnie, gdzie
f
można podać jako argument za 16 znakówna przykład
źródło
Python 3
15211098 bajtówTo jest moje pierwsze rozwiązanie do gry w golfa, więc nie znam żadnych sztuczek. Przetestowałem to za pomocą głównej funkcji z przypadkami testowymi. Rozmiar pliku to tylko ta funkcja.
Podziękowania dla @ Cᴏɴᴏʀ O'Bʀɪᴇɴ za porady dotyczące usuwania białych znaków. Dodatkowe pochwały dla @undergroundmonorail za porady, które pozwoliły zaoszczędzić 12 bajtów.
źródło
import *
,a(x, y)
,x[ptr]=z+y
, itd. Można też wymienić 4 spacje z jednego miejscax[ptr]=z+y
w tym samym wierszu,if random()>0.5
aby zapisać 3 bajty białych znaków. W Pythonie 20.5
można zapisać jako.5
zapisanie bajtu, ale nie wiem czy to prawda w Pythonie 3. W przypadku zmiany nazwyptr
dop
ciebie będzie zaoszczędzić 6 bajtów we wszystkich. Jesteś też w systemie Windows? Windows przechowuje nowe wiersze jako dwa bajty, ale ponieważ python nie dba o to, czy nowy wiersz ma jeden bajt, czy dwa, można go policzyć jako 1, dzięki czemu obecne rozwiązanie ma tylko 103 bajty. Przy okazji, witamy w PPCG :)Clojure, 32 bajty
Dziękuję Davidowi za
rand-int
pomysł, zdecydowanie krótszy niżif(>(rand)0.5)
podejście. Tutajfor
bijemap
.źródło
Oktawa, 28 bajtów
Próbka uruchomiona na ideone .
źródło
05AB1E , 10 bajtów
Kod:
Wypróbuj online! .
źródło
Java, 84 bajty
Nie golfił
Notatki
return A;
. Typ zwrotu musiałby zostać zmieniony zint[]
navoid
. Nie oszczędza to jednak dodatkowych bajtów, ponieważ pomiędzyvoid
i jest potrzebne dodatkowe miejscer
.Krótsza wersja (jak wspomniano w nocie), 75 bajtów
Wynik
źródło
Mathcad, bajty
Nie ma jeszcze formalnego liczenia bajtów jako protokołu zliczania Mathcada, który ma zostać jeszcze ustalony.
źródło
Java
1081078582 bajtów14 bajtów zapisanych dzięki @TimmyD
źródło
main
,String[]
,int[]
, i zapisz kolejne kilka bajtów zmieniającnextFloat()>0.5
sięnext(1)==0
.new java.util.Random().nextFloat()
sięMath.random()
, ponieważ jest o wiele krótszy.s
, tylkoi
metoda ma typ zwracany,void
ale próbujesz zwrócićint[]
. Brakuje również średnikareturn s
.Perl 5 , 30 + 1 (-a) = 31 bajtów
Wypróbuj online!
źródło