Votre tâche consiste à créer un programme (en utilisant uniquement des caractères ASCII imprimables et / ou des onglets et des nouvelles lignes) qui imprime exactement les caractères de l'espace imprimable ASCII ( 0x20
à 0x7e
) qui n'apparaissent pas dans le code source de votre programme (dans n'importe quel ordre). plusieurs fois que vous voulez).
Le code le plus court pour le faire dans n'importe quelle langue gagne.
code-golf
self-referential
Joe Z.
la source
la source
0x20
de0x7e
, qui sont définis comme les "caractères ASCII imprimables". Techniquement, les onglets et les nouvelles lignes sont en réalité des caractères de contrôle.Réponses:
GolfScript,
1512 caractèresBasé sur la réponse de Jan Dvorak avec quelques rebondissements et sur le style de celui de Peter Taylor .
la source
Polyglotte, 95
tclsh
,bash
,sh
,ksh
, etc.)main()
est nécessaire. Merci à urogenNe fait rien.
la source
#undef X;whatever junk you want
fonctionne.#
des commentaires comme Ruby et Perl)PHP 5.2, 4
Enregistrer sous un fichier appelé
NYUIOMK()'DEAQRWVX[Z]\^@CBGFJqwv{z}|~`bgfkj203547698;=>!#"%$&+*-.php
quelque part dans/home
.short_open_tag
doit êtreOn
dans votrephp.ini
.La sortie est:
la source
:
dans la sortie.JavaScript - 88
estampes "bcdfghijkmnpquvxyz"
la source
"!#$%&*+,-13:<=>?@[\]^_`{|}~AERTOWS";alert('BCDFGHIJKMNPQUVXYZ'.toLowerCase()+95*72)
car95*72
=6840
et déplacer les caractères perdus vers une chaîne vous permet d'utiliser les guillemets au lieu de les perdre. En plus de cela, cacher des personnages dans un commentaire est dérisoire.Espace blanc,
6157 caractèresCe n'est pas le plus court mais il a probablement la logique la plus simple (c'est vraiment une boucle).
Ici, il est complètement commenté, où S est l'espace, T est la tabulation, L est le saut de ligne:
Merci à @res pour la correction ci-dessus (copie supplémentaire requise pour l’instruction de branche) et pour des nombres plus petits pousser sur la pile.
la source
SSSTSSSSSL LSSSL SSSTL TSSS SLS SLS TLSS SSSTTTTTTSL TSST LTTSL LLL
.LSSSL
devientLSSL
etLTTSL
devientLTTL
) et en supprimant la sortie à la fin (les troisLLL
). Essayez-le en ligne brut 52 octets ou ici avec mise en évidence et explication .C,
837469 caractèresJ'ai vraiment essayé de le réduire à moins de 80 caractères, mais je n'ai tout simplement pas réussi à le faire. J'ai finalement décidé de publier ce que j'ai, en partant du principe que moi-même (ou quelqu'un d'autre) trouverai une solution à 79 caractères dix minutes après sa publication.D'accord, ce n'était pas tout à fait dix minutes, mais cela fonctionnait en principe.Je voulais vraiment publier une version qui n'avait pas besoin d'un espace gratuit dans le code source, mais qui atterrissait dans une orbite étrange, en se balançant entre une poignée de solutions. Après plusieurs minutes d’essais de pousser l’un d’eux à une solution stable, j’ai abandonné et ajouté de l’espace.
la source
Golfscript,
2624 caractèresPrend un script de génération d'intervalle, le duplique, l'exécute, le soustrait de son résultat, puis soustrait le code de soustraction du résultat et l'autre caractère de citation.
la source
''+
, échapper programme avant soustraction, mettre dans un noop.;
(n'a pas trouvé un meilleur moyen de couvrir le point), utiliser un bloc de code au lieu d'une chaîne ->{126,33>`-.;}.~
qui fait 16 caractèresPoisson - 80
Lorsque le poisson se trompe, il affiche "quelque chose sent le poisson ...". Puisque z est une mauvaise instruction, il se trompe tout de suite
la source
Je sais que ce n'est pas gagner des concours. Je voulais juste l'essayer dans une langue qui n'est pas utilisée normalement, juste pour le plaisir.
Java -
209195152140 caractèresAvec des sauts de ligne et des tabulations
Attention si vous exécutez: le programme ne se termine pas. Haha
Explication
for(char c=0;;c++)
: Puisque achar
peut être traité comme unint
, j’utilise cela à mon avantage ici pour incrémenter toutes les valeurs possibles dec
. J'omets la condition de fin dans la boucle (celle qui irait entre les deux points-virgules) afin d'économiser sur les caractères, car il n'était pas spécifié que le programme devait se terminer. :)"publicas{tvodmn(Srg[])h=0;w+ye.\"\\xO<?:} ".indexOf(c)<0?c:""
: Malheureusement, ce n’est pas une approche très élégante, mais le travail est fait. Répertoriez manuellement tous les caractères présents dans le code source en tant queString
littéral, puis vérifiez si le courant s'ychar c
trouveindexOf()
. Si l’indexOf()
appel revient-1
, il n’existe pas et nous devons donc l’imprimer. Le reste utilise simplement l'opérateur ternaire pour économiser sur les caractères et l'espace.la source
Perl, 49 caractères
C'est un défi intéressant - c'est en quelque sorte l'anti-quine, et j'ai réussi à raccourcir le programme plusieurs fois en augmentant le nombre de caractères qui y figurent.
la source
Ruby,
817868666257Se vérifie simplement. Les caractères en double ont été supprimés manuellement.
Merci à Josh pour avoir sauvegardé 4 caractères et à minitech pour avoir sauvegardé 5 caractères!
la source
(?!..?~).map{|x|$><<x if/[()ifmap{}|x?!.~\/\\\[\]$><]/!~x}
(?!..?~).map{|a|$><<a if/[()ifmap{}|?!.~\/\\\[\]$><]/!~a}
$><<((32..126).map(&:chr)-IO.read(__FILE__).chars).join
55 octets utilisant une approche différente.Befunge (48)
Sorties: {zyxwvutsrqponmlkjihgfedcba` _ ^] [ZYXWVUTSRQPONMLKJIHGFEDCBA240
la source
Pas très grave, mais je devais essayer:
JSFuck (138152)
(source compilée ici)
Source primaire:
Imprime tous les caractères sauf () + []!
la source
(x)
<=>[x][+[]]
augmente la taille du code mais réduit l'alphabet requis.Gosh, vous avez rendu la tâche difficile à APL (est-ce un délit?)
J'ai donc décidé d' ignorer toutes les règles !
APL (Dyalog),
310Imprime le vecteur atomique (qui inclut tous les caractères ASCII imprimables)
Il s'avère que j'ai complètement oublié la partie "sans" ...
Mais c'est une solution facile
~'AV'''
signifie exclure (~
) les caractères A, V et guillemets simples (échappés sous forme de guillemets simples doublés)En ce qui concerne l’impression non-ASCII, j’ignore toutes les règles.
la source
0x20
à0x7e
) qui ne figurent pas dans le code source de votre programme » je crois que la sortie ne peut pas contenir des caractères en dehors de l'espace ASCII ( « exactement » étant le mot - clé) et votre programme contient «A» et «V», ils ne doivent donc pas être imprimés.~
à l'ensemble des caractères exclus. ;-) Btw, une solution J similaire seraita.-.'a.-'''
GolfScript (
1816 caractères)Démo en ligne avec une ligne supplémentaire qui effectue une vérification de l'exactitude et affiche le nombre de caractères erronés.
(J'ai plusieurs alternatives équivalentes.
@`^
Peuvent être remplacées par\\`
;#
peuvent être remplacées par`
ou]
. La bonne combinaison peut être utilisée avec le tour d'Howard pour égaler son score de 15, car les barres obliques inversées n'ont pas besoin de s'échapper par blocs comme elles le sont dans les littéraux de chaîne:{),\`^32>].~}.~
Mais Howard mérite le crédit pour ce tour).la source
}~
- encore mieux pour les blocs de code, voir ma nouvelle réponse ;-)Brainfuck, 173
Assez longtemps, je pourrais réessayer plus tard.
la source
J (
5240)Edit: Duh, oublié
e.
Ancienne version:
Autre variante (même longueur mais moins sortie):
la source
Python 3 -
6861... Merci à @WolframH pour les améliorations.
la source
exec(x)
dans une nouvelle ligne et enregistrez le;
dansx
. De plus, en Python 3, vous pouvez utiliserx=r"print(*set(map(chr,range(32,127)))-set(x+'=\"'))"\nexec(x)
61 caractères (imprime plusieurs espaces, ce qui est autorisé).PowerShell: 96
Doit être enregistré et exécuté en tant que script.
diff
est un alias intégré pourCompare-Object
.gc
est un alias intégré pourGet-Content
.$MyInvocation.InvocationName
obtient le chemin complet du script en cours d'exécution.32..126
est l'équivalent décimal de0x20..0x7e
, et crée ainsi un tableau des codes ASCII décimaux que nous recherchons.[char[]]
prend le contenu de l'objet suivant et le met dans un tableau, le divise et le convertit en caractères ASCII. Nous avons donc maintenant deux tableaux de caractères ASCII: l’un tiré de ce script, l’autre défini par les critères de challenge.-Pa
définit leCompare-Object
format "Passthru", de sorte que seuls les éléments qui se trouvent différents entre les entrées sont sortis sur la console - les indicateurs indiquant les éléments dans lesquels les entrées sont toujours stockées dans les données de l'objet, mais ne sont pas affichés.|?{$_.SideIndicator-eq'=>'}
Compare-Object
La sortie de pipes toWhere-Object
, qui la filtre en fonction des éléments exclusifs à la seconde entrée.la source
PHP - 92
Sortie:
rien
Le PO demande à imprimer tous les caractères non utilisés, eh bien, je les utilise tous
la source
<?='A"$%&\'()*+[,.]/0123456789:=-@ABCDEFGHIJKLMNOPQRSTUVWYZ\^_`abcdefghijklmopqrstuvwxyz{|}~#'
?!;>Xn
Javascript, 92
la source
Java - 126 caractères
minimisé:
non minimisé:
Ceci est un problème intéressant, car les jetons individuels pourraient bénéficier de leur forme plus longue car ils réutilisent des caractères. Par exemple, normalement
String[]
serait plus court, maisString...
supprime la nécessité des crochets dans la chaîne conditionnelle.J'ai trouvé que le truc était d'essayer d'utiliser des caractères au début et à la fin de la plage pour pouvoir les exclure de la sortie simplement en modifiant le début et la fin de votre boucle.
Pour Java, un caractère de clé à exclure est
"
, car avoir cela dans la chaîne nécessite de l'échapper, ce qui ajoute\
à votre programme, ce qui doit aller dans la chaîne, ce qui ajoute\\
. En supprimant"
de votre chaîne conditionnelle, vous supprimez 4 caractères. Ceci peut être réalisé en veillant à ce que vous utilisezet
!
et démarrer votre boucle à partir#
.Toutes les lettres minuscules apparaissent à la fin de la plage, avec seulement
{
,|
,}
et à~
venir après eux. En raison de la verbosité de Java, la plupart des lettres minuscules sont utilisées uniquement pour le passe-partout. De même,{
et}
sont triviales pour un programme Java, parce que le passe-partout les requiert.|
peut être utilisé si vous avez une condition ou, mais je ne trouvais pas le moyen de tirer parti d’une condition qui conduirait à un programme plus court qu’un simple emploi en|
tant qu’opérateur au niveau du bit. La|0
me fait me sentir un peu sale, car il est la seule partie qui est un nop juste pour obtenir le caractère là - dedans.~0
les rendements-1
, ce qui est pratique car c’est ce que nous devons vérifierindexOf
. En combinant ceci avec l'utilisation!=
de la boucle conditionnelle, le<
caractère est totalement éliminé , ce qui signifie qu'il n'est pas nécessaire d'entrer dans la chaîne conditionnelle.la source
sh (47)
Utilise l'approche auto-référentielle. Suppose que
/dev/urandom
tous les octets seront finalement sortis au moins une fois. Ne se termine pas.Si nous supposons que cela
man
est installé, nous pourrions utiliser laascii(7)
page de manuel (et avoir ainsi un programme de terminaison) ( 44 caractères, merci @fennec).la source
man
etzsh
sont installés,man zshall
semble correspondre aux critères. Je pourrais ajouter cela comme une variation.man ascii
pourrait vous sauver une autre lettre, je pense.tr
utilisez-vous? GNUtr
considère l'entrée-
"cat $0
" comme un opérateur de plage, ce qui rompt la sortie.ascii
programme est installé, vous pouvez l’utiliser à la place deman ascii
.BitShift , 1038 octets
BitShift est un langage qui ne supporte que
0
et1
comme syntaxe. Je pensais qu'il serait facile d'imprimer tous les autres caractères, mais comme il ne supportait pas vraiment la boucle, il restait encore un énorme 1038 octets.Cependant, je crois qu’il n’est pas vraiment possible de faire plus petit que cela.
Impressions
Essayez-le ici
la source
La solution la plus longue ici, mais coder dans Lino est toujours amusant:
L.in.oleum -
655523 caractèresPas de commentaire, lit simplement le source compilé en binaire. Enregistrez sous
a.txt
ou ne compilerez pas!la source
Brainfuck,
133123114110 octetsUn peu plus de bricolage avec une ancienne solution (avant que je réalise que le dessous était plus petit - bien que ce fût avant que je ne fasse une optimisation lourde). Cela fonctionne en stockant 4 séries de numéros ascii et en les imprimant avec des boucles délicates, puis en donnant les caractères manquants par la suite (c.-à-d. Ceux se trouvant entre des numéros ascii non valides).
Soumission originale
Il fait ce qui suit:
la source
Haskell (70)
La solution ennuyeuse de doublons-caractères-dans-programme-dans-une-chaîne, soustrait-de-universel-set. Loin d'un vainqueur de code-golf, sa longueur est étonnamment lisible.
(Maintenant avec soustraction de liste au lieu de
filter
/notWith
.)la source
import Data.List
àimport List
runhaskell
: "Impossible de trouver le module 'Liste'". J'ai remarqué que je comptais mal le nombre de caractères, alors je l'ai corrigé.J - 21
écrivez ceci dans un fichier appelé
5
dans le répertoire en cours. Puis chargez le script avec0!:1<'5'
Ou 25 sans l'astuce de fichier:
la source
'
, qui n'est pas supprimé de la sortie.Clojure (
142, 106, 103)formaté:
Pense que cela le fait, peut-être besoin de quelques ajustements. sortie:
exécute la chaîne, qui est un code pouvant être évalué, sur elle-même. String a quelques commentaires à la fin pour obtenir les caractères utilisés en dehors de la chaîne (méthode principale, etc.)
la source
Python 2, 69
J'utilise la plus longue séquence (que je suis capable de trouver) de caractères continus que je peux imprimer et ajouter les autres comme commentaire après le code.
la source