задача
Театр имеет 10 строк, помеченных , A
чтобы J
от передней части к задней, а также 15 мест в каждом ряду, пронумерованных от 1 до 15 слева направо.
Программа использует следующие правила, чтобы выбрать лучшие места.
- Правило 1: Все места в одном бронировании должны быть в одном ряду, рядом друг с другом.
- Правило 2: сиденья должны быть как можно ближе к передней части, а затем как можно ближе к левому краю (нижняя буква, затем наименьшее число)
Напишите функцию, которая принимает число желаемых билетов в качестве целочисленного input ( n
) и выводит лучшие места, доступные в списке длины n
.
Ваша программа должна:
- Выведите,
-1
если 1> Вход или Вход> 15 * - Вывод,
-1
если места не доступны * - Есть функция,
B(n)
которую пользователь может использовать для ввода желаемого количества мест.
* Вы можете вывести -1 в списке, если это облегчает
Примеры
I / O
Вызов B(5)
нового массива должен возвращать [A1, A2, A3, A4, A5]
Calling, B(2)
после чего должен возвращаться [A6, A7]
Calling, B(10)
после чего должен затем возвращаться [B1, B2, ... B9, B10]
Calling B(-1)
должен всегда возвращаться-1
Un-golf Solution 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
Ответы:
JavaScript - 172
Сама функция 172:
Входные данные:
Выход:
источник
Javascript ( ES6 ) -
13012710710198Демо здесь: http://jsfiddle.net/tBu5G/
Некоторые идеи взяты из @ edc65
источник
n=0
Хаскелл, 129
Нужно было внести некоторые изменения, чтобы сделать это функцией в Haskell:
b
возвращает пару: билеты (если это возможно) и новое состояние театра.t
является исходным состоянием театра со всеми непроданными билетами. Кроме того, возвращение-1
было неестественным для Haskell, поэтому, если никакие билеты не могут быть выданы для запроса, пустой список возвращается для билетов.источник
APL (75)
Тестовое задание:
Объяснение:
T←10 15⍴0
:T
матрица 15 на 10, которая содержит состояние театра (0 = свободный)B←{
...}
: функция(⍵∊⍳15)
:⍵
является членом набора целых чисел от 1 до 15,∨/Z←,T⍷⍨⍵/0
: иT
содержит⍵
нули подряд (сохраняя возможные начальные точки вZ
),:
: тогда:(⊃Z/,⍳⍴T)
: выберите возможные начальные координаты и возьмите первые,∘+¨1-⍨⍳1⍵
: добавить⍵-1
больше позиций справа от начальной координатыP←
: сохранить координаты вP
{⎕A[⍺],⍕⍵}/¨
: отформатировать координатыT[P]←
: сохранить отформатированные координаты на своих местах вT
. (любые ненулевые значения в T будут делать)+
: вернуть результат, который является отформатированными координатами (по умолчанию результат присвоения неявен)⋄¯1
Иначе вернись¯1
.источник
Javascript (E6) 99
103 113 121На самом деле вам просто нужно сохранить номер для каждой строки
Тестовое задание
Ungolfed
источник
JavaScript (ECMAScript 6 Draft) -
969591 символовРекурсивное решение:
Версия 1
Версия 2:
(Спасибо Nderscore за вдохновение для сохранения 1 символа)
Версия 3:
(Спасибо nderscore )
Объяснение:
источник
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)
должно работать.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 байтаПримеры
Как это устроено
источник
CoffeeScript -
171150149Я подозреваю, что Ruby или Perl скоро справятся с этим.
Эквивалент JavaScript / Объяснение :
Для тех, кто не знаком с CoffeeScript.
Попробуйте онлайн .
источник
All seats in one booking must be in the same row, next to each other.
Кобра - 309
Это должно сработать, но я не могу получить компилятор в течение нескольких часов, поэтому я обновлю его позже, если потребуется.
источник
C # - 289
Первая попытка поиграть в гольф.
Un-golfed
источник
К, 140
Есть, несомненно, многочисленные улучшения, которые должны быть сделаны здесь
источник
С ++ - 257
Также первая попытка игры в гольф.
Поскольку to_string не работал с моим компилятором, toS определяется как
И как маленький интерфейс
источник
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 байт
Гольф-код:
Код Ungolfed:
Я бы написал несколько аннотаций в комментарии к решению GoldenDragon вместо того, чтобы делать свое, но моя репутация не позволяет этого.
источник