Na mojej klasie CS mój instruktor zlecił nam utworzenie prostokąta z gwiazdkami z poprowadzonymi przez nią ukośnymi liniami w Javie.
Powiedział nam również, abyśmy napisali go w jak najmniejszej liczbie bajtów. Sprowadziłem go do 190 bajtów, ale muszę znaleźć kilka, aby jeszcze bardziej uprościć ten kod, aby zmniejszyć bajty. Czy ktoś może mi w tym pomóc?
Ten kod działa:
interface d{static void main(String[]a){for(int z=0,w=new Byte(a[0]),h=new Byte(a[1]);z<h*w;){int y=z/w,x=z++%w;System.out.print((x>w-2)?"*\n":(y%(h-1)*x*((y-x)%3)==0)?"*":" ");}}}
Dane wejściowe to 10 10
.
Wynik:
**********
** * * *
* * * **
* * * *
** * * *
* * * **
* * * *
** * * *
* * * **
Odpowiedzi:
logicznie, za każdym razem powinien występować Asterik („*”)
i == j
ii+j==w-1
(dla przekątnych),i == 0
ij == 0
(dla górnej linii i lewej strony) ij == w-1
&i==h-1
(dla prawej strony i dolnej linii).źródło
System.out.println()
i wszystkie bezużyteczne białe spacje między rurami OR (||
) a operatorem trójskładnikowym.Podany kod można zmniejszyć, wykonując następujące czynności:
Wynikowy kod wyglądałby następująco:
Uwaga: w przykładowym wyniku pytania brakuje ostatniego wiersza! Dane wyjściowe przykładowego kodu są inne.
źródło
W rzeczywistości nie mam Java na moim komputerze, więc nie mogę tego przetestować, ale myślę, że powinien działać dla 174 bajtów i prawie na pewno można by grać w golfa więcej
białe znaki wstawione dla jasności:
wypisz „* \ n” dla ostatniego znaku w każdym wierszu, „*” dla wszystkich pierwszych i ostatnich wierszy oraz pierwszej kolumny i „*” za każdym razem, gdy suma wiersza i kolumny jest parzysta, w przeciwnym razie drukowane „”
źródło