Défi
Imprimez les caractères suivants:
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890
Le problème, c'est que vous ne pouvez en utiliser aucun dans votre code.
Vous pouvez les imprimer dans un ordre arbitraire, avec ou sans nouvelle ligne, mais vous ne pouvez imprimer aucun autre caractère.
Règles
- Vous ne pouvez utiliser aucun caractère de l'ensemble mentionné ci-dessus
- Vous pouvez utiliser d'autres caractères
- Pas de tricherie
- Lacunes standard interdites
- C'est le code-golf , la réponse la plus courte gagne.
Des clarifications
- Si votre langue utilise un jeu de caractères différent, vous ne pouvez pas utiliser de points de code correspondant à des caractères alphanumériques.
- Le renvoi d'une chaîne d'une fonction est considéré comme une forme de sortie valide.
- Vous pouvez retourner un tableau de caractères.
code-golf
string
kolmogorov-complexity
restricted-source
dkudriavtsev
la source
la source
Réponses:
V ,
87 octets1 octet enregistré grâce à @DJMcMayhem en le mettant dans une déclaration regex
Essayez-le en ligne!
Les sorties:
Note:
×
n'est pasx
ouX
, c'est0xd7
Hexdump:
Explication
Maintenant, la sortie ressemble à:
Nous devons supprimer tous les caractères non alphanumériques et le
_
(puisqu'il n'est pas inclus dans\W
), alors faisons-le en utilisant regexla source
Ó×ü_
:s/\W\|_//g
Octave ,
52 4640 octetsCeci est évalué à
Explication
Nous utilisons ici le fait que les caractères sont implicitement convertis en entiers lorsque des opérations arithmétiques telles que
+-
ou la fonction range:
sont appliquées. Lorsqu'ils sont concaténés avec une chaîne vide ([...,'']
), les nombres sont à nouveau convertis en caractères.Essayez-le en ligne!
la source
+1
d'être le premier langage non ésotérique dans un défi très adapté aux esolangs.+1
, pas pour utiliser Octave (c'est assez simple), mais pour très bien jouer au golf, et_
comme variable! Je ne savais pas que c'était possible ... Bien!brainfuck ,
77767572 octetsEssayez-le en ligne!
Comment ça fonctionne
L'interprète commence par une bande de 0 cellules.
Cela définit la première cellule sur 8 , laissant la bande dans l'état suivant.
Cela incrémente la deuxième cellule une fois, la troisième cellule 6 fois, la quatrième cellule 4 fois, décrémente la cinquième cellule une fois, puis revient au début de la bande et décrémente la première cellule. Après 8 itérations, la bande ressemble à ce qui suit.
Nous passons à la deuxième cellule et l'incrémentons deux fois pour nous préparer à imprimer les chiffres.
Cela imprime la troisième cellule, l’incrémente, puis revient à la deuxième cellule et la décrémente. Après 10 itérations, nous avons imprimé
0123456789
et la bande ressemble à ce qui suit.Il est temps de préparer la bande pour les lettres! Nous commençons par avancer de deux cellules.
Cela incrémente la cinquième cellule une fois, la sixième cellule deux fois, la septième cellule trois fois, puis revient à la quatrième cellule et la décrémente. Après 32 itérations, la bande ressemble à ce qui suit.
Comme dernière étape avant d’imprimer les lettres, nous passons à la cinquième cellule et l’incrémentons deux fois.
Enfin, nous passons à la sixième cellule pour l'incrémenter et l'imprimer, faisons de même pour la septième cellule, puis revenons à la cinquième cellule et la décrémentons. Après 26 itérations, nous avons imprimé
Aa...Zz
.la source
Ruby, 42 octets
Une fonction qui retourne un tableau de caractères. Un programme qui affiche uniquement les caractères est de 49 octets:
Ceci utilise simplement les caractères ascii de chaque côté des plages pertinentes pour définir une plage. Par exemple,
?/...?:
signifie les caractères entre une barre oblique et un deux-points, sans compter la fin. Pour se débarrasser des débuts, on soustrait un tableau contenant les trois caractères de départ.la source
6502 langage machine,
747068 octetsHex dump (les programmes 6502 ne sont généralement pas déplaçables; le code est stocké à partir de l'emplacement 0603 $):
Vous pouvez voir que cela n'utilise aucun des octets interdits: 41 $ à 5a $, 61 $ à 7a $ ou 30 $ à 39 $.
Il s'agit d'une fonction sans argument qui, lorsqu'elle est appelée, renvoie un pointeur sur le tableau de caractères "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" situé en haut de la pile, conformément aux conventions d'appel 6502.
En guise d’explication, voici un démontage:
Le code en langage machine se modifie automatiquement. Pour manipuler les piles, je devais utiliser PHA et PLA pour insérer et extraire l'accumulateur, mais ces instructions portent les codes d'opération $ 48 et $ 68, qui sont interdits (ce sont les codes ASCII des lettres "H" et "h"). Ainsi, pour PHA, je prends le nombre de 24 USD, fais un décalage arithmétique à gauche (ASL) et stocke les 48 USD obtenus dans les quatre emplacements du code où ils doivent être exécutés. Ensuite, pour PLA, j’utilise un OU au niveau des bits sur les 48 $ de l’accumulateur pour calculer 68 $ et les stocke dans les deux emplacements du code où cela est nécessaire.
Il y avait plusieurs instructions autres que PHA et PLA que je ne pouvais pas non plus utiliser car leurs opcodes étaient identiques à des lettres ou des chiffres ASCII, mais j'ai trouvé des solutions de contournement directes pour ces autres.
Le tableau de caractères souhaité est calculé et stocké à partir de l'emplacement 0 (peu importe l'endroit où il est stocké car nous devons simplement nous assurer qu'un pointeur sur ce point est renvoyé en haut de la pile).
Vous pouvez essayer ceci chez l'assembleur et l'émulateur de Nick Morgan 6502 . Voici une capture d'écran; le moniteur en bas affiche la chaîne de sortie (aux emplacements compris entre 00 $ et $ 3D) après l'exécution du programme.
la source
Haskell ,
75 72 63 5856 octetsEssayez-le en ligne! Appeler avec
__
. Sortie:Merci à xnor qui a suggéré
__
et en_'
tant que noms de variables à deux octets au lieu de(!)
ou similaires, en économisant 9 octets. J'aime particulièrement comment_'
brise la coloration syntaxique. Et merci encore à xnor d’avoir généralisé les plages, sauvant encore 4 octets.Edit: Je trouve que les caractères Unicode sont autorisés comme identifiants dans Haskell, donc par exemple
ä
,ö
... peut également être utilisé comme deux identifiants d'octets. Puisqu'il restait un identifiant de trois octets dans le programme, je l'ai remplacé parä
, en enregistrant 2 autres octets.Explication:
__
et_'
sont des noms de variables valides. A partir de la spécification de langue :Donc, le code est équivalent à
Dans la compréhension liste
a
se lie à'/'
etb
à':'
("/:"
est équivalent à['/',':']
, de sorte que le pattern matching réussit). Ensuite, la plage[a..]
construit la chaîne de tous les caractères supérieurs'/'
:Pour chaque caractère
x
de cette chaîne, il est ensuite vérifié si'/'<x
etx<':'
, ce qui donne les caractères0123456789
. Alorsa
etb
sont liés à,@
et[
cédant les caractèresABCDEFGHIJKLMNOPQRSTUVWXYZ
et ainsi de suite.la source
__
et_'
comme variables.Underscore is treated as a lower-case letter
règle._'_=[__|[_',__']<-["`{","@[","/:"],__<-[_'..],_'<__,__<__']
(dans les variables normalesz=[x|[a,b]<-["`{","@[","/:"],x<-[a..],a<x,x<b]
).__
au lieu de_'_
même si__
est utilisé comme identifiant dans la liste de compréhension.Perl (5.10 ou 5.12),
3029 octetsCe programme est principalement composé de caractères non imprimables, alors voici un hexdump:
Ce programme est très simple: nous regexons (
=~
) un trait de soulignement (_
; merci @ Dennis pour nous avoir signalé que cela fonctionne) contre une expression rationnelle. La regex est spécifiée en tant qu'expression plutôt que littéralement; Plus précisément, nous prenons le complément bitwise (~
) d'une chaîne. En inversant le complément au niveau du bit pour obtenir la chaîne sous-jacente, nous obtenons la regex suivante en cours d'exécution:Dans les versions 5.10 et 5.12 de Perl, la
(?{…})
syntaxe était une syntaxe expérimentale permettant aux expressions rationnelles d'exécuter du code arbitraire au moment de l'exécution. Dans ce cas, nous l'utilisons pour exécuter un programme Perl simple afin d'imprimer le résultat souhaité. (Les versions antérieures à 5.10 ne peuvent pas être utilisées car elles ne le sont passay
.)Les versions modernes de Perl ont été désactivées
(?{…})
par défaut pour des raisons de sécurité, mais si vous avez une telle version de Perl, vous pouvez désactiver le contrôle (et donc exécuter ce programme) via-Mre=eval
un argument de ligne de commande (avec le standard-M5.010
qui spécifie la version). du langage à implémenter, et qui ne compte pas dans le décompte).la source
Actuellement
854 octetsComment ça fonctionne:
L'impression est implicite à la fin du programme.
Édition 1: Remplacement de l’alphabet en minuscule / majuscule, puis dans la plage de chiffres (10) avec uniquement les caractères imprimables de la base 62.
Edit 2: changé ">" en '> grâce à Mego :) enregistré 1 octet.
Essayez-le en ligne!
la source
'>
est un octet plus court que">"
.PHP, 69 octets
Le code est stylisé sous Windows-1252 ici. Ci-dessous se trouve un xxd hexdump réversible .
Essayez-le en ligne!
la source
Java (OpenJDK 9) , 277 octets
Oui, Java, vous avez bien lu!
Essayez-le en ligne!
Ceci affiche les plages, mais inversé, car l'ordre n'a aucune importance.
J'ai joué sur l'absence de règle "pas d'entrée" pour définir implicitement ce
char
qui est nécessaire pour que tout fonctionne. Si c'est de la triche, dites-le s'il vous plaît.Ungolfed & testing
la source
char
, sinon ce serait un morceau de gâteau. Et pour être juste, ma réponse est plus courte que votre réponse initiale. Jetez un coup d'œil à mon explication pour tous les frais généraux que je dois subir.Brainfuck,
8985 octetsParce que brainfuck ignore de toute façon les caractères alphanumériques, il s’agit là d’un défi à sortie constante ... (Edit: voir la solution de Dennis pour une version plus courte de 10 octets)
Essayez-le en ligne!
Ce code est un bon exemple de boucles comptées de base dans le brainfuck:
Notez que cela utilise des raccourcis d'habillage pour générer des nombres, ce qui signifie que l'interpréteur doit avoir des cellules d'habillage de 8 bits (telles que celle à laquelle je suis lié).
la source
JavaScript (ES6), 983 octets
Il se trouve que dans ES6, vous pouvez utiliser beaucoup de caractères dans les noms de variables JavaScript ! Fonctionne très bien après avoir épuisé les six noms de variable de 1 à 2 octets avec
$
et_
.JavaScript, 1223 octets
C'était ma réponse avant que j'apprenne ce qui précède.
Je courus
console.log('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890')
par jjencode et le résultat manuellement joué au golf. Il y a certainement plus d'optimisations possibles.la source
Befunge,
737259575553 octetsEssayez-le en ligne!
Il s’agit d’une boucle unique comptant à partir de
{
(c’est-à-dire un caractère aprèsz
). Lors de la première itération, la"{"<
séquence place deux copies de{
sur la pile, l’un étant le compteur de boucle initial et l’autre servant à décrémenter ce compteur à l’aide de la séquence!!-
(deux NOTs1
, qui sont ensuite soustraits). Lors des itérations suivantes, le compteur de boucle est déjà sur la pile, il ne vous en faut donc qu'un{
pour configurer la séquence de décrémentation.Le reste du code est juste une longue expression booléenne calculant si le caractère est dans la plage. Si c'est le cas, la branche de la deuxième ligne se divise à gauche pour écrire la valeur. Sinon, la branche droite vérifie si nous avons atteint zéro et devrions nous arrêter. Les deux branches se confondent au milieu pour remonter et répéter la boucle. Notez que toutes les commandes de direction verticale vont vers le haut, car nous ne pouvons pas utiliser de
v
, mais c'est bien parce que le pointeur d'instruction se positionne automatiquement en haut du champ de lecture.Merci à Mistah Figgins d’ avoir initialement trouvé une meilleure technique pour l’incrément de boucle.
Mais un merci tout spécial à Jo King pour une approche encore meilleure du décompte plutôt que de la hausse, ainsi que pour une configuration de branche plus compacte.
la source
v
fichier car il s'agit d'une source restreinte, mais cela fonctionne tout aussi bien avec a^
. Merci.Gelée ,
17 à16 octetsEssayez-le en ligne!
Comment ça fonctionne
la source
Brainfuck à modification automatique , 32 octets
Essayez-le en ligne!
xxd -r
hexdump irréversible (contient des éléments non imprimables):la source
@/
fait?`\x1a@\x1a/\n
sont là parce que leurs points de code sont vraiment utiles dans le golf. Vous ne pouvez pas les enlever.+.
place de.+
.C, 128 octets
Oui, C. Et même plus court que quelques ésotériques.
Appelez
_
unchar *
tampon suffisamment grand et vide .Peut-être dépendant du compilateur. Testé avec GCC; Le fichier a été enregistré dans la page de codes 1252.
la source
JavaScript (ES6),
812745657650536520416 octetsEdit: En utilisant le codage ISO8859-1, cette solution contient 416 octets au lieu de 520 octets. Le programme complet compte 432 octets, en tenant compte des 16 octets supplémentaires pour
Ceci est une soumission de fonction, par opposition à un programme complet. JJEncode (pointe du chapeau à darrylyeo pour ça), j’ai passé beaucoup de temps à jouer au golf , mais au lieu de jouer au golf
J'ai joué au golf
où
Ø
est initialisé à""
dans la surcharge.Réécrit avec les opérateurs de virgule convertis en nouvelles lignes:
Explication
Ce script commence par initialiser quelques types intégrés et les contraindre dans des chaînes. Les chaînes que nous pouvons obtenir sans utiliser de caractères alphanumériques sont:
À partir de ces chaînes et des chiffres nécessaires pour référencer des caractères individuels, nous pouvons obtenir les chaînes
return
etconstructor
, qui peuvent être utilisées comme:Le constructeur de l'objet est
Object()
, et son constructeur estFunction()
, que nous pouvons utiliser essentiellement commeeval()
.Dans ce cas, le script codé à exécuter est la
for
boucle imbriquée concaténant tous les caractères alphanumériques dans une chaîne en utilisant leurs points de code et en les renvoyant.Pour les caractères alphabétiques du script codé auxquels il est impossible d'accéder à l'aide des fonctions intégrées, JJEncode utilise des échappements octaux pour les représenter, puis décode la chaîne entière en la renvoyant à partir d'une fonction interne. La fonction externe peut ensuite être appelée pour exécuter le source.
Démo
la source
Brain-Flak , 171 octets
Comprend +3 pour
-A
Essayez-le en ligne!
Il existe probablement un moyen de le faire sans avoir à répéter la fonction "add 1".
la source
Julia 0.4 , 46 bytes
C'est une fonction générique qui retourne un tableau de caractères.
Essayez-le en ligne!
Version alternative, 47 octets, uniquement ASCII
Essayez-le en ligne!
la source
J, 171 octets
Ow ... mon cerveau me fait mal ... Essayez-le en ligne!
Pour que vous puissiez voir l’ensemble d’une ligne (elle ne fonctionnera pas, mais avec des sauts de ligne).
Garanti uniquement de fonctionner avec la version J
j805/j64/linux/release/commercial/www.jsoftware.com/2016-12-11T08:02:52
, dans cet ordre. (Seuls les 12 premiers caractères sont importants.)Explication
La majeure partie du programme est consacrée à la génération constante. Avec ces constantes remplacées par leurs valeurs, le programme ressemble à ceci:
Avec quelques parenthèses supprimées et quelques chiffres plus agréables:
Ceci est composé d'un tas de
,
et,~
s, qui ajoutent et ajoutent des arguments. Voici les valeurs séparées:":26
('.',~10{9!:14'')
'+/'
(":65 97 48)
','
(':',~12{9!:14'')
1
est26
comme une chaîne.9!:14''
génère la chaîne suivante sur TIO:avec
2
, nous obtenons le10
caractère th (i
delinux
), et ajoutons un.
à la fin de celui-ci, cédanti.
.3
et5
sont explicites.4
est la liste des nombres65 97 48
sous forme de chaîne.6
est similaire à2
, sauf que c'est le12
caractère th (u
delinux
) et ajoute un:
à la fin, cédantu:
.Tout cela cède
u:,65 97 48+/i.26
.".
évalue cela en nous donnant:(Note:
+/
addition tabulée.)Ensuite, avec
62{.
, nous prenons les premiers62
personnages de ceci, nous donnantABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
.la source
<:<.^^*_
laquelle enregistre un octet. En outre, j'ai essayé de générer la totalité de la plage et de supprimer les symboles pour obtenir':;<=>?@[\]^_`'-.~".(':',~(+:+:>.^*_){(*:>.^*_)!:(<:<.^^*_)''),":(#@}.@}.@}.@,~(+#\)],,~)(*:@#$])'+++++'
104 octets. Je suis sûr qu'il peut être beaucoup plus court05AB1E ,
181511 octets-4 grâce à Adnan, car si la taille en entrée est 1, 05AB1E utilisera 0 pour b sur la première commande.
Essayez-le en ligne!
J'ai essayé tellement d'approches différentes, mais les points clés qui ont rendu la tâche difficile:
la source
You may print them in arbitrary order
dit le défi.•£•Ýç©á®þ«˜
marche aussi?Brainfuck, 55 octets
Sortie:
Essayez-le en ligne!
Initialise la bande à 3,2 n et fonctionne à partir de là.
la source
Perl 6 , 43 octets - sans compétition
Un lambda qui renvoie une liste de caractères.
Explication:
Dépend d'une correction de bug de l'interprète Rakudo Perl 6 qui était uniquement réservée au dépôt Git aujourd'hui, et ne fait pas encore partie d'une version officielle de Rakudo. En fait, j'ai rencontré le bogue en répondant à ce défi et j'ai réussi à le réparer avec l'aide de l'un des développeurs principaux de Perl 6. Les règles de ce site, telles que je les comprends, ne permettent pas aux réponses d'entrer en concurrence dans une telle situation, aussi je l'ai marqué comme non compétitif.
la source
PHP 7.0+, 110 octets
Que Dieu bénisse les chaînes de bits!
Remplacez-la
\n
par une vraie nouvelle ligne de style NIX.Il est présent dans le code pour éviter les problèmes de nouvelles lignes, mais n'est pas compté dans la partition.
Cela lance une série d’avertissements, mais ceux-ci pourraient être supprimés en ajoutant un
@
en face de chaque errant_
.Avertissement gratuit , 113 octets
la source
65c02 langage machine + Apple] [ROM, 25 octets
Impressions
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
.Devrait commencer à
$8000
.Démontage
la source
10, 15, 26, 32, 44, 96, 128, 162, 169, 175, 192, 202, 208, 224, 237, 249, 253
qui correspondent aux caractères↵.. ,`.¢©¯ÀÊÐàíùý
où les.
s sont des caractères non imprimables. C'est valablebash (sur linux),
507493490485 octetscela stocke un tableau de caractères dans la variable globale
__
il doit être exécuté sur une machine Linux fraîchement démarrée avec
/proc
, ou quelque chose comme un espace de noms pidexplication:
pour l'essayer, nous pouvons ajouter
declare -p __
à la fin pour afficher le résultatla source
/proc
. En fait, cela/proc
n’est pas strictement nécessaire sous Linux, même si vous auriez probablement du mal à trouver une distribution moderne sans elle.Javascript, 1273
13511610octetsCette solution fonctionne essentiellement de la même façon que les deux autres réponses sur ce sujet ici et ici , où il utilise des lettres des
true
,false
,undefined
et les[object Object]
chaînes pour construire les fonctions dont il a besoin pour générer les autres lettres.Puisqu'un bon nombre de lettres sont déjà insérées dans l'objet, j'ai essayé d'ajouter toutes les lettres minuscules restantes et les chiffres à l'objet, puis de les appliquer
toUpperCase
à toutes les valeurs de l'objet pour générer les lettres majuscules manquantes.Mise à jour:
J'ai pu améliorer la manière dont les valeurs octales étaient définies, mais elles prennent toujours 13 x 30 octets (ou elles seront de 30 octets chacune après que je change les nombres en différentes clés), chacune suit maintenant ce général motif:
$.ž=\'\\'+$.一+$.七+$.二+'\';
.49 octets supplémentaires peuvent être facilement supprimés en commutant les touches pour les nombres en caractères de 2 octets.
Soumission actuelle:
la source
C (clang) , 164 octets
Essayez-le en ligne!
C'est une fonction récursive qui obtient les caractères en commençant par une valeur de 1 (soustrayant de soi et en augmentant), et crée tous les autres nombres à partir de cela.
Ungolfed / Explaination:
la source
CJam , 15 octets
Essayez-le en ligne!
Explication
la source
, 8 caractères / 19 octets
Essayez-le ici!
ᶐ
est l'alphabet majuscule,ᶛ
l'alphabet minuscule et la⩥Ⅹă⬯
plage (⩥
) de0
à10
(Ⅹ
, le chiffre romain unicode) moins1
, joint par (ă
) rien (⬯
).la source