Produisez votre score!

54

Défi:

Le concept est assez simple: écrivez un programme complet pour sortir son propre score de golf de code!

La sortie ne devrait être que le nombre d'octets de votre programme et une fin bytes.

MAIS ATTENDRE ..... il y a une restriction:

  • Votre code source ne peut inclure aucun des chiffres de votre nombre d'octets
  • Donc , si votre score est 186 bytes, votre programme ne peut pas contenir les caractères 1, 6ou8

Exemple de sortie:

315 bytes
27 Bytes
49 BYTES

Règles supplémentaires:

  • Les caractères inutiles, les espaces et les nouvelles lignes sont interdits dans le code source, cependant les espaces de fin et les nouvelles lignes sont parfaitement acceptables en sortie
  • Il devrait y avoir un seul espace entre le nombre et bytesdans la sortie
  • Les lettres sont insensibles à la casse
  • Aucune auto-inspection ou lecture du code source
  • les failles standard sont interdites

  • c'est du , donc

Le code le plus court en octets gagne!

X1M4L
la source
6
Cela nécessite-t-il la balise quine ou le code peut-il s'auto-inspecter?
Adám
3
@Dat, étant donné le formatage du mot, bytesje pense que l'intention est que le décompte comprenne les octets nécessaires à l'impression du texte:bytes
Jeff Schaller
2
Les espaces de début de sortie sont-ils acceptables?
rafa11111
3
Si mon code est long de 1 octet, devrais-je sortir 1 bytesou 1 byte? (Gardez à l'esprit qu'il y a déjà 41 réponses, bien que je ne pense pas qu'elles soient affectées)
Erik the Outgolfer
1
@JoKing Eh bien, je n'ai pas abordé la casse dans les règles, mais si, d'une manière ou d'une autre, utiliser des lettres majuscules rend votre score plus bas, alors j'aimerais bien voir ce que vous avez proposé. Je dis allez-y!
X1M4L

Réponses:

41

JavaScript, 19 octets

Octal a été inventé pour servir deux objectifs:

  • définition des autorisations de fichiers sous Linux
  • répondre à ce défi

alert(023+' bytes')

Essayez-le en ligne!

Arnauld
la source
Cela compte-t-il comme un programme complet?
ericw31415
1
@ ericw31415 Ceci est un programme de navigation , tel que défini dans cette méta réponse .
Arnauld
5
+1 parce que finalement je me suis expliqué pourquoi octal n'est pas complètement inutile!
sergiol
34

Perl 5 , 16 octets

Il y a beaucoup d'autres façons d'obtenir 16mais celui-ci est le mien

say afpbytes^PPP

Essayez-le en ligne!

Ton Hospel
la source
1
Comment cela marche-t-il?
Caird coinheringaahing
9
@cairdcoinheringaahing En perl, vous pouvez omettre les guillemets sur les chaînes si elles ressemblent à un littéral et n'entrent pas en conflit avec un mot clé (et sont très déconseillées mais nous ne nous soucions pas du golf), opérateurs binaires & | ^et ~peuvent également s'appliquer à chaînes et travaillez dessus comme sur une liste de valeurs ASCII (si et seulement si les deux côtés sont des chaînes). Pour |et ^cela fonctionne comme si la chaîne courte était étendue avec \0. Après cela, un exercice simple vous permettra de trouver des combinaisons de lettres correspondant au résultat souhaité
Ton Hospel
26

7 , 23 caractères, 9 octets

54340045141332401057403

Essayez-le en ligne!

C'est un défi assez difficile dans une langue composée uniquement de chiffres, mais j'ai réussi à le gérer…

Ceci est juste 9 octets dans le codage de 7. (À proprement parler, il s'agit de 8⅜ octets (23 × ⅜ - ¼ car les deux derniers bits 1 peuvent être omis), mais pour la première fois, l'exigence de PPCG d'arrondir à un nombre entier d'octets est en réalité un avantage, car elle signifie les 1 bits de fin supplémentaires sont nécessaires et ne sont donc pas interdits par la question.) Un vidage hexadécimal réversible:

00000000: b1c0 2530 b6a0 22f8 1f                   ..%0.."..

Le principal défi de l'écriture de ce programme en 7 était de le graver à moins de 10 octets (écrire 7 sans utiliser 0ou 1c'est assez difficile.) Ceci utilise la même structure que le programme standard "Hello world":

