Wprowadzenie
Normalna szachownica zawiera 8 x 8 = 64 kwadratów:
Widać, że w sumie jest 12 białych elementów . Czarno-białe zawsze mają tę samą ilość sztuk. Jeśli na planszy znajduje się więcej pionków, będą się one sąsiadować, co nie jest dozwolone w tym wyzwaniu. Aby to wyjaśnić, oto kilka przykładów:
Najmniejsza możliwa plansza do tego wyzwania to 3 x 3 :
Widać, że maksymalna ilość sztuk wynosi 2 . Tak więc, gdy podano N = 3 , musisz wyprowadzić 2 . Jeśli wartością wejściową jest N = 4 , otrzymujemy:
Widać, że maksymalna kwota wynosi również 2. Więc dla N = 4 , wynik powinien wynosić 2 . Dla N = 5 wynik powinien być równy 5 :
Przykłady
STDIN: 3
STDOUT: 2
STDIN: 4
STDOUT: 2
STDIN: 5
STDOUT: 5
STDIN: 6
STDOUT: 6
STDIN: 8
STDOUT: 12
Zasady
- Twoje zgłoszenie musi być programem lub funkcją itp., Która pobiera jedną liczbę całkowitą i wysyła lub zwraca liczbę elementów na płycie
- Możesz bezpiecznie założyć, że wejście jest nieujemną liczbą całkowitą> 2
- To jest golf golfowy , więc wygrywa program z najmniejszą liczbą bajtów!
- Zauważ, że kwadrat w lewym dolnym rogu planszy jest zawsze ciemny. Kawałki są umieszczane tylko na ciemnych kwadratach
- Musisz zająć pełny rząd kawałkami
code-golf
game
grid
board-game
Adnan
źródło
źródło
Odpowiedzi:
Par , 8 bajtów
Jeden bajt jest używany na znak.
Wyjaśnienie
źródło
Sześciokąt , 19 bajtów
Wypróbuj online.
Wyjaśnienie
Jest to wciąż to samo obliczenie, którego użyłem w odpowiedziach na CJam i Labirynt, ale ze względu na ... specjalny ... model pamięci Hexagony'ego, trudniej jest wycisnąć obliczenie na 19 bajtów (tak, aby mieściło się w długość sześciokąta 3).
Podobnie jak moja odpowiedź z Labiryntu, kończy się to błędem dzielenia przez 0.
Oto rozwinięty kod:
Jak powiedziałem, kod jest całkowicie liniowy. Wykonaną ścieżkę można poskładać w kolejności szaro-fioletowo-zielono-czerwono-niebieska. Ścieżka faktycznie biegnie nieco dalej, dopóki nie trafi
:
w lewo. Usuwając/
(co tylko przekierowuje przepływ sterowania), cały program rozwijany liniowo jest:Pytanie brzmi, jak to działa. Pamięć sześciokąta jest wykresem liniowym siatki szesnastkowej, gdzie każda krawędź siatki zawiera wartość całkowitą (początkowo zero). Wskaźnik pamięci (MP) zawsze znajduje się na jednej krawędzi i wskazuje w określonym kierunku wzdłuż tej krawędzi. Operacje arytmetyczne na ogół stosuje się do dwóch krawędzi wskazanych w i przechowywane w krawędzi MP jest włączony.
W tym programie użyjemy trzech krawędzi oznaczonych A , B , C , przy czym MP rozpocznie się tak, jak pokazano tutaj:
Oto jak to działa:
źródło
{
adres IP przeskakuje do2
lewego rogu. Po)
prawym rogu adres IP przeskakuje do'
lewego dolnego rogu. Następnie IP przemierza linie 2 i 4 w dziwny cyklicznie owijający sposób.LabVIEW,
2820 LabVIEW Prymitywyźródło
CJam, 10 bajtów
Sprawdź to tutaj.
Wyjaśnienie
źródło
Labirynt , 11 bajtów
Woohoo, tylko jeden bajt za CJam .
Wypróbuj online.
To w zasadzie to samo:
Jednak w tym momencie program jeszcze się nie kończy. Zamiast tego wskaźnik instrukcji uderzył w ślepy zaułek i odwrócił się. Ale teraz
/
próbuje obliczyć,0/0
która kończy się błędem .źródło
Poważnie , 8 bajtów
Poważnie ma przydatny
½
(dzielnik zmiennoprzecinkowy przez 2) iK
(pułap), więc nie musimy dodawać jednego przed dzieleniem.Wypróbuj tutaj z wyjaśnieniem.
źródło
Python 2,
2221 bajtówNajpierw oddzielam w dwóch przypadkach, nieparzystym N, a nawet N.
Dziwnym N możemy wypełnić (N - 1) / 2 rzędy, zawierające średnio N / 2 sztuki. Ponieważ pierwszy rząd zawsze zawiera więcej elementów, ten wynik należy ograniczyć. Tak więc, gdy N jest nieparzyste, mamy kawałki sufitu ((N-1) / 2 * N / 2).
Nawet parzystym N możemy wypełnić N / 2 - 1 lub rzędy podłogi ((N - 1) / 2), każdy rząd zawiera N / 2 sztuki.
Możemy połączyć te dwa wyrażenia według sufitu (floor ((N-1) / 2) * N / 2). Ponieważ ceil (x / 2) = podłogi ((X + 1) / 2), można użyć podłogi podział:
((N - 1) // 2 * N + 1) // 2
.źródło
JavaScript,
3735 bajtówWyjaśnienie
Używa techniki podobnej do pozostałych odpowiedzi. To jest algorytm bez golfa:
źródło
dc, 12
Wyjście testowe:
źródło
Pyth, 9 bajtów
Ten sam algorytm, co moja odpowiedź w języku Python 2.
źródło
Japt ,
1614 bajtówWypróbuj online!
Jak to działa
Dość proste:
Chciałbym, aby był jakiś sposób, aby wziąć pod uwagę, że dwie połówki kodu są tak podobne. Sugestie mile widziane!
Stara wersja (16 bajtów):
źródło
Java,
23015552Gra w golfa:
Nie golfowany:
Wyjście programu:
źródło
throws Exception
jest dozwolone.Scanner
klasy do wprowadzania danych. Myślę, że zaoszczędziłoby ci to kilka bajtów. ( KombinacjaBufferedReader
/InputStreamReader
może być lepsza w ogólnym użyciu, ale jest to kodowanie w golfa iScanner
działa dobrze dla prostych danych wejściowych.)Kod maszynowy Zilog ez80, 9 bajtów
W hex:
W montażu:
Wejście jest w rejestrze
h
, a wyjście jest wl
.Zilog ez80 to 8-bitowy procesor z 8-bitowym akumulatorem i rejestrami 24-bitowymi. W przeciwieństwie do Z80 ma
mlt
instrukcję (8-bitowe zwielokrotnienie), która w trybie 16-bitowym mnoży tutaj wysokie i niskie bajty pary rejestrówhl
i zapisuje z powrotem whl
.Działa to tylko w przypadku wartości, dla których dwukrotność wyniku mieści się w 8 bitach; to jest, n ≤23.
źródło
TI-BASIC, 13 bajtów
Ukryte mnożenie TI-BASICA pomaga, ale nie ma podziału na liczby całkowite.
⁻int(⁻X
jest krótszą formą ceil (x).źródło
vba, 46
Wywołaj za pomocą? F (x) lub = f (A1) we wzorze
źródło
Pyth,
171413 bajtów-3 bajty dzięki Ypnypn ! Zmieniono numery operatora *, aby zaoszczędzić 1 bajt.
Wyjaśnienie:
Kiedy n jest parzyste, możemy zajmować n / 2-1 wierszy z n / 2 kawałkami, co daje w sumie n * (n / 2-1) / 2 kawałki. To wyrażenie jest równoważne (n * (n / 2-1) +1) / 2
Gdy n jest nieparzyste, możemy dowiedzieć się, jak dwa razy będzie wyglądała liczba sztuk, dwa razy liczba elementów obejmie n-1 rzędy, a jeśli zabiorę jeden kawałek, możemy podzielić n-1 rzędy na (n- 1) / 2 grupy po 2 rzędy, tak że każda grupa ma n elementów, więc wyrażenie dla tego przypadku to (n * (n / 2) +1) / 2
Teraz, gdy oba wyrażenia są dość podobne, możemy napisać kod.
Pierwszy raz używałem języka golfowego.
źródło
JavaScript, 33 bajty
Jeśli funkcja ES6 jest dozwolona, to 18 bajtów:
źródło
MATLAB,
3725 bajtówWierzę, że to powinno działać, działa dla wszystkich przypadków testowych.
Działa również na Octave . Możesz spróbować online tutaj .
Do starego kodu dodałem program do tego obszaru roboczego w pliku o nazwie
checkerboard.m
. Możesz go uruchomić, po prostu wprowadzająccheckerboard
monit, a następnie, gdy się uruchomi, wprowadź wymagany rozmiar w monicie. Wynik zostanie wydrukowany.W przypadku nowego kodu wystarczy wpisać kod opublikowany tutaj w wierszu polecenia, a następnie wywołać funkcję anonimową jako
ans(n)
.źródło
Siatkówka , 18 bajtów
Wejście i wyjście jest jednoargumentowe .
Wypróbuj online!
Najnowsza wersja Retina (nowsza niż to wyzwanie) może obsługiwać dziesiętne operacje we / wy dla czterech dodatkowych bajtów:
Wypróbuj online!
Dzięki jednemu wprowadzeniu i wyjściu dziesiętnemu możemy zrobić 16 bajtów, ale wydaje się to trochę rozciągnięte:
Wyjaśnienie
Nadal takie samo podejście, jak ktokolwiek inny, ale przy użyciu zastępowania wyrażenia regularnego na jednostkowej reprezentacji liczby.
To się oblicza
n*((n-1)/2)
. Robimy to, dopasowując dwa znaki na raz (dzielenie przez dwa) i zamieniając je na cały ciąg (mnożenie przezn
). Zmniejszenian
dokonuje się, pomijając resztę ciągu, jeśli pozostanie tylko jeden lub dwa znaki.Jest to dzielenie liczb całkowitych przez 2, zaokrąglone w górę. Po prostu zamieniamy dwie postacie na jedną (dzielenie przez 2), ale pozwalamy, aby ostatnie dopasowanie składało się tylko z jednej postaci (zaokrąglanie w górę).
źródło
Python 3, 39 bajtów
To jest trochę rozdęte, ale nie jestem pewien, czy mógłbym grać w golfa znacznie dalej. Link do testowania.
źródło
Prolog,
3938 bajtówKod:
Wyjaśnienie:
Przykład:
Wypróbuj online tutaj
Edycja: Zapisano 1 bajt, zastępując ceil / 2 + 1 // 2
źródło
Świnka, 17 bajtów
Dzięki Emignie za proste wyjaśnienie algorytmu. Wykorzystuje to „niedobór” matematyki Mumpsa polegający na tym, że operacje są wykonywane ściśle od lewej do prawej (nie PEMDAS), więc nawiasy nie są wymagane. :-)
Dane wyjściowe wyglądają jednak trochę dziwnie, ponieważ Cache's Ensemble (środowisko Mumps, do którego mam dostęp) nie wyświetla automatycznie powrotu karetki nawet po naciśnięciu na wejściu. Jeśli chcesz ładniej, dodaj 4 znaki dla zwrotów przed / po przewozie:
Dzięki!
źródło
Bash, 32 bajty
źródło
Pyke, 8 bajtów, niekonkurujące
dup, dec, half, mult, inc, half
Wypróbuj tutaj!
źródło
Partia, 30 bajtów
38 bajtów, jeśli wymagane jest wejście standardowego wejścia:
źródło