Wszyscy kochają geometrię. Dlaczego więc nie spróbujemy go zakodować w golfa? Wyzwanie to polega na przyjmowaniu liter i cyfr oraz tworzeniu kształtów w zależności od niego.
Wejście
Dane wejściowe będą miały postać (shapeIdentifier)(size)(inverter)
.
Ale czym są identyfikator kształtu, rozmiar i falownik?
Identyfikator kształtu jest identyfikatorem typu kształtu, który utworzysz za pomocą *
s. Oto identyfikatory kształtów:
s
- Plact
- Trójkąt
Rozmiar będzie między 1-20
, i jest to wielkość figury.
Falownik określa, czy kształt będzie odwrócony do góry nogami, co oznaczono znakiem a +
lub a -
. Uwaga: s3-
== (równa się), s3+
ponieważ kwadraty są symetryczne. Jednak t5-
! = (Nie jest równy) t5+
.
Końcowe białe znaki na wydruku są prawidłowe, ale początkowe białe znaki nie.
Przykłady wyników
Input: s3+
Output:
***
***
***
Input: t5+
Output:
*
***
*****
Input: t3-
Output:
***
*
Specjalne notatki
Trójkąt zawsze będzie miał nieparzystą liczbę, więc trójkąty zawsze kończą się 1 *
na górze.
Rozmiar trójkąta jest wielkością podstawy, jeśli falownik jest,
+
i jest wielkością góry, jeśli falownik jest-
.
źródło
Odpowiedzi:
Pyth,
40363432 bajty-1 bajt @isaacg
Średnik wewnątrz lambda jest teraz globalną wartością zmiennej lambda, cechą, która oszczędza jeden bajt.
Wypróbuj tutaj .
Zestaw testowy .
źródło
qez\+
go}\+z
, ponieważ+
może pojawić się tylko w ostatniej pozycji.Pyth, 38 bajtów
Zestaw testowy
Zasadniczo tak proste, jak to możliwe. Chciałbym móc połączyć logikę tych dwóch kształtów, ale obecnie jest to osobne.
źródło
JavaScript (ES6), 142
146 147Edytuj 1 bajt zapisany thx @ ETHproditions Edytuj 2 bajty sve thx @ user81655
Test (uruchom w FireFox)
źródło
\d
->.
, ponieważ gwarantowana jest dokładnie jedna cyfra przed i poi.match(/.(.+)(.)/)
->i.match`.(.+)(.)`
Python 2, 106 bajtów
Wyjście jest idealnym prostokątem, z każdą linią wypełnioną końcowymi spacjami, co, jak zakładam, jest w porządku na podstawie komentarzy w PO.
Uwaga: wciąż nie jestem pewien, czy
input
w Pythonie 2 zezwala się na takie problemy ...źródło
Japt,
6260555251 bajtówWypróbuj online!
Pierwszą rzeczą, którą musimy zrobić, to dowiedzieć się, jak duży powinien być nasz kształt. To jest dość proste:
Teraz organizujemy kształt wyniku:
Do tej pory zadbaliśmy o wielkość i kształt produkcji. Pozostaje tylko obrót. Trójkąty są obecnie skierowane w górę, więc musimy je odwrócić, jeśli trzeci znak to
+
:I przy dorozumianych wynikach, nasza praca tutaj jest zakończona. :-)
źródło
Python 2,
235193167157 bajtówAktualizacja:
Dokonano znaczącej optymalizacji przy użyciu list list i str.center (). Mam wrażenie, że mogę coś jeszcze zrobić, a potem jeszcze raz na to spojrzę.
Aktualizacja 2
Zapisano 10 bajtów dzięki sugestiom Sherlocka9. Wielkie dzięki! :)
Stara odpowiedź
Całkiem proste podejście. Zapisywanie linii na linię w ciągu, który wypisuję na końcu. Trójkąty są zawsze rysowane odwrócone i w razie potrzeby są odwracane. Fakt, że możesz pomnożyć ciąg przez liczbę całkowitą, zaoszczędził mi wiele bajtów!
Później postaram się zagrać w golfa, w międzyczasie doceniłbym sugestie, ponieważ nie jestem jeszcze tak doświadczony.
edytuj: Grałem w golfa z pomocą komentarzy i kradzieży obliczeń rozmiaru z jednej z innych odpowiedzi na python. Myślę, że to wszystko, co mogę zrobić z tym algorytmem.
źródło
wc
daje mi liczbę bajtów 235. Czy się mylę?raw_input
, użycieinput
oszczędza 4 bajty. Ponadto nie potrzebujesz nawiasów w drugim wierszu, a to i nieużywanie zmiennejx
w ogóle (używanieif"s"in d
) pozwala zaoszczędzić kolejne 9 bajtów.[]
nawiasy klamrowe w każdymjoin
wywołaniu funkcji. Po drugie,if d<"t"else
jest krótszy i działa, ponieważ"s3+"<"t"<"t3+"
w Pythonie. Po trzecieelse"\n".join
i.center(x)for
. Brak miejsca. To nie jest wymagane. Po czwarte,print o[::-1]if"+"in d else o
gdzie I łączyć rzeczy dla dwóch bajtów (jedna przestrzeń między]
iif
a drugi pomiędzyif
i"+"
.JavaScript, 220 bajtów.
Biegnij z
f(input here)
Wypróbuj tutaj!
Kwadraty mają końcowe znaki nowej linii, ale trójkąty nie. Wyjaśnienie:
źródło
Python 2,
157132 bajtówPierwsza próba potwierdziła, że
+/-
koniec był opcjonalny, pozbywanie się tego pozwoliło mi się ogolićChodzi tutaj o sporządzenie listy, która może zostać wrzucona do ogólnego wyniku. Najtrudniejszą częścią było oddzielenie długości od wejścia.
źródło
x=int(d[1]if len(d)<4 else d[1:3])
d jako ciąg wejściowy. To o 5 bajtów mniej niż twoje rozwiązanie. Nadal jesteś daleko przed moim pythonowym pytaniem, musisz spróbować zrozumieć, co tam zrobiłeś i pokonać cię następnym razem! :)x=int(d[1:-1])
jest o wiele krótszy, po prostu widziałem to w innej odpowiedzi na python.Siatkówka ,
10285 bajtówLiczba bajtów zakłada, że kod źródłowy jest zakodowany jako ISO 8859-1.
Wypróbuj online.
Spróbuję później zagrać w golfa.
źródło
\n
zamiast\r\n
. Base64 treści:XGQrCiQwJCo6wrYKXigoXHcpKyk6KDorKQokMSQyJDMkMsK2JDAKbWBzJHw6dAoKKWAoLispwrYtKFxEKikKLSQywrYkMQptYF4uCgpHYC4KVGB0czpgICo=
(bezpośrednia kopia z Notepad ++). Co dziwne, każde rozwiązanie online daje mi 85 bajtów ... Hum ...¶
. Są zdecydowanie jednobajtowe w ISO 8859-1 (o wartości 182).Poważnie, 54 bajty
Wypróbuj online
@Mego: Widzisz to
#dXdXεj
? STRING SLICING ????źródło
ES6,
178172159 bajtówDziała to dzięki ciekawej obserwacji, którą poczyniłem. Jeśli powtórzysz
n
spacje in
gwiazdki, otrzymasz (np. Dlan=5
):Teraz weź podciągi o tym samym początku i długości:
Te podciągi są dokładnie tymi, których potrzebujemy
t5
.Edycja: Zapisano 6 bajtów dzięki @ edc65.
Edycja: Zapisano 13 bajtów dzięki ukryciu
u+=v
trzeciego argumentu,substr
dzięki czemu mogę uprościć inicjalizację.źródło
t
kod obsługi okazało się, żew
iu
stał równoważne i że uratował mi na tyle bajtów, aby zabrać mnie z powrotem w dół do 178![,b,c]=s.match
a późniejs<'t'
... powinien zapisać niektóre bajty (tylko Firefox)s
pozwala mi na użycie,s<'t'
co pozwoliło mi zaoszczędzić 6 bajtów, dzięki.MATL , 48 bajtów
Używa bieżącej wersji (10.1.0) języka / kompilatora.
Kod akceptuje znaki wejściowe w dowolnej kolejności: wszystkie
s11+
,11s+
a nawet1+s1
prawidłowe ciągi wejściowe.EDYCJA (30 lipca 2016 r.): Połączony kod zastępuje się
1L3$)
przez,Y)
aby dostosować się do ostatnich zmian w językuWypróbuj online!
Wyjaśnienie
źródło
C, 259 bajtów
bez golfa
Sugestie i krytyka są bardzo mile widziane.
źródło
Ruby, 99
Oblicza kwadrat lub trójkąt o wysokości
n
i średniej szerokościn
, sprawdzając nachylenie boków (więc obliczona szerokość trójkąta wynosi 2n-1 u podstawy, 1 na końcu). Ale drukuje tylko te wiersze, które nie przekraczająn
znaków.nie wziął udziału w programie testowym
źródło
Jolf, 37 bajtów, niekonkurujący
Dodałem funkcje po opublikowaniu tego wyzwania, więc nie można tego uznać za akceptację. Jest to zakodowane w ISO-8859-7. Wypróbuj wszystkie przypadki testowe tutaj .
Część 1: parsowanie łańcucha
Część 2: uzyskanie wyniku
Część 3: odwrócenie wyniku
źródło