Écrivez un programme qui génère une liste du nombre d'occurrences de chaque caractère unique dans son code source.
Par exemple, ce programme hypothétique {Source_Print_1};
devrait produire cette sortie:
; 1
P 1
S 1
_ 2
c 1
e 1
i 1
n 1
o 1
p 1
r 2
t 1
u 1
{ 1
} 1
Le formatage doit correspondre à cet exemple. Aucun espace étranger n'est autorisé, à l'exception d'une nouvelle ligne finale facultative.
Votre programme peut ne pas lire son propre code source à partir du fichier source.
Les caractères répertoriés doivent être dans l'un des deux ordres. Soit l'ordre des valeurs de caractères dans le codage de caractères utilisé par votre langue (probablement ASCII), soit l'ordre dans lequel les caractères apparaissent dans votre source.
Cette question s'inspire de ce commentaire de Jan Dvorak .
Réponses:
CJam, 14 octets
Essayez-le ici .
La sortie est dans l'ordre où elle apparaît en premier:
Il s'ajoute simplement
<SP>2<NL>
à chaque personnage dans{S2N`/}
.la source
/// , 12 octets
Un grand merci à @ user23013, qui a suggéré cette amélioration par rapport à mon code CJam, devançant sa propre réponse avec le score le plus élevé dans le processus.
Les personnages sont triés par apparence. Ce code fonctionne dans n'importe quel langage qui imprime simplement son propre code source dans les circonstances données (PHP, ASP, etc.).
CJam, 20 octets
Cette approche n'utilise aucun comptage de caractères intégré.
Essayez-le en ligne dans l' interpréteur CJam .
Comment ça fonctionne
la source
CJam, 20 octets
Comment ça fonctionne
Nous commençons d'abord avec l'un des quine standard dans CJam
qui pousse le premier bloc sur la pile, le copie et exécute la copie, ce qui lui fait finalement imprimer le code source lui-même.
Ensuite, nous ajoutons la logique pour calculer le nombre de caractères à partir du code source:
Essayez-le en ligne ici
la source
Python 3.5.0b1 ,
10773 octetsPlutôt que le quine de remplacement de chaîne habituel, qui nécessite de tout écrire deux fois, voici un
exec
quine.la source
Mathematica, 101 octets
Malheureusement, je ne peux utiliser aucune des astuces de golf normales comme la suppression des espaces blancs,
<>
carStringJoin
,#
au lieu de#1
,@
pour les appels de fonction de préfixe ou à la@@@
place deApply[...,{1}]
, carToString[...,InputForm]
pense qu'il doit tout imprimer ...Cela imprime les caractères dans l'ordre où ils apparaissent pour la première fois dans le code. Si je peux supposer que cela ne fonctionne pas dans un environnement REPL (ce qui est plutôt inhabituel pour Mathematica), je peux économiser deux octets en omettant les deux
;
.la source
InputForm
est ennuyeux ...OutputForm
c'est mieux mais il ne cite pas de chaînes.Haskell, 178 octets
Rien d'extraordinaire. Tous les caractères du programme sont dans une liste littérale (chaîne). Les fréquences aussi. Compressez les deux listes et imprimez. Production:
la source
Fléchette -
214127Une version directe:
Le "4" n'est qu'un facteur pour jouer les chiffres. Voir / exécuter sur DartPad .
Original: tactique standard et les noms de fonction de Dart sont un peu trop longs pour un bon golf.
Voir / exécuter sur DartPad .
la source
Haskell , 146 octets
Essayez-le en ligne!
Production:
(Plus une nouvelle ligne supplémentaire)
Explication:
Le code est
où
"<code>"
est une chaîne du code du programme sans le"
.a
passe par les caractères ascii en commençant par un espace.sum[2|b<-show"<code>",a==b]
compte la fréquence à laquelle le caractère apparaît dans la chaîne, chaque occurrence étant comptée deux fois.a:" "++show s
construit une chaîne du caractère actuel, un espace et le nombre de caractères.mapM putStrLn
Imprime enfin chaque chaîne de la liste avec une nouvelle ligne de fin.La partie la plus difficile était d'obtenir le décompte des
"
bons. Utiliser justeb<-"<code>"
compterait zéro guillemets car il n'y en a pas dans la chaîne. L'utilisationshow"<code>"
ajoute un"
à l'avant et à la fin de la chaîne, ce qui donne un nombre de quatre. J'ai donc dû mettre deux guillemets supplémentaires dans le code, donc au lieu du (plus court) quea:' ':show s
j'ai utiliséa:" "++show s
.la source