Powinieneś napisać program lub funkcję, która odbiera objętość misy i objętość wody w niej jako dane wejściowe i wyjściowe lub zwraca reprezentację ASCII misy z wodą w niej o pożądanych objętościach.
Miska ma następującą strukturę:
\ /
\___/
Miska ma co najmniej jedną _
postać. Liczba \
'i /
' są również dodatnie i są równe ze względu na symetrię.
Objętość misy jest łączna liczba _
i space
znaków między \
„s i /
” s plus jeden dla każdej pary \
i /
. Oznacza to, że powyższa misa ma objętość 10
:
\ / => xxxxx x (the last one is for the \/ pair)
\___/ xxx x (the last one is for the \/ pair)
Pamiętaj, że dwie różne miski mogą mieć tę samą objętość. Np. Obie następujące miski mają objętość 18:
\ /
\ / \ /
\___/ \_______/
Możemy wlać trochę wody do miski. Woda jest reprezentowana jako rząd ~
znaków zamiast spacji w misce. W dolnym rzędzie nie ma spacji, więc nie może zawierać ~
znaków. Oznacza to, że nasz przykład można napełnić wodą tylko w jeden sposób:
\~~~~~/
\___/
Inne miski można napełniać na wiele sposobów:
\~~~~~/ \ /
\ / \~~~/
\_/ \_/
Objętość wody w misce jest ilość rzędów miski poniżej tych ~
znaków. Powyższe przykłady mają 4, 6 and 2
odpowiednio objętości wody .
Wejście
- Dwie dodatnie liczby całkowite, objętość miski i objętość wody.
- Możesz wybrać kolejność dwóch liczb.
- Dwie liczby całkowite można wprowadzić w dowolnym typowym formacie listy (lista, krotka, tablica itp.) Lub jako dwie oddzielne liczby całkowite.
- Dla wartości wejściowych gwarantowana jest co najmniej jedna poprawna konfiguracja woda w misce.
Wynik
- Reprezentacja ASCII misy z wodą, gdzie objętość misy i wody są zgodne z danymi wejściowymi.
- Jeśli zdecydujesz się zwrócić wynik zamiast drukowania, powinien on zostać zwrócony jako pojedynczy ciąg (lub najbliższa alternatywa dla twojego języka).
- Dowolne końcowe białe znaki są dozwolone.
- Niedozwolone jest wprowadzanie niepotrzebnych początkowych białych znaków.
- Jeśli istnieje wiele poprawnych konfiguracji, możesz wybrać, którą z nich wyprowadzasz, ale możesz wyprowadzić tylko jedną z nich.
Przykłady
Po każdej parze liczb całkowitych wejściowych następuje jedno lub więcej możliwych wyjść.
6 2
\~~~/
\_/
10 4
\~~~~~/
\___/
24 8
\ /
\~~~~~~/
\ /
\__/
42 12 //either of the two output is correct
\ /
\ /
\~~~~~~~/
\ /
\ /
\_/
\ /
\~~~~~~~~~~~~~/
\___________/
90 68
\~~~~~~~~~~~~~~~~~~~~~/
\ /
\ /
\ /
\_____________/
102 42
\ /
\ /
\~~~~~~~~~~~~~~~~~/
\ /
\ /
\___________/
To jest golf golfowy, więc wygrywa najkrótszy wpis.
źródło
At least one valid bowl-water configuration is guaranteed for the input values.
- OPJavaScript ES5, 364 bajty
To jest coś, co mogę szybko wymyślić podczas lunchu, pomóż mi zagrać w golfa do końca mojej zmiany!
Źródło
Gra w golfa:
(przebiegał przez kompresor, aby skompresować, przerwa na lunch dobiegła końca)
źródło
Perl,
227172 bajtówUruchom z opcją -n:
Dzięki Dennisowi za pomoc w grze w golfa.
Oblicza objętość misy jako wysokość * (szerokość + wysokość), gdzie szerokość to liczba
_
znaków, a wysokość to liczba\
znaków.Każda kombinacja wysokości i szerokości jest testowana w parze zagnieżdżonych pętli, aż do znalezienia właściwej objętości miski, a następnie wykonywana jest kolejna pętla nad możliwymi poziomami wysokości wody, aby sprawdzić, czy przy tej szerokości możliwa jest prawidłowa objętość wody.
Trzecią pętlę można usunąć, po prostu obliczając poziom wody za pomocą wzoru kwadratowego o wartości 1, b jako szerokości ic jako ujemnej pożądanej objętości wody i sprawdzając, czy jest to liczba całkowita, ale to zajmuje więcej bajtów niż tylko wykonywanie pętli. Oto i tak (183 bajtów):
źródło
Python 2, 162 bajty
Trochę bałagan, ale oto moja pierwsza próba. Sprawdza wszystkie możliwe liczby wierszy
r
, ustawiając liczbę bazowych znaków podkreśleniaa = V/r-r
. Następniek
sprawdza wszystkie możliwe wysokości poziomu wody i sprawdza, czy miska jest ważna, a jeśli tak, to drukuje.źródło
Python 2.7,
284270260 bajtówTo w zasadzie oblicza wysokość i szerokość wiadra i wody i drukuje je.
Próbowałem ciężko usunąć brzydką część pętli while na początku (w której obliczam wysokość wiadra i wysokość, z której należy narysować wodę. W tej chwili wszystkie linie w kodzie, z wyjątkiem ostatniego, służą do obliczania szerokości i wysokość). Wciąż próbuję: P
Testowanie w różnych przypadkach -
źródło