Vous devez écrire un programme ou une fonction qui génère ou renvoie autant de chapitre I du Petit Prince que possible. Votre programme ou fonction doit être un bloc de code M-by-N contenant uniquement des caractères ascii imprimables (point de code de 32 à 126) et des nouvelles lignes à la fin de chaque ligne.
Vous ne pouvez utiliser que 26 caractères au maximum parmi les 96 caractères ascii imprimables (et les sauts de ligne à la fin des lignes).
Dans chaque ligne et colonne, chaque personnage doit être distinct, comme un puzzle sudoku, c'est-à-dire qu'il ne peut pas y avoir deux fois une lettre dans une ligne ou une colonne.
Un exemple correct codeblock avec M = 4
, N = 3
et alphabet = {a,b,c,d,/,*}
:
abcd
bcd*
*/ac
Détails du code
- Vous pouvez choisir la forme de votre bloc de code (ie
M
etN
). - Le bloc doit être entièrement rempli de caractères, c'est-à-dire que chaque ligne doit avoir la même longueur.
- Un retour à la ligne à la fin de la dernière ligne est facultatif.
- Comme indiqué ci-dessus dans chaque ligne et colonne, chaque caractère doit être distinct.
Détails de sortie
- Vous devez sortir ou renvoyer un préfixe du chapitre I du Petit Prince sans aucune sortie supplémentaire.
- Si vous atteignez une nouvelle ligne dans le texte, vous pouvez la représenter comme n'importe quelle variante courante (\ r, \ n, \ r \ n) mais n'utilisez qu'une seule d'entre elles et comptez-la comme 1 octet dans la partition.
- Une nouvelle ligne supplémentaire est facultative.
Votre score est la longueur du texte de sortie à l' exclusion d'une nouvelle ligne supplémentaire si elle est présente. Un score plus élevé est meilleur.
Exemple de réponse
##Python3, score = 6
alphabet = `print('O\ce w)#X` (alphabet element count = 16)
print('O\
nce w')#X
Vous pouvez vérifier la validité de votre code avec ce programme Python 3 (ideone) ou ce programme CJam (en ligne) fourni par @ MartinBüttner.
Réponses:
CJam, 47
Essayez-le en ligne
Alphabet:
"'*-/2INOSacdehilmnorswxy
Explication:
la source
Pépin , score = 38
Alphabet:
"'015:IMORXacdehilnorswxy
(Je détesterais certainement essayer ceci dans un vrai langage de programmation.)
Explication:
la source
Python 3, score = 11
C'est un problème vraiment difficile pour Python, car les restrictions sur la répétition de caractères sur une ligne ou une colonne rendent presque impossible la création de plus d'une chaîne littérale. Les différentes façons de joindre des chaînes sont donc assez inutiles, car vous ne pouvez pas commencer par les chaînes de manière utile. Voici ma meilleure tentative:
Notez qu'il y a un espace à la fin de la première ligne. L'alias
x
dechr
est nécessaire pour éviter que le même caractère ne se retrouve dans plusieurs colonnes. Les caractères de commentaire à la fin pourraient être presque n'importe quoi.L'alphabet comprend 21 caractères imprimables, plus la nouvelle ligne (notez l'espace au début):
La sortie est:
la source
CJam, score = 21
Alphabet:
-;INOSacehinoswxy
Juste pour faire rouler la balle; cela peut probablement être battu facilement.
la source
CJam, score = 15
J'ai cette idée depuis un moment maintenant, mais je n'ai pas eu le temps de m'asseoir et de mélanger les choses jusqu'à ce que j'obtienne l'unicité de colonne nécessaire, alors voici une version bébé pour l'instant:
Alphabet (26):
" #)*+,0123456789:;=>Ibcef
Essayez-le en ligne .
Explication
L'idée de base est d'utiliser l'encodage de base afin que nous puissions imprimer plus de 26 types de caractères. Le code principal est
Notez que nous traitons la première
"O"
pour"Once"
séparément , car y compris dans notre chaîne prendrait trop de notre alphabet. Si nous le voulions, nous pourrions essayer d'étendre notre chaîne d'indexation, mais comme il n'y a plus de caractères majuscules pendant un certain temps,"I"
je ne me suis pas trop soucié de cela.Nous devons ensuite construire le grand nombre sur la deuxième ligne d'une manière ou d'une autre. L'approche que j'ai adoptée était de multiplier à plusieurs reprises par une certaine puissance, puis d'ajouter une constante et de répéter, donc dans le code ci-dessus
85032995607801617394
est remplacé paroù
)
est incrément et#
exponentiation dans CJam.Ensuite, le reste (la partie la plus ennuyeuse) remplit chaque ligne pour répondre aux critères de la colonne. Pour ce faire, nous vidons les caractères dans les chaînes et les utilisons
;
pour les faire apparaître. Malheureusement, alors que nous aimerions beaucoup utilisere#
pour les commentaires également pour faciliter les choses, le fait que l'#
exponentiation l'interdise, donc cela ne se fait que sur la dernière ligne.Je suis assez certain que cette méthode peut être étendue jusqu'à la virgule dans la première phrase, mais malheureusement, il est difficile de mélanger les choses pour répondre aux critères de la colonne, donc je pourrais avoir besoin d'une autre méthode pour générer l'entier codé en base.
la source
Python 2, score = 13 (invalide)
Python n'est pas le meilleur langage pour cela ... Après une inspection plus approfondie, il y a deux
n
s dans ma première ligne. Il n'y a pas de remède valable, et je vais arrêter de perdre mon temps avec Python. Je travaille actuellement sur la création d'une solution dans une autre langue, mais je ne partagerai pas encore laquelle.Alphabet (22):
"#(),0167IOcehinprtw
Production:
Once when I w
la source
n
s. Ce problème est presque impossible en Python, car vous ne pouvez utiliser une barre oblique inverse de continuation de ligne qu'une seule fois (car la barre oblique inversée doit être dans la dernière colonne) et aucune ligne ne peut avoir deux du même type de guillemet.