Zadanie
Teatr ma 10 rzędów, oznaczonych A
na J
od przodu do tyłu, a 15 miejsc w każdym wierszu, ponumerowanych od 1 do 15, od lewej do prawej.
Program korzysta z następujących zasad, aby wybrać najlepsze miejsca.
- Zasada 1: Wszystkie miejsca w jednej rezerwacji muszą znajdować się w tym samym rzędzie obok siebie.
- Zasada 2: Siedzenia muszą znajdować się jak najbliżej przodu, a następnie możliwie jak najbliżej lewej (najniższa litera, a następnie najniższa liczba)
Napisz funkcję, która przyjmuje liczbę żądanych biletów jako liczbę całkowitą ( n
) i wyświetla najlepsze miejsca dostępne na liście długości n
.
Twój program powinien:
- Wyjście,
-1
jeśli 1> Wejście lub Wejście> 15 * - Dane wyjściowe,
-1
jeśli siedzenia nie są dostępne * - Mieć funkcję
B(n)
, za pomocą której użytkownik może wprowadzić żądaną liczbę miejsc.
* Możesz wypisać -1 na liście, jeśli to ułatwi
Przykłady
I / O
Wywołanie B(5)
nowej tablicy powinno oddzwonić [A1, A2, A3, A4, A5]
Wywołanie B(2)
po tym powinno następnie powrócić [A6, A7]
Wywołanie B(10)
po tym powinno następnie powrócić [B1, B2, ... B9, B10]
Wywołanie B(-1)
powinno zawsze powrócić-1
Rozwiązanie bez golfa Python
Theatre = [ [False] * 16 ] * 11
def B(n):
if 0 <= n <= 15:
for i in range(10):
for j in range(15-n+1):
try:
if not Theatre[i][j]:
if not Theatre[i][j + n]:
row = i
start = j
List = []
for q in range(n):
List.append(chr(row + 65) + str(start + q + 1))
Theatre[row][start + q] = True
return List
except:
break
return -1
Odpowiedzi:
JavaScript - 172
Sama funkcja to 172:
Wejście:
Wynik:
źródło
JavaScript ( ES6 ) -
13012710710198Demo tutaj: http://jsfiddle.net/tBu5G/
Niektóre pomysły zaczerpnięte z @ edc65
źródło
n=0
Haskell, 129
Trzeba było wprowadzić pewne poprawki, aby funkcja ta działała w Haskell:
b
zwraca parę: bilety (jeśli to możliwe) i nowy stan teatru.t
jest początkowym stanem teatru, z niesprzedanymi wszystkimi biletami Również zwrot-1
był nienaturalny dla Haskell, więc jeśli nie można wystawić biletów na żądanie, pusta lista jest zwracana dla biletów.źródło
APL (75)
Test:
Wyjaśnienie:
T←10 15⍴0
:T
to matryca 15 na 10, która utrzymuje stan teatru (0 = wolny)B←{
...}
: funkcja(⍵∊⍳15)
: jeśli⍵
należy do zbioru liczb całkowitych od 1 do 15,∨/Z←,T⍷⍨⍵/0
: iT
zawiera⍵
zera z rzędu (przechowujące możliwe punkty początkowe wZ
),:
: następnie:(⊃Z/,⍳⍴T)
: wybierz możliwe współrzędne początkowe i weź pierwszą,∘+¨1-⍨⍳1⍵
: dodaj⍵-1
więcej pozycji po prawej stronie współrzędnej początkowejP←
: zapisz współrzędne wP
{⎕A[⍺],⍕⍵}/¨
: sformatuj współrzędneT[P]←
: przechowuj sformatowane współrzędne w ich miejscach wT
. (zrobią to wszystkie niezerowe wartości w T)+
: zwraca wynik, którym są sformatowane współrzędne (domyślnie wynik przypisania jest domyślny)⋄¯1
: w przeciwnym razie powróć¯1
.źródło
JavaScript (E6) 99
103 113 121Naprawdę musisz zapisać liczbę dla każdego wiersza
Test
Nie golfił
źródło
JavaScript (wersja robocza ECMAScript 6) -
969591 znakówRozwiązanie rekurencyjne:
Wersja 1
Wersja 2:
(Dzięki nderscore za inspirację do zapisania 1 postaci)
Wersja 3:
(Dzięki nderscore )
Wyjaśnienie:
źródło
B=(n,r=0)=>n>0&r<9?(k=B[r]|0)+n<16?[...Array(n)].map(_=>'ABCDEFGHIJ'[r]+(B[r]=++k)):B(n,r+1):-1
B=(n,r=0)=>n<1|r>9?-1:(k=B[r]|0)+n<16?[...Array(n)].map(_=>'ABCDEFGHIJ'[r]+(B[r]=++k)):B(n,r+1)
należy podać, powinno zadziałać.B=(n,r=0)=>n<1|r>9?-1:(B[r]^=0)+n<16?[...Array(n)].map(_=>'ABCDEFGHIJ'[r]+ ++B[r]):B(n,r+1)
GolfScript,
10382 bajtówPrzykłady
Jak to działa
źródło
CoffeeScript -
171150149Podejrzewam, że Ruby lub Perl niedługo to pokonają.
Odpowiednik JavaScript / Objaśnienie :
Dla osób niezaznajomionych z CoffeeScript.
Wypróbuj online .
źródło
All seats in one booking must be in the same row, next to each other.
Kobra - 309
To powinno to zrobić, ale tak naprawdę nie mogę dostać się do kompilatora przez kilka godzin, więc w razie potrzeby zaktualizuję go później.
źródło
C # - 289
Pierwsza próba gry w golfa kodowego.
Nie grał w golfa
źródło
K, 140
Niewątpliwie należy wprowadzić tutaj wiele ulepszeń
źródło
C ++ - 257
Również pierwsza próba gry w golfa.
Ponieważ to_string nie działało z moim kompilatorem, toS jest zdefiniowane jako
I jako mały interfejs
źródło
vector<int> t(10,0);vector<string> b(int n){vector<string> o;for(int i=0,j;i<10&&16>n&&n>0;i++){if(15-t[i]<n)continue;char l='A'+i;for(j=0;j<n;j++)o.push_back(l+to_string(j+t[i]+1));t[i]+=n;n=0;}if(o.empty())o.push_back("-1");return o;}
C # - 268 bajtów
Kod do gry w golfa:
Nieskluczony kod:
Napisałbym kilka adnotacji w komentarzu do rozwiązania GoldenDragon, zamiast tworzyć własne, ale moja reputacja na to nie pozwala.
źródło