Inspiré de ce post StackOverflow.
introduction
Le travail de Bob consiste à créer des feuilles de calcul et à les organiser. La façon dont il les organise est connue de très peu, à l'exception de Bob, mais il crée une liste de chacune des feuilles de calcul qui appartiennent au même groupe. Il y a un tas de données dans la feuille de calcul qu'il crée, mais il n'y a qu'une seule donnée que nous examinons en ce moment: le nombre de jours entre le jour où il a commencé ce travail et le jour où il a créé la feuille de calcul. Le premier jour, il a créé deux feuilles de calcul, les a notées 0
et triées à leur emplacement approprié.
Maintenant, son patron demande un examen des types de feuilles de calcul qui se sont produits chaque jour, et c'est votre travail d'écrire du code qui va comprendre cela pour Bob; il a beaucoup trop de feuilles de calcul pour le faire à la main.
Contribution
Les informations de Bob qu'il vous donne se présentent sous la forme d'un tableau dentelé (indexé 0 ou 1) où chaque donnée est de la forme x = a[i][j]
. a
est ce que j'appelle le tableau dentelé lui-même, i
le type de feuille de calcul et x
la date de création du tableau. j
est sans importance.
La tâche
Étant donné un tableau dentelé de jours de création de feuille de calcul organisés par leur type, renvoyez un tableau dentelé de types de feuille de calcul organisés par jour de création de feuille de calcul.
Exemples
Bob ne va pas simplement vous laisser avec ces données abstraites. Il m'a donné un sous-ensemble de certaines de ses feuilles de calcul pour vous aider à comprendre ce que tout est censé être.
Exemple d'entrée (indexé 0):
a = [
[3,2,5,0], # Bob doesn't necessarily sort his lists
[1,3],
[2,1,0,4],
[4,5,3],
[6,6]
]
Exemple de sortie (avec commentaire, ce qui bien sûr n'est pas nécessaire):
output = [
[0,2] # On day 0, Bob made one type 0 and one type 2 spreadsheet
[1,2] # On day 1, Bob made one type 1 and one type 2 spreadsheet
[0,2] # On day 2, Bob made one type 0 and one type 2 spreadsheet
[0,1,3] # On day 3, Bob made one type 0, one type 1, and one type 3 spreadsheet
[2,3] # On day 4, Bob made one type 2 and one type 3 spreadsheet
[0,3] # On day 5, Bob made one type 0 and one type 3 spreadsheet
[4,4] # On day 6, Bob made two type 4 spreadsheets
]
Notez que Bob ne fait pas toujours deux feuilles de calcul tous les jours, et donc la sortie peut également être irrégulière. Mais il crée toujours au moins une feuille de calcul chaque jour, donc la sortie n'aura jamais besoin de contenir des tableaux vides - bien que si votre sortie a des tableaux vides à la fin, vous n'avez pas besoin de les supprimer.
Plus de cas de test:
[[3,5,6,2],[0,0,0],[1,0,3,4]] -> [[1,1,1,2],[2],[0],[0,2],[2],[0],[0]]
[[-1]] -> Undefined behavior, as all input numbers will be non-negative integers.
[[0],[0],[],[0]] -> [[0,1,3]]
Les listes internes de la sortie n'ont pas besoin d'être triées.
Comme toujours, aucune faille standard, et bien sûr le code le plus court gagne.
(Comme c'est ma première question, faites-moi savoir tout ce que je peux faire pour l'améliorer.)
la source
[[0 0]]
donner une sortie[[0 0] []]
?Réponses:
Gelée ,
1110 octetsL'entrée et la sortie sont basées sur 1.
Essayez-le en ligne! ou vérifiez tous les cas de test (basés sur 0 pour une comparaison facile).
la source
Pyth, 13 octets
Essayez-le en ligne
la source
Pyth , 14 octets
Suite de tests.
la source
Brachylog , 28 octets
Explication
Prédicat principal, Input (
?
) = une liste de listesPrédicat 1:
Prédicat 2:
la source
Lua, 114 octets
Ideone it!
Inspiré par la réponse de Dennis en Python 2 .
la source
JavaScript (ES6), 58 octets
la source
CJam (
3029 octets)Démo en ligne
Curieusement, il est plus court de pirater
W
que d'utiliseree
, principalement parce que je veux que l'index se retrouve de toute façon dans une variable.e]
enregistré deux octets par rapport à la recherche de l'élément maximalm
et à l'initialisation d'un tableau dem+1
tableaux vides.Merci à Martin pour une économie d'un octet en stockant une valeur au
X
lieu de la jongler autour de la pile.NB Si les tableaux vides de fin sont autorisés, il existe une approche alternative de 29 octets en initialisant plutôt le tableau d'autant de jours vides qu'il y a de feuilles de calcul:
la source
CJam, 20 octets
Merci à Peter Taylor de m'avoir permis de baser ce code sur sa solution et d'avoir économisé 3 octets.
Un bloc sans nom qui attend l'entrée en haut de la pile et la remplace par la sortie.
Testez-le ici.
Explication
la source
Python 2, 82 octets
Testez-le sur Ideone .
la source
Mathematica, 35 octets
Une fonction sans nom qui accepte et renvoie une liste irrégulière. Utilise des indices basés sur 1.
Heureusement,
Max
aplatit automatiquement toutes ses entrées, ce qui nous donne l'index du dernier jour même si l'entrée est une liste irrégulière. Nous calculons ensuite simplement une liste d'#&@@@#~Position~i
indices pour tous les joursi
. Cette expression elle-même trouve la position de l'i
intérieur de la liste irrégulière (retour sous forme de tableau d'indices à des profondeurs successives), donc les valeurs que nous voulons sont les premières valeurs de chacune de ces listes.#&@@@
est une astuce de golf standard pour récupérer le premier élément de chaque sous-liste, en appliquant#&
à chacune de ces sous-listes, qui est une fonction sans nom qui renvoie son premier argument.Alternativement, nous pouvons définir un opérateur unaire pour le même nombre d'octets (en supposant un fichier source codé ISO 8859-1):
la source
Java, 314 octets
Détaillé
la source
Map
?Perl 5, 48 octets
Un sous-programme:
Voyez-le en action comme ceci:
la source