Twoim zadaniem jest analiza danych wejściowych i wyjściowych formuły dla n-tego terminu, jeśli jest to sekwencja arytmetyczna, w przeciwnym razie powinien wypisać „NAAP”.
Wejście
Dane wejściowe (z STDIN) będą się składać z kilku liczb, od 4 do 10 liczb, przy czym każda liczba będzie w zakresie od -1000 do 1000 włącznie, oddzielonych separatorem (spacja, przecinek lub średnik [którykolwiek z nich ma być Twoje preferencje]). Oto kilka przykładowych danych wejściowych.
12,14,16,18 //valid
-3 4 5 1 -2 -4 //valid
45;35;-35 //invalid (only three numbers are present instead of the minimum of 4 numbers)
2,32;21,321 //invalid (it uses two different delimiters: `,` and `;`)
Wynik
Program powinien najpierw sprawdzić, czy dane wejściowe są postępem arytmetycznym, czy nie.
Postępy arytmetyczne (AP) w pigułce: każdy AP będzie miał wspólną różnicę. Jest to różnica między $ n $ a $ {n-1} $ th warunkami (w zasadzie $ a (n + 1) - a (n) $ gdzie a
jest funkcja dla sequnce). Różnica pozostaje taka sama dla dowolnej wartości $ n $ w AP. Jeśli nie ma wspólnego różnica, to nie arytmetyczną sekwencji. Aby obliczyć wartość n-tego terminu, użyj tej formuły $ a (n) = a (1) + (n-1) d $, gdzie $ a (1) $ jest pierwszym terminem, a $ d $ jest powszechne różnica.
Jeśli nie jest to postęp arytmetyczny, program powinien wydrukować komunikat o błędzie „NAAP” (skrót od „Not An Arytmetic Progress”).
Jeśli jest to postęp arytmetyczny, program powinien wypisać uproszczony n-ty termin sekwencji do STDOUT.
Przykład:
> 1,3,5,7,9
2n-1
Objaśnienie: Jest to AP, ponieważ istnieje wspólna różnica (3 $ - 1 = 2 $). Następnie używasz wzoru $ a (n) = a (1) + (n-1) d $
Dlatego wyjściem jest 2n-1
(zauważ brak spacji)
Standardowe luki są domyślnie niedozwolone.
Możesz utworzyć funkcję, jeśli chcesz (z tablicą liczb jako parametrem). Jeśli nie, musisz utworzyć pełny program, który pobiera dane wejściowe jako ciąg lub tablicę i odpowiednio wyświetla dane wyjściowe.
Przypadki testowe:
1.
1,3,5,7,9
2n-1
2)
1 3 12312 7 9
NAAP
3)
-6;8;22;36;50
14n-20
4
5,1,-3,-7,-11,-15
-4n+9
5
-5,-7,-9,-11,-13,-15
-2n-3
6.
3,3,3,3,3,3,3,3,3
0n+3
7
-4,-5,-6,-7
-1n-3
To jest golf golfowy, więc wygrywa najkrótszy kod w bajtach! (przepraszam za złą matematykę)
Wszelkie sugestie są mile widziane!
źródło
0,0,0,0
i3,1,-1,-3,-5
ciąg arytmetyczny? Jeśli tak, myślę, że byłyby to dobre przypadki testowe, ponieważ złamały metodę, którą próbowałem.Odpowiedzi:
Pyth, 30 bajtów
Zestaw testowy
Aby sprawdzić, czy jest to arytmetyka procesja, to wykorzystuje wektorowy odejmowanie między każdym elementem i poprzedni,
-VtQQ
. Trójka sprawdza, czy w wyniku (?tJ{
) występuje wiele wartości, i drukuje,NAAP
jeśli tak jest. Następnie, aby uzyskać właściwe+
lub-
,%+d
używa się formowania modów .źródło
Haskell, 103 bajty
Przykład użycia:
Jak zawsze w Haskell, fantazyjne formatowanie wyjściowe (np. Mieszanie liczb z ciągami znaków) zjada wiele bajtów (około 40). Logika programu jest dość zwarta:
źródło
TI-BASIC, 70 bajtów
Aby zaradzić brakowi konwersji liczb na ciąg znaków przez TI-BASIC, wykorzystuje on dane wyjściowe na ekranie grafowym (
Text(
), jeśli postęp jest arytmetyczny, co automatycznie łączy argumenty razem.Zakłada się, że liczby ujemne są wprowadzane za pomocą znaku wysokiego minus TI-BASIC (który wygląda trochę jak
⁻
), a nie binarnego znaku minus. Jednak dane wyjściowe używają binarnego znaku minus.źródło
Japt ,
605251 bajtówWypróbuj online!
Dane wejściowe można podawać za pomocą dowolnego separatora, ponieważ taki jest projekt interpretera;)
Bez golfa i wyjaśnienia
źródło
Matlab, 103 bajty
źródło
CJam, 38 bajtów
Jest to anonimowa funkcja, która pobiera tablicę ze stosu jako dane wejściowe i pozostawia ciąg znaków na stosie jako dane wyjściowe. Wypróbuj online z dodatkowym kodem I / O do testowania.
Wyjaśnienie:
źródło
JavaScript (ES6), 91 bajtów
Wyjaśnienie
Test
źródło
Perl 6,
123102101 bajtówEDYCJA: Nie neguj różnicy
EDYCJA: użyj anonimowych sub, operatorów logicznych i interpolacji ciągów. Dzięki Brad Gilbert b2gills
Program testowy (odczytuje ze standardowego wejścia):
Wyjaśnienie:
źródło
sub f
. Również jeśli użyjesz@_
zamiast tego@a
zaoszczędzisz kilka bajtów.{my@b=@_.rotor...
. Również nie należy umieszczać nawiasów wokół warunkiem spełnieniaif
oświadczenia, to nie jest Perl 5. Jeśli zmieniłeś, żeif
do@b.end&&"NAAP"||$_=...
was uratuje jeszcze kilka bajtów. Możesz także zrezygnować z tej ostatniejif
instrukcji, jeśli ją użyłeś"@b[0]n{'+'x($_>=0)}$_"
, oszczędzając 4 bajty.sub
początku nie potrzebujesz , bez tego staje się anonimowym blokiem. Również, żebyś wiedział, że nie pomyślałbym o użyciu.map({[-] $_})
, prawdopodobnie użyłbym tego,».map(*-*).flat
co jest dłuższe, teraz muszę przejrzeć własne wpisy, aby sprawdzić, czy mogę to skrócić dzięki twojej sztuczce.Rubin,
957876 bajtów78 bajtów
95 bajtów
Nie golfowany:
Stosowanie:
źródło
Python 3, 92 bajty
Na podstawie mojej odpowiedzi z Find the Sequence
def m(t):s=str;a=t[0];b=t[1];q=b-a;return((s(q)+'n'+'+'*(0<a-q)+s(a-q)),'NAAP')[t[2]/b==b/a]
źródło