Nous connaissons tous la blague classique du père qui ressemble à ceci:
Quelqu'un dit une phrase pour décrire son moi (par exemple
I'm tired
ouI'm confused
).Un enthousiaste papa-blague arrive et répond
Hi <adjective>, I'm Dad!
, car les introductions suivent le même format (I'm Peter
suit le même formatI'm hungry
).
Votre travail consiste à saisir une entrée sous la forme d'auto-descripteur et à générer le formulaire papa-blague approprié, mais au lieu d'utiliser le mot "papa", vous utiliserez le nom du langage de programmation que vous programmez. dans.
Cas de test (supposons qu'ils soient analysés par Python):
I'm amazing Hi amazing, I'm Python!
I'm tired Hi tired, I'm Python!
I'm hungry Hi hungry, I'm Python!
I'm fat Hi fat, I'm Python!
Supposons maintenant que ces tests sont analysés par Golfscript:
I'm a programmer Hi a programmer, I'm Golfscript!
I'm a question-writer Hi a question-writer, I'm Golfscript!
I'm a Stack-Overflow-er Hi a Stack-Overflow-er, I'm Golfscript!
Le défi exact:
Prenez une chaîne au format auto-descripteur (
I'm <adjective>
ouI'm a(n) <noun>
) en utilisant l’entrée standard ou par le biais d’une fonction.Supposons qu'il n'y ait pas de ponctuation finale.
Supposons que le mot
I'm
est utilisé et nonI am
.
Convertissez-le au format papa-blague - voir les exemples ci-dessus pour voir exactement à quoi cela devrait ressembler.
D'autres choses:
C'est le code-golf , donc le plus petit nombre d'octets gagne.
Suivez les règles standard relatives aux échappatoires - aucune d’elles, s'il vous plaît.
S'amuser!
Classement
Vous pouvez afficher le classement pour ce message en développant le widget / extrait ci-dessous. Pour que votre message soit inclus dans le classement, vous avez besoin d'un header ( # header text
) avec les informations suivantes:
Le nom de la langue (le terminer par une virgule
,
ou un tiret-
), suivi de ...Le nombre d'octets, en tant que dernier numéro à apparaître dans votre en-tête.
Par exemple, JavaScript (ES6), 72 bytes
est valide, mais Fortran, 143 bytes (8-bit)
invalide car le nombre d'octets n'est pas le dernier chiffre de l'en-tête (votre réponse sera reconnue comme 8 octets - n'en profitez pas).
<iframe src="https://ozewski.github.io/ppcg-leaderboard/?id=185872" width="100%" height="100%" style="border: none;">Oops, your browser is too old to view this content! Please upgrade to a newer version of your browser that supports HTML5.</iframe><style>html,body{margin:0;padding:0;height:100%;overflow:hidden}</style>
la source
Réponses:
V , 13 octets
Essayez-le en ligne!
Inspiré par la réponse de tsh
Ceci tire parti du fait que le
I'm
texte est retiré du début de la chaîne lors de la suppression du texte et qu'il est collé à la fin avec<C-r>"
en mode insertion.la source
I'm
à<C-O>p
puis notez votre réponse ...escape
prend 5 caractères ???0x1B
, mais il est plus facile et plus évident de savoir ce que cela signifie si vous l'écrivez comme<esc>
. La même chose pour<C-r>
ce qui est vraiment0x12
C (gcc) ,
594233 octets-17 octets grâce à @Conor O'Brien remarquant que l'importation n'était pas nécessaire
-9 octets grâce à @tsh indiquant un mode d'écriture plus court et UB de la fonction
Essayez-le en ligne!
Découpe les 3 premiers caractères de l'entrée (supprime
I'm
) et l'entoure du texte souhaité.la source
int
est aussi facultatif.char*
, peut-être ...; alorsa(x){printf("Hi%s, I'm C!",x+3);}
devrait fonctionnerint
peut tenir unchar*
sans le tronquer), malgré le comportement indéfini. Sous x86-64 gcc sous Linux, il échouera toujours dans un exécutable PIE (généralement, aucun pointeur ne se trouve dans les 32 bits d'espace d'adressage virtuel), et gcc ne copiera pas les 32 bits les plus élevés lors du calcul àx+3
partir de le registre RDI). Mais dans un exécutable non-PIE, les adresses statiques se trouvent dans les 31 bits de l'espace d'adressage virtuel le plus bas possible. Par conséquent, si l'appelant transmettait un littéral de chaîne ou un tampon statique, cela fonctionnerait.V , 13 octets
Essayez-le en ligne!
Nouveau sur
V
. Je le savais il y a environ 30 minutes. Quoi qu'il en soit, cette langue est choisie simplement parce que son nom ne coûte qu'un octet. Je ne sais pas comment envoyer la<End>
clé en V. La plupart des environnements vim accepteraient<End>
de remplacer<Esc>A
cet exemple. Mais, vous savez, V est 2 caractères plus court que vim. :)Grâce à @Candy Gumdrop , enregistre 1 octet.
la source
c3l
àcE
.E
avant.cW
(ce qui semble différent, mais est en fait identique àcE
) ou3s
. Bon travail! J'étais sur le point de poster presque cette réponse quand j'ai vu qu'il y avait déjà 2 réponses en V, ce qui était une bonne surprise. J'ai essayé plusieurs approches différentes, mais je ne suis pas sûr qu'il soit possible d'obtenir <13 octets.Stax , 13 octets
Exécuter et déboguer
Déballé, non golfé et commenté, cela ressemble à ceci.
J'ai déplacé le dernier commentaire d'une ligne, car rien ne peut suivre un littéral de chaîne non terminé.
Exécuter celui-ci
la source
brainfuck, 164
Essayez-le en ligne!
Le "brainfuck!" une partie de la chaîne est générée avec cet outil, vous pouvez probablement jouer au golf plus loin à la main.
la source
Excel,
3633 octets-3 octets grâce à Johan du Toit.
L'entrée va dans A1.
Premier essai:
la source
="Hi "&MID(B13,4,99)&", I'm Excel"
34 octetsA1
au lieu deB13
33 octets.Python 3 ,
3534 octetsEssayez-le en ligne!
-1 octet grâce à l'incarnation de l'ignorance
Également 34 octets, en utilisant les nouvelles chaînes formatées, grâce à Gábor Fekete:
Essayez-le en ligne!
la source
lambda s:
et de remplacer%s[3:]
par%input()[3:]
? (-4 bytes)print()
pendant 7 octets supplémentaires. C'est pourquoi les réponses Python utilisent généralement lambdas.lambda s
, j'ai défini une fonction (anonyme). Si vous regardez l'en-tête et le pied de page du lien TIO, je nomme cette fonctionf
, puis je l'appelle avecf("I'm whatever")
. Ensuite, la fonction renvoie la sortie attendue. Avec votre extrait de code, vous n'imprimez ni ne retournez aucune fonction. Vous disposez simplement d'un peu de code qui donne le résultat correct, mais ne fait rien avec. Vous pouvez exécuter des programmes plusieurs fois, vous pouvez appeler des fonctions plusieurs fois, mais un extrait de code n'est qu'un extrait de code.R
454439 octets@ Giuseppe Edit
@AaronHayman Modifier
Essayez-le en ligne!
la source
"(I'm )
par"(.* )
I'm a programmer
(beaucoup d'espaces) à cause de la gourmandisesub
to"I'm(.*)" and "Hi\\1, I'm R"
et 3 octets en prenant l'entrée de stdin à l'aide descan
: Essayez-le en lignePHP ,
3432 octetsEssayez-le en ligne!
Entrée via
STDIN
, appel avec -F.la source
x86 ,
3736 octetsNon assemblé:
Un programme DOS exécutable autonome. Entrée à partir de la ligne de commande, sortie à l'écran.
Téléchargez et testez DAD.COM .
* Le nom exact de "langue" est un peu ambigu, car le code machine de la CPU n'est pas vraiment une langue au sens formel. Utilisation de "x86" en tant que nom généralement compris et accepté pour la plate-forme cible.
la source
Java, 36 octets
Essayez-le en ligne.
la source
Espace blanc , 267 octets
Lettres
S
(espace),T
(tabulation) etN
(nouvelle ligne) ajoutées uniquement en surbrillance.[..._some_action]
ajouté comme explication seulement.Etant donné que les espaces ne saisissent qu’un caractère à la fois, l’entrée doit contenir un retour à la ligne de fin afin qu’il sache à quel moment arrêter de lire les caractères et que l’entrée est effectuée.
Essayez-le en ligne (avec des espaces bruts, des onglets et des nouvelles lignes uniquement).
Explication en pseudo-code:
Les caractères de
", I'm Whitespace!"
sont poussés dans l'ordre inverse, puis imprimés en boucle. Toutes les valeurs de ces caractères sont également réduites de 102, qui sont ajoutées à la boucle avant impression pour économiser les octets. Cette constante 102 pour abaisser chaque caractère avec est générée avec ce programme Java . De plus, au lieu d’appuyer-70
deux fois sur la valeur des deux espaces, le deuxième espace"!ecapsetihW m'I ,"
est copié à partir du premier avec l’option Copier intégrée pour économiser quelques octets.la source
Formule IBM / Lotus Notes,
61 à62 octets+1 parce que je n'avais pas remarqué le
!
à la fin de la sortie.Formule de champ calculé qui prend son entrée d'un champ modifiable
i
. Cela échouerait pour "je suis un je suis" mais comme cela n'aurait aucun sens, je suppose que cela n'arrivera pas.Dommage qu’à 32 octets, le nom de la langue représente plus de la moitié de la longueur totale de la formule!
Capture d'écran ci-dessous montrant un exemple d'entrée et de sortie:
la source
Formula
comment il est fait référence dans la communauté des développeurs Notes / Domino :-)Perl
substitution dePerl 5
ouPerl 5 -p
.sed (
-r
),312825 octets-3 octets grâce à Shaggy -3 octets car
-r
inutile dans la sortieTIO
la source
-r
mais il serait utile que Meta intervienne.Japt , 18 octets
Lorsque la bibliothèque de compression de chaînes de Japt atteint un taux de compression de 0% ...
L'essayer
Une autre alternative à 18 octets:
la source
Octave , 35 octets
Essayez-le en ligne!
42 octets:
J'ai essayé de récupérer "Octave" d'une manière ou d'une autre, sans l'écrire, car 6 caractères sont assez comparés à certains des noms de langues utilisés ici. Malheureusement, je n'ai pu trouver que
ver
ce qui génère une structure avec des champs séparés par des virgules. Prend plus de 6 octets. :(Essayez-le en ligne!
la source
Ruby
-p
,322726 octets-5 octets en exploitant la réponse de Nick Kennedy sur Jelly .
-1 octet de fractionnement sur un point différent de la chaîne. Également réalisé que mon ancien compte a été faux.
Explication
Essayez-le en ligne!
la source
Rouille , 41 octets
Essayez-le en ligne!
la source
Lot, 22 + 3 = 25 octets
+3 octets pour nommer ce fichier
I'm
(avec l'.bat
extension requise pour les fichiers batch). Invoquer commeI'm hungry
, quand il va faire échoHi hungry, I'm Batch!
.la source
I'm
mais ici le nom du script ne sait pas s'il est valide, ou à moins que ce soit l'interprète dont le script est dans le chemin actuelCMD
, alors est -ce que cela me sauverait 2 octets?Perl 6 ,
30 2827 octetsEssayez-le en ligne!
la source
Perl 5
-p
,3124 octetsRéduit sur la base des éclaircissements fournis par OP et d’une suggestion de @NahuelFouilleul.
Essayez-le en ligne!
la source
$^X $]
des variables spéciales pourraient être utilisées, cependant 5 est plus court que$]
5
dans le nom de la langue? En d'autres termes, pouvez-vous affirmer que Perl 5 "se considère lui-même" comme "Perl"? C'était le cas avant Perl 6, et les réponses à codegolf doivent seulement travailler sur au moins une implémentation de la langue, alors choisissez-en une ancienne?Perl
suffit. Et que l'utilisation de l'-p
option ne doit pas nécessairement être considérée comme faisant partie du nom de la langue.Gelée ,
16 à15 octetsUn programme complet acceptant un argument de chaîne (formaté en Python) qui affiche le résultat.
Essayez-le en ligne!
Comment?
Note:
Ḋ⁾Hio...
fonctionne aussi.la source
Gelée ,
2017 octetsEssayez-le en ligne!
Un lien monadique prenant l'entrée comme argument et renvoyant une chaîne Jelly.
Explication
la source
VBA (Excel), 27
28octetsL'entrée va dans la cellule A1 de la feuille active dans Excel, exécutez le code dans la fenêtre Immédiat
Profite du fait que
"SomeString"SomeValue
etSomeValue"SomeString"
sera implicitement concatenate, et que l' omission du troisième argument de laMID
fonction prendra tous les caractères de la fin de l'entrée - le transformant en une fonction « dump caractères initiaux »(-1 octet grâce à Shaggy, mais +1 lorsque OP confirme que toutes les réponses doivent se terminer par un point d'exclamation)
(-1 octet grâce à Taylor Scott me rappelant que la double citation finale était facultative)
la source
Hi
et remplacer5
par4
?"
de cette solution. Lorsque vous utilisez la notation d'évaluation (les crochets), vous devez marquer cette solution comme étant Excel VBA, cette notation n'étant disponible que dans Excel.J , 22 octets
Essayez-le en ligne!
la source
05AB1E ,
2321 octets2 octets sauvés grâce à Kevin Cruijssen
Essayez-le en ligne!
Explication
la source
•äƵí•hR
1 octet de moins que"05AB1E"
. :)•äƵí•hR
aussi, mais comme vous l'avez dit, cela n'enregistre malheureusement aucun.QuadR , 22 octets
Essayez-le en ligne!
Cela remplace:
^...
trois caractères initiauxet
$
la fin de ligneavec
Hi
et
,I'm QuadR
respectivement
la source
⎕R
opérateur APL non destiné au golf .Retina ,
2221 octetsEssayez-le en ligne! Le lien inclut des cas de test. Ne fonctionne pas dans Retina 0.8.2, adaptez donc la réponse QuadR de @ Adám à la place. Explication: Le modèle est vide. Il correspond donc à chaque position de la chaîne d'entrée. Cependant, nous n'avons besoin que du troisième (ou du quatrième qui fonctionnerait). La substitution est ensuite appliquée à ce match. Dans cette substitution,
$'
fait référence au reste de la chaîne et$`
fait référence au début de la chaîne.la source
Retina 0.8.2 ,
262523 octets-1 octet grâce à @attinat .
-2 octets en portant la réponse de @ Adám QuadR , alors assurez-vous de lui donner son vote !!
PS: @Neil a posté une réponse plus courte sur Retina dans la nouvelle version . J'ai donc explicitement changé cette réponse en Retina 0.8.2.
Essayez-le en ligne.
Explication:
Remplacez les trois premiers caractères par "Hi":
Et puis ajoutez un ", je suis la rétine!" (en remplaçant la fin de la chaîne):
la source
bash, 24 octets
TIO
la source
bash
par$0
pour sauvegarder quelques octets$0
serait le nom du script en cours d' exécution ou imprimerbash -c 'echo Hi ${@:2}, $1 $0!' bash $@
mais devrait compter en taille