Biorąc pod uwagę tylko linię prostą i kompas, wpisz romb wewnątrz danego prostokąta, dzieląc dwa przeciwne punkty.
Wkład
Dane wejściowe to wymiary prostokąta. W pokazanym przykładzie byłoby to 125, 50
. Możesz pobierać dane w najbardziej dogodny sposób (jako dwie liczby całkowite, lista, ciągi znaków itp.).
Większy wymiar będzie wynosił minimum 100, a mniejszy będzie wynosił minimum 25. Oba limity wynoszą 200.
Wydajność
Wyjściem będzie obraz (wyświetlany na ekranie lub zapisany jako plik)
- Prostokąt wejściowy
- Wszystkie „działające” linie / okręgi
- Wpisany romb
w wyraźnych kolorach. Na powyższym obrazie prostokąt jest czarny, linie robocze są niebieskie, a romb pomarańczowy. Linie powinny być rysowane w kolejności pokazanej na liście (np. Romb zastępuje linie robocze i prostokąt).
Obraz wyjściowy musi być wystarczająco duży, aby pomieścić wszystko. Na przykład pokazane kręgi nie mogą wyjść poza granice.
metoda
Metodą zastosowaną w powyższym przykładzie jest:
- Narysuj okrąg, używając lewego dolnego rogu jako środka, a górnego prawego jako punktu na obwodzie, nadając promień równy przekątnej prostokąta.
- Zrób to samo, ale zamień punkty środkowe i obwodowe.
- Narysuj linię między przecięciami dwóch kół, nadając prostopadłą dwusieczną do przekątnej prostokąta.
- Użyj skrzyżowań nowej linii i prostokąta, aby narysować romb.
Działa to, ponieważ wewnętrzne przekątne rombu zawsze są prostopadłe do siebie. Nie dołączam tutaj jednak pełnego tego dowodu.
Nie jest to jedyna metoda na zdobycie rombu i możesz użyć innej, biorąc pod uwagę, że wyjaśnisz, co robisz. Myślę , że to chyba najłatwiejsze.
Zasady
Możesz rysować tylko koła i linie (a raczej segmenty linii). Okrąg jest definiowany za pomocą punktu środkowego i punktu obwodowego. Linia jest zdefiniowana przez dowolne dwa punkty. Linie nie muszą mieć żadnej określonej długości, ale muszą co najmniej obejmować punkty definiujące (zwróć uwagę na przykładowy obraz: linia przechodzi nieco poza przecięcia okręgu, ale nie do krawędzi). W przypadku okręgów promień od środka do wybranego punktu obwodowego jest uważany za linię roboczą i musi zostać pokazany.
Aby zrasteryzować linie, możesz użyć dowolnego rozpoznanego algorytmu (np. Bresenhama) lub polegać na wszelkich wbudowaniach, jakie może mieć Twój język. Jeśli Twoje dane wyjściowe są oparte na wektorze, upewnij się, że są wyświetlane w rozdzielczości co najmniej tak dużej, jak prostokąt wejściowy w pikselach. Będziesz także rysować na zwykłym płótnie, więc proszę, pomiń wszelkie znaki siatki lub obce wyniki.
Bez oszukiwania! Możesz określić położenie punktów / linii / okręgów tylko na podstawie tego, co ustaliłeś do tej pory. Jeśli nie potrafisz wyjaśnić, jak używać linii roboczych / okręgów do pokazania, że to romb, robisz to źle.
Możesz użyć dowolnej pary przeciwnych punktów, a prostokąt nie musi być narysowany w linii, o ile dane wyjściowe są prawidłowe.
Wejście zawsze będzie prostokątem innym niż kwadrat, więc nie martw się o specjalną obudowę.
Wreszcie jest to standardowy kod golfowy, więc wygrywa najmniejszy rozmiar w bajtach.
źródło
Odpowiedzi:
HTML + JavaScript (ES6), 34 + 353 = 387 bajtów
Dane wejściowe należy podać w formacie
[125,50]
.Po prostu dużo matematyki i rysowania ... Prostokąt jest rysowany na boki, jeśli wysokość jest większa niż szerokość, która moim zdaniem jest dozwolona.
źródło
444
: P400
;-)Mathematica,
157148158 bajtówPodziękowania dla Martina Endera za komentarze w ich wysokiej jakości! W tym przypadku zapisano 9 bajtów.
Edytowane, gdy wyjaśniono, że argumenty mogą występować w dowolnej kolejności; Dodano 10 bajtów w celu kompensacji.
Ponownie tutaj świeci Mathematica: grafika na wysokim poziomie z wykorzystaniem obliczeń matematycznych. Ten sam kod ze spacjami i znakami nowej linii dla czytelności dla ludzi:
Nienazwana funkcja pojedynczego argumentu, który jest uporządkowaną parą liczb dodatnich; końcowy
@@ Sort@# &
konwertuje tę parę na dwa argumenty liczbowe, przy czym pierwsza liczba jest mniejsza.Line
tworzy ścieżkę wielokątną od punktu do punktu, która zamieni się w zamknięty wielokąt, jeśli pierwszy i ostatni punkt są takie same;Circle
tworzy okrąg o danym środku i promieniu. Specjalne punktyo
ic
(lewy dolny i prawy górny róg prostokąta),p
(trzeci romb rombu, określony wzorem matematycznym) ik
(pomagając narysować prostopadły dwusieczny) otrzymują nazwy po drodze, aby zapisać bajty po ponownym wywołaniu , podobnie jak specjalna para punktówl = {o,c}
. Mathematica chętnie dodaje punkty bezpośrednio, mnoży obie współrzędne przez ten sam współczynnik, bierze ich iloczyn iloczynu itp., Które upraszczają kod.Przykładowe dane wyjściowe z argumentami
125
i50
:źródło
{0,0}
. Ponieważ nie ma wymogu używania niebieskiego i pomarańczowego, możesz zapisać bajty, używającRed
zamiastOrange
. UżywaszLine
czterech razy, co jest więcej niż wystarczające, aby zapisać bajtyi=Line;
(z reguły jeśli wyrażenie zawieran
znaki i używasz go tylem
razy, ile potrzebujesz(m-1)*(n-1) > 4
, mniej, jeśli możesz przypisać zmienną podczas pierwszego użycia bez nawiasów).0{,}
sztuczka jest fantastyczna: D@@Sort@#&
i zamieniając#
i w#2
całym kodzie lub alternatywnie dostosowując go do pracy z prostokątami orientacji pionowej.MetaPost, 473 (z kolorem) 353 (bez koloru)
Kolorowy (473 bajtów):
Niekolorowane (353 bajty):
Nigdy wcześniej tego nie używałam i jestem pewna, że to zrobiłem ...
Ale kiedy uruchomisz to na tej stronie:
http://www.tlhiv.org/mppreview/
Wykorzystuje przecięcie kół, aby narysować drugą oś, a następnie używa przecięcia osi i prostokąta, aby narysować końcowy romb. Chociaż mogłem oszukać i po prostu narysować linię prostopadłą do pierwszej osi haha.
Aby zmienić wymiary, wystarczy zmienić A i B.
Niezależnie od tego kończysz na (dla L = 170, H = 100):
źródło
Desmos, 375 (lub 163) bajtów
w
ih
są danymi wejściowymi. Wypróbuj na Desmos!Alternatywna wersja 163-bajtowa:
Ta wersja wymaga kopiowania i wklejania każdej linii do każdej osobnej linii w Desmos. Meta nadal musi zdecydować, czy jest to poprawna metoda liczenia, ale poprzednia metoda jest zdecydowanie w porządku.
źródło
ImageMagick wersja 7.0.3 + bash + sed, 496 bajtów
Wynik z „rhombus.sh 180 120”
Dokładniej (przy użyciu płótna 6400 x 6400 zamiast 800 x 800), 570 bajtów
Przecięcia nie są dokładne; dyrektywa „strokewidth” sprawia, że linie są wystarczająco szerokie, aby mieć pewność, że co najmniej jeden cały piksel zostanie zmieszany tylko z kolorami dwóch przecinających się linii, ale w najgorszych przypadkach (25 x 200 i 200 x 25) skrzyżowania są pod małym kątem, więc chmura pikseli mieszanych ma kilka pikseli długości, a ponieważ wybieramy pierwszy i ostatni piksel mieszany, istnieje niewielki błąd. Użycie 8-krotnie większego obszaru roboczego o tej samej szerokości linii, a następnie skalowanie wyniku w dół zmniejsza błąd do mniej niż jednego piksela, ale przy około 64-krotnym opóźnieniu czasowym.
Wyniki zwykłego 800 x 800 w porównaniu z dokładnym 6400 x 6400:
Nie golfowany:
źródło
R, 290 bajtów
Funkcja anonimowa, dane wyjściowe są wyświetlane na ekranie. Nieco golfa z komentarzami:
Przykładowe dane wyjściowe dla (120,100):
źródło
LibreLogo , 270 bajtów
Kod:
Wynik:
Wyjaśnienie:
źródło
Python 3.5 + Tkinter, 433 lub 515 bajtów
Bezbarwny (433 bajty):
Kolorowy (515 bajtów):
Nazwana funkcja, która przyjmuje dane wejściowe jako 2 liczby oddzielone przecinkami. Dane wyjściowe są podawane w osobnym oknie, którego zmiana może być konieczna, aby zobaczyć pełne dane wyjściowe. Oto przykładowy kolorowy wynik dla
V(180,130)
:źródło
SmileBASIC, 280 bajtów
(Zrzut ekranu / wyjaśnienie zostanie wkrótce opublikowany) Kolor tła jest czarny, prostokąt jest czerwony, koła i linie są białe, a romb jest żółty.
źródło