Jeden Tag setzen Sie ein neues Wort mit beweglichen Buchstaben auf ein Festzelt und kaufen nur die Buchstaben, die Sie zum Schreiben benötigen. Sie verwenden Briefe, die Sie für frühere Wörter gekauft haben, immer wieder, wenn dies möglich ist. Geben Sie unter Berücksichtigung der Wörter, die Sie jeden Tag in der richtigen Reihenfolge schreiben möchten, die Buchstaben aus, die Sie jeden Tag kaufen.
Beispiel
Input: ['ONE', 'TWO', 'THREE', 'SEVENTEEN']
Output: ['ENO', 'TW', 'EHR', 'EENSV']
Tag 1: Sie ohne Buchstaben beginnen, so zu schreiben ONE
, können Sie alle seine Briefe kaufen E
, N
, O
.
Tag 2: Am nächsten Tag möchten Sie aufstellen TWO
(abnehmen ONE
). Sie haben bereits eine O
von ONE
, also kaufen Sie eine zusätzliche TW
.
Tag 3: Zu diesem Zeitpunkt haben Sie ENOWT
. Zum Schreiben
THREE
brauchst du EHR
. Beachten Sie, dass Sie E
zusätzlich zu dem, den Sie haben , einen zweiten kaufen müssen.
Tag 4: Um zu schreiben SEVENTEEN
, brauchst du 4
E
, von denen du bereits zwei hast (nicht drei!), Also kaufst du zwei mehr. Sie haben auch die T
und einer der N
‚s, so dass Sie die restlichen Buchstaben kaufen:
EENSV
.
In diesem Beispiel werden Buchstaben alphabetisch sortiert ausgegeben, Sie können sie jedoch in beliebiger Reihenfolge ausgeben.
Eingabe: Eine nicht leere Liste nicht leerer Buchstabenfolgen A-Z
. Sie können auch Kleinbuchstaben verwenden, wenn Sie dies vorziehen. Zeichenlisten eignen sich gut für Zeichenfolgen.
Ausgabe: Geben Sie die zusätzlichen Buchstaben aus, die Sie täglich kaufen müssen, oder drucken Sie sie aus. Die Buchstaben eines Tages können in beliebiger Reihenfolge ausgegeben werden, die Tage müssen jedoch in der richtigen Reihenfolge angegeben werden.
Die Buchstaben von jedem Tag sollten von den anderen Tagen getrennt sein, damit Sie erkennen können, wo ein Tag endet. Ein nachgestelltes und / oder führendes Trennzeichen ist in Ordnung, sowohl innerhalb eines Tages als auch zwischen Tagen. Beachten Sie, dass für einen Tag möglicherweise keine Buchstaben gekauft wurden, was sich in der Ausgabe widerspiegeln sollte (ein Leerzeichen oder eine leere Zeile ist auch für den letzten Tag in Ordnung).
Testfälle
['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', '', '']
Hier sind alle Ein- und Ausgänge als separate Listen aufgeführt:
[['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', '', '']]
Und als durch Leerzeichen getrennte Zeichenfolgen (die nachgestellten Leerzeichen in den Ausgaben sind wichtig):
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
Bestenlisten
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
für die letzte Ausgabe gültig? AKA ohne Trennzeichen?Antworten:
Haskell,
5449 BytesProbieren Sie es online!
Wir erstellen die Ausgabeliste, indem wir die Listendifferenz (
\\
) der Eingabeliste und den kumulativen Anhang der Ausgabeliste paarweise berechnen (beginnend mit""
).Mit beiden
Data.List
undData.Function
in Umfang (z. B. durch Verwendung der Lambdabot-Umgebung) kann dies auf 30 Byte verkürzt werden:Edit: -5 Bytes dank @Sriotchilism O'Zaic.
quelle
Python 2 ,
7268 Bytes-4 Bytes danke an Jonathan Allan.
Probieren Sie es online!
Kommentiert
quelle
for r in input():
Spart 4 Bytes.Gelee , 7 Bytes
Probieren Sie es online!
Ausgabe:
-getrennter String.
quelle
Perl 6 , 44 Bytes
Probieren Sie es online!
Ausgabe als Liste von Zeichenlisten.
Erläuterung
quelle
Bag(E(2), N, S, V)
müsste eigentlich zwei E's zeigen, um OK zu sein.collections.Counter
die ich nicht als Ausgabe zulassen wollte. Kann man leicht über Taschenelten mit einer Vielzahl iterieren, in eine Liste / ein Array umwandeln, mit einer Vielzahl anzeigen usw.?Haskell , 44 Bytes
Probieren Sie es online!
Die Ausgabe ist eine Zeichenfolge wie
ONE,TW,HRE,SVEEN
bei Kommas zwischen Tagen.quelle
\`. And an unexpected
Klappboden gefaltet werden muss.JavaScript (Node.js) , 59 Byte
Probieren Sie es online!
Ganz unkomplizierte Lösung.
h
Entfernen Sie für jedes Wort die bereits vorhandenen Buchstaben.Hier ist eine erläuterte Version dieses Codes:
quelle
J , 29 Bytes
-29 Bytes dank FrownyFrog!
Probieren Sie es online!
Ursprünglicher Beitrag
J , 58 Bytes
Probieren Sie es online!
Vielen Dank an ngn für die Hilfe bei der Verbesserung der "Subtraktion von Buchstaben unter Berücksichtigung des Wiederholungsteils".
Keine gute Passform für J, aber eine aufschlussreiche Übung.
Beginnen wir mit der Konstruktion eines Hilfsverbs
wo
("ohne"), das alle Zeichen in einer Zeichenfolge aus einer anderen entfernt, wobei Wiederholungen berücksichtigt werden.Hier gibt es eine lustige Idee: Wir machen jede wiederholte Instanz eines Charakters einzigartig, indem wir sie so oft wiederholen, wie es erforderlich ist. Wenn also unsere ursprüngliche Saite ist
ABBA
, wird sie:Ein dritter
A
würde werdenAAA
und so weiter. Dies wird dadurch erreicht, dass die Phrase((e. <@# [) {:)\
, die jedes Präfix annimmt\
, das letzte Element{:
davon betrachtet und eine Maske aller Elemente in diesem Präfix erstellt, die mite.
diesem letzten Element übereinstimmen , und dann nur diese Elemente filtert und boxt<@#
.Mit unseren beiden Eingaben "unique-ified" können wir jetzt sicher das normale Minus setzen und
-.
dabei die Wiederholung respektieren.Wir öffnen dann jedes Ergebnis und nehmen nur das erste Element, um unsere Wiederholungen "rückgängig zu machen":
{.@>
Wenn Sie dieses Hilfsverb einstecken, wird unsere Gesamtlösung (die es einfach einfügt) zu:
Im Wesentlichen richten wir unser Problem hier nur als einzelne Reduktion ein. Wir beginnen die Eingabe umzukehren
|.
und fügen,~
ein Assa:
oder ein leeres Kästchen hinzu, das der Anfangswert unseres Endergebnisses ist, wie folgt:Wir kleben das folgende Verb zwischen jedes Element, um die Reduktion zu bewirken:
Dies besagt: Nehmen Sie die rechte Eingabe
]
(dh unser Ergebnis) und hängen Sie,
die linke Eingabe (dies istONE
bei der ersten Iteration,TWO
bei der zweiten usw.) an, ohnewo
die Schleifen;
der rechten Eingabe (dh bisher ohne vorherige Buchstaben) gebraucht), aber vor dem Anhängen sortieren/:~
und wieder einpacken<@
.Am Ende haben wir das gewünschte Ergebnis, eine Liste von Kisten, aber alle in einer großen zusätzlichen Kiste und immer noch mit der leeren Kiste vorne. So öffnen wir die äußere Box und töten das erste Element zu entfernen:
}.@>
.quelle
[:}.@>|.(],a.<@#~0>.-&(1#.a.=/;))&.>/@,<@a:
(],a.<@#~0>.-&(1#.a.=/;))/@|.
funktioniert auch, wenn mir kein Randfall fehlt.JavaScript (ES6),
6665 BytesProbieren Sie es online!
Kommentiert
quelle
C ++ (GCC) ,
177170 Bytes-5 Bytes dank @ anatolygs Tipp, -2 Bytes für kleine Dinge, die mir aufgefallen sind.
Erläuterung
#import<random>
addiert beides<string>
und<vector>
für die Hälfte der Bytes.Erstellt zunächst einen Vektor mit 91 Elementen und 0 (nur die Indizes 65-90 werden zum Speichern von Buchstaben verwendet) und einen anderen Vektor desselben Typs, der jedoch nicht auf einen Wert festgelegt ist. Durchläuft jedes Element der Eingabe (die Tage): Ruft die derzeit im Besitz befindlichen Buchstaben ab, ruft die für den Tag erforderlichen Buchstaben ab, überschreibt die Eingabe am Index mit der erforderlichen Menge und aktualisiert die im Besitz befindlichen Buchstaben. Gibt die überschriebene Eingabe zurück.
Probieren Sie es online!
quelle
#define v std::vector<std::string
und entfernenusing namespace std
, um die Anzahl der Bytes um 6 Bytes zu verringern.C # (Visual C # Interactive Compiler) , 123 Byte
Probieren Sie es online!
Anonyme Funktion, die durch Ändern eines Eingabearrays ausgegeben wird.
quelle
R
119 112 106103 Bytes-7 Bytes durch Aliasing der beiden längeren Funktionsnamen und jetzt Benutzereingaben von
scan()
-6 Bytes, um
strsplit()
zu Beginn nur einmal aufzurufen-3 Bytes, um das Aliasing wieder aufzuheben und zwei Variablen in einem Aufruf zuzuweisen
(Bearbeitet auch die Anzahl der Bytes, die früher fälschlicherweise niedrig war)
Dies ist meine allererste PPCG-Einreichung jeglicher Art! Ich habe also keine Ahnung, was ich sowohl in Bezug auf das Golfen als auch in Bezug auf das Posten von Etikette tue. Die Ausgabe ist eine Liste von Vektoren, die die Bedingungen der Herausforderung erfüllen können oder nicht. :-P
Was den Code selbst betrifft, nimmt er Benutzereingaben über
scan()
und vergleicht die Buchstaben jedes neuen Tages mit den kumulativ besessenen Buchstaben, wie bei anderen Lösungen. Wenn es kürzere Alternativen zuunlist
undstrsplit
zum Umwandeln von Zeichenfolgen in Vektoren einzelner Zeichen gibt, wäre es cool zu wissen. Ich habe auch dievsetdiff
Funktion in Carl Withoftsvecsets
Paket verwendet, um den eingestellten Unterschied zwischen den für den nächsten Tag benötigten und den aktuellen Briefen zu ermitteln.quelle
Python 2 ,
102100 BytesProbieren Sie es online!
-2 Bytes dank Verkörperung der Ignoranz
quelle
Japt ,
15 bis14 BytesVersuch es
quelle
Rot , 75 Bytes
Probieren Sie es online!
quelle
PowerShell , 71 Byte
Probieren Sie es online!
Nimmt Eingabewörter
$args
und durchläuft sie. Bei jeder Iteration setzen wir das aktuelle Wort$w
und durchlaufen dann unsere$p
ool von bereits gekauften Buchstaben. In jeder inneren Schleife führen wir einen regulären Ausdruck-replace
für unseren aktuellen$w
Befehl durch, sodass wir nur die erste Instanz des Buchstabens aus unserem$p
OOL ersetzen . Sobald wir alle Buchstaben im Pool durchgegangen sind, geben wir aus, was noch übrig ist$w
(dh was wir kaufen müssen), und heften diese Buchstaben$p+=$w
für das nächste Wort in unseren Pool .quelle
Excel VBA, 127 Byte
Nimmt Eingaben in Form eines Excel-Bereichs vor.
quelle
C (gcc) , 118 Bytes
Probieren Sie es online!
Als kleinen Bonus nimmt es die Aktie
r
zu Beginn als Array auf. Gibt die mit null abgeschlossene Listea
mit null abgeschlossenen Zeichenfolgen aus, wobei alle gebrauchten Buchstaben durch Leerzeichen ersetzt werden.quelle
05AB1E , 11 Bytes
-6 danke an Kevin Cruijssen
Probieren Sie es online!
quelle
J
durch ersetzen»
. Auch können Sie auf 4 Bytes speichern durch Ersetzenvyð.;}ðK
mitSõ.;
11 Bytes .Swift 4.2 / Xcode 10.2 ,
244242239238 BytesProbieren Sie es online!
Die Buchstaben sind nicht in alphabetischer Reihenfolge angeordnet, es ist nicht durch die Regeln verboten.
quelle
Scala, 68 Bytes
Probieren Sie es online!
/: ist eine Abkürzung für den Operator foldLeft, a ist eine Aggregation, gibt letztendlich das gewünschte Ergebnis zurück, n ist das nächste Element
Nicht golfen
quelle
PHP , 87 Bytes
Probieren Sie es online!
quelle
Kohle , 18 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
quelle
PHP, UTF-8-fähig (253 Bytes)
quelle
C # (Visual C # Interactive Compiler) , 112 Byte
Probieren Sie es online!
quelle
Perl 5
-p
, 28 BytesProbieren Sie es online!
quelle
Ruby , 52 Bytes
Probieren Sie es online!
quelle
K (ngn / k) , 36 Bytes
Probieren Sie es online!
quelle
Stax , 7 Bytes
Führen Sie es aus und debuggen Sie es
Die Ausgabe erfolgt in Zeilenumbrüchen.
quelle