Dzieci, które uczą się liczyć, często znają biegi liczb, ale nie wydają się prawidłowo układać tych przebiegów.
Na przykład mogą powiedzieć:
1,2,3,4,7,8,9,10
Czasami dzieci zdają sobie sprawę, że pominęły niektóre liczby i wracają:
1,2,3,4,7,8,5,6,7,8,9,10
Jest to wyraźnie najlepszy wzór. Musimy je zidentyfikować.
Aby zidentyfikować te listy:
Identyfikujemy minimum
M
i maksimumN
listyPrzechodzimy przez listę. Jeśli bieżąca liczba jest większa lub równa dowolnemu członkowi listy po jej prawej stronie, usuwamy bieżący numer.
Jeśli pozostała lista zawiera wszystkie liczby od
M
doN
, to zwracamy prawdziwą wartość.
Możesz założyć, że twoja lista wejściowa będzie zawierać co najmniej 1 element. Możesz założyć, że wszystkie liczby całkowite będą nieujemne.
Przypadki testowe:
Prawda:
0
10
0 0 0
1 0 1
0 1 2 3 4 5 6 7 8 9 10
0 1 2 3 0 1 2 3
0 1 2 3 4 5 5
0 1 1 2 2 3
0 3 6 1 4 7 2 5 8 3 4 5 6 7 8
1 3 5 7 2 3 4 5 6 7
5 6 0 1 2 3 6 7 4 5 6 7
5 6 7 8
5 5 6 7 8
4 6 7 8 3 4 5 6 7 8
Falsy:
1 0
4 3 2 1
1 2 3 7 8 9
0 1 2 3 1 3
0 1 2 3 1 3 4
0 1 2 3 1 3 2 4
0 1 2 3 1 3 2 4 3
1 3 5 7 2 4 6 8
0 1 2 1 3 4 5 6
4 5 6 3 4 5
To jest gra w golfa , więc udziel odpowiedzi tak krótko, jak to możliwe!
1
dalszej linii). Usunąłbyś również każdy inny element (z wyjątkiem ostatniego 1), więc skończyłbyś z tym0 1
, co nie jest0 1 2 3 4 5
Odpowiedzi:
05AB1E , 5 bajtów
Nie jestem w 100% pewien, że to działa, ale przechodzi wszystkie testy i nie mogłem znaleźć żadnej sytuacji, w której się nie powiedzie.
Wypróbuj online!
źródło
Galaretka ,
109 bajtówWypróbuj online!
Jak to działa
źródło
ɓ
to stosunkowo nowa funkcja?«\
Moim zdaniem najbardziej interesująca jest tutaj część .Ruby ,
59 5441 bajtówWypróbuj online!
źródło
Python 2 , 81 bajtów
Wypróbuj online!
źródło
PHP ,
148130 bajtów-18 bajtów, dzięki @Christoph
Wypróbuj online!
źródło
$argn
zawsze ciągforeach
nie działa na nim. Możesz użyć,$argv
aby uzyskać tablicę jako dane wejściowe, ale uważaj, że zawsze zawiera ona nazwę pliku jako pierwszy element. Używać$m
i$n
tylko raz, dzięki czemu można zaoszczędzić dużo bajtów tworzących$b
wcześniej:$b=range(min($a),max($a));
. Obsada(bool)
jest całkowicie niepotrzebna.if($k>=$a[$s])$a[$i]=null;
do$k<$a[$s]?:$a[$i]=-1;
. Korzystanie odniesienie możemy to zrobić:foreach($a as$i=>&$k)
(+1 bajt) i$a[$i]
do$k
(-4 bajt). Co więcej, pozwala nam to upuścić,$s=$i
ponieważ możemy$i
teraz iterować bezpośrednio.$a=$argn;$b=range(min($a),max($a));foreach($a as$i=>&$k)for(;++$i<count($a);)$k<$a[$i]?:$k=-1;echo!array_diff($b,$a);
(117 bajtów). Ale nadal używa$argn
w niewłaściwy sposób.$a=explode(' ',$argn);
naprawiłoby to dla 13 dodatkowych bajtów.$_GET
jako tablicy wejściowej? W tym przypadku nie trzeba używaćexplode
dodatkowych -6 bajtów, aby nie używać$b
zmiennej~
Wypróbuj online!Java 8,
264262 bajtówWyjaśnienie:
Wypróbuj tutaj.
źródło
R,
8885 bajtówPrawdopodobnie można to jeszcze pograć w golfa. Pętle nad elementami
x
sprawdzają, czy wszystkie nadchodzące wartości są większe, i dopiero wtedy zachowują ten element. Po pętli tworzy sekwencję odmin(x)
domax(x)
i sprawdza,%in%
czy wszystkie wartości są zawarte w przyciętej wersji plikux
.źródło
function(n)all(unique(cummin(rev(n)))==max(n):min(n))
JavaScript (ES6), 60 bajtów
Nie golfowany:
To jest prostszy algorytm:
Iteruj tablicę w odwrotnej kolejności i upewnij się, że każda liczba (oprócz pierwszej) jest o jeden mniejsza lub równa liczbie już widzianej.
Skrawek:
Pokaż fragment kodu
źródło
Haskell, 62 bajty
Wypróbuj online!
Bezpośrednia implementacja definicji, w której
g
usuwa elementy, jeśli są one> = niż elementy po prawej stronie.źródło
C #, 69 bajtów
W skrócie:
s = równanie wejściowe
bierze się z elementu s, w którym wszystkie elementy po tym (pomiń (I) ndex + 1 elementy), bieżąca wartość jest większa,
policz je i sprawdź, czy pozostała kwota jest równa oczekiwanej kwocie ((maksymalna) wartość imum minus (min) imum) liczba liczb
Wypróbuj online!
źródło
JavaScript (ES6),
82737270 bajtówZwraca wartość logiczną.
W jaki sposób?
Iterujemy po każdym elemencie x tablicy wejściowej a , śledząc maksymalną napotkaną wartość m oraz liczbę -k wartości, które nie są większe lub równe dowolnemu elementowi po ich prawej stronie. Z definicji prawidłowe wartości pojawiają się w ściśle rosnącej kolejności.
Używamy
filter()
zamiastmap()
, aby wszystkie elementy zostały odfiltrowane, aż k zmieni się w ujemny. To pozwala nam wyodrębnić pierwszy poprawny element, który jest również gwarantowaną wartością minimalną tablicy.Na koniec testujemy, czy
minimum - (maximum + 1) == -number_of_valid_elements
:Przypadki testowe
Pokaż fragment kodu
źródło