Sie sollten ein Programm oder eine Funktion schreiben, die so viel wie möglich von Kapitel I des Kleinen Prinzen ausgibt oder zurückgibt . Ihr Programm oder Ihre Funktion muss ein M-mal-N-Codeblock sein, der nur druckbare ASCII-Zeichen (Codepunkt von 32 bis 126) und Zeilenumbrüche am Ende jeder Zeile enthält.
Sie können maximal 26 Zeichen Ihrer Wahl aus den 96 druckbaren ASCII-Zeichen (und den Zeilenumbrüchen am Ende der Zeilen) verwenden.
In jeder Zeile und Spalte muss jedes Zeichen anders sein als in einem Sudoku-Puzzle, dh es darf keinen Buchstaben in einer Zeile oder Spalte zweimal geben.
Ein korrektes Beispiel Codeblock mit M = 4
, N = 3
und alphabet = {a,b,c,d,/,*}
:
abcd
bcd*
*/ac
Code-Details
- Sie können die Form Ihres Codeblocks (dh
M
undN
) auswählen . - Der Block muss vollständig mit Zeichen gefüllt sein, dh jede Zeile muss gleich lang sein.
- Ein abschließender Zeilenumbruch am Ende der letzten Zeile ist optional.
- Wie oben in jeder Zeile und Spalte beschrieben, muss jedes Zeichen unterschiedlich sein.
Ausgabedetails
- Sie sollten ein Präfix von Kapitel I des Kleinen Prinzen ohne zusätzliche Ausgabe ausgeben oder zurückgeben .
- Wenn Sie eine neue Zeile im Text erreichen, können Sie diese als eine beliebige häufig verwendete Variante (\ r, \ n, \ r \ n) darstellen. Verwenden Sie jedoch nur eine davon und zählen Sie sie als 1 Byte für die Punktzahl.
- Ein zusätzlicher Zeilenumbruch ist optional.
Ihre Punktzahl ist die Länge des ausgegebenen Textes ohne eine zusätzliche neue Zeile, falls vorhanden. Eine höhere Punktzahl ist besser.
Beispielantwort
##Python3, score = 6
alphabet = `print('O\ce w)#X` (alphabet element count = 16)
print('O\
nce w')#X
Sie können die Gültigkeit Ihres Codes mit diesem Python 3 (Ideone) -Programm oder diesem CJam-Programm (online) überprüfen, das von @ MartinBüttner bereitgestellt wird.
Antworten:
CJam, 47
Probieren Sie es online aus
Alphabet:
"'*-/2INOSacdehilmnorswxy
Erläuterung:
quelle
Pip , Score = 38
Alphabet:
"'015:IMORXacdehilnorswxy
(Ich würde es auf jeden Fall hassen, dies in einer echten Programmiersprache zu versuchen .)
Erläuterung:
quelle
Python 3, Punktzahl = 11
Dies ist ein sehr schwieriges Problem für Python, da es aufgrund der Einschränkungen bei der Wiederholung von Zeichen in einer Zeile oder Spalte fast unmöglich ist, mehr als ein String-Literal zu erstellen. Die verschiedenen Arten, Zeichenfolgen miteinander zu verbinden, sind daher ziemlich nutzlos, da Sie die Zeichenfolgen zunächst nicht auf nützliche Weise erfassen können. Hier ist mein bester Versuch:
Beachten Sie, dass am Ende der ersten Zeile ein Leerzeichen steht. Der Alias
x
fürchr
ist erforderlich, um zu vermeiden, dass dasselbe Zeichen in mehr als einer Spalte endet. Die Kommentarzeichen am Ende können fast alles sein.Das Alphabet besteht aus 21 druckbaren Zeichen plus Zeilenumbruch (Leerzeichen am Anfang beachten):
Ausgabe ist:
quelle
CJam, Score = 21
Alphabet:
-;INOSacehinoswxy
Nur um den Ball ins Rollen zu bringen; Dies kann wahrscheinlich leicht geschlagen werden.
quelle
CJam, Score = 15
Ich habe diese Idee schon eine Weile gehabt, aber ich hatte keine Zeit, mich hinzusetzen und die Dinge zu mischen, bis ich die benötigte Eindeutigkeit der Spalte erlangt habe.
Alphabet (26):
" #)*+,0123456789:;=>Ibcef
Probieren Sie es online aus .
Erläuterung
Die Grundidee ist, die Basiscodierung zu verwenden, damit wir mehr als 26 Arten von Zeichen drucken können. Der Kerncode ist
Beachten Sie, dass wir das erste
"O"
für"Once"
sich behandeln, da die Aufnahme in unsere Zeichenfolge zu viel von unserem Alphabet beanspruchen würde. Wenn wir wollten, könnten wir versuchen, unsere Indexzeichenfolge zu erweitern, aber da eine Weile lang keine Großbuchstaben mehr vorkommen, habe"I"
ich mich nicht allzu sehr darum gekümmert.Wir müssen dann irgendwie die große Zahl in der zweiten Zeile aufbauen. Der Ansatz, den ich gewählt habe, war, wiederholt mit einer Potenz zu multiplizieren, dann eine Konstante hinzuzufügen und zu wiederholen, sodass der obige Code
85032995607801617394
durch ersetzt wirdWo
)
ist Inkrement und#
Potenzierung in CJam.Dann füllt der Rest (der nervigste Teil) jede Zeile auf, um die Spaltenkriterien zu erfüllen. Zu diesem Zweck werden Zeichen in Strings abgelegt und
;
mit Pops versehen. Obwohl wir dies gerne auche#
für Kommentare verwenden würden, um die Dinge einfacher zu machen,#
verbietet die Exponentiation dies leider, so dass dies nur in der letzten Zeile erfolgt.Ich bin mir ziemlich sicher, dass diese Methode bis zum Komma im ersten Satz erweitert werden kann, aber leider erweist es sich als schwierig, die Dinge zu mischen, um die Spaltenkriterien zu erfüllen, sodass ich möglicherweise eine andere Methode zum Generieren der basiscodierten Ganzzahl benötige.
quelle
Python 2, Punktzahl = 13 (ungültig)
Python ist nicht die beste Sprache dafür ... Bei näherer Betrachtung befinden sich zwei
n
s in meiner ersten Zeile. Es gibt kein lohnendes Mittel, und ich werde aufhören, meine Zeit mit Python zu verschwenden. Ich arbeite derzeit an einer Lösung in einer anderen Sprache, werde aber noch keine Lösung veröffentlichen.Alphabet (22):
"#(),0167IOcehinprtw
Ausgabe:
Once when I w
quelle
n
s hat. Dieses Problem ist in Python nahezu unmöglich, da Sie einen Zeilenfortsetzungs-Backslash nur einmal verwenden können (da sich der Backslash in der letzten Spalte befinden muss) und keine Zeile zwei Anführungszeichen derselben Art haben kann.