Wyzwanie
W jak najmniejszej liczbie znaków znajdź wartość i ^ n, dla której n, dodatnia liczba całkowita większa niż 0. Powinien być wyprowadzony jako ciąg.
Dla tych, którzy nie wiedzą, i jest zdefiniowane tak, że i ^ 2 = -1. Więc:
- i ^ 1 = i
- i ^ 2 = -1
- i ^ 3 = -i
- i ^ 4 = 1
To się powtarza ...
Zasady
- Jeśli twój język obsługuje liczby zespolone, nie używaj żadnych funkcji ani arytmetyki, które mogłyby to rozwiązać.
- Niedokładności zmiennoprzecinkowe są odpowiednie dla odpowiedzi, które i tak zwracałyby ułamki dziesiętne, ale dane liczbowe całkowite powinny dawać dokładne wyniki
Punkty bonusowe
-5, jeśli możesz wypracować wartość, gdzie n jest również ujemne
-15, jeśli możesz obliczyć wartość dla dowolnej liczby rzeczywistej (ta premia obejmuje -5 z powyższej premii)
Powodzenia!
code-golf
math
arithmetic
complex-numbers
Kezz101
źródło
źródło
Odpowiedzi:
Rubinowy, wynik -2
(13 bajtów, premia -15)
Funkcje obejmują: brak błędów zaokrąglania! (jeśli przekażesz dane wejściowe jako wymierne)
opublikowane przez autora, Kezz101
Negatywne wyniki powodują, że moja adrenalina przyspiesza. W ten sposób
nadużywanezasady są wykorzystywane do osiągnięcia tego szlachetnego celu.Tworzy anonimową funkcję i wyświetla tablicę z 2 pozycjami reprezentującymi liczbę zespoloną w postaci biegunowej (jednostka kątowa: stopnie).
źródło
CJam, 12 znaków - 5 = 7
Sprawdź to tutaj.
Obsługuje negatywne dane wejściowe.
Wynik jest drukowany automatycznie na końcu programu.
Mathematica,
222019 znaków - 15 = 4Jest to anonimowa funkcja, z której możesz korzystać podobnie jak
(Lub przypisz to do
f
powiedzenia, a następnie zróbf[15]
.)Obsługuje wartości rzeczywiste i daje dokładne wyniki dla wprowadzania liczb całkowitych.
Zauważ, że nie
i
jest to kompleks Mathematica i (który jest ). To tylko niezdefiniowana zmienna.I
Ponadto, pomimo kolejności wyrażenia, Mathematica ponownie uporządkuje dane wyjściowe w
R+Ci
formę.źródło
4%
. Można to zrobić automatycznie.f@15
zamiastf[15]
.Python 2 - (24-5) = 19
Najwięcej zasług należy do @ user2357112, po prostu grałem w golfa jego odpowiedź z komentarzy do tej odpowiedzi .
Objaśnienie: Zaczyna się od indeksu
n%4
w ciągu'1i--'
. Następnie iteruje wstecz w krokach co dwa po każdej literze ciągu. Na przykładn=6
zaczynałby się od indeksu 2, pierwszy-
, a następnie pomijai
i bierze1
, aby wrócić-1
.@xnor wskazał rozwiązanie o tej samej długości:
Pyth - ( 14-5 ) = 9
Wydaje mi się, że dostaję tylko 14, bez względu na to, jak próbuję odwrócić / wyciąć / itp. : „(
Który jest zasadniczo taki sam jak powyższa odpowiedź na python, ale w 2 krokach, ponieważ pyth nie obsługuje pełnych opcji indeksowania Pythona. Wypróbuj online.
Idę porozmawiać z isaacgiem na temat indeksowania Pyth;)
źródło
lambda
musi być przypisany do zmiennej? Przynajmniej, aby go nazwać, musisz go otoczyć nawiasami, dodając dwa bajty, aby można go było wywołać(lambda...)(n)
.map
isorted
.TI-BASIC (NSpire) - 5 (20 znaków-15)
Jeśli chcesz otrzymać złożoną wartość zwracaną, zamień
i
na końcu na
(kompleks i).źródło
normalnyi
. Jeśli zmiennai
nie jest zdefiniowana, otrzymasz liczbę zespoloną, tylko zi
zamiast
. Po prostu osobno obliczam rzeczywistą i wymyśloną część.i
. Złożone „ja” nie jest nawet postacią, o którą pyta pytanie, i pozwoli ci zaoszczędzić dwa bajty, więc przynajmniej powiążesz ze mną;).Cudowny , 43 bajty
Naprawdę nie jest zwycięzcą, ale Marbelous jest fajny. :)
Jest to program, który odczytuje dane wejściowe jako jedną liczbę całkowitą z pierwszego argumentu wiersza poleceń. Zauważ, że dane wejściowe są pobierane modulo 256, ale nie wpływa to na ważność wyniku dla danych wejściowych większych niż 255, ponieważ 256 można podzielić przez 4.
Wyjaśnienie
Marbelous to język programowania 2D, który symuluje „kulki” (wartości bajtów) wpadające przez wiele urządzeń. Tablica składa się z 2-znakowych komórek (urządzeń), które mogą przetwarzać kulki. Wszystko, co spada z dołu planszy, jest drukowane do STDOUT.
Przejrzyjmy używane urządzenia:
}0
jest tam, gdzie idzie pierwszy argument wiersza poleceń. Użyłem dwóch wystąpień tego urządzenia, więc otrzymuję dwie kopie wartości wejściowej (jednocześnie).^n
sprawdza, czyn
bit wejściowego marmuru (gdzien=0
jest najmniej znaczący), produkuje1
lub w0
zależności od bitu.=0
sprawdza równość z0
. Jeśli marmur wejściowy jest równy, po prostu spada prosto, jeśli nie, jest przesuwany w prawo.\/
to kosz na śmieci, więc połyka marmur wejściowy i nigdy nic nie wytwarza.2D
jest kodem ASCII dla-
,31
jest kodem ASCII dla1
i69
jest kodem ASCII dlai
.&n
Są synchronizatory. Synchronizatory zatrzymują marmur, dopóki wszystkie synchronizatory z tym samym nien
utrzymają marmuru, w którym to momencie wszyscy przepuszczą przechowywany marmur.W efekcie chcę zachować trzy odpowiednie znaki w trzech synchronizatorach i zwolnić je w zależności od ustawienia najmniej znaczących bitów na wejściu.
Aby uzyskać więcej informacji, zobacz wersję roboczą specyfikacji .
źródło
JavaScript (ES6) 29-5 = 24
Obsługuje moc ujemną.
ES5:
źródło
f=n=>[1,'i',-1,'-i'][n%4]
). Ale jest mniej seksowny i nie będzie obsługiwał negatywnych mocy. To chyba zależy od premii.&
operator bitowy ? Jeśli tak, możesz zrobić&3
dla prawdziwej operacji modułu 4. Edycja: wygląda tak, jak ma&2
to miejsce w twojej odpowiedzi ...Python 28 bajtów - 5 = 23
Obsługuje wejścia -ve.
Zakładając, że funkcje lambda są dopuszczalne (dzięki FryAmTheEggman!):
w przeciwnym razie 31 bajtów - 5 = 26
źródło
foo=...
lub możeszmap(<your lambda>,range(10))
uzyskać listę wartościi^n
od0-9
.lambda n:'--1i'[n%4-2::2]
.'--1i'
zaczynając od indeksun%4-2
. Gdy python otrzyma indeks ujemny, zacznie tyle pozycji pozostałych od końca tablicy, a następnie przejdzie do0
. W ten sposób0
i1
nigdy nie uderzaj w-
znaki, póki3
i4
czyń.lambda n:n%4/2*'-'+'1i'[n%2]
Usuwa przestrzeń i jest krótsza :)(Emacs) Lisp - 34
Dla zabawy w (Emacs) Lisp:
Jeśli chcesz go użyć, użyj a
defun
lub użyjfuncall
:źródło
APL (Dyalog) , 8 znaków - 15 bonusów = wynik -7
Wbudowana (i dlatego zabroniona) funkcja jest
0J1*⊢
, ale używa ona metody @ blutorange .Autor wyzwania, Kezz101, napisał :
Zwraca liczbę zespoloną w postaci,
aJb
która jest normalnym sposobem wyświetlania przez APL liczb zespolonych.Wypróbuj online!
Wyjaśnienie
¯12○
znajdź wektor jednostki, który ma kąt w radianach.5×
pół razy○
argument pomnożony przez 𝜋 (stała koła)źródło
Pure Bash, 29 bajtów - 5 = 24
Obsługuje wejścia -ve.
źródło
Befunge-98,
41-5 = 3635-5 = 3032-5 = 27Obsługuje ujemne liczby całkowite. Nie zdobędziesz żadnych nagród dzięki temu rozwiązaniu, ale cokolwiek.
Po prostu akceptuje liczbę jako dane wejściowe, robi sztuczkę z modułem (który, frustrująco, nie działa jak zwykły moduł dla liczb ujemnych w interpreterie, którego testowałem), aby działały ujemne, a następnie robi głupie warunki zdecyduj, jaka powinna być każda postać.
Jestem pewien, że można to jeszcze bardziej pograć w golfa. Na razie oto inne rozwiązanie, które nie akceptuje negatywów, ale rekompensuje utratę premii, ponieważ jest krótsza:
Befunge-98,
322623Edytuj - teraz wykorzystuje fakt, że „-” to 13 (0xd) znaków od „”.
Edycja 2 - Teraz ponownie wykorzystuje fakt, że „i” to 56 (0x38 lub
'8
) znaków od „1”.źródło
Wynik Java 8: 72
W Javie najgorszy język gry w golfa! Gra w golfa:
Rozszerzony:
Uwaga: Nie jestem przyzwyczajony do Java 8. Nie mam jeszcze dla niego środowiska uruchomieniowego. Poinformuj mnie, czy występują jakieś błędy składniowe. To także mój pierwszy golf.
Edycja: usunięto
import
.Edycja: Usunięto deklarację klasy.
Kolejna odpowiedź z wynikiem = 87–15 = 72
Rozszerzony:
źródło
java.util.function
niejava.util
(czy się mylę?).java.util.*
się.*
wszystko środki na przywóz w ramach pakietu. Tak jak obecnie importujesz wszystkie klasy zfuction
pakietu.import
importuje tylko klasy z tego pakietu. Nie importuje żadnej klasy z pakietów w tym pakiecie. Na przykład klasaFunction
jest w pakiecie,java.util.function
ale nie w pakieciejava.util
.MATLAB, 33 bajty - 5 = 28
Chociaż jest to o kilka bajtów więcej (37-5 = 32), tak naprawdę podoba mi się to podejście:
źródło
i^3
oznacza-i
raczeji
, że dodaje tylko 1 znak. - Sidenote dla innych czytelników: bez pierwszej reguły wyzwania rozwiązanie Matlab miałoby tylko 3 znaki.C 77
Ulepszony dzięki Ruslanowi
C 74–5 = 69
No i oczywiście najbardziej oczywiste podejście
źródło
n%2
i użyć~
zamiast tego,!
ponieważn
najpierw negowanie , a następnie%
ing z 2 da ten sam wynik, przynajmniej dlan<(1<<32)-1
. A C nie wymaga jawnego definiowania typu zwracanego dla funkcji, więc możesz usunąć goint
na początku. A także użyj0
zamiast'\0'
. Zatem -9 znaków.OCaml 47
Nie jest to nagradzane rozwiązanie, ale to mój pierwszy raz w golfa, więc nie jestem do końca pewien, co robię. Próbowałem użyć dopasowania wzorca, ale uzyskałem ponad 58.
źródło
Pari / GP , 19 bajtów - 5 = 14
To
i
tylko symbol, a nie wyimaginowana jednostka (która jestI
w Pari / GP).Wypróbuj online!
źródło
Rubin 32-5 = 27
Działa dla negatywnych mocy!
źródło
puts %w[1 i -1 i][gets.to_i % 4]
.Perl, 26 - 5 = 21
działa jako samodzielny program (argument w wierszu poleceń) lub treść funkcji.
źródło
Java:
151131–5 = 126Gra w golfa:
Nie golfowany:
W funkcji: 72-5 = 67
Gra w golfa:
Nie golfowany:
Tak, jeszcze jedna odpowiedź Java - i grał jeszcze gorzej niż kiedykolwiek. Ale pracujesz z tym, co możesz ...
EDYCJA : dodano wersję funkcji.
EDYCJA 2 : więc po trochę prób i błędów, oto wersja, która próbuje to zrobić przy książce, bez eksploracji luki w cyklu. Więc…
Java z obliczeniem wartości: 146-15 = 131
Gra w golfa:
Nie golfowany:
(przynajmniej myślę, że mogę odebrać najwyższy bonus, popraw mnie inaczej)
źródło
int n = Integer.parseInt(a[0])
Python - 31
Dopiero niedawno zacząłem uczyć się języka Python. Chociaż wiem, że to nie jest dobre, to najlepsze, co mogę zrobić.
źródło
Haskell GHCi, 29 bajtów - 15 = 14
Stosowanie:
źródło
R , 29 - 5 = 24 bajty
Wypróbuj online!
Tak jak większość metod powyżej, przyjmuje moduł 4 i zwiększa go o 1, ponieważ tablice R są indeksowane 1. Działa również dla ujemnych liczb całkowitych.
Martwiłem się tutaj o mieszane wyjścia, ale Giuseppe wskazał, że R wymusza typy liczbowe na typy łańcuchowe, gdy są one mieszane.
źródło
numeric
typy nacharacter
mieszane! Książka Hadleya wyjaśnia to całkiem dobrze - wystarczy Ctrl + F na „Coercion” i zobaczysz ją, ale cała książka jest warta przeczytania (głównie do celów innych niż golfa, ale czasami bierzesz lewę lub dwie, heheh )PowerShell , 28 bajtów -5 = 23
Wypróbuj online!
Port wszystkich cyklicznych indeksowań
źródło
Haskell, 29 bajtów - 5 = 24
Działa dla mocy ujemnych.
Rozpracowałem wersję bezcelową, ale okazuje się, że jest ona rzeczywiście dłuższa.
źródło
Clojure (
645431 znaków)Edytować
Zgodnie z sugestią @ SeanAllred, oto wersja, która używa dosłownego wektora zamiast
case
funkcji:Edytuj 2
Licząc na REPL, aby wydrukować wynikową kolekcję i zakodować funkcję za pomocą
#()
skrótu, możemy ją zredukować(Co w rzeczywistości jest o wiele bardziej Clojure / Lisp-ish, ponieważ funkcja faktycznie zwraca teraz wygenerowany wynik, umożliwiając użycie funkcji
map
, jak wktóry drukuje
Udostępnij i ciesz się.
źródło
Groovy: 27-5 = 22
źródło
C 105 wynosił 117
źródło
:
w?:
sprawozdaniu w zwykły C. Ponadto, jaki jest sens używania0==0
, kiedy można użyć pojedynczego char1
? I nie ma potrzeby wcześniej w nawiasach?
. Ostatnie?:
oświadczenie można również skrócićc[j]=i&1?'i':'1';
.0==0
kiedy jest identyczny1
? Zauważ, że==
ma wyższy priorytet niż&
, w przeciwnym razie twój (przypuszczalny) test(i&0)==0
zawsze byłby prawdziwy.PARI / GP , 26 - 5 = 21
n->cos(t=Pi*n/2)+I*sin(t)
jest o jedną postać krótszy, ale nie obsługuje dokładnych odpowiedzi. Oczywiścien->I^n
jest niedozwolone, i prawdopodobnie także PARIpowIs
.źródło
Galaretka , 2-20 = -18 bajtów
Wypróbuj online!
Nie używa
i ^ x
wbudowanego, ale używa wbudowanego1j
i**
dlatego nie jestem pewien, czy jest dozwolony.źródło
1j
dosłownie jest również zbanowany?*
) jest.1j
literałów.05AB1E , wynik 5 (10 bajtów - 5 bonusów)
Wypróbuj online lub sprawdź kilka innych przypadków testowych .
Wyjaśnienie:
źródło