Kegel sind farbige Bonbons mit 5 verschiedenen Geschmacksrichtungen. Trauben, grüner Apfel, Zitrone, Orange und Erdbeere, dargestellt durch (p) urple, (g) reen, (y) ellow, (o) range bzw. (r) ed. Ich aß Kegel, indem ich die verschiedenen Farben sortierte und sie dann der Reihe nach aß. Nachdem ich im Büro ein paar seltsame Blicke auf mich gezogen habe, tue ich jetzt so, als würde ich sie wie einen normalen Menschen essen. Ihre Aufgabe ist es, dies zu emulieren:
Ihr Code (volles Programm oder Funktion) erhält eine Reihe von Kegeln (10x10) als Eingabe (in jedem vernünftigen Format). Dieses Array wird einen Stapel von unsortierten Kegeln darstellen. Ihre Aufgabe ist es, sie von Ihrer Lieblingsfarbe zu Ihrer Lieblingsfarbe zu "essen". Meine bevorzugte Bestellung ist Traube, grüner Apfel, Zitrone, Orange, Erdbeere, aber Sie können jede Bestellung frei wählen, solange sie konsequent durchgesetzt wird (bitte geben Sie Ihre Präferenz in Ihrer Bestellung an, damit ich Sie danach beurteilen kann). Nachdem Sie jedes Bonbonstück gegessen haben, gibt Ihr Code (im selben Format, in dem Sie es eingegeben haben) den verbleibenden Stapel aus, wobei das gegessene Stück durch ein Leerzeichen ersetzt wird. Sie werden wiederholen, bis nur noch Ihr Favorit übrig ist. Sie können jeden Kegel zum Essen wählen (kann zufällig oder deterministisch sein). Nachgestellte Leerzeichen müssen eingehalten werden.
Ihre Ausgabesequenz könnte beispielsweise so aussehen (verwenden Sie 5x5 für die Kürze und zeigen Sie Leerzeichen als .
)
start 1 2 3 4 5 n
.org. .org. .org. .org. .or.. .or.. ..r..
prgrg .rgrg .rgrg .rgrg .rgrg .r.rg .r.r.
gggpr gggpr ggg.r ggg.r ggg.r ggg.r ....r
oyyor oyyor oyyor oyyor oyyor oyyor ....r
.r.p. .r.p. .r.p. .r... .r... .r... .r...
Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes
TL; DR-Regeln:
- Die Einreichung kann ein vollständiges Programm oder eine Funktion sein
- Die Eingabe kann in jedem vernünftigen Format (Zeichenfolge, Liste, Matrix usw.) mit jeder vernünftigen Methode (STDIN, Funktionsargumente usw.) erfolgen. Es muss jedoch eine gewisse Abgrenzung zwischen den Zeilen geben
- Die Ausgabe muss in demselben Format erfolgen wie die Eingabe mit einer angemessenen Methode (STDOUT, Funktionsrückgabe usw.). Die Zwischenausgabe kann begrenzt sein oder nicht
- Erster Ausgang soll der erste Eingang sein
- Nachgestellte Leerzeichen müssen erhalten bleiben
- Jede Farbreihenfolge kann verwendet werden (Liste in Ihrer Antwort)
- Jeder Kegel der aktuellen Farbe kann gegessen werden
- Die letzte Ausgabe soll nur Ihre Lieblingsfarbe und -räume sein
- Fügen Sie nach Möglichkeit einen Link zu einem Online-Compiler hinzu, um Ihre Einreichung zu testen
Antworten:
Jelly ,
16 1413 BytesTryItOnline!
Die meisten bis wenigsten Favoriten, wie für jeden, der es mit seiner Zwangsstörung ernst meint, sind alphabetisch!
Übernimmt Ein- und Ausgaben als Text (dh die Zeilen werden durch neue Zeilen getrennt).
3 Bytes gespart durch Richtungsumkehr und Verwendung einer anderen Methode: Steigern statt Zeichen aus dem Alphabet zu finden.
Wie?
quelle
JavaScript (ES6),
747574 ByteDie Aromen werden wie in der Herausforderung beschrieben bestellt: Traube, grüner Apfel, Zitrone, Orange, Erdbeere.
Zwischenausgaben werden durch Zeilenumbrüche getrennt.
Testfall
In diesem Testfall wird das 5x5-Beispiel verwendet. Alle anderen Rastergrößen sollten wie erwartet funktionieren.
Code-Snippet anzeigen
quelle
Bash,
4846 BytesAKTUALISIEREN:
Golf gespielt
Übernimmt die Eingabe bei Standard, druckt auf Standardausgabe. Isst lila, grün, gelb und dann orange.
Ein äquivalentes Sed- Programm wäre:
Beispielausgabe (Begrenzer dienen nur der Übersichtlichkeit)
Probieren Sie es online!
quelle
Python 2,
60 5756 Bytesrepl.it
Rekursive Funktion, die in umgekehrter alphabetischer Reihenfolge isst und die Grüns zum Schluss stehen lässt.
Die Eingabe
s
ist eine Zeichenfolge mit einem'g'
Zeilentrennzeichen, dessen Ordnungszahl kleiner als die von a ist (z. B. eine neue Zeile oder ein Komma).Die Funktion gibt ihre Eingabe aus und wiederholt sie, wenn diese Eingabe etwas enthält, das größer als ein 'g' ist. Dabei wird die Eingabe mit dem ersten Vorkommen des durch ein Leerzeichen ersetzten Maximalzeichens übergeben.
(Fast ein Port meiner Gelee-Antwort .)
quelle
Perl,
5346 + 2 = 48 BytesLaufen Sie mit
-0n
-10 Bytes dank @Dada
Bearbeiten: Auch dank @Dada für den Hinweis habe ich vergessen, die Eingabe als erste Ausgabe zu drucken. Das wurde behoben.
Mit dieser Antwort ist ein bisschen Trick verbunden, also werde ich aufschlüsseln, was los ist.
Erstens mag Perl nicht, dass mehrzeilige Parameter übergeben werden. Die Variable
$/
ist das Trennzeichen für Eingabedatensätze. Wenn eine Eingabe auf das darin gespeicherte Zeichen stößt, beendet der Interpreter diese Eingabe und beginnt mit einer neuen Eingabe. Der Standardinhalt ist das Newline-Zeichen\n
. Das bedeutet, dass die Übergabe einer mehrzeiligen Zeichenfolge nicht möglich ist. Dazu müssen wir uns$/
von deren Inhalten distanzieren . Hier kommt das-0
Flag ins Spiel: Die Einstellung-0
wirdnull
in der Variablen gespeichert$/
, sodass der Interpreter alles$_
auf einmal in die implizite Variable einlesen kann .Der nächste Trick ist die
eval
Aussage. Was genau machen wireval
? Wir führeneval
das Ergebnis dersprintf
Anweisung an, die sich wie folgt zusammensetzt:Das erste, was übergeben
sprintf
wird, ist die Zeichenfolge, die"say while s/%s/./;"
viermal wiederholt wird.Anschließend werden
sprintf
vier Bareword-Zeichen übergeben,p,o,g,r
die in diesprintf
Anweisung interpoliert werden und jede Instanz von ersetzen%s
. Was wir dann bekommen, ist der folgende String, der an dieeval
Funktion übergeben wird:Jede
while
Schleife wertet den Ausdruck auss/[color]/./
, der die erste Instanz einer beliebigen Farbe in der impliziten Variablen$_
durch einen Punkt ersetzt. Wenn eine Ersetzung vorgenommen wird, wird sie zurückgegeben1
, andernfalls wird nichts zurückgegeben. Das///
es Nebenwirkungen hat, ändert es die ursprüngliche Variable$_
, deren Inhalt dann über gedruckt wirdsay
. Es werden vier Versionen dieser Schleife ausgeführt, wobei die Purpur-, Orangen-, Grün- und dann die Rottöne ersetzt werden und nur die Gelben übrig bleiben.Der Grund, warum die Gelben übrig bleiben, ist, dass es
y
sich nicht um ein Barewort handeln kann, da es sich tatsächlich um eine Funktion handelt. Wenn Siey
anstelle eines dieser Buchstaben einen Buchstaben verwenden, wird ein Fehler ausgegeben . Ich könnte dies ändern, indem ich Anführungszeichen setze (+2 Bytes) oder ein Y in Großbuchstaben schreibunabhängig mache (+1 Byte), aber für Code-Golf zählt jedes Byte, also habe ich entschieden, dass ich es wirklich mag Zitronenkegel am meisten.TL; DR:
Grape, Orange, Green Apple, Strawberry, Lemon
quelle
-0
Flagge sollte Sie um 10 Bytes speichernFirst output shall be the first input
Perl,
303133 + 2 =323335 BytesLaufen Sie mit
-n0
(2-Byte-Strafe).Anscheinend esse ich gerne Kegel in alphabetischer Reihenfolge, weil das Programm dadurch kürzer wird. Das Programm braucht nicht wirklich viel Erklärung:
-n0
liest die Eingabe implizit (-n
bedeutet "Eingabe implizit lesen",-0
bedeutet "Eingabe in Zeilenumbrüchen nicht unterbrechen");for$x(g..r)
führt$x
nacheinander eine Schleife mit set aus jedem Buchstaben vong
bisr
aus;say;
druckt die aktuelle Eingabe nach Mutationen aus;s/$x/ /
ersetzt eine Kopie$x
(insbesondere die erste) durch ein Leerzeichen, wenn dies möglich ist; und&&redo
wiederholt den Code in geschweiften Klammern (ohne den Schleifenzähler vorzustellen), wenn der Austausch erfolgreich war.Dieses Programm kann ohne Änderung der Länge problemlos auf weitere Geschmacksrichtungen von Skittle verallgemeinert werden und funktioniert mit einem Stapel beliebiger Größe.
Hier ist ein Ideone-Link, über den Sie es testen können. (Ideone nicht zulässt , dass Sie Befehlszeilenoptionen angeben, so dass ich am Anfang zu Satz ein paar Zeilen hinzuzufügen hatte
-n0
und das ,-M5.010
dass Sie kostenlos.)quelle
say;for$x(g..r){say while s/$x/ /}
?for$x(p,o,g,r)
welche nicht.say while
ist nur ein Byte länger und etwas, das ich als Alternative in Betracht gezogen habe, also kann ich einfach darauf wechseln.say;
weil die Regeln besagenFirst output shall be the first input
for$x(g,o,p,r)
Version zurück, die die Eingabe zuerst kopiert. (Die Suche nach fehlenden Farben nimmt einige Zeit in Anspruch, aber Sie würden nicht erwarten, dass eine Farbe in einer Kegelpackung fehlt.) Für den Datensatz wäre die Version mit densay;
ersten 37 Bytes.C #,
134148 BytesBestellung:
G -> O -> Y -> P -> R
Ich habe einige ähnliche Dinge aus der Antwort von @ Poke verwendet, die derzeit allerdings etwas länger sind, da ich das Zeichen-Array in einen String umwandeln muss.
quelle
Java 7,
139 135 130 151 138135 BytesIsst Kegel in der Reihenfolge: Gelb, Orange, Grün, Lila, Rot
Ich denke, das ist besser als 2 print-Anweisungen>.>
quelle
s.length
C 145 - 5 - 18 - 1 = 121 Bytes
ungolfed + hübsch
Hier
a[][11]
bedeutet das Verwenden von n-Strings der Länge 11, bei denen 1 Zeichen für die Terminierung erforderlich ist, also technisch gesehen nur 10 sichtbare Zeichen.order: alphabetical
Diese Funktion überprüft
'g'
die angegebene Eingabe und eliminiert sie um 1/1. Dann erhöht sie die Variable,'g'
bis sie eine nächste Übereinstimmung (wahrscheinlich einen Buchstaben'o'
) findet, und eliminiert dann diese übereinstimmenden Zeichen.Der Nachteil ist, dass diese Funktion einfach zu vorsichtig ist. Wenn Ihre Kegel
26
verschiedene Farben haben, die mit dem Codenamen az bezeichnet sind, übernimmt diese Funktion auch diese Eingabe ...quelle
#define
. Das hat 19 Bytes gekürztOktave, 49 Bytes
Isst Kegel in alphabetischer Reihenfolge, höchster ASCII-Code zuerst.
quelle
ES6 (Javascript),
7271 BytesEDITS:
Eine nicht rekursive Version in Javascript.
Golf gespielt
Eingabe und Ausgabe sind mehrzeilige Zeichenfolgen, die Pillen in der Reihenfolge "lila => orange => grün => gelb" essen.
Prüfung
quelle
Python 3 -
1419975 BytesProgramm isst Kegel in dieser Reihenfolge -
Orange Red Green Yellow Purple
.Bearbeiten - Vielen Dank an Flp.Tkc, der dazu beigetragen hat, 24 Bytes zu reduzieren!
Ich glaube, es kann weiter Golf gespielt werden, da es sehr einfach aussieht.
quelle
orgy
.Vim
5755 BytesSpeichern von zwei Bytes durch Entfernen des Zeilenbegrenzers. Leider ist es sehr viel schwieriger zu lesen und auf Richtigkeit zu prüfen :(.
Unbedruckbares:
TryItOnline
Isst in der Reihenfolge oypg und lässt alle rs für das Ende :)
quelle
Mathematica, 67 Bytes
Isst Rot, dann Gelb, dann Orangen, dann Purpur.
quelle
Java 7, 125 Bytes
Lila, Gelb, Grün, Rot, Orange. Es freut mich, dass ich meine Bestellung in dieser Lösung abholen kann. : D
Golf gespielt
Ungolfed
Probieren Sie es hier aus!
Ein anderer Ansatz zur anderen Java-Antwort von @Poke. Wir beginnen damit, eine Kopie der ursprünglichen Zeichenfolge zu erstellen. Wir durchlaufen jede Farbe und ersetzen sie jedes Mal, wenn sie durch ein Leerzeichen gefunden wird. Anschließend hängen wir das neue Layout an die Ausgabezeichenfolge an und kehren zurück, nachdem wir alles außer Orange gegessen haben.
Anmerkungen
Die Trennung zwischen den Schritten erfolgt mit einem doppelten Zeilenumbruch
\n\n
. Wenn das Eingaberaster jedoch am Ende mit einem abschließenden Zeilenumbruch versehen werden kann, kann der Kurzschluss auf "Nur" erfolgen\n
.quelle
Haskell, 60 Bytes
Die Eingabe ist eine einzelne Zeichenfolge, bei der die Zeilen durch voneinander getrennt sind
,
. Rückgabewert ist eine Liste von Strings mit allen Zwischenschritten. Die Reihenfolge ist alphabetisch, die größte zuerst, also bleibt grün. Anwendungsbeispiel:Einfache Rekursion. Speichern Sie die Eingabeliste für den Rückgabewert, ersetzen Sie das größte Element
g
durch ein Leerzeichen und rufen Sie die Funktion erneut auf. Basisfall ist, wenn kein zu entfernendes Element mehr vorhanden ist.quelle
MATL, 24 Bytes
Probieren Sie es online! Ich esse meine Kegel lieber in umgekehrter alphabetischer Reihenfolge: Grün ist meine Lieblingsfarbe. Erläuterung:
quelle
QBasic, 125 Bytes
Missbrauch kreativer Regeln!
Diese Einreichung setzt voraus, dass viele Dinge in Ordnung sind:
GORPY
)Ich habe auch eine 130-Byte-Version, die Kleinbuchstaben verwendet und keinen Fehler macht.
Hier ist ein Beispiellauf in QB64 ,
109
der29
für ein 5x5-Raster geändert wurde :Erläuterung
DATA 71,89,82,79
speichert den ASCII - Codes vonG
,Y
,R
, undO
.?INPUT$(109)
Erhält 109 Tastendrücke vom Benutzer und druckt sie aus.Wir geben dann ein unendliches
DO ... LOOP
Konstrukt ein. Bei jedem Durchlauf geben wirREAD
den ASCII-Code des aktuellen Kegels eins
. Dann durchlaufen wir Zeilen und Spalten von 1 bis 10.SCREEN(r,c)
Ermittelt den ASCII-Code des Zeichens auf dem Bildschirm in Zeiler
, Spaltec
. Wenn dies auf die aktuelle Kittle gleichs
, wirSLEEP
für eine Sekunde und dann einen Raum Druck beir
,c
.Die Hauptschleife wird viermal ausgeführt und entfernt die grünen, gelben, roten und orangefarbenen Kegel. Bei der fünften Iteration treten
READ
Fehler auf, weil wir keine Daten mehr haben.quelle