5434004514133240105 7 403
5434004514133240105 commandes 0-5 ajout de littéraux à un espace de données
                   7      créer une nouvelle section d’espace de données
                    403 un autre littéral ajouté à l'espace de données
                         {implicite: évalue la dernière section en tant que commandes}
                    4     permutations des 1ère et 2ème sections avec une section vide entre
                      6    reconstruisent les commandes qui créeraient la   sortie de la 1ère section
                       3 (+ quelques autres effets qui ne nous intéressent pas)

En d’autres termes, nous commençons par créer deux sections de l’espace de données; nous avons deux littéraux, chacun y poussant une séquence de commandes. La deuxième section (ils sont poussés dans le style de pile, donc premier push = dernier pop) est une séquence de commandes assez arbitraire mais est poussée à l'aide de la séquence de commandes 5434004514133240105(produisant ainsi la séquence de données 5434664574733246765; lorsque l'on parle de 7 dans le texte, j'utilise normalement la police normale pour une commande qui pousse un littéral, et gras pour le littéral résultant correspondant). La première section est poussée en utilisant la séquence de commande 403, produisant 463. Ensuite, la première section est recopiée dans le programme (comportement implicite de 7).

Le 463est maintenant composé de commandes (gras) qui font quelque chose immédiatement, plutôt que de commandes (non gras) qui poussent juste des littéraux. 4réorganise les sections pour obtenir notre "chaîne littérale" dans la première section. Ensuite, 0l'opération 7 qui est la plus connue est la suivante: prendre une partie de l'espace de données et reconstruire la séquence de commandes qui l'a probablement créée. Dans le cas où la séquence de commande originale était tout 0- 5, elle est exacte à 100% (sans surprise, car ces commandes poussent uniquement les données et laissent ainsi des preuves évidentes de ce qu'elles ont fait), et nous retrouvons donc notre séquence d' 5434004514133240105origine. Enfin, l' 3imprime.

La dernière chose à regarder ici est donc l'encodage de la chaîne. Cela a son propre langage spécifique au domaine:

5434004514133240105
5                    change encoding: 6 bits per character
 43                  select character set: digits and common symbols
   40                '9'
     04              space
       51            select character set: uppercase letters
         4133240105  'B' 'Y' 'T' 'E' 'S'

(Il n'y a pas de "jeu de caractères de sélection: lettres minuscules" dans le jeu de caractères "chiffres et symboles communs" - vous devez d'abord utiliser un jeu de caractères différent - j'ai donc dû utiliser une majuscule pour jouer aussi rapidement que possible sous le 10 réel. -byte limite.)

ais523
la source
15

Toile , 8 octets

8 bytes+

Essayez-le ici!

Une solution plus intéressante à 20 octets:

bytecount.innerText#

Essayez-le ici!

dzaima
la source
3
OK, c'est assez intelligent.
Adám
Notez que l’une des restrictions est "Votre code source ne peut inclure aucun des chiffres de votre nombre d’octets", de sorte que la première solution n’est pas valide dans ce cas =)
Cyclonecode
1
@Cyclonecode Que "8" ne soit pas un ASCII 8 standard - c'est un caractère 8 pleine largeur dans cette version unicode du code, bien qu'il s'agisse vraiment de l'octet 0xD5, qui n'a aucun rapport avec aucun 8
dzaima
11

PHP, 14 octets

<?=7*2?> bytes
Cyclonecode
la source
8
Que diriez-vous de mettre la bytespartie en dehors de la ?>? Essayez-le en ligne!
Jo King
@JoKing super 3 moins d'octets :)
Cyclonecode
1
Juste pour le moment, il est probablement préférable que vous divisiez votre réponse en plusieurs réponses si vous couvrez plus d'une langue.
Conor O'Brien
@ ConorO'Brien - Oki fera l'affaire
Cyclonecode
8

PHP plus ancien que 7.2 , 13 octets

Suppose que les paramètres par défaut (les avertissements E_NOTICE sont désactivés) et la version de PHP antérieure à 7.2.

Doit être décodé avec xxd -r

00000000: 3c3f 3d7e cecc df9d 868b 9a8c 3b         <?=~........;

Ou si vous préférez Base64

PD89fs7M352Gi5qMOw==

Essayez-le en ligne!

Konrad Borowski
la source
6

Stax , 5 octets

╗↑╞ô╝

Exécuter et déboguer

Déballé, ça ressemble à ça. Le mode source compacte rend ce genre de tâche triviale et sans intérêt.

5p     print 5 with no line break
`5l@   print the compressed string " bytes"

Si vous ne souhaitez pas utiliser le mode source condensé, 6^p`5l@fonctionne pour 7 octets.

récursif
la source
1
J'ai rétrogradé cette réponse, car je pense que le mode compact, tout en étant un moyen intelligent d'économiser des octets, donne l'impression de tricher (ce qui n'est pas le cas) au pire, et de ne pas être créatif au mieux. Plutôt que de faire une vague de votes à la baisse de toutes les réponses de sources restreintes Stax , je laisserai ce vote à la baisse pour couvrir toutes les réponses similaires.
Caird coinheringaahing
1
Je suis certainement d'accord pour dire que ce n'est pas créatif. Mais je pense que la faute repose sur le concept de restricted-source, pas sur la langue. C'est en fait le moyen le plus direct de produire en "5 bytes"utilisant Stax.
récursive
Je suis d' accord qu'il ya un problème avec le défi (donc pourquoi je l' ai downvoted il ), mais je n'aime pas toujours cette réponse. S'il vous plaît ne supprimez pas cependant (juste une mise en garde préventive), il n'y a rien de mal à cela.
Caird coinheringaahing
6

R , 16 octets

cat(4*4,"bytes")

Essayez-le en ligne!

Giuseppe
la source
N'est-ce pas 17 à cause de votre espace manquant?
PmanAce
@PmanAce "La sortie ne doit contenir que le nombre d'octets de votre programme et un caractère de fin bytes". Le programme est de 16 octets.
Giuseppe
catpar défaut ajoute un espace entre ses entrées.
Giuseppe
object.sizesorties dans le format correct (avec bytesinclus par défaut). Fâcheusement, le plus que je pouvais trouver est 17: object.size(0)-39. TIO
Robin Ryder
1
Apparemment, dans la version de Hadley, un vecteur est de longueur 1 longueur 48, donc il doit exister une version de R dans lequel ce code de 16 octets fonctionne: object.size(0)/3.
Robin Ryder
5

Python 3 , 25 24 18 octets

print(6*3,'bytes')

Essayez-le en ligne!

NieDzejkob
la source
1
Mais "4" est dans "24". Peut-être "33-9"?
récursive
@recursive 3*8devrait bien se
passer
@ whoops récursif, corrigé: P
NieDzejkob
5

05AB1E , 6 octets

₂¤“ÿ¡Ï

Essayez-le en ligne!


₂      # [26]        | Pushes 26 (many other alternatives).
 ¤     # [2, 6]      | Split out tail.
  “ÿ¡Ï # ['6 bytes'] | ÿ = "Interpolate top of stack.", ¡Ï = "bytes" (compressed)

Alternatives pour ₂¤inclure: 5>, ₁¤,

Urne Magique De Pieuvre
la source
5
Dommage que cela ne fonctionne pas.
Urne Magic Octopus
5

Bash, 21 octets

"Lisez votre propre code source" n'est clairement pas le gagnant ici, mais personne d'autre n'en a soumis un, alors quoi alors.

echo `wc -c<$0` bytes

Essayez-le en ligne!

thegreatemu
la source
5

Retina , 15 octets


 bytes
*>w`..+

Ce programme compte le nombre de sous-chaînes avec au moins deux caractères dans la chaîne "octets", puis affiche ce nombre et la chaîne elle-même.

Essayez-le en ligne!

Leo
la source
5

PHP + HTML, 16 octets

&#49;&#54; bytes

Oui, cela nous rapproche de l'abus de meurtrières, mais j'estimais que cela devait être signalé. Et l'utilisation de PHP signifie que cette réponse est techniquement écrite dans un langage de programmation complet de Turing. Bien entendu, tout autre langage HTML similaire basé sur des modèles fonctionnerait aussi bien.

Démo en direct (sans PHP):

&#49;&#54; bytes

Ilmari Karonen
la source
Battez-moi à elle! Et le ; peut généralement être omis!
wedstrom
Ahh mais alors ce serait 14/15 octets
mercredi
4

dc , 14 à 11 octets

[ bytes]Bnn

Essayez-le en ligne!

-3 octets par @Cows quack

NieDzejkob
la source
[ bytes]Bnnrase quelques octets
Kritixi Lithos
@Cowsquack merci!
NieDzejkob
@cowsquack canards vont MOO, je suppose: P?
Urne Magic Octopus
@MagicOctopusUrn Canards, que sont les canards? : P
Kritixi Lithos
4

MATL , 13 octets

'57$f}xiw'4-c

Essayez-le en ligne!

Cela pousse la chaîne '57 $ f} xiw 'et soustrait 4, pour obtenir 13 bytes. Ceci est converti en caractères utilisant c.

Stewie Griffin
la source
6EV' bytes'ha 12 ans (j'étais sur le point de le poster)
Giuseppe
1
bien que ce soit la même approche ennuyeuse: P
Giuseppe
4

Octave , 23 octets

printf('%i bytes',9+14)

Essayez-le en ligne!

Et ça:

disp(['','67$f}xiw'-4])

Essayez-le en ligne!

Stewie Griffin
la source
Les premières réponses semblent bonnes, mais ... comment fonctionne la seconde? oO
rafa11111
2
@ rafa11111 Soustraire 4à (les codes ASCII de) '67$f}xiw'donne les codes ASCII de '23 bytes'. Ensuite, la concaténation avec la chaîne vide '' convertit les codes ASCII en caractères
Luis Mendo
2
@ Luis Mendo Assez intelligent! Merci de clarifier!
rafa11111
4

Petit ordinateur BASIC, 11 octets

?9+2,"bytes

L'utilisation d'une virgule dans une instruction print déplacera le curseur sur le prochain multiple de la taille de tabulation actuelle. Dans SmileBASIC, il s'agit de 4 par défaut, donc cela produirait 11 bytes(2 espaces), mais PTC BASIC en utilisait 3 à la place, de sorte que l'espacement de la sortie était correct.

12Me21
la source
4

APL (Dyalog Unicode) , 12 octets

Programme complet qui imprime implicitement sur STDOUT.

'bytes',⍨3×4

Essayez-le en ligne!

,⍨ est ajoute la chaîne au résultat de la multiplication. L'affichage par défaut des données de type mixte APL place un espace entre un nombre et le texte suivant.

Adam
la source
Je peux me tromper, mais n'avez-vous pas 2 dans votre nombre d'octets et votre programme? 3 * 4 devrait être bon cependant
fyrepenguin
@fyrepenguin Heh, vous avez raison, bien sûr. Quelle bêtise de moi.
Adám
4

Flak cérébrale , 100 octets

((((((<>))))))(((()[[]]((((()()((((([][]){}){}())[()]))[[][]])()){})()[][]))[()()[]])[]){({}<>)<>}<>

Essayez-le en ligne!

Affiche la bytespièce en majuscules. Quelqu'un de familier avec Brain-Flak pourrait être vraiment confus avec tout le ((<>))début, mais rassurez-vous, ils ne sont là que pour abuser de la hauteur de pile nilad ( []) et aucun des 0s qu'ils produisent n'est imprimé.

Jo King
la source
4

Haskell , 26 octets

main=putStr$"\50\54 bytes"

Essayez-le en ligne!


29 octets

main=putStr$pred<$>"3:!czuft"

Essayez-le en ligne!

Laikoni
la source
Les espaces inutiles sont maintenant interdits, mais vous pouvez utiliser un $.
Ørjan Johansen
@ ØrjanJohansen Merci de l'avoir signalé.
Laikoni
4

Espaces blancs , 112 octets

Juste parce que personne ne l'a encore fait:

   			    
	
 	   
   	 	  		
   	   	 	
   	 	 	  
   	 		  	
   	    	 
   	     

  
	
   
 
	  

 


   




Essayez-le en ligne!

Imprime "BYTES" en majuscules, car les lettres majuscules ont des codes ASCII binaires plus courts. Les commandes du programme, dans ma propre notation visible composée, sont les suivantes:

Push 112
PrintNum
Push 0
Push 0x53
Push 0x45
Push 0x54
Push 0x59
Push 0x42
Push 0x20
Label _
PrintChr
Dup
JumpZ S
Jump _
Label S
End
Aschepler
la source
Ah, je n’ai pas remarqué qu’il y avait déjà une réponse à l’espace blanc .. En voici une plus courte ( 104 octets ). . Supprime le mien à nouveau. Voici la même chose avec mise en évidence ajoutée et explication.
Kevin Cruijssen
Oh, hmm. Je suppose que le texte est suffisamment court pour que l’implémentation de la boucle fasse plus de mal que de répéter le PrintChar. (Et je sais, je peux toujours laisser tomber le dernier NNN, mais j'aime beaucoup ne pas avoir d'erreur.)
aschepler
4

Java 5 ou 6, 44 octets (programme complet)

enum A{A;{System.out.print(0x2C+" bytes");}}

Pas de lien TIO, car Java 5/6 est ancien. Avec Java 5/6, il était possible d'avoir un enum avec du code au lieu de la mainméthode- obligatoire , ce qui le raccourcissait pour les défis du programme complet.

Des erreurs avec java.lang.NoSuchMethodError: main\nException in thread "main"STDERR après l’impression sur STDOUT, ce qui convient selon la méta (mais si le défi n’avait pas permis d’autres erreurs à STDERR, System.exit(0);peuvent être ajoutées (et les nombres octaux doivent être mis à jour) pour éviter l’erreur.

Proposé par @ OlivierGrégoire (et son astuce Java pertinente ).

Java 8+, 74 octets (programme complet)

interface M{static void main(String[]a){System.out.print(0112+" bytes");}}

Essayez-le en ligne.

Java 8+, 16 15 octets (fonction lambda)

v->0xF+" bytes"

-1 octet grâce à @ OliverGégoire .

Essayez-le en ligne.

Kevin Cruijssen
la source
2
Techniquement, pas un programme complet :)
OOBalance
@OOBalance Oups .. en quelque sorte lu plus de ça, merci pour la correction. Voilà mon score .. XD
Kevin Cruijssen
1
37*2contient un 7, donc ce n'est pas valide. Votre solution de rechange est bien cependant.
OOBalance
1
v->0xE+"bytes"ou v->0xF+" bytes". Je ne peux pas tester mais cela devrait fonctionner de toute façon. Rien ne dit la partition et les "octets" doivent être séparés.
Olivier Grégoire
1
@ OlivierGrégoire Je sais, je sais. ;) Quand j'ai posté le programme complet, je doutais d'y répondre en pensant à votre réponse . Connaissez-vous un compilateur en ligne qui le supporte toujours? Je préfère avoir un lien avec le code de test pour mes réponses ..
Kevin Cruijssen
4

Applescript, 15 octets

Oui, j'y vais.

9+6&”bytes”
DonielF
la source
1
Mais ...Your source code can not include any of the digits from your byte count
nicael
@nicael Dang, vous avez raison. Une seconde alors ...
DonielF
Corrigez-moi si je me trompe, mais ce n'est pas un caractère multi-octets (3 octets en Unicode si mes souvenirs sont exacts), donc plus de 11 octets?
Caird coinheringaahing
@cairdcoinheringaahing ... Tirez. Vous avez raison - «2 octets, jusqu'à 15
DonielF
cela ne continue-t-il pas d’imprimer 11?
Citron destructible
3

Lot, 32 octets

@@echo %COMSPEC:~-10,-010% bytes

COMSPECest généralement %WINDIR%\system32\cmd.exesi j'extrais la sous-chaîne de 10 à 8 caractères de la fin. Ancienne version à auto-référencement de 16 octets:

@echo %~z0 bytes

Heureusement, le nombre d'octets n'était pas un multiple de 10.

Neil
la source
@manatwork OK, je n'avais pas vu ça, voici une nouvelle version.
Neil
3

JavaScript, 16 à 15 octets

x=>0xf+' bytes'
Yair Rand
la source
_=>5*3+' bytes'
Neil
@Neil Le code et le nombre d'octets contiennent 5dans ce cas un ..
Kevin Cruijssen
@KevinCruijssen Bah, je ne peux pas croire que j'ai négligé cela.
Neil
Les soumissions doivent être des programmes complets " écrivez un programme complet pour afficher son propre score de golf de code!"
Kritixi Lithos