Chaque caractère Unicode a un nom, comme "LETTRE MAJUSCULE LATINE A". Un nom de caractère Unicode ne peut contenir que des lettres majuscules, des espaces et le signe moins.
Ecrivez un programme qui lit un texte et affiche les noms de chaque caractère sur une nouvelle ligne. Par exemple, si l’entrée était "Hello, World!", La sortie serait
LATIN CAPITAL LETTER H
LATIN SMALL LETTER E
LATIN SMALL LETTER L
LATIN SMALL LETTER L
LATIN SMALL LETTER O
COMMA
SPACE
LATIN CAPITAL LETTER W
LATIN SMALL LETTER O
LATIN SMALL LETTER R
LATIN SMALL LETTER L
LATIN SMALL LETTER D
EXCLAMATION MARK
- Les entrées doivent provenir d'un fichier ou d'une entrée utilisateur, et pas simplement d'une chaîne de code.
- La sortie doit être écrite dans un fichier ou une sortie standard ou imprimée à l'écran.
- Internet et les bibliothèques externes ne sont pas autorisés, toutes les données nécessaires doivent être dans le code.
- Supposons que l'entrée ne contienne que des caractères ASCII imprimables compris dans la plage de codes 32-126 de Basic Latin. Vous pouvez ignorer une nouvelle ligne.
- Tous les langages de programmation autorisés. Le code le plus court en octets gagne.
Les noms de caractères officiels Unicode peuvent être trouvés ici . Autres sources:
- http://www.w3schools.com/charsets/ref_utf_basic_latin.asp
- http://www.ssec.wisc.edu/~tomw/java/unicode.html#x0000
C’est ma première question. J'apprécierais donc toute suggestion si cela peut être amélioré.
Pour les besoins de ce défi, la liste ci-dessous doit être normative.
32 0020 SPACE
! 33 0021 EXCLAMATION MARK
" 34 0022 QUOTATION MARK
# 35 0023 NUMBER SIGN
$ 36 0024 DOLLAR SIGN
% 37 0025 PERCENT SIGN
& 38 0026 AMPERSAND
' 39 0027 APOSTROPHE
( 40 0028 LEFT PARENTHESIS
) 41 0029 RIGHT PARENTHESIS
* 42 002A ASTERISK
+ 43 002B PLUS SIGN
, 44 002C COMMA
- 45 002D HYPHEN-MINUS
. 46 002E FULL STOP
/ 47 002F SOLIDUS
0 48 0030 DIGIT ZERO
1 49 0031 DIGIT ONE
2 50 0032 DIGIT TWO
3 51 0033 DIGIT THREE
4 52 0034 DIGIT FOUR
5 53 0035 DIGIT FIVE
6 54 0036 DIGIT SIX
7 55 0037 DIGIT SEVEN
8 56 0038 DIGIT EIGHT
9 57 0039 DIGIT NINE
: 58 003A COLON
; 59 003B SEMICOLON
< 60 003C LESS-THAN SIGN
= 61 003D EQUALS SIGN
> 62 003E GREATER-THAN SIGN
? 63 003F QUESTION MARK
@ 64 0040 COMMERCIAL AT
A 65 0041 LATIN CAPITAL LETTER A
B 66 0042 LATIN CAPITAL LETTER B
C 67 0043 LATIN CAPITAL LETTER C
D 68 0044 LATIN CAPITAL LETTER D
E 69 0045 LATIN CAPITAL LETTER E
F 70 0046 LATIN CAPITAL LETTER F
G 71 0047 LATIN CAPITAL LETTER G
H 72 0048 LATIN CAPITAL LETTER H
I 73 0049 LATIN CAPITAL LETTER I
J 74 004A LATIN CAPITAL LETTER J
K 75 004B LATIN CAPITAL LETTER K
L 76 004C LATIN CAPITAL LETTER L
M 77 004D LATIN CAPITAL LETTER M
N 78 004E LATIN CAPITAL LETTER N
O 79 004F LATIN CAPITAL LETTER O
P 80 0050 LATIN CAPITAL LETTER P
Q 81 0051 LATIN CAPITAL LETTER Q
R 82 0052 LATIN CAPITAL LETTER R
S 83 0053 LATIN CAPITAL LETTER S
T 84 0054 LATIN CAPITAL LETTER T
U 85 0055 LATIN CAPITAL LETTER U
V 86 0056 LATIN CAPITAL LETTER V
W 87 0057 LATIN CAPITAL LETTER W
X 88 0058 LATIN CAPITAL LETTER X
Y 89 0059 LATIN CAPITAL LETTER Y
Z 90 005A LATIN CAPITAL LETTER Z
[ 91 005B LEFT SQUARE BRACKET
\ 92 005C REVERSE SOLIDUS
] 93 005D RIGHT SQUARE BRACKET
^ 94 005E CIRCUMFLEX ACCENT
_ 95 005F LOW LINE
` 96 0060 GRAVE ACCENT
a 97 0061 LATIN SMALL LETTER A
b 98 0062 LATIN SMALL LETTER B
c 99 0063 LATIN SMALL LETTER C
d 100 0064 LATIN SMALL LETTER D
e 101 0065 LATIN SMALL LETTER E
f 102 0066 LATIN SMALL LETTER F
g 103 0067 LATIN SMALL LETTER G
h 104 0068 LATIN SMALL LETTER H
i 105 0069 LATIN SMALL LETTER I
j 106 006A LATIN SMALL LETTER J
k 107 006B LATIN SMALL LETTER K
l 108 006C LATIN SMALL LETTER L
m 109 006D LATIN SMALL LETTER M
n 110 006E LATIN SMALL LETTER N
o 111 006F LATIN SMALL LETTER O
p 112 0070 LATIN SMALL LETTER P
q 113 0071 LATIN SMALL LETTER Q
r 114 0072 LATIN SMALL LETTER R
s 115 0073 LATIN SMALL LETTER S
t 116 0074 LATIN SMALL LETTER T
u 117 0075 LATIN SMALL LETTER U
v 118 0076 LATIN SMALL LETTER V
w 119 0077 LATIN SMALL LETTER W
x 120 0078 LATIN SMALL LETTER X
y 121 0079 LATIN SMALL LETTER Y
z 122 007A LATIN SMALL LETTER Z
{ 123 007B LEFT CURLY BRACKET
| 124 007C VERTICAL LINE
} 125 007D RIGHT CURLY BRACKET
~ 126 007E TILDE
code-golf
kolmogorov-complexity
unicode
moi et mon chat
la source
la source
C:\Windows\System32\getuname.dll
. Est-ce que cela compte aussi comme une "bibliothèque externe", même si elle est intégrée à Windows?Réponses:
Java - 113 octets (152 si lus depuis la ligne de commande)
Edit: Suppression des accolades inutiles.
Edit2: suppression de la variable inutile.
Edit3: Au lieu de Character.getName (), j'utilise c.getName ().
Edit4: Passer une chaîne en tant qu'argument de ligne de commande.
Avec argument de ligne de commande (113 octets):
Avec ligne de lecture (152 octets):
Java a tout ce qu'il faut. Je suis sûr que cela pourrait être joué au golf.
la source
x[0].chars().forEach(i->System.out.println(Character.getName(i)));
cette option enregistre 2 caractères par rapport à la solution en argument de ligne de commande (en remplaçant lafor
boucle).x[0].chars().map(' '::getName).forEach(System.out::println);
Python 3, 56 octets
Utilise une fonction intégrée
unicodedata.name()
, elle peut donc être non compétente. La réponse Java l'a fait de la même manière, alors j'ai pensé que cela valait au moins la peine d'être publié.la source
for i in input():print(unicodedata.name(i))
Est sûrement plus courte?import unicodedata
, donc c'est plus long .JavaScript (ES6) 594
618 626Remarque: Je pourrais économiser environ 30 octets en compressant la chaîne longue avec atob / btoa, mais les caractères utf8 au-dessus de '~' ne sont pas bien acceptés par l'éditeur de publication Stack Exchange. Je préfère garder un extrait en cours d'exécution à la place.
Éditez 8 caractères sauvegardés thy @Ypnypn
Compression évidente de mots répétés. La nouvelle ligne à l'intérieur des backticks est significative et comptée.
Testez l'exécution de l'extrait de code dans Firefox.
la source
R,
54 octets62Edit: par commentaire @flodels, je dois d'abord le lire depuis la connexion, donc je devais ajouter
scan
. C'est aussi probablement une solution non compétente selon toutes les règles.Usage
Vous pouvez également l'intégrer dans une fonction pour une utilisation plus pratique
Ensuite, l'utilisation est juste
la source
Perl 6 , 21 octets
Je n'ai pas vu de règle spécifique contre l'utilisation d'une méthode intégrée pour obtenir les noms unicode.
(La réponse Java, qui est actuellement la plus votée, fait de même)
la source
Perl (+ coreutils) , 563 octets
Note : Le fichier ci-dessous ne fonctionnera pas tel quel, il doit être reproduit à partir de la
xxd
sauvegarde ci-dessous! J'ai essayé de transmettre les données brutes directementzcat
, mais cela a échoué. Je pourrais juste utiliser un module natif Perl Gzip, mais ce sera demain, c'est sûr!Pour reproduire le fichier, exécutez:
collez l'hexdump et appuyez sur Enter, puis sur Ctrl+ D.
Courir comme:
Version précédente en Perl pur, 893 octets
la source
awk -
794739Je plaisante; D
Fonctionne avec stdin / stdout.
Plus "lisible":
la source
C ++ 11, 739 octets
Basé sur la solution de sweerpotato, mais fortement modifiée.
la source
C, 644
656Programme complet, lecture de l'entrée standard
Test sur Ideone
Ceci est un portage de ma réponse JavaScript en C. Le langage C est bon pour manipuler des caractères uniques comme des nombres (pas besoin de
.toUpperCase
, etc.), mais il est plus faible dans la manipulation de chaînes.Moins golfé
la source
Common Lisp (SBCL),
5279Ceci est intégré et dépend de la mise en œuvre, vous pouvez donc l'ignorer lors du choix de la réponse acceptée. Ce n'est pas suffisant pour battre Python , malheureusement. La version mise à jour est conforme à la sortie attendue (je dois remplacer les traits de soulignement par des espaces).
Exemple
la source
Pyth, 41
Utilise la même chose que la réponse python de mbomb007 . Notez que cela ne peut pas être exécuté en ligne car l'
$
opérateur est dangereux.la source
C ++ 14,
10431000998996972 octetsSolution grotesque en C ++ 14:
Merci à kirbyfan64sos pour avoir joué deux octets au golf
la source
*s
au lieu des[0]
?CJam, 517
Version en ligne
J'ai essayé différentes solutions, mais le simple fait de stocker tous les noms dans un grand nombre semble le plus efficace.
Ceci est mon premier vrai programme CJam en passant.
la source
C ++ 14
716706704Version en direct .
Avec quelques espaces:
La chaîne compressée
a
décompresse en:Et pendant la décompression
}
est remplacé par\0
,|
avec(espace) et
{
avec-
et minuscules sont converties en majuscules.La chaîne est compressée dans le style LZ sous la forme d'un littéral
[a-~]
ou d'un décalage / longueur codé par deux caractères afin de correspondre à une correspondance antérieure dans la chaîne.la source
Clojure, 56 octets
Inspiré par la réponse de @ peter. Utilise Clojure pour l'interopérabilité Java.
la source
Perl - 894 octets
Soigneusement conçu à la main. Première fois à Perl, tous les conseils sont appréciés.
la source
Facteur, 58 octets
Assez simple; fait exactement la même chose que Java et Perl 6 réponses.
la source
PHP> = 7, 54 octets non compétents
IntlChar :: charName
la source