Mon petit enfant a un jouet comme celui-ci:
Ce jouet se compose de 10 petits seaux empilables, que nous allons numéroter de 1 (le plus petit) à 10 (le plus grand). Parfois, il fait de petits tas et le jouet finit comme ceci:
Nous pouvons représenter schématiquement les piles comme ceci:
1 6
4 9 2 7
5 10 3 8
---------- <-- Floor
1 2 3 4 <-- Pile #
Ou, autrement dit:
[[4,5],[9,10],[1,2,3],[6,7,8]]
Cet ensemble de piles de seaux est facilement réempilable pour reconstruire l'ensemble d'origine (la première image) simplement en plaçant consécutivement des piles de petits seaux à l'intérieur de piles de plus grands seaux:
1 1 6
2 2 7
1 6 3 6 3 8
4 9 2 7 4 9 7 4 9
5 10 3 8 5 10 8 5 10
---------- > [Pile 3 to 1] > ---------- > [Pile 4 to 2] > ---------- > [Pile 1 to 2] > Done!
1 2 3 4 1 2 3 4 1 2 3 4
Néanmoins, parfois mon enfant essaie de construire des tours, ou jette des seaux, et les piles finissent par être incohérentes et l'ensemble d'origine ne peut pas être reconstruit simplement en plaçant une pile à l'intérieur d'une autre. Exemples de ceci:
[[1,3,2],[4]] (the kid tried to build a tower by placing a bigger bucket
over a smaller one, we would need to reorder the buckets
first)
[[1,3,4],[2]] (the kid left aside an unordered bucket, we would need to remove
bucket #1 from pile #1 before restacking)
[[1,2,3],[5]] (the kid lost a bucket, we need to find it first)
Défi
Étant donné une liste de listes d'entiers représentant un ensemble de piles de seaux, renvoyez une valeur vraie si les listes représentent un ensemble de piles facilement réempilable, ou falsey dans tout autre cas.
- L'entrée sera donnée sous la forme d'une liste de listes d'entiers, représentant les compartiments de haut en bas pour chaque pile.
- Il n'y aura pas de piles de départ vides (vous n'obtiendrez pas
[[1,2,3],[],[4,5]]
en entrée). - Le nombre total de compartiments peut être n'importe lequel dans une plage entière raisonnable.
- Mon enfant n'a qu'un seul ensemble de seaux, il n'y aura donc pas d'éléments en double.
- Vous pouvez sélectionner deux valeurs cohérentes (et cohérentes) pour truey ou falsey.
- Les compartiments seront étiquetés de # 1 à #N, étant
N
le plus grand entier dans les listes d'entiers. Mon enfant ne connaît toujours pas le concept du zéro. - Vous pouvez recevoir l'entrée dans n'importe quel format raisonnable tant qu'elle représente un ensemble de piles de seaux. Précisez-le simplement dans votre réponse si vous modifiez la façon dont vous recevez les données.
- C'est du golf de code , donc le programme / la fonction la plus courte pour chaque langue peut gagner!
Exemples
Input: [[4,5],[9,10],[1,2,3],[6,7,8]]
Output: Truthy
Input: [[6,7,8,9,10],[1],[2],[3,4,5],[11,12,13]]
Output: Truthy
Input: [[2,3,4],[1],[5,6,7]]
Output: Truthy
Input: [[1,2],[5,6],[7,8,9]]
Output: Falsey (buckets #3 and #4 are missing)
Input: [[2,3,4],[5,6,7]]
Output: Falsey (bucket #1 is missing)
Input: [[1,3,4],[5,7],[2,6]]
Output: Falsey (non-restackable piles)
Input: [[1,4,3],[2],[5,6]]
Output: Falsey (one of the piles is a tower)
la source
Réponses:
Gelée ,
65 octetsMerci à @Lynn d'avoir économisé 1 octet.
Essayez-le en ligne! (livré avec le pied de page de la suite de tests)
Explication
la source
ṢFµJ⁼
marche, mais je n'ai pas pensé à tous les cas de bord.1
ne manque pas. Je ne sais pas si cela est garanti par le PO.J
pouvant être renvoyés, garantissant une sortie erronée. est-ce que je manque quelque chose?Python 2 ,
5352 octetsMerci pour l'octet xnor
Essayez-le en ligne!
la source
[]
. Assez délicat[0]
afin que la plage puisse commencer0
.JavaScript (ES6),
5958 octetsExplication
Cas de test
Afficher l'extrait de code
la source
05AB1E , 4 octets
Essayez-le en ligne!
la source
Haskell , 54 octets
Essayez-le en ligne!
la source
Haskell , 37 octets
Essayez-le en ligne!
Vérifie si la liste triée concaténée est lexicographiquement plus petite que la liste infinie
[1,2,3,...]
. Puisqu'il n'y a pas de doublons, tout compartiment manquant ou en panne entraînerait une valeur supérieurek
à lak
place, ce qui rend la liste résultante plus grande.la source
Pyth, 6 octets
Essayez-le ici.
Explication:
la source
UI
partie, s'il vous plaîtU <col>
estrange(len(A))
,I <pfn> <any> <n-1:any>
estA(B, ...) == B
.U <col>
estrange(len(A))
, mais je ne savais pas que le portage de la solution Python serait plus court ...PROLOG (SWI), 54 octets
Maintenant c'est mieux. Hélas encore assez verbeux.
Essayez-le en ligne!
Le
s/1
prédicat prend une liste en argument et est vrai si la liste est une liste de compartiments facilement empilables.Amélioration de l'algorithme: si je trie la liste avant de l' aplatir, cela force toutes les sous-listes à être triées pour que le prédicat soit vrai. Légèrement «emprunté» à la réponse Jelly de Pietu1998 . Grâce à cela, je peux vider ce
forall
qui représente plus de la moitié du programme (voir ci-dessous pour la réponse originale).Comment ça marche?
Le prédicat est vrai si toutes ses clauses sont vraies:
Réponse précédente, PROLOG (SWI), 109 octets
Essayez-le en ligne!
la source
Pyth ,
9 1611 octets (fixe)Utilise une méthode complètement différente de l'autre réponse. Une approche plus courte de 7 octets peut être trouvée ci-dessous.
Suite de tests.
Explication
Comment cela marche-t-il?
Prenons quelques exemples qui facilitent la compréhension. Supposons que l'entrée soit
[[1,3,4],[5,7],[2,6]]
. Le cœur de cet algorithme est que chaque delta de la liste non aplatie doit être égal à 1 pour que les compartiments soient empilables.Tout d'abord, le
S
transforme en[[1, 3, 4], [2, 6], [5, 7]]
.Puis, l'
s
aplatit:[1, 3, 4, 2, 6, 5, 7]
.Ajoutez un
0
devant:[0, 1, 3, 4, 2, 6, 5, 7]
.+
obtient les deltas de la liste,[1, 2, 1, -2, 4, -1, 2]
.tM
décrémente chaque élément[0, 1, 0, -3, 3, -2, 1]
.Tout non
0
entier est véridique en Pyth, donc nous vérifions s'il y a un élément véridique avec.E
(ce qui signifie que la pile ne peut pas être formée correctement). Nous obtenonsTrue
.!
annule le résultat, qui se transformeTrue
enFalse
.Si l'entrée était, par exemple
[[6,7,8,9,10],[1],[2],[3,4,5],[11,12,13]]
, l'algorithme fonctionnerait de cette façon:Trié par l'élément le plus élevé:
[[1], [2], [3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13]]
et aplati, avec un0
pré - ajouté:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
.Deltas:
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
. Tous get décrémenté:[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
.Il n'y a aucun élément véridique, donc nous obtenons
False
. Par négation logique, le résultat estTrue
.Pyth , 7 octets
Suite de tests.
Port de la réponse Python et une variante de la solution @ Erik .
la source
tM
décrémente chaque élément? Je pense que décrémenter chaque élément de[1, 2, 1, -2, 4, -1, 2]
donnerait[0, 1, 0, -3, 3, -2, 1]
. Mais cela n'aiderait pas à résoudre le problème, je dois donc me méprendre sur ce que signifie la décrémentation de chaque élément.tM
diminue chaque élément de la liste de1
. Il y a une erreur dans mon explication. Réparera.Brachylog , 5 octets
Essayez-le en ligne!
Unifications expliquées:
Explication analytique:
Tout d'abord, nous trions la liste des listes, puis nous concaténons (c'est-à-dire aplatissons à 1 profondeur) (
oc
) de sorte que les compartiments soient empilés de droite à gauche si possible. Ensuite, pour vérifier si les godets ont été empilés correctement (c.-à-d. Pas de godets ou de tours manquants), nous vérifions que la liste résultante est une plage inclusive de 1 à sa longueur. Maintenant, au lieu de vérifier la liste avec la plage [1..n] de sa longueur ({l⟦₁?}
), nous essayons de trouver une entrée pour une fonction qui génère une telle plage (~⟦₁
), s'il y en a une. Si une entrée est trouvée, le programme se termine sans aucun problème, il déclenche donc untrue.
état. Si aucune entrée n'est trouvée, le programme échoue, déclenchant unfalse.
état.la source
Python 2 , 43 octets
Essayez-le en ligne!
Vérifie si la liste triée concaténée est lexicographiquement plus petite que
[1,2,3,...N]
pour grandeN
. Comme il n'y a pas de doublons, tout compartiment manquant ou en panne entraînerait une valeur supérieurek
à lak
place, ce qui rend la liste résultante plus grande. La longueur de chaîne de l'entrée suffit comme limite supérieure car chaque nombre prend plus d'un caractère.la source
MATL , 5 octets
Essayez-le en ligne!
(Entrée implicite, par exemple
{[4,5],[9,10],[1,2,3],[6,7,8]}
)S
- trier les tableaux d'entrée dans l'ordre lexicographique ({[1,2,3],[4,5],[6,7,8],[9,10]}
)g
- convertir en un seul tableau (cell2mat
)t
- dupliquer celaf
- trouver des indices de valeurs non nulles. Puisque l'entrée ici est entièrement non nulle, retourne la liste des indices de 1 à length (array) ([1,2,3,4,5,6,7,8,9,10],[1,2,3,4,5,6,7,8,9,10]
)=
- vérifier que le tableau est égal à la plage de 1 à la longueur (tableau)la source
Japt ,
131211 octetsCela pourrait probablement être plus court.
Essayez-le ou exécutez tous les cas de test
Explication
la source
ä-0 e¥J
ouän0 e¥1
ä
des tableaux. Merci pour les économies.Scala, 49 octets
Non golfé:
la source
Japt , 9 octets
Essayez-le en ligne!
la source
g<space>
;)R , 58 octets
Essayez-le en ligne!
NB: FAUX est le résultat véridique, VRAI est le faux
Explication:
la source
seq(a)
pour 2 octets?. En outre, il est autorisé à utiliserTRUE
comme valeur fausse et vice versa (spécifiez simplement dans votre réponse), vous pouvez donc le faireany(a-seq(a))
pour un autre octet.seq(a)
comporter différemment quand ila
est de longueur 1 et j'ai raté que dans ce cas, nous obtiendrons les mêmes résultats: D THanks!C # (.NET Core) ,
157145132 octets-13 octets grâce à TheLethalCoder
Le nombre d'octets comprend également
Essayez-le en ligne!
Non golfé:
la source
x.First()
->x[0]
?Enumerable.Range
->new int[]
etZip
avec index si possible ..? RetirezWhere
et placez la condition dansAny
.new int[]
approche nécessiterait d'ajouter unSelect()
pour obtenir l'index, et finalement augmenter le nombre d'octets.CJam , 11 octets
Essayez-le en ligne!
Oww
:(
... ouais!{$:+_,,:)=}
la source
Charbon de bois , 19 octets (non concurrentiel?)
Essayez-le en ligne!
-10 octets grâce à ASCII uniquement .
-3 octets grâce à ASCII uniquement pour une implémentation ultérieure (voir l'historique des révisions pour une version éventuellement concurrente).
-
pour la vérité,pour la fausseté.
L'entrée est une liste unique d'une liste de listes, en raison de la façon dont Charcoal prend l'entrée.
la source
UP
.UPsorted
.▷
utilisé ici fait que les choses de portée sont prioritaires, alors pour cela; s pourquoiUP
est-il toujours là mais je suppose que vous pouvez simplement éviter d'utiliser des noms de fonction python comme noms de varname?v
, également O_O ce n'est même pas un défi d'art ascii (pas étonnant que ce soit si peu golfique: PJava 10, 213 octets
Essayez-le en ligne.
Cela semblait être une bonne idée quand j'ai commencé, mais ces modules ne font que l'allonger. Peut certainement être joué au golf en utilisant une approche plus manuelle ..
Inspiré par la réponse 05AB1E à 4 octets de @EriktheOutgolfer . 4 vs 213 octets, rofl ..>.>
Explication:
la source