Chaque jour, vous mettez un nouveau mot sur une enseigne avec des lettres mobiles , vous n'achetez que les lettres dont vous avez besoin pour l'écrire. Vous réutilisez les lettres que vous avez achetées pour les mots précédents autant que possible. En fonction des mots que vous souhaitez écrire chaque jour dans l’ordre, imprimez les lettres que vous achetez chaque jour.
Exemple
Input: ['ONE', 'TWO', 'THREE', 'SEVENTEEN']
Output: ['ENO', 'TW', 'EHR', 'EENSV']
Jour 1: Vous commencez sans lettres, pour ainsi écrire ONE
, vous achetez toutes ses lettres E
, N
, O
.
Jour 2: Le lendemain, vous voulez mettre en place TWO
(en bas de la ONE
). Vous avez déjà un O
de ONE
, si vous achetez un montant supplémentaire TW
.
Jour 3: À ce stade, vous avez ENOWT
. Pour écrire
THREE
, il vous faut EHR
. Notez que vous devez en acheter une seconde E
en plus de celle que vous avez.
Jour 4: Pour écrire SEVENTEEN
, vous avez besoin
E
du total de 4 dont vous avez déjà deux (pas trois!), Vous en achetez donc deux de plus. Vous avez également la T
et l' un des N
« s, de sorte que vous achetez les lettres restantes:
EENSV
.
Dans cet exemple, nous avons imprimé des lettres triées par ordre alphabétique, mais vous pouvez les afficher dans n'importe quel ordre.
Entrée: Une liste non vide de chaînes de lettres non vides A-Z
. Vous pouvez utiliser des minuscules si vous préférez. Les listes de caractères conviennent aux chaînes.
Sortie: Créez ou imprimez les lettres supplémentaires que vous devez acheter chaque jour. Les lettres d'un jour peuvent être sorties dans n'importe quel ordre, mais les jours doivent être dans le bon ordre.
Les lettres de chaque jour doivent être séparées des autres jours pour que vous puissiez dire où se termine une journée. Un séparateur de fuite et / ou de tête est acceptable, dans la journée ou entre les jours. Notez qu'un jour peut ne pas avoir acheté de lettres, ce qui devrait être reflété dans la sortie (un espace ou une ligne vide est correct, même pour le dernier jour).
Cas de test
['ONE', 'TWO', 'THREE', 'SEVENTEEN']
['ENO', 'TW', 'EHR', 'EENSV']
['ONE', 'TWO', 'ONE', 'THREE']
['ENO', 'TW', '', 'EHR']
['ABC', 'AABC', 'ABBC', 'ABCC', 'AABBCC']
['ABC', 'A', 'B', 'C', '']
['SHORT', 'LOONG', 'LOOOONG', 'LOOOOOOONG', 'SHORT', 'LOOONG']
['HORST', 'GLNO', 'OO', 'OOO', '', '']
Voici toutes les entrées et sorties sous forme de listes séparées:
[['ONE', 'TWO', 'THREE', 'SEVENTEEN'], ['ONE', 'TWO', 'ONE', 'THREE'], ['ABC', 'AABC', 'ABBC', 'ABCC', 'AABBCC'], ['SHORT', 'LOONG', 'LOOOONG', 'LOOOOOOONG', 'SHORT', 'LOOONG']]
[['ENO', 'TW', 'EHR', 'EENSV'], ['ENO', 'TW', '', 'EHR'], ['ABC', 'A', 'B', 'C', ''], ['HORST', 'GLNO', 'OO', 'OOO', '', '']]
Et en tant que chaînes séparées par des espaces (les espaces de fin dans les sorties importent):
ONE TWO THREE SEVENTEEN
ONE TWO ONE THREE
ABC AABC ABBC ABCC AABBCC
SHORT LOONG LOOOONG LOOOOOOONG SHORT LOOONG
ENO TW EHR EENSV
ENO TW EHR
ABC A B C
HORST GLNO OO OOO
Classements
var QUESTION_ID=183544,OVERRIDE_USER=20260;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/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>
[['E', 'N', 'O'], ...]
SHORTLONGOOOOO
valide pour la dernière sortie? AKA n'utilisant pas de délimiteurs?Réponses:
Haskell,
54 à49 octetsEssayez-le en ligne!
Nous construisons la liste de sortie en calculant par paire la différence de liste (
\\
) de la liste d’entrée et l’addition cumulative de la liste de sortie (en commençant par""
).Avec
Data.List
etData.Function
dans la portée (par exemple en utilisant l'environnement lambdabot), cela peut être réduit à 30 octets:Edit: -5 octets grâce à @Sriotchilism O'Zaic.
la source
Python 2 ,
7268 octets-4 octets grâce à Jonathan Allan.
Essayez-le en ligne!
Commenté
la source
for r in input():
enregistre 4 octets.Gelée , 7 octets
Essayez-le en ligne!
Sortie:
chaîne séparée.
la source
Perl 6 , 44 octets
Essayez-le en ligne!
Sortie sous forme de liste de listes de caractères.
Explication
la source
Bag(E(2), N, S, V)
il faudrait en fait montrer deux E pour être OK.collections.Counter
que je n'avais pas l'intention d'autoriser en sortie. Peut-on facilement parcourir les éléments du sac avec la multiplicité, lancer une liste / tableau, afficher avec la multiplicité, etc.?Haskell , 44 octets
Essayez-le en ligne!
La sortie est une chaîne comme
ONE,TW,HRE,SVEEN
avec des virgules entre les jours.la source
\`. And an unexpected
cas de base de foldl1` aussi.JavaScript (Node.js) , 59 octets
Essayez-le en ligne!
Solution assez simple. Pour chaque mot
h
, supprimez les lettres que nous avons déjà.Voici une version expliquée de ce code:
la source
J , 29 octets
-29 octets grâce à FrownyFrog!
Essayez-le en ligne!
Poste originale
J , 58 octets
Essayez-le en ligne!
Merci à ngn pour son aide dans l’amélioration de "Soustraire des lettres tout en respectant les répétitions".
Pas un ajustement idéal pour J, mais un exercice éclairant.
Commençons par construire un verbe d'assistance
wo
("sans") qui supprime tous les chacters d'une chaîne à une autre, tout en respectant les répétitions.Il existe une idée amusante: nous faisons en sorte que chaque instance répétée d’un caractère soit unique en la répétant le nombre de fois requis. Ainsi, si notre chaîne d'origine est la suivante
ABBA
:Un tiers
A
deviendraitAAA
et ainsi de suite. Ceci est accompli par la phrase((e. <@# [) {:)\
, qui prend chaque préfixe\
, examine son dernier élément{:
et construit un masque de tous les éléments de ce préfixe correspondant àe.
cet élément final, puis filtre et encadre uniquement ces éléments<@#
.Avec nos entrées "unique-ified", nous pouvons maintenant utiliser en toute sécurité l'ensemble moins normal
-.
tout en respectant les répétitions.Nous ouvrons ensuite chaque résultat et prenons seulement le premier élément pour "annuler" nos répétitions:
{.@>
En branchant ce verbe auxiliaire, notre solution globale (qui le met simplement en ligne) devient:
En gros, tout ce que nous faisons ici est de régler notre problème en une seule réduction. Nous commençons à inverser l’entrée
|.
et à y ajouter,~
un asa:
, ou une boîte vide, qui sera la valeur initiale de notre résultat final, comme ceci:Nous collons le verbe suivant entre chaque élément pour effectuer la réduction:
Cela dit: prenez la bonne entrée
]
(c'est-à-dire notre résultat) et ajoutez à celle,
- ci l'entrée de gauche (c'estONE
à la première itération,TWO
à la 2ème, etc.) sanswo
le raze de;
l'entrée de droite (c'est-à-dire sans lettres précédentes jusqu'à présent) utilisé), mais avant l’ajout, triez-le/:~
et remettez -le en boîte<@
.À la fin de tout cela, nous aurons le résultat souhaité, une liste de boîtes, mais le tout dans une grande boîte supplémentaire, et toujours avec la boîte vide à l'avant. Ainsi , nous ouvrons pour enlever la boîte extérieure et de tuer le premier élément:
}.@>
.la source
[:}.@>|.(],a.<@#~0>.-&(1#.a.=/;))&.>/@,<@a:
(],a.<@#~0>.-&(1#.a.=/;))/@|.
fonctionne également à moins que je manque un cas de bord.JavaScript (ES6),
66 à65 octetsEssayez-le en ligne!
Commenté
la source
C ++ (gcc) ,
177170 octets-5 octets grâce au conseil de @ anatolyg, -2 octets aux petites choses que j'ai remarquées.
Explication
#import<random>
ajoute les deux<string>
et<vector>
pour la moitié des octets.Crée tout d'abord un vecteur 0 de 91 éléments (seuls les indices 65 à 90 permettent de stocker les occurrences de lettres), ainsi qu'un autre vecteur du même type, mais non défini sur une valeur. Parcourt chaque élément de l'entrée (les jours): récupère les lettres actuellement possédées, récupère les lettres nécessaires pour la journée, remplace l'entrée de l'index par le montant nécessaire et met à jour les lettres possédées. Retourne l'entrée remplacée.
Essayez-le en ligne!
la source
#define v std::vector<std::string
et supprimerusing namespace std
pour réduire le nombre d'octets de 6 octets.C # (compilateur interactif Visual C #) , 123 octets
Essayez-le en ligne!
Fonction anonyme qui sort en modifiant un tableau d’entrée.
la source
R,
119 112 106103 octets-7 octets à partir de l'aliasing des deux noms de fonction plus longs et prenant à présent une entrée utilisateur de
scan()
-6 octets à un appel seulement
strsplit()
une fois au début-3 octets pour supprimer à nouveau l'alias et attribuer deux variables en un seul appel
(Édite également le nombre d'octets qui était erronément bas auparavant)
Ceci est ma toute première soumission PPCG, quelle qu'elle soit! Donc, je n'ai aucune idée de ce que je fais à la fois en termes de golf et en termes d'affichage. Le résultat est une liste de vecteurs qui peuvent ou non répondre aux conditions du défi. :-P
Quant au code lui-même, il prend les entrées de l'utilisateur via
scan()
et compare les lettres de chaque nouveau jour aux lettres cumulées, comme dans d'autres solutions. S'il existe des alternatives plus courtes àunlist
etstrsplit
pour la conversion de chaînes dans des vecteurs de caractères individuels qui serait cool de savoir. J'ai également utilisé lavsetdiff
fonction duvecsets
package de Carl Withoft pour obtenir la différence entre les lettres nécessaires pour le lendemain et les lettres en cours possédées.la source
Python 2 ,
102100 octetsEssayez-le en ligne!
-2 octets, grâce à l'incarnation de l'ignorance
la source
PowerShell , 71 octets
Essayez-le en ligne!
Prend les mots d’entrée
$args
et les itère. Chaque itération, nous définissons le mot actuel$w
, puis en boucle sur notre liste$p
de lettres déjà achetées. Chaque boucle interne, nous effectuons une expression rationnelle-replace
sur notre commande actuelle$w
, de sorte que nous ne remplacions que la première instance de la lettre de notre$p
police. Une fois que nous avons parcouru toutes les lettres du groupe, nous publions ce qui reste$w
(c.-à-d. Ce que nous devons acheter), puis nous plaquons ces lettres sur notre groupe$p+=$w
pour le mot suivant.la source
Japt ,
1514 octetsL'essayer
la source
Rouge , 75 octets
Essayez-le en ligne!
la source
Excel VBA, 127 octets
Prend la forme d'une gamme Excel.
la source
C (gcc) , 118 octets
Essayez-le en ligne!
En prime, le stock est stocké
r
au départ sous forme de tableau. Sort la liste d'entrée terminée par un caractère nul, terminée par un zéroa
avec toutes les lettres usagées remplacées par des espaces.la source
05AB1E , 11 octets
-6 grâce à Kevin Cruijssen
Essayez-le en ligne!
la source
J
par»
. En outre, vous pouvez économiser 4 octets en les remplaçantvyð.;}ðK
parSõ.;
11 octets .Swift 4.2 / Xcode 10.2 ,
244242239238 octetsEssayez-le en ligne!
Les lettres ne sont pas classées par ordre alphabétique, les règles ne l'interdisent pas.
la source
Scala, 68 octets
Essayez-le en ligne!
/: est un raccourci pour l'opérateur foldLeft, a est l'agrégation, renvoie finalement le résultat souhaité, n est l'élément suivant
Non-golfé
la source
PHP , 87 octets
Essayez-le en ligne!
la source
Charbon de bois , 18 octets
Essayez-le en ligne! Le lien est vers la version verbeuse du code. Explication:
la source
Compatible PHP, UTF-8 (253 octets)
la source
C # (compilateur interactif Visual C #) , 112 octets
Essayez-le en ligne!
la source
Perl 5
-p
, 28 octetsEssayez-le en ligne!
la source
Ruby , 52 octets
Essayez-le en ligne!
la source
Stax , 7 octets
Exécuter et déboguer
La sortie est séparée par une nouvelle ligne.
la source
K (ngn / k) , 36 octets
Essayez-le en ligne!
la source