Créez un programme, qui génère une chaîne hello world ("Hello world", "Hello, World" etc.) et le code source. La sortie est écrite sur stdout ou équivalent. La chaîne Hello world est intégrée au code source.
Par exemple, la sortie de pourrait être
(some source code here)hello world(some source code here)
Lorsque la sortie est à nouveau compilée ou interprétée, elle doit créer une sortie similaire, mais la chaîne hello world doit avoir une ponctuation ou une capitalisation différente. Par exemple, l'exemple précédent pourrait créer la sortie suivante
(some source code here)hello, wORld(some source code here)
Chaque "(un code source ici)" dans ces exemples peut changer après chaque exécution, ou il peut être le même.
Votre sortie doit contenir une chaîne hello world valide exactement une fois. Il peut contenir n'importe quelle quantité de chaînes hello world invalides. Le code source peut contenir n'importe quelle quantité de commentaires et la chaîne hello world peut être incorporée dans les commentaires. Le premier programme peut avoir zéro ou une chaîne hello world valide, mais pas plus.
La ponctuation suivante est valide:
hello, world
hello world
helloworld
Toute capitalisation est acceptable. Par exemple, ce sont des chaînes Hello World valides:
Hello, world
hellO WORld
HELLoworlD
Ces chaînes ne sont pas valides:
Hello world
Hello(newline)world
Hello,world
Hello, Steve
Votre programme échoue dès que l'une des conditions suivantes est remplie:
- Il génère une chaîne hello world qui a été générée lors d'une exécution antérieure,
- la sortie n'est plus du code source valide dans la même langue, ou
- la sortie ne contient pas exactement une chaîne hello world valide.
Votre programme n'est valable pour ce concours que si au moins deux premières exécutions ont réussi. Cela signifie que la troisième sortie peut être invalide. La sortie de votre programme peut ne pas être aléatoire. La première exécution doit toujours créer la même deuxième sortie, la deuxième exécution doit toujours créer la même troisième sortie, etc.
Le score est calculé comme la quantité d'octets dans le code source du programme initial. Le score le plus bas l'emporte.
Les bonus suivants s'appliquent (jusqu'à -60%):
- -5% * (N - 2), où N est l'index de l'exécution après quoi votre programme produit une sortie non valide. Ce bonus plafonne à -50%. Si votre programme réussit 12 fois ou plus, vous obtenez le bonus maximum.
- -10%, si vos sorties (y compris le premier code source) incluent les trois alternatives de ponctuation valides.
Votre soumission doit inclure le premier code source et doit également contenir les résultats des exécutions réussies. Si votre programme réussit plus de 12 fois, ajoutez une sortie pour 12 exécutions.
Exemple
La ligne suivante est le premier code source. Lorsque nous l'exécutons, c'est la première exécution.
hello world(some source code here)
La ligne suivante est la sortie du premier code source. C'est la première sortie.
hello, world(some source code here)
La ligne suivante est la sortie de la deuxième exécution. C'est la deuxième sortie.
helloworld(some source code here)
Lorsque nous avons exécuté la première sortie, ce programme est devenu éligible au bonus de -10%. Cela signifie que nous avons deux sorties et un code original, qui ont tous une ponctuation différente. De plus, la deuxième sortie étant valide, ce programme est éligible à ce concours.
La ligne suivante est la sortie de la troisième exécution. C'est la troisième sortie.
Helloworld(some source code here)
La ligne suivante est la sortie de la quatrième exécution. Il s'agit de la quatrième sortie.
hellworld(some source code here)
Cette sortie n'était pas valide. L'indice de la dernière exécution valide était de 4. Ce programme est éligible pour -5% * (4 - 2) bonus et -10% bonus à partir de la ponctuation. Cela fait un total de -20%. La longueur du premier code source ("bonjour le monde (du code source ici)") était de 34 octets, donc le score final est de 27,2.
hello world
?Réponses:
Pyth, 17 octets
Une solution Pyth différente:
Production:
Deuxième sortie:
la source
Mathematica, 214 - 50% = 107 octets
J'ai décidé d'optimiser le nombre de chaînes ici. Cela fonctionne pour 1024 programmes sans s'arrêter, en passant par toutes les combinaisons de lettres majuscules et minuscules. L'exécution peut être vue ici .
la source
s
et l'évaluez avecToExpression
.)Vitsy, 33 - 33 * .05 * (11-2) = 18,15 octets
Il h! Bas ça! Vous le ferez probablement. : c
Première sortie:
Deuxième sortie:
Troisième sortie:
Quatrième sortie:
Cinquième sortie:
Sixième sortie:
Septième sortie:
Huitième sortie:
Neuvième sortie:
Dixième sortie:
Onzième sortie:
Il s'agit de la dernière sortie, car elle entraînera une erreur.
la source
CJam, N =
34, 28 octets - 10% - 10% = 22,4cela démarre la chaîne suivante:
où le dernier ne contient plus de "Hello, World" valide.
Testez-le ici.
Explication
Notez que le programme initial ne contient pas de "Hello, World" valide, mais cela nous permet d'aller une itération plus loin.
la source
CJam
6960 - 50% = 30Je suis encore débutant, dites-moi comment jouer au golf à CJam.
Il est fastidieux d'imprimer chaque itération, car elle sera valable pour 99 itérations.
Il fonctionne en énumérant la capitalisation du mot bonjour. L'ennui est de diviser les cordes en parties, car "bonjour le monde" et le compteur doivent être mis à jour.
Explication
REMARQUE: je ne lis pas la réponse Mathematica, désolé, je pense qu'elle était originale
Avec la réorganisation et la capitalisation différente, je perds 9 octets.
CJam 73 - 60% = 29,2
Cette fois aussi, énumérez la ponctuation.
la source
GolfScript, 35 octets - 50% = 17,5
J'ai décidé d'aller trop loin sur le nombre d'exécutions avant de recommencer. Ce programme, avec sa sortie réinjectée dans l'interpréteur GolfScript, produira 890 chaînes Hello World distinctes avant la première répétition. En bref, voici les 15 premières itérations:
La façon dont cela fonctionne est en itérant dans la chaîne, en inversant la capitalisation de chaque lettre (en XORant son code ASCII avec 32) si la lettre précédente (après avoir éventuellement retourné sa casse) est en minuscules. La première lettre aura sa casse inversée si le nombre au début du programme est 32 plutôt que 0 - et le numéro de sortie pour la prochaine itération sera 32 chaque fois que la dernière lettre de la chaîne est en minuscule, provoquant ainsi des changements à la fin de la chaîne à propager au début à la prochaine itération.
(Ce processus de rétroaction particulier a été obtenu de manière totalement ad hoc . À l'origine, je voulais simplement exécuter un simple compteur binaire en utilisant les majuscules et les minuscules comme bits, mais cela prenait trop d'octets à mettre en œuvre, alors j'ai commencé à le peaufiner pour trouver quelque chose de plus court cela donnerait quand même une durée de cycle assez élevée. Puisque le maximum théorique, en utilisant uniquement le retournement de casse, est de 2 10 = 1024, obtenir un cycle de 890 itérations est plutôt agréable.)
Hélas, le bonus pour les itérations supplémentaires est plafonné à −50%; sans le plafond, ce programme aurait un énorme bonus de -4440%. ;-)
la source
Pyth, 18 octets
Qui retourne:
Qui à son tour imprime:
J'avais une solution qui faisait les trois orthographes, mais elle est plus longue même avec le bonus.
la source
Simplex , 21 octets.
C'est pour cela que Simplex est né . Je peux certainement aller plus loin avec cela.
(Je continue d'appuyer sur Ctrl + Entrée, désolé! Je le blâme sur le clavier de la tablette)
Tentative 3, v.0.8 +, 31-5% = 29,45 octets (méthinks UTF-8)
Cette emote au milieu m'exprime. Sorte de. Pourquoi ai-je recommencé? ._.
2e sortie:
3e sortie:
Sortie finale:
Tentative 2, v.0.8 +, 21 octets (UTF-8, je pense)
Production:
Sortie finale:
Tentative 1, v.0.7 +
2826 octetsJe ne sais pas si cela se qualifie pour le premier bonus…
Première sortie:
Le programme externe est évalué à la fin de l'exécution (il le fait pour y; voici à quoi ressemble le programme externe:
Sortie finale:
la source
Rubis, 81 - 50% = 40,5
Code d'origine:
Sorties successives:
Je pense que cela compte pour 50%? Pourrait être hors tension par un. De plus, il existe probablement une solution sans bonus plus performante dans Ruby.
Le code d'origine ne contient pas "helloworld", mais il construit un quine qui remplace la première lettre majuscule de son code source par la version minuscule. Ainsi, chaque exécution successive du quine génère une lettre en majuscule de moins.
L'astuce consiste à utiliser une chaîne de format pour interpoler à la fois la chaîne elle-même, pour le quining, et la chaîne Hello World, afin qu'elle n'apparaisse qu'une seule fois.
la source
PHP, 297 - 40% = 178,2 octets
Pas vraiment compétitif mais c'était amusant d'écrire
C'est une variation de cette quine:
mais il ajoute également "helloworld" à la sortie et le remplace
0
par0+1
(dans la prochaine itération1
avec1+1
et ainsi de suite). L'utilisation desubstr
toute sortie "helloworld" existante est supprimée avant l'ajout du nouveau "helloworld".Pour obtenir une sortie différente, une lettre de "helloworld" est mise en majuscule (déterminée par le nombre incrémentiel). Voici le code pertinent:
Un défi était de ne pas utiliser de numéros sauf ici et pour le remplacement du numéro
Là, vous voyez déjà que cela
+1
se réalise+(int)true
.Pour les arguments de sous-chaîne dont j'avais besoin
0, 146
:La chaîne non vide "i" est contrainte
true
et annulée.false
est un argument entier valide et est traité comme0
.ord(I)
est la valeur ASCII de "I": 73Sortie (1ère itération):
Sortie (2ème itération):
Sortie (10e itération):
Ceci est la dernière sortie valide mais ce n'est plus un programme valide
la source
(int)true
à `` !! i` et économiser 12 octets. J'essaierai de jouer au golf un peu plus tardPip, 48 - 50% = 24
qui évolue comme suit:
avec la dernière sortie invalide car la
HELLOWORLD
n'a pas changé. (Corrigez-moi si je n'ai pas fait le bon bonus.)Grâce à cette question, je viens de découvrir une nouvelle technique de quine! Le quine de base est
V Y"`V Y`.RPy"
:Notre code supplémentaire modifie la chaîne
y
, avant de la reproduire, comme suit:0
caractères les plus à gauche sont en majuscules;0
paro+0
(oùo
est une variable intégrée égale à 1).La prochaine fois que le nombre dans le code est
1
au lieu de0
, et ainsi de suite.la source
Javascript, 52 octets
Tester
=>
<='("hello world").replace(" ","")'
=> eval('("hello world").replace(" ","")')
<= 'helloworld'
la source
///, 23 octets - 10% = 20,7?
Essayez-le en ligne!
Première sortie:
Deuxième sortie:
la source
BBC BASIC, 56 octets
J'ai eu une fissure avant de réaliser à quel point je suis en retard. Pour ce que ça vaut, voici ma version et ma première tentative de golf de code StackExchange.
Ici, V. fait écho aux caractères donnés par les codes ASCII dans la liste séparée par des virgules suivante et P. est un raccourci pour l'impression. J'utilise le caractère de retour arrière pour remplacer la chaîne "helloworld" existante.
Code d'entrée:
Première sortie:
Deuxième sortie:
Il peut être testé en ligne sur https://bbc.godbolt.org/
la source