Vous distribuez les cartes étiquetées de 0 à 9 à partir d'un paquet une par une, formant des piles qui commencent à 0 et comptent par 1.
- Lorsque vous distribuez un 0, vous le placez sur la table pour démarrer une nouvelle pile.
- Lorsque vous distribuez une autre carte, vous l'empilez au-dessus d'une carte qui a exactement une valeur inférieure, la couvrant. S'il n'y a pas une telle carte, le paquet n'est pas empilable.
Étant donné un paquet, déterminez s'il peut être empilé lorsqu'il est distribué dans l'ordre donné. De manière équivalente, étant donné une liste de chiffres, décidez si elle peut être partitionnée en sous-séquences disjointes chacune du formulaire0,1,..,k
Exemple
Prenez le pont 0012312425
. Les deux premières cartes sont 0
, donc elles vont sur la table:
Stacks: 00
Deck: 12312425
Ensuite, nous traitons un 1
, qui va sur un 0
, peu importe lequel:
1
Stacks: 00
Deck: 2312425
Nous traitons ensuite un 2
sommet du juste-placé 1
et 3
le dessus.
3
2
1
Stacks: 00
Deck: 12425
Ensuite, le 1
, 2
et placé au sommet de la première pile et 4
au sommet de la seconde.
4
3
22
11
Stacks: 00
Deck: 25
Maintenant, nous devons placer un 2
, mais il n'y a ni 1
sommet ni pile. Donc, ce deck n'était pas empilable.
Entrée: une liste non vide de chiffres 0-9, ou une chaîne d'entre eux. Vous ne pouvez pas supposer que 0 sera toujours dans l'entrée.
Sortie : l'une des deux valeurs cohérentes distinctes, une pour les séquences empilables et une pour les séquences non empilables
Cas de test:
Empilable:
0
01
01234
00011122234567890
012031
0120304511627328390
Non empilable:
1
021
0001111
0012312425
012301210
000112223
Pour plus de commodité, sous forme de listes:
[0]
[0, 1]
[0, 1, 2, 3, 4]
[0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 4, 5, 6, 7, 8, 9, 0]
[0, 1, 2, 0, 3, 1]
[0, 1, 2, 0, 3, 0, 4, 5, 1, 1, 6, 2, 7, 3, 2, 8, 3, 9, 0]
[1]
[0, 2, 1]
[0, 0, 0, 1, 1, 1, 1]
[0, 0, 1, 2, 3, 1, 2, 4, 2, 5]
[0, 1, 2, 3, 0, 1, 2, 1, 0]
[0, 0, 0, 1, 1, 2, 2, 2, 3]
Regroupé:
[[0], [0, 1], [0, 1, 2, 3, 4], [0, 0, 0, 1, 1, 1, 2, 2, 2, 3], [0, 1, 2, 0, 3, 1], [0, 1, 2, 0, 3, 0, 4, 5, 1, 1, 6, 2, 7, 3, 2, 8, 3, 9, 0]]
[[1], [0, 2, 1], [0, 0, 0, 1, 1, 1, 1], [0, 0, 1, 2, 3, 1, 2, 4, 2, 5]]
Classement:
var QUESTION_ID=144201,OVERRIDE_USER=20260;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/144201/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>
int a[99]
en C1
à10
Réponses:
Python 2 ,
4543 octets-2 octets grâce à @TFeld
Essayez-le en ligne!
la source
Haskell , 55 octets
Une fonction anonyme prenant une liste d'entiers et renvoyant un
Bool
.Utilisation:
(all(<1).foldr(?)[]) [0,1,2,3,4]
.Essayez-le en ligne!
Comment ça marche
foldr(?)[]
replie son argument de liste de droite à gauche en utilisant?
, en commençant par une liste vide. Le résultat est la liste des numéros de la liste qui ne correspondait pas au numéro précédent.all(<1)
teste si les seuls nombres qui ne correspondent pas au-dessus d'un nombre précédent sont des zéros.m?l
ajoute un nombrem
à une listel
de nombres non ajustés. Sim+1
est déjà dans la liste, il peut maintenant être supprimé car il tient sur le dessusm
.(p,r)<-span(/=m+1)l
divise la listel
en deux partiesp
etr
à la première instance du numérom+1
. S'il n'y en a pas, la bonne partier
sera vide.m:p++drop 1r
ajoutem
aux parties divisées. S'ilr
n'est pas vide, il doit commencer parm+1
, qui est supprimé pardrop 1
.la source
?
récursivement, mais j'ai la même longueur .Data.List.delete
Coque , 9 octets
Essayez-le en ligne!
Renvoie les
1
ponts empilables et les ponts0
non empilables.Il semble que Ørjan Johansen dans sa réponse Haskell ait déjà proposé le même algorithme, mais dans Husk, c'est évidemment beaucoup plus concis.
Explication
Nous abordons le problème d'un autre côté: retournez le pont et faites des piles descendantes. Si après avoir traversé tout le deck, tous les tas ont un 0 en haut, le deck est empilable.
la source
Gelée ,
1511 octetsEssayez-le en ligne!
la source
‘Ṭ€+\I>0FṀ
toujours?C (gcc),
7473 octetsRequiert le tableau d'entrée pour marquer la fin avec -1. Exemple d'utilisation:
la source
return r
?Rétine , 42 octets
Essayez-le en ligne!
Explication
Cela trie les chiffres, de manière stable, selon la fréquence à laquelle ce même chiffre s'est produit auparavant. En effet, cela rassemble les différentes sous-séquences candidates ensemble. La chaîne résultante aura d'abord la première occurrence de chaque chiffre, puis la deuxième occurrence de chaque chiffre et ainsi de suite. Dans une entrée empilable, le résultat ressemblera à quelque chose
0123...0123...0123...
, où chacune de ces sous-chaînes peut se terminer à tout moment.Il est plus facile de déterminer si l'entrée possède ce type de modèle en unaire.
Nous remplaçons chaque chiffre n par n
1
s, suivi d'une virgule pour séparer les chiffres individuels.Enfin, nous utilisons une référence directe pour faire correspondre des séries de chiffres croissantes. Nous essayons de faire correspondre la chaîne entière soit en faisant correspondre une seule virgule (représentant un 0 , qui démarre une nouvelle exécution) soit en faisant correspondre la chose précédente précédée d'une autre
1
, qui ne fonctionne que si le chiffre actuel est le successeur du précédent.la source
TI-Basic (série 83), 25 octets (49 caractères)
Comment ça marche
Prend l'entrée sous forme de liste
Ans
. Sorties1
pour entrées empilables,0
sinon.Pour chacun
I
,cumSum(Ans=I)
calcule une liste du nombre de fois où ilI
s'est produit dans chaque segment initial, cemin(cumSum(Ans=I)≤cumSum(Ans=I-1))
n'est donc que 1 si, à chaque position, nous avons vuI-1
au moins autant de fois queI
. L'expression globale est1
chaque fois que cela vaut pour chacunI
.la source
JavaScript (ES6),
614540 octetsPrend la saisie sous forme de liste.
Cas de test
Afficher l'extrait de code
Comment?
Pour chaque valeur 0 ... 9 , nous gardons une trace du nombre de piles disponibles avec la carte précédente au sommet. Ces compteurs sont stockés dans un [-9] à un [0] , où un [] est le tableau d'entrée d'origine. Le seul compteur qui entre en collision avec les données d'entrée est un [0] , mais nous ne nous soucions pas vraiment de celui-ci car 1) les cartes étiquetées 0 sont toujours autorisées et doivent être traitées séparément de toute façon et 2) la valeur d'entrée a [0] ] est traité avant de pouvoir être mis à jour.
la source
MATL , 16 octets
L'entrée est un tableau de nombres.
Le code sort
1
dans STDOUT si l'entrée est empilable, ou se termine avec une erreur et une sortie vide dans STDOUT si l'entrée n'est pas empilable.Essayez-le en ligne!
la source
Rétine , 110 octets
Essayez-le en ligne! Le lien inclut des cas de test. Je n'ai pas souvent l'occasion d'utiliser
$16
...la source
Mathematica, 80 octets
la source
Python 2 ,
6961554746 octetsEssayez-le en ligne!
La sortie est
error
/no error
.la source
R , 88 octets
Essayez-le en ligne!
Fonction qui prend un vecteur R; renvoie
TRUE
pour empilable etFALSE
pour non empilable.Explication:
la source
Nim, 133 octets
1
si ça marche;0
si ce n'est pas le cas.J'ai dû tirer quelques affaires géniales pour faire face à la mutabilité des variables dans les boucles for, eh bien.
la source
Haskell ,
7775 octetsEssayez-le en ligne! Utilisation:
g.reverse $ [0,1,2]
. Renvoie lesTrue
entrées empilables etFalse
autres.Il s'agit d'une solution récursive qui parcourt une liste donnée d'arrière en avant. Il met en œuvre l'observation selon laquelle
r
et dernier élémentx
est empilable si eller
est empilable et si ellex
est nulle ou si les deuxx-1
apparaissent dansr
etr
avecx-1
supprimé est également empilable.la source
Java 8,
168150142 octetsRenvoie
0
/1
s'il est correctement empilable ou non.Explication:
Essayez-le ici.
la source
C, 248 octets
Remarque: Pour imprimer l'état de retour, tapez "echo $ status" dans le terminal
Statut de retour 0: non empilable
Statut de retour 1: empilable
Explication: Incrémente l'élément de tableau avec l'index équivalent au chiffre le plus courant de la pile. Ensuite, le programme vérifie si cet élément de tableau qui vient d'être incrémenté est plus grand que l'élément qui le précède. Si tel est le cas, renvoie 0. Sinon, si le programme arrive à la fin du tableau, il renvoie 1.
la source
Gelée , 15 octets
Un lien monadique prenant une liste d'entiers non négatifs et retournant
0
s'il est empilable ou1
s'il ne l'est pas.Essayez-le en ligne!
Comment?
la source
Japt , 16 octets
Testez-le en ligne! Sorties
false
pour empilable,true
pour non empilable.Explication
la source
05AB1E , 25 octets
Le défi ne semble pas si difficile, mais c'est assez difficile en 05AB1E (pour moi au moins ..)
Sorties
0
si empilables et1
si non empilables.Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
la source
Java 8, 87 octets
Au lieu de construire les piles, je calcule simplement si un élément est non empilable sur les éléments précédents et retourne 0 lorsqu'un élément non empilable est rencontré. Si j'atteins la fin, la chaîne entière est empilable et 1 est retourné:
Essayez-le en ligne!
Explication:
la source