Tâche
Un théâtre a 10 rangées, marquées A
à J
partir de l' avant vers l' arrière, et les 15 sièges de chaque rangée, numérotés de 1 à 15 de gauche à droite.
Le programme utilise les règles suivantes pour choisir les meilleurs sièges.
- Règle 1: Tous les sièges d'une réservation doivent être dans la même rangée, côte à côte.
- Règle 2: Les sièges doivent être le plus près possible de l'avant, puis aussi près de la gauche que possible (lettre la plus basse, puis numéro le plus bas)
Écrivez une fonction qui prend le nombre de tickets voulu comme entrée entière ( n
), et sort les meilleurs sièges disponibles dans une liste de longueur n
.
Votre programme devrait:
- Sortie
-1
si 1> Entrée ou Entrée> 15 * - Sortie
-1
si les sièges ne sont pas disponibles * - Avoir une fonction
B(n)
que l'utilisateur peut utiliser pour saisir le nombre de sièges souhaité.
* Vous pouvez afficher le -1 dans une liste si cela facilite
Exemples
E / S
L'appel B(5)
sur un nouveau tableau doit renvoyer l' [A1, A2, A3, A4, A5]
appel B(2)
après cela devrait alors retourner l' [A6, A7]
appel B(10)
après cela devrait alors retourner l' [B1, B2, ... B9, B10]
appel B(-1)
devrait toujours retourner-1
Solution non golfée 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
Réponses:
JavaScript - 172
La fonction elle-même est 172:
Contribution:
Production:
la source
Javascript ( ES6 ) -
13012710710198Démo ici: http://jsfiddle.net/tBu5G/
Quelques idées tirées de @ edc65
la source
n=0
Haskell, 129
Quelques ajustements ont dû être faits pour en faire une fonction dans Haskell:
b
retourne une paire: les billets (si possible), et le nouvel état du théâtre.t
est l'état du théâtre initial, avec tous les billets invendus. De plus, le retour-1
n'était pas naturel pour Haskell, donc si aucun ticket ne peut être émis pour une demande, la liste vide est retournée pour les tickets.la source
APL (75)
Tester:
Explication:
T←10 15⍴0
:T
est une matrice de 15 par 10 qui contient l'état du théâtre (0 = gratuit)B←{
...}
: la fonction(⍵∊⍳15)
: si⍵
est membre de l'ensemble des entiers de 1 à 15,∨/Z←,T⍷⍨⍵/0
: etT
contient des⍵
zéros de suite (en stockant les points de départ possibles dansZ
),:
: puis:(⊃Z/,⍳⍴T)
: sélectionnez les coordonnées de départ possibles et prenez la première,∘+¨1-⍨⍳1⍵
: ajouter⍵-1
plus de positions à droite de la coordonnée de départP←
: stocker les coordonnées dansP
{⎕A[⍺],⍕⍵}/¨
: formater les coordonnéesT[P]←
: stocke les coordonnées formatées à leur emplacement dansT
. (toutes les valeurs non nulles dans T feront l'affaire)+
: retourne le résultat, qui est les coordonnées formatées (le résultat d'une affectation est tacite par défaut)⋄¯1
: sinon, revenez¯1
.la source
Javascript (E6)
99103113121Vraiment, vous avez juste besoin de stocker un numéro pour chaque ligne
Tester
Non golfé
la source
JavaScript (ECMAScript 6 Draft) -
969591 caractèresUne solution récursive:
Version 1
Version 2:
(Merci à nderscore pour l'inspiration pour la sauvegarde d'un caractère)
Version 3:
(Merci à nderscore )
Explication:
la source
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)
devrait fonctionner.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 octetsExemples
Comment ça fonctionne
la source
CoffeeScript -
171150149Je soupçonne Ruby ou Perl de battre ça avant longtemps.
JavaScript équivalent / explication :
Pour ceux qui ne connaissent pas CoffeeScript.
Essayez-le en ligne .
la source
All seats in one booking must be in the same row, next to each other.
Cobra - 309
Cela devrait le faire, mais je ne peux pas accéder à un compilateur pendant quelques heures, donc je le mettrai à jour plus tard si nécessaire.
la source
C # - 289
Première tentative de golf par code.
Non golfé
la source
K, 140
Il y a sans aucun doute de nombreuses améliorations à apporter ici
la source
C ++ - 257
Aussi une première tentative de golf.
Parce que to_string ne fonctionnait pas avec mon compilateur, toS est défini comme
Et comme une petite interface
la source
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 octets
Code golf:
Code non golfé:
J'aurais écrit quelques annotations dans un commentaire sur la solution de GoldenDragon au lieu de faire la mienne, mais ma réputation ne le permet pas.
la source