Zauważyłem, że licznik kilometrów mojego samochodu wyniósł 101101, kiedy dzisiaj zacząłem pracować. Co jest fajną liczbą, ponieważ jest binarna (i palindromem, ale to nie jest ważne). Teraz chcę wiedzieć, kiedy następnym razem będę miał odczyt binarnego licznika kilometrów. Nie mogę odczytać licznika przebiegu podczas jazdy, ponieważ byłoby to niebezpieczne, więc będzie musiał być binarny, kiedy będę w pracy lub w domu.
W drodze do iz mojego biura jest naprawdę duży ruch, więc muszę codziennie wybierać inną trasę.
Na potrzeby tego wyzwania dzień jest podróżą w obie strony i zaczyna się od mojej dojazdy do pracy.
Musisz wykonać wstępny odczyt licznika przebiegu i sekwencję 10 elementów reprezentującą liczbę mil w każdą stronę. Ta sekwencja powinna być powtarzana aż do binarnego odczytu licznika przebiegu. Następnie powinieneś podać liczbę dni, które upłyną, zanim przejdziemy do odczytu binarnego.
Zarówno przebieg trasy, jak i odczyt licznika przebiegu będą dodatnimi liczbami całkowitymi. Liczba dni będzie równa x
lub x.5
, więc wynik liczenia dni musi obsługiwać zmiennoprzecinkowe przez pół dnia. Jeśli liczba dni jest liczbą całkowitą, nie trzeba podawać wartości .0
. Drogomierz zawsze ostatecznie osiągnie stan binarny.
Wszelkie formy wejścia / wyjścia są dopuszczalne, a standardowe luki są niedozwolone.
Przypadki testowe:
101101, [27, 27, 27, 27, 27, 27, 27, 27, 27, 27] == 165.0
1, [13, 25, 3, 4, 10, 8, 92, 3, 3, 100] == 22.5
2, [2, 3, 1, 2, 7, 6, 10, 92, 3, 7] == 2.0
Odpowiedzi:
Galaretka,
221716 bajtówWypróbuj online!
Jak to działa
źródło
JavaScript,
6863616052 bajtów5 bajtów taniej dzięki @ETHproductions .
2311 !! bajty wyłączone dzięki @NotthatCharles .Przetestuj tutaj.
źródło
(i+=a[++m%10])
zadziała?r
ani wm
ogóle (powinny domyślnie mieć wartość null, tj. 0)m=0
inicjalizator i zwiększając wartość po modulo (m++%10
) ... w którym momencie możesz po prostur
całkowicie upuścić . Cała metoda jest wtedy w niskich 50.MATL ,
292625 bajtówFormat wejściowy to
EDIT (10 czerwca 2016): Tekst Link
v
autorstwa&v
( 26 bajtów ) w celu dostosowania się do zmian w językuWypróbuj online!
źródło
Lua, 108 bajtów
Po raz pierwszy użyj pętli repeat..until w codegolf!
Nie golfił
Po pierwszej pętli
o
będzie miała część dziesiętną, ponieważtonumber
musiałem ją usunąć ... I aby dodać ją do pierwszego przypadku, dlatego łączę ją z"."
.źródło
Java, 112
milbajtówźródło
05AB1E , 31 bajtów
Kod:
Jakoś kod nie przestaje działać (i nie wiem, dlaczego). Najwyraźniej zapomniałem, że zamiast 2 działają trzy pętle, więc nadal byłby w nieskończonej pętli ...Wypróbuj online!
źródło
PowerShell,
8473675957 bajtówPobiera dane wejściowe
$a
i$b
oczekuje, że$b
będzie to wyraźna tablica przebiegów (np.\binary-car.ps1 1 @(13,25,3,4,10,8,92,3,3,100)
.). Następnie wprowadzamy pętlędo
/until
. Każdą iterację zwiększamy$a
wraz z przebiegiem w$b
pozycji,$i++ % 10
tak aby stale pętli w tablicy. Rozpocznie się od zera, ponieważ dla pierwszej pętli$i
nie jest inicjowana, a więc ocenia na$null
, co jest równoznaczne0
w tym kontekście, i dopiero po tej ocenie++
.Następnie
until
instrukcja sprawdza, czy nasz numer jest tylko0
i1
, najpierw przez-replace
zliczenie wszystkiego1
z niczym, odrzucając tę liczbę jako liczbę całkowitą+
, a następnie biorąc wartość logiczną - nie!
. Jeśli okaże się prawda, zakończymy pętlę, wyjście$i / 2
i zakończymy program.Wyjaśnienie dotyczące pętli warunkowej - w programie PowerShell dowolna niezerowa liczba całkowita jest taka sama
$true
, jak każdy niepusty łańcuch$true
. Na przykład231145
(liczba całkowita) zmieni się na"2345"
(ciąg) po znaku-replace
, który będzie rzutowany2345
na liczbę całkowitą jako (liczba całkowita),!
z których jest$false
. Jednak101101
(liczba całkowita) zmieni się na"00"
(ciąg), który będzie rzutował jako0
(liczba całkowita),!
z których jest$true
. Jeśli nie mają+
,"00"
będzie!
do$false
ponieważ jest to niepusty ciąg.Edycja - Zapisano 11 bajtów poprzez zamianę równości na długość dla ściśle zerowego
Edycja 2 - Zapisano kolejne 6 bajtów, zdając sobie sprawę, że
$b.count
zawsze będzie10
...Edytuj 3 - Zapisałem kolejne 8 bajtów, używając do / do zamiast
Edycja 4 - Jeśli obiekt będący
-replace
d jest liczbą całkowitą, nie potrzebujesz cudzysłowów, oszczędzając kolejne 2 bajtyźródło
Ruby, 58
Nic specjalnego. Tylko cykl ...
źródło
->s,a,i=0{a.cycle{|e|i+=0.5;break i if/[2-9]/!~'%d'%s+=e}}[1, [13, 25, 3, 4, 10, 8, 92, 3, 3, 100]]
Lub ...f=->s,a,i=0{a.cycle{|e|i+=0.5;break i if/[2-9]/!~'%d'%s+=e}}; f[1, [13, 25, 3, 4, 10, 8, 92, 3, 3, 100]]
Mathematica, 92 bajty
Tak. Dane wejściowe to licznik kilometrów i lista czasów. Dane wyjściowe to liczba dni.
źródło
PHP,
10298Wersja bez golfa
Powiadomienia PHP mogą być usuwane za dodatkową opłatą 4 znaków
$d = 0;
w wersji golfowej.Przykład
źródło
if
, usunięcie 0 z0.5
i usunięcie|
między 1 a 0 w wyrażeniu regularnym pozwala zaoszczędzić 4 bajty.function f($i,$s){while(1)foreach($s as$v){$d+=.5;$i+=$v;if(preg_match('/^[01]+$/',$i))return$d;}}
Pyth,
363230 bajtówWypróbuj tutaj!
Wyjaśnienie
źródło
C Sharp, 180.
Drogi panie C # jest długi.
źródło