Zaprogramuj najkrótszy kod, który obliczy średni BPM (liczbę uderzeń na minutę) przy użyciu 8 punktów danych czasu, który upłynął. To jest mój pierwszy post i nie widziałem podobnego pytania. Ponieważ jestem fanem gier rytmicznych, fajnie byłoby mieć małe, poręczne narzędzie do obliczania BPM przy użyciu własnej klawiatury i własnego wyczucia rytmu (jeśli masz taki ...)
Wyzwanie
- Wszystkie dane wejściowe muszą być pojedyncze. (tzn. naciskając tylko „enter” jako „input”)
- Twój program musi mieć co najmniej 9 danych wejściowych. (Aby utworzyć 8 punktów danych czasu minionego.)
- Twój program powinien wypisywać BPM naciśnięć klawiszy zaokrąglonych do 2 miejsc po przecinku. (tj. 178,35)
- Czas zaczyna się od pierwszego wejścia. Nie uruchamia się programu
To jest golf golfowy , więc wygrywa najkrótsza odpowiedź.
Przykład wejścia i wyjścia
Podaj co najmniej jedno przykładowe wejście i wyjście. Upewnij się, że pasują one do twojego opisu tego, jak powinny wyglądać dane wejściowe.
Wkład:
> [Enter-Key]
# User waits 1 second
... 7 more inputs
> [Enter-Key]
Wydajność:
> 60
Obecny zwycięzca to KarlKastor w 22 bajtach przy użyciu Pyth
Mimo że zwycięzca używał Pytha, odpowiedź Matlaba była znaczącą odpowiedzią.
Odpowiedzi:
Pyth , 22 bajty
(tak, jest wiodąca przestrzeń)
Wejście to prasy „enter”.
Jeśli dozwolone są dodatkowe dane wyjściowe, mogę usunąć spacje i uzyskać wynik 20 bajtów.
wyjaśnienie
źródło
MATLAB / Octave,
58 5655 bajtówDzięki @LuisMendo za -1 bajt!
Musisz nacisnąć enter 9 razy. (Działa również w Octave.)
Tutaj widzisz to w akcji, lewy MATLAB, prawy oktawowy:
źródło
round(.,2)
czy nie działa, czy też w nowszych wersjach?JavaScript (ES6),
7774 bajtówTworzy
onclick
zdarzenie wwindow
obiekcie globalnym . Wysyłaj rytmy, klikając dowolne miejsce w oknie.Test Snippet
Pokaż fragment kodu
źródło
Python 3,
939281 bajtówZaoszczędź 11 bajtów dzięki Felipe .
źródło
print('%.2f'%(480/(b-a)))
iprint(f'{480/(b-a):.2f}')
(python3.6 +), ale oba mają tę samą liczbę bajtówBash + typowe narzędzia Linux, 58
źródło
JavaScript,
100,84dzięki Powelles , 82 bajty dzięki Justin MarinerPokaż fragment kodu
źródło
Date.now()
zamiastnew Date().getTime()
i48e4
zamiast480000
.(a=alert)()
przy pierwszym użyciu, a następnie późnieja()
.48e4
i instanciate i nazywająalert
siebie:(a=alert)()
.s
na używanieDate.now()
i upuścić.getTime()
później. Następnie możesz użyć aliasuDate.now
na krótszą nazwę. Inicjałz=
nie jest potrzebny, ponieważ funkcja nie jest wywoływana rekurencyjnie. Do 69 bajtów tutajJava 1.5+,
345339361337 bajtów-34 bajty dzięki Michaelowi za wskazanie, że zapomniałem naprawić import
Słucha użytkownika, gdy naciska klawisz spacji. Następnie, gdy użytkownik naciśnie go 9 razy, drukuje z powrotem bieżący BPM:
Obraz ma komunikaty debugowania nieobecne w kodzie golfowym.
Nie golfowany:
Trochę zabawy, aby spróbować uzyskać najlepszy wynik ...
źródło
String[]a) {new java
2027.03
BPM xD nieznacznie zmodyfikował kod w celu lepszego testowaniaC # (.NET Core),
193206189186155143137 137 bajtów-47 bajtów dzięki TheLethalCoder
-4 bajtów dzięki Nazar554
-16 bajtów dzięki Lucowi
-2 bajty dzięki Kamilowi Drakari
Dodano również do liczby bajtów:
Cały program:
źródło
+""
lub nawet zwrócenie podwójnej wartości byłoby w porządku.namespace System.Diagnostics{}
jest prawdopodobnie krótszy, ale używasz go tylkoDiagnostics
przyw
tak pełnych kwalifikacjach, że prawdopodobnie też jest krótszy. Pamiętaj, że należy uwzględnićusing System;
w liczbie bajtówConsole
połączenia.540000.0
z5.4e5
(end-start).Milliseconds
ustawiłeśend
istart
wykonałeśDateTime.Now
.8/TimeSpan.TotalMinutes
zamiast54e4/TimeSpan.TotalMilliseconds
. Ponadto poprzez szybkie sprawdzenie za pomocą „Math.Round (wartość, 2)” zamiastvalue.ToString("n2")
wydawało się, że uratował kilka znaków, częściowo dlatego, że potrzebował mniejszej liczby nawiasówC ++, 150 bajtów
źródło
#define
i zamiast tegovoid f(){for(int i=0,auto s=clock();i++<9;){getchar();}std::cout<<round(6000/(double(clock()-s)/8000))/100;}
#define G;getchar()
a następnie zmienićclock();G
naclock()G
?round
.Python + przekleństwa, 122 bajty
Wymaga
curses
załadowania modułu.-9 bajtów dzięki Felipe Nardi Batista
źródło
vba, 57
naciśnij enter lub kliknij OK w oknie komunikatu.
źródło
Python 3 , 74 bajty
Wypróbuj online!
To da ci głupie liczby w TIO, ponieważ obsługuje wszystkie wejścia naraz, ale działa.
timeit()
zwraca czas wykonania instrukcji'input()'
w sekundach z wyłączeniem parametru setupinput()
. TIO z opóźnieniem 1 s na wejście do weryfikacji.źródło
Java 8,
180135 bajtów-45 bajtów dzięki @SocraticPhoenix sugerującym użycie
System.in
bezpośrednio.Anonimowa funkcja lambda z nieużywanym argumentem, który musi być przypisany do funkcjonalnej metody interfejsu, która wyrzuca an
Exception
(przykład poniżej). Odczytuje z konsoli; uderzenia są wysyłane przez naciśnięcie enter.Ungolfed z otaczającym kodem testowym
źródło
System.in
?System.in.read()
do blokowania, aż do otrzymania danych wejściowych. Dzięki! Zaktualizuje odpowiedź.C #, 117 bajtów
Istnieje już odpowiedź w języku C # (.NET Core), na której opiera się ta. Dodano interpolowany ciąg (którego brakuje .NET Core) dla danych wyjściowych i ogolono niektóre bajty za pomocą długiej tablicy zamiast DateTime.
Wersja humanitarna
źródło
R,
7984 bajtówDziała tylko przy użyciu enter, ponieważ natychmiast zakończy skanowanie. Jawnie używa
print
swojegodigits
argumentu do obsługi zaokrąglania.źródło
Rubinowy, 58 bajtów
źródło