Zainspirowany tym pytaniem od naszych rywali z Code Review.
Definicje
Super tablica jest tablicą w której każdy nowy element tablicy jest większy niż suma wszystkich poprzednich elementów. {2, 3, 6, 13}
jest super tablicą, ponieważ
3 > 2
6 > 3 + 2 (5)
13 > 6 + 3 + 2 (11)
{2, 3, 5, 11}
to nie super tablicę, ponieważ
3 > 2
5 == 3 + 2
11 > 5 + 3 + 2
Tablica duplikacji to tablica, w której każdy nowy element w tablicy jest większy niż iloczyn wszystkich poprzednich elementów. {2, 3, 7, 43, 1856}
jest super tablicą, ale od tego czasu jest również tablicą duplikującą
3 > 2
7 > 3 * 2 (6)
43 > 7 * 3 * 2 (42)
1856 > 43 * 7 * 3 * 2 (1806)
Wyzwanie
Napisz funkcję lub program, który pobiera tablicę jako dane wejściowe w twoim rodzimym formacie listy i określa, jak super jest tablica. Opcjonalnie możesz również wprowadzić długość tablicy (dla języków takich jak C / C ++). Możesz również założyć, że wszystkie liczby na liście będą liczbami całkowitymi większymi niż 0. Jeśli jest to super tablica, musisz wydrukować. It's a super array!
Jeśli jest to tablica super duper , musisz wydrukować. It's a super duper array!
Możliwe jest również, że tablica będzie duper- nie super. Na przykład {1, 2, 3}
W takim przypadku powinieneś wydrukować. It's a duper array!
Jeśli tablica nie jest ani super-duper, możesz wydrukować wartość fałszowania.
Jak zwykle jest to golf golfowy, więc obowiązują standardowe luki i wygrywa najkrótsza odpowiedź w bajtach.
źródło
{1, 2, 3}
tablicy?2 * 1
na równi3
w głowie.super[space][space]array
jest to dozwolone.Odpowiedzi:
Galaretka ,
47454̷4̷ 42 bajtówSpowoduje to wydrukowanie pustego ciągu (falsy) dla tablic, które nie są ani super, ani duplikowane. Wypróbuj online!
Jak to działa
źródło
JavaScript (ES6),
111110 bajtówZapisano bajt dzięki @ETHproductions !
Wyjaśnienie
Pobiera tablicę liczb, zwraca łańcuch lub liczbę
0
dla false.Test
Pokaż fragment kodu
źródło
s+=s&&n>s&&n,d*=d&&n>d&&n
s
musi być wykonane w ten sposób, ponieważ należy ustawić nafalse
ifn>s
, aled*false
ma ten sam efekt, aby działał . Dzięki!Jawa,
183182 bajtówPodjąłem następujące założenia:
""
znaków jest wartością fałszowania.Jeśli którykolwiek z nich jest nieprawidłowy, proszę mi powiedzieć.
W każdym razie nie mogę pozbyć się wrażenia, że mogłem przesadzić z ilością zmiennych.
Edycja: udało się zapisać bajt dzięki funkcji @UndefinedFunction
źródło
boolean s=true
naboolean s=1<2
?MATL , 66 bajtów
Wykorzystuje bieżącą wersję (10.0.3) , która jest wcześniejsza niż to wyzwanie.
Dane wejściowe pochodzą ze standardowego wejścia. Jeśli nie jest super lub duper, wyjście jest puste (co jest falsey).
EDYCJA (7 kwietnia 2016 r.) : Ze względu na zmiany w wersji 16.0.0 języka
5L
i6L
muszą zostać zastąpione przez3L
i4L
odpowiednio. Link do kompilatora online obejmuje te modyfikacje.Spróbuj go w Internecie !
Wyjaśnienie
źródło
C ++ 14,
178, ..., 161157 bajtówNie mogę wymyślić sposobu, aby go skrócić.Wygląda na to, że zawsze jest miejsce na ulepszenia!Aktualizacja 1 : Jestem za bezpiecznym kodem, ale biorąc surową tablicę i jej rozmiar jako argumenty funkcji jest o 9 bajtów krótszy niż biorąc wektor :(
Aktualizacja 2: Teraz zwraca pusty ciąg jako fałszywą wartość, kosztem 8 bajtów.
Aktualizacja 3: Powrót do 165 bajtów dzięki komentarzowi CompuChip.
Aktualizacja 4: Kolejny komentarz CompuChip, kolejne 4 bajty wyłączone.
Aktualizacja 5: użycie
auto
zamiaststring
wraz z inną sugestią CompuChip powoduje zmniejszenie kolejnych 4 bajtów kodu.Nieogrodzony pełny program z przypadkami testowymi:
Wynik:
źródło
It's a array!
jest prawdziwy ( dowód ) zgodnie z naszą definicją na Meta .if ... >=
porównania długości : Myślę, żee=r>s?e:0
jest to równoważneif(r<=s)e=0
.for(s=p=*a;--n;s+=r,p*=r)r=*++a
działa jak praca? Pozwoliłby cii
całkowicie upuścićC, 150 bajtów
Każde wejście jest zakończone przez
0
. Test główny:Bonus, jeśli pozwolono nam na bardziej kompaktowy format wyjściowy, możemy go przyciąć do 107 bajtów :
W takim przypadku
Z
wróć3
po superduper,2
super,1
duper i0
brak.źródło
Pyth -
5452 bajtyCzęść do formatowania łańcucha znaków można prawdopodobnie zagrać w golfa, ale podoba mi się podejście do testowania superduperu.
Pakiet testowy .
źródło
c2"superduper"
można+R"uper""sd"
lang-pyth
nie istnieje.Python 3, 127
Zaoszczędzono 5 bajtów dzięki FryAmTheEggman.
W tej chwili dość podstawowe rozwiązanie, nic nadzwyczajnego. Wystarczy uruchomić sumę bieżącą sumy i produktu i sprawdzić każdy element.
Oto przypadki testowe na wypadek, gdyby ktokolwiek chciał spróbować pobić mój wynik.
źródło
AWK - 140 bajtów
Dla tych, którzy nie znają AWK, rekordy są automatycznie analizowane w linie oparte na zmiennej,
RS
a linie są automatycznie analizowane w pola oparte na zmiennejFS
. Zmienne nieprzypisane to także „”, które po dodaniu do # działają jak 0.BEGIN
Sekcja jest wywoływana dokładnie raz, zanim parsowane są rekordy / pola. Reszta języka jest podobna do C, a każdy pasujący blok kodu jest stosowany do każdego rekordu. Więcej informacji na stronie http://www.gnu.org/software/gawk/manual/gawk.html#Getting-Started .Przykład uruchomienia, gdzie
'code'
jest jak wyżej:echo 1 2 6 | 'code'
Można również umieścić tablicę w pliku o nazwie Filename i uruchomić jako:
'code' Filename
Jeśli kod ma się często uruchamiać, można go umieścić w wykonywalnym pliku skryptu. Spowoduje to usunięcie załączania,
' '
aawk
polecenie zostanie umieszczone na górze pliku jako:#!/bin/awk -f
źródło
It's a array!
dla tablic, które nie są ani super, ani duperujące, co jest prawdziwym ciągiem zgodnie z naszą definicją na Meta .echo 1 2 6 | <the above code>
PHP,
144...113112 bajtówWyjaśnienie:
Bez rejestrów globalnych byłoby to (118 bajtów):
$a
(wydajność konwersji tablic na łańcuchyArray
)$p
na 1, więc wzrost produktu kosztuje mniej.źródło
$a
. Nie musisz się martwić o powiadomienia i inne rzeczy - po prostu zignoruj je na tej stronie.$argv[1]
jest dobrą alternatywą. Biorąc to pod uwagę, to wyzwanie jest bardzo niejasne, jeśli chodzi o formaty wejściowe i wyjściowe. Przy takim podejściu możesz zostać ukarany za inne wyzwania. A kodowanie na stałe danych wejściowych jest w rzeczywistości niedopuszczalne - choć istnieją na to wyjątki. Wiem, że czytanie w PHP jest bardzo drogie, dlatego zadałem podobne pytanie na temat meta .register_globals
, ale zamiast tego napiszę przyszłe gry w golfa. Dlaczego och, dlaczego odrzucono short_closures ?R , 115 bajtów
Wypróbuj online!
Wartość Falsy:
It's a array!
Nic tu nie jest zbyt wymyślne, z wyjątkiem użyciasapply
na liście funkcji.źródło
Scala, 172 bajtów
Niegolfowany (choć tak naprawdę nie ma wiele do zrobienia):
źródło
Haskell, 136 bajtów
f
jest wymaganą funkcją. Zauważ, że pusta suma wynosi 0, a pusty produkt to 1, dlatego[0]
nie jest ani super, ani duplikat.s
przechwytuje wspólną strukturę testowania super lub duper poprzez przyjęcie dowolnego operatorao
i dowolnego elementu neutralnegot
.foldr
Śledzi krotki(s,b)
gdzies
jest wynikiem łączenia wszystkie widoczne elementy z operatoremo
ib
mówi, czy dla każdego elementu wyglądał na tak daleko, element ten był większy niż poprzednio obliczonej sumy / produktu.Wynik nie jest bardzo golfowy i byłbym wdzięczny, gdyby ktoś przyczynił się do lepszego pomysłu!
Nieco bardziej czytelna wersja:
źródło
05AB1E ,
5351 bajtówWypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
Zobacz tutaj wyjaśnienie, w jaki sposób
.•dwā•
„duper” i„¦È!
„tablica!”.źródło
Galaretka , 37 bajtów
Wypróbuj online!
Pełny program
Wpadłem na
Z…P
pomysł z (starej) odpowiedzi Dennisa.źródło