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!


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!


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!


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.)


15

Toile , 8 octets

8 bytes+

Essayez-le ici!

Une solution plus intéressante à 20 octets:

bytecount.innerText#

Essayez-le ici!


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



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!


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.


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!


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

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!


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!


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


Battez-moi à elle! Et le ; peut généralement être omis!
wedstrom

Ahh mais alors ce serait 14/15 octets
mercredi


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.


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!


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.


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.


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é.



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

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.


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”

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.


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

3

JavaScript, 16 à 15 octets

x=>0xf+' bytes'

_=>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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.