Witam na moim pierwszym konkursie golfa! :) Wskoczmy od razu.
Wyzwanie:
Biorąc pod uwagę dwa wektory zmiennoprzecinkowe, O (początek) i T (cel), musisz utworzyć program do drukowania wartości L i R na STDOUT.
- O jest jednym rogiem kwadratu
- T jest jednym rogiem kwadratu, który znajduje się naprzeciwko O
- L jest punktem 2D (narożnikiem), który oznacza drugi punkt niepełnego kwadratu
- R jest punktem 2D (narożnikiem), który jest przeciwny do L
Zasady
- Wartości O i T należy odczytać ze STDIN (patrz przykładowe dane wejściowe).
- Ponownie, wartości L i R należy wydrukować do STDOUT.
Punktacja i bonusy
- Policz bajty swojego programu.
- Jeśli twój program rysuje linie łączące O do L do T do R , odejmij 15 bajtów od liczby bajtów.
Przykłady
Pierwszy wiersz obejmuje dane wejściowe (pierwszy nawias kwadratowy dla O i następny nawias kwadratowy dla T ), a drugi wiersz reprezentuje oczekiwany wynik.
- [0, 0] [3, 3] Oczekiwany: [0, 3] [3, 0]
- [0, 0] [-2, -2] Oczekiwany: [-2, 0] [0, -2]
- [1, -1] [4, 2] Oczekiwany: [1, 2] [4, -1]
- [0, -1] [0, 1] Oczekiwany: [-1, 0] [1, 0]
UWAGA : wejścia i wyjścia mogą być zmiennoprzecinkowe!
Ważna informacja!
- Wartości O i T można przyjmować w dowolnym formacie, o ile pochodzą one ze STDIN (np. Inside [] lub () ...), użyj dowolnego formatu.
- L i R można wydrukować w dowolnej kolejności.
- Pamiętaj: gdy (O-> L-> T-> R-> O) są połączone, każda strona musi mieć tę samą długość!
Zwycięski
- To jest golf golfowy, więc wygrywa najmniej bajtów!
- Odpowiedź zwycięzcy zostanie zaakceptowana w niedzielę 15.11.2015 20: 00-22: 00 (czas w Finlandii) (Jeśli się nie mylę, data ta jest zapisana jak 11.15.2015 w USA, nie mylcie się).
Miłej gry w golfa!
Odpowiedzi:
Poważnie , 11 bajtów
Port mojej odpowiedzi TI-BASIC. Oblicza
mean(X)+i*(X-mean(X))
.Wyjaśnienie:
Wejście w postaci listy dwóch liczb zespolonych:
[1-1j,4+2j]
i wyjście w tym samym formacie:[(4-1j), (1+2j)]
.źródło
æ
do listy średnią i spowodowałoî
(pomnożenie przez i) wektoryzację, umożliwiając niekonkurencyjne rozwiązanie 9-bajtowe. Poważnie zaczyna być naprawdę dobrym językiem.Σ
2 bajty?Σ
ma punkt kodowy 0xF4.Poważnie , 25 bajtów
,i││-++½)+-+½)++-½)±+++½)
Pobiera dane wejściowe jako listę:
[x1,y1,x2,y2]
Ta sama strategia jak moja odpowiedź w Pythonie, ale na poważnie!
Wyjaśnienie:
Wypróbuj online
źródło
TI-BASIC, 16 bajtów
Do kalkulatora serii TI-83 + lub 84+.
O ile nie zrozumiałem źle, OP stwierdził, że nie przeszkadza im przyjmowanie danych wejściowych i wyjściowych jako liczb zespolonych.
i
Tutaj jest jednostką urojoną, nie zmienna statystyki.TI-BASIC ma
mean(
funkcję, ale irytująco nie działa ze złożonymi listami, rzucającERR:DATA TYPE
.Wprowadź w formularzu
{1-i,4+2i}
dla[[1,-1],[4,2]]
. Wyjście jest w postaci{4-i 1+2i}
o[[1,2][4,-1]]
.źródło
Matlab,
5145464542 bajtówTeraz oczekuje się danych wejściowych w jednym wektorze kolumny:
[x0;y0;x1;y1]
(wyjście w tym samym formacie) Właśnie zmodyfikowałem go, aby był pełnym programem.Lub alternatywnie
Stare rozwiązanie:
Dane wejściowe oczekują wektorów kolumnowych, np
f([0;0],[3;3])
Zwraca również dwa wektory kolumnowe (jako macierz 2x2).
źródło
Japt,
2928 bajtówJapt to skrócona wersja Ja vaScri pt . Interpretator
Pamiętaj, że funkcje strzałek wymagają przeglądarki zgodnej z ES6, takiej jak nowsze wersje Firefox. Dane wejściowe są w postaci tablicy 4-elementowej, np
[1,-1,4,2]
.Jak to działa
Jak było w golfa
Najpierw próbowałem po prostu skopiować podejście Python @ Mego. Zostawił mnie ten 48-bajtowy potwór:
(Uwaga: dane wejściowe nie powinny być obecnie zawinięte w tablicę).
Ponieważ każdy z tych elementów musi być podzielony przez 2, krótsze jest mapowanie całej tablicy za pomocą
mY=>Y/2
:Co teraz? Cóż, tablica dodaje teraz trzy wejścia i odejmuje czwarte, zgodnie ze wzorcem
1,2,3,0
. Możemy więc spakować dane wejściowe do tablicy, a następnie dodać je razem, podzielić przez 2 i odjąć niezbędny element:Fajnie, uratowałem bajt! Ale czy można zmniejszyć tablicę na początku? Spróbujmy spakować go do łańcucha, a następnie podzielić go z powrotem na tablicę za pomocą
a
:Spójrz na to, zapisano kolejny bajt. Ale czy jest jeszcze lepszy sposób? Możemy wykorzystać fakt, że
[1,2,3,0] ≡ [1,2,3,4] mod 4
:Kolejne dwa bajty! Teraz gdzieś idziemy. Ale to
Ug0 +Ug1 +Ug2 +Ug3
zajmuje dużo miejsca. Co jeśli zmniejszymy tablicę z dodaniem?Wow, to naprawdę pomogło! Teraz mamy do 29 bajtów. I dzięki @ ן nɟuɐɯɹɐ ן oɯ, byłem nawet w stanie zagrać w golfa o kolejny bajt poza redukcją. Ale jeśli moglibyśmy użyć wbudowanego do zsumowania tablicy, byłoby to znacznie krótsze:
19 bajtów! Niesamowity! Niestety, Japt nie ma jeszcze takich wbudowanych funkcji. Dodam to, kiedy będę miał szansę. Sugestie są mile widziane, zarówno dla programu, jak i dla języka!
Od wersji 1.4.4 w Japt zaimplementowałem o wiele więcej funkcji, niż pierwotnie planowałem. Począwszy od oryginalnego planu dla krótszej wersji:
Najpierw musimy zmienić kilka rzeczy: Funkcje są definiowane za pomocą
{
, a funkcja sumowania tox
. Ta wersja działa jak jest:Teraz
@
jest to skrótXYZ{
, który pozwala nam zaoszczędzić bajt, przechodząc zZ
naX
. Ponadto,£
jest to skrótm@
, oszczędność kolejny bajt:Niedawno wdrożyłem funkcję, w której
U
na początku programu można zwykle pominąć. Jednak z powodu błędu implementacji działa to również z funkcjami:Na koniec
g
funkcja jest teraz zawijana, jeśli indeks znajduje się poza końcem ciągu, co pozwala nam usunąć%4
łącznie 13 bajtów :I pomyślałem, że 19 jest niesamowity ;-) Przetestuj to online!
źródło
eval(U.join`+`)
.eval
jeszcze odpowiednika, to tak naprawdę oszczędza bajt!JavaScript (Node.js / ES6), 154 bajtów
Uzyskiwanie standardowego wejścia jest dłuższą częścią kodu. Dane wejściowe powinny być oddzielone przecinkami punktowymi:
źródło
ngn APL, 21 bajtów
Pobiera dane wejściowe jako parę liczb zespolonych (np.
1J¯1 4J2
) I wypisuje dane wyjściowe w ten sam sposób (np4J¯1 1J2
.). Wypróbuj online w wersji demonstracyjnej ngn / apl .źródło
1 ¯1
wejściowe0J¯1 0J1
, co jest poprawną odpowiedzią. Co dostajeszPyth, 12 bajtów
Pobiera dane wejściowe jako parę liczb zespolonych (np.
1-1j, 4+2j
) I wypisuje dane wyjściowe jako tablicę (np[(4-1j), (1+2j)]
.). Wypróbuj online.źródło
𝔼𝕊𝕄𝕚𝕟, 29 znaków / 43 bajty
Try it here (Firefox only).
źródło
CJam, 30 bajtów
Wypróbuj online
Pobiera to dane wejściowe jako listę list, np. Dla ostatniego przykładu:
Wyjaśnienie:
źródło
Prolog, 118 bajtów
Nieco bardziej czytelny:
Aby uruchomić program:
Przykładowe dane wejściowe, gdy znanymi narożnikami są [1, -1] [4, 2]:
[1, -1,4,2]
Przykładowe dane wyjściowe, w których X i Y będą zawierać nieznane rogi:
X = [1.0, 2.0],
Y = [4.0, -1.0]
Wypróbuj tutaj online
Edycja: Zmieniono, aby czytać dane wejściowe ze STDIN
źródło
Python 3, 102 bajty
Dane wejściowe są pobierane w formie
x1 y1 x2 y2
, w jednym wierszu.Wypróbuj online
źródło
Python 2, 56 bajtów
Dane wejściowe mogą być
x1,y1,x2,y2
lub(x1,y1,x2,y2)
źródło