Utwórz funkcję lub program, który ustawi siatkę jak najbliżej kwadratu, jak to możliwe
- Jako dane wejściowe otrzymasz liczbę całkowitą N , liczby całkowite (1,2,3,25 itd.)
- Wyjściem musi być idealna prostokątna siatka N liter możliwie najbliżej kwadratu
- Kwadrat (wannabe) musi składać się z jednej z liter O lub X określonych przez użytkownika
Punkty :
- Zakodowane na stałe tylko dla O lub X: +1
- Param (0/1, prawda / fałsz, coś podobnego) do obracania wyjścia (jak przy 5 lub 8): -10
- Zaprojektuj kwadrat (użyj zarówno O, jak i X w pewnym wzorze): -5
Wzór uważa się za prawidłowy, jeśli zawiera oba typy znaków (gdzie oś x / y> = 3), a wzór pozostaje taki sam, gdy jest odwrócony w poziomie lub w pionie (dozwolona jest wymiana X z Os)
Przykłady
INPUT: 4 INPUT: 5 INPUT: 8 INPUT: 9
OO OOOOO XXXX XOX
OO XXXX OXO
or rotated 90deg XOX
Przykłady, które są niedozwolone (inny wiersz lub kolumna o tej samej długości)
BAD RESULT: 5a BAD RESULT: 5b BAD RESULT: 8
OOO OO OOO
OO OO OOO
O OO
Jeśli to możliwe, podaj przykład online.
"xo"[i]
zamiast tego dostaję trzy punktyi
? To nie wydaje się tego warte. Ogólnie rzecz biorąc, wszystkie twoje nagrody wydają się trochę niskie.Odpowiedzi:
CJam, 16 (31–10–5)
To trwa dwie liczby całkowite są wprowadzane, najpierw samopoczucie
0
lub1
na drugim kierunku i jest liczbąO
lubX
w sieci.Drukuje alternatywne
O
iX
.To jest tylko funkcja funkcji, aby ją wypróbować dodaj
l~
przed kodem, np .:i dać wkład jak
aby uzyskać wynik jak
lub wejście jak
dla
Wypróbuj online tutaj
Jak to działa:
Przykładowy przebieg:
źródło
APL (36-5-10 = 21)
Lewy argument to rotacja, prawy argument to rozmiar. Używa również prostego wzorca (po prostu zamienia „X” i „O”).
Wyjaśnienie:
∆←,⍳2/⍵
: wygeneruj wszystkie możliwe pary liczb od1
do⍵
i zapisz w∆
.∆←∆[⍋|-/¨∆
...]
: sortuj∆
rosnąco według absolutnej różnicy dwóch liczb w każdej parze i zapisz wynik z powrotem∆
.⊃∆/⍨⍵=×/¨∆
: dla każdej pary pomnóż liczby razem. Wybierz tylko te pary, które się mnożą⍵
, i weź pierwszą pasującą (która jest „najbardziej kwadratowa” ze względu na sortowanie).⍺⌽
: obróć listę długości (która ma 2 elementy) o⍺
.'OX'⍴⍨
: utwórz macierz tego rozmiaru i wypełnij ją naprzemiennieO
iX
.źródło
Haskell, 59 znaków
źródło
CJam,
252221 (31–10)To jest ciało funkcyjne. Jeśli chcesz mieć pełny program, dodaj
riri
go z przodu. Jeśli chcesz użyć go jako bloku kodu, otocz go{}
. Przetestuj na cjam.aditsu.net .Bierze dane wejściowe jako dwa argumenty całkowite: przełącznik określający, czy prostokąt jest pionowy (dowolna wartość niezerowa) czy poziomy (zero), oraz liczbę
O
s do użycia.Wyjaśnienie
źródło
JavaScript (E6) 84 (83 + 1) lub 101 (116-10-5)
Wzór + obrót (parametr f, 0 lub 1) - bonus 15
Bez wzoru, bez rotacji - kara 1
Testuj w konsoli FireFox / FireBug
źródło
Python,
7975 (bez bonusów)Bonusy wydają się trudne, więc tutaj jest całkiem prosta funkcja Pythona:
źródło
f(8)
dał mi jedną kolumnę 8O
s, co jest niepoprawne.>
którym powinno być<
. Teraz jest naprawione. Dzięki za notatkę!Ruby, 74
Wyjaśnienie
Integer
.n
(wejście) jest podzielne przez każdą liczbę całkowitą od 1 don
.n
).String#*
metody, aby „narysować” kwadrat.źródło
APL (Dyalog Unicode) , 30-15 = 15 bajtów SBCS
Anonimowy przyrostek lambda. Przyjmuje N jako prawy argument, a param jako lewy argument. Prostokąty będą miały paski X i O lub będą w szachownicę.
Wypróbuj online!
{
…}
„Dfn”;⍺
is left argument (param),⍵
is right argument ( N ):⍳⍵
d ndices 1… N∘.×⍨
tabliczka mnożenia tego⍵=
maska, w której N jest równe⍸
Wskaźniki prawdziwych wartości w mascec←
Przechowywać żec
(na c andidates)≢
zliczyć kandydatów.5×
połowa pomnożona przez to⌈
sufit (zaokrąglony w górę)⊃∘c
wybierz ten element zc
⍴∘'XO'
użyj tego do cyklicznego przekształcania „XO”⍉⍣⍺
transponuj, jeśli paramźródło
05AB1E (starsze) , wynik: 7 (22 bajtów - 15 premii)
Wypróbuj online lub sprawdź więcej przypadków testowych .
N
Najpierw pobiera dane wejściowe , a następnie wartość logiczną (0
/1
), czy powinna się ona obracać, czy nie.Używa starszej wersji 05AB1E w Pythonie, ponieważ zip z listą ciągów domyślnie spłaszcza i łączy znaki, w przeciwieństwie do nowszej wersji 05AB1E przepisującej Elixir.
Wyjaśnienie:
źródło
GolfScript 26 (41–10–5)
Oczekuje, że na stosie znajdą się dwa parametry:
0
dla normalnego lub1
transponowanegon
wartośćWzór jest taki, że tablica jest pełna
X
s, a lewy górny róg toO
. Nie trzeba dodawać, że ten wzór zachowuje się podczas transpozycji planszy.Demo: zwykłe , transponowane
źródło
Mathematica, 71 znaków
źródło
Petit Computer BASIC, 72 bajty
źródło
J , 32 bajty - 15 = 17 bajtów
Wypróbuj online!
Obrót jest kontrolowany przez flagę 0/1 wziętą jako lewy argument
źródło
Siatkówka 0.8.2 , 66 bajtów + 1 bajt kary = 67
Wypróbuj online! Wyjaśnienie:
Konwertuj dane wejściowe na ciąg
X
s.Pierwszy przebieg przechwytywania zewnętrznego jest zgodny z początkiem ciągu, a przy kolejnych przejściach dopasowywana jest poprzednia wartość przechwytywania wewnętrznego. Wewnętrzne przechwytywanie jest następnie zwiększane i dopasowywane. Rezultatem tego jest to, że ilość łańcucha zużytego przez przechwytywanie zewnętrzne jest kwadratem przechwytywania wewnętrznego, a zatem nie może przekraczać pierwiastka kwadratowego wejścia. Tymczasem kolejne powtórzenie zapewnia, że przechwytywanie wewnętrzne jest czynnikiem długości łańcucha.
Zapisz wykryty czynnik i oblicz drugi dzielnik, dodając liczbę kolejnych powtórzeń.
Zmień układ czynników na prostokąt.
źródło
Węgiel drzewny , 33 bajty - 10-5 = 18
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Wejście
N
.Weź zakres
0
...N
zachowaj tylko liczby, których kwadraty są nie mniejsze niżN
i podzielN
, i weź minimum tych liczb.Użyj odkrytego współczynnika, aby wygenerować prostokąt o odpowiedniej szerokości i wysokości za pomocą wzoru szachownicy. (Powinno to dotyczyć
UOη÷θηXO¶OX
oszczędności 1-bajtowej, ale w tej chwili jest to problem.)Jeśli drugie wejście jest niezerowe, obróć wyjście. (Jeśli wymaganie drugiego wejścia jest
0
lub2
jest akceptowalne, może to oznaczać⟲N
oszczędność 1 bajtu).źródło