Dans la bibliothèque standard C, les noms d'en-tête se terminent par un .h
suffixe:
stdio.h
En C ++, ces noms d'en-tête sont disponibles sous une forme alternative, avec un c
préfixe à la place:
cstdio
Écrivez une fonction qui convertit le premier formulaire en deuxième. Vous pouvez effectuer la conversion sur place ou laisser la chaîne d'origine intacte et renvoyer une nouvelle chaîne. Quelle que soit la sensation naturelle dans la langue de votre choix.
Le code doit être compilé / interprété sans erreur. Les avertissements du compilateur sont acceptables.
Voici votre solution de base C. Il contient 70 caractères et génère un avertissement concernant strlen
:
void f(char*h){int i=strlen(h);h[--i]=0;while(--i)h[i]=h[i-1];*h='c';}
La solution la plus courte (mesurée en nombre de caractères) l'emporte.
Mise à jour: si la langue de votre choix ne prend pas en charge les fonctions, des programmes entiers sont également acceptables.
Mise à jour: Comme suggéré par FUZxxl, voici une liste complète des fichiers d'en-tête dans la bibliothèque standard C:
assert.h
ctype.h
errno.h
float.h
limits.h
locale.h
math.h
setjmp.h
signal.h
stdarg.h
stddef.h
stdio.h
stdlib.h
string.h
time.h
Plus précisément, il n'y a aucun nom d'en-tête contenant plusieurs points.
la source
Python: 19 caractères
la source
CJam, 6 octets
Ceci est un programme complet qui lit la chaîne via STDIN
Explication :
Essayez-le en ligne ici
la source
-2
aussi bon queW(
?Java 8-25 caractères
la source
brainfuck -
2523 octetsIl s'agit d'un programme complet qui prend en entrée STDIN.
la source
>
au début.Haskell - 23 caractères
Haskell - 16 caractères, comme suggéré par nimi
la source
init.init
au lieu de tout prendre jusqu'au premier.
permet d'économiser quelques octets.C, 38
Voir sur Ideone
s
est un pointeur vers la chaîne d'entrée eto
est l'endroit où la sortie doit être écrite.J'ai trouvé un moyen d'abuser
snprintf
. La chaîne de sortie se trouve commodément être un caractère plus court que l'entrée, et la longueur maximale de la chaîne écrite parsnprintf
est inférieure de 1 à l'n
argument, donc elle coupe le.h
. Remarque: cette technique ne fonctionnera pas avec l'implémentation de Microsoft car elle fait la mauvaise chose et ne parvient pas à terminer la chaîne par null.la source
Fichier batch de Windows 11
Le premier paramètre transmis est% 1. Le modificateur ~ n renvoie uniquement le nom de fichier sans extension.
S'il est également possible d'écho de la commande étendue à l'écran, le @ initial pourrait être supprimé.
la source
Architecture du nœud TIS de type T21 - 85 octets
Cette réponse est juste pour le plaisir; la langue a vu le jour après la rédaction de ce défi et je ne peux donc pas gagner avec. (Pas que j'allais le faire.)
D'accord, je me suis un peu amusé avec celui-ci. Je devrais probablement simplement appeler la langue "TIS-100", mais pourquoi rompre le caractère? :RÉ
TIS-100 est un jeu sur la programmation d'un ordinateur avec une architecture totalement unique et bizarre. J'ai écrit un puzzle personnalisé pour ce défi, qui me permet de prendre des entrées et de vérifier les sorties par rapport à une "chaîne" correcte. Malheureusement, il n'y a aucun moyen de gérer les chaînes ou les caractères, donc ce programme utilise simplement la valeur ASCII de chaque caractère pour l'entrée et la sortie.
Si vous souhaitez le voir en action, vous pouvez utiliser cet émulateur , ou tout simplement me regarder l'exécuter dans le jeu réel ici . Notez que dans la vidéo, la dernière ligne du premier nœud est
D:MOV UP NIL
. Après avoir terminé la vidéo, j'ai réalisé que je pouvais jouer au golf jusqu'àD:ADD UP
. Fonctionnellement, il n'y a pas de différence, car la valeur de ACC est immédiatement écrasée de toute façon.Voici la chaîne que j'ai utilisée pour mon nombre d'octets:
C'est le texte de chaque nœud non vide, séparé par des sauts de ligne (ajoutant effectivement 1 octet pour chaque nœud utilisé au-delà du premier, reflétant notre règle sur le code dans plusieurs fichiers).
la source
Dyalog APL (8 caractères)
Cette solution est exactement la même que la solution J que j'ai soumise, mais utilise un caractère de moins en raison d'
↓
un caractère de moins que}.
.la source
J (9 caractères)
|y
est la magnitude dey
(également appelée valeur absolue)x }. y
laisse tomber les|x
articles dey
; les articles sont déposés par l'avant six
c'est positif, à la fin six
c'est négatif.x , y
ajoutex
ety
.'c' , _2 }. y
fait la transformation que vous voulez; en notation tacite, cela peut être exprimé comme'c' , _2 }. ]
.la source
Autruche 0.6.0 , 8 caractères
)
est l'opérateur "right uncons". Lorsqu'il est appliqué à une chaîne, il se transforme, par exemple,`foo`
en`fo` `o`
.;
est utilisé pour supprimer le caractère supplémentaire, et cela se fait à nouveau.Ensuite,
"c
est poussé. Il s'agit simplement d'un raccourci pour`c`
.\+
échange les deux premiers éléments de la pile et les concatène.la source
piet (
9x11 = 998X11 = 88)un autre essai (2x37 = 74)
Difficile de le rendre beaucoup plus petit car il doit générer un 99 ('c') et un 46 ('.'), Et cela prend de la place en piet.
la source
/dev/null
comme code source.F# -
39373131 - Parce que la typographie dans les roches F #!
37
39
la source
gema, 6
( Gema est un langage macro obscur.)
la source
Bash, 18 ans
Sortie:
la source
GNU sed -r, 14
sed n'a pas vraiment de concept de fonctions, voici donc un programme sed complet:
Sortie
Le
-r
a été inclus dans la partition comme un caractère supplémentaire.la source
s/\(.*\)\.h/c\1/
place.-r
est transmis à sed. Selon le code-golf habituel, je dois compter cela comme un point supplémentaire.-r
n'est pas une option standard et n'est pas disponible en dehors de GNU sed. Vous voudrez peut-être changer le nom de la langue en GNU sed pour refléter cela.\.h
peut être raccourci en..
Prélude , 31 caractères
Étant donné que les soumissions complètes de programmes sont apparemment acceptables, voici un programme qui lit l'en-tête de style C de STDIN et imprime l'en-tête de style C ++ dans STDOUT:
Cela nécessite un interpréteur conforme aux normes qui imprime la sortie sous forme de codes de caractères. Si vous utilisez l'interpréteur Python, vous devrez le définir
NUMERIC_OUTPUT = False
.Cela nécessite également qu'il n'y ait pas de retour à la ligne sur STDIN.
Explication
Dans Prelude, toutes les lignes sont exécutées en parallèle, une colonne à la fois. Chaque ligne a sa propre pile, initialisée à une quantité infinie de
0
s.C'est le plus court que j'ai pu trouver pour obtenir un
99
sur la pile supérieure (le code de caractère dec
). D'abord, j'additionne18
sur la pile du haut et j'enfonce un9
sur la pile du bas. Le bas décompte ensuite0
dans une boucle, tandis que la pile du haut ajoute plus de9
s. Cela s'ajoute à99
la pile du haut et la pile du bas se retrouve avec0
s. Notez que tout+9+
fait partie de la boucle, donc il y a en fait deux opérations d'addition par itération, mais ce n'est pas un problème, grâce à l'offre infinie de0
s en dessous.(?)
Lit maintenant STDIN, un caractère à la fois et pousse sur la pile supérieure. La boucle se termine à la fin de l'entrée, lorsque?
pousse un zéro.###
se débarrasse de ce zéro, leh
et le.
. Maintenant, la boucle suivante extrait les numéros de la pile supérieure tout en les copiant dans la pile inférieure. Cela inverse essentiellement la pile. Notez que les parenthèses ouvrantes et fermantes sont sur des lignes différentes - ce n'est pas un problème, car la position verticale du)
n'est pas pertinente dans Prelude, mais cela me fait gagner un octet sur la première ligne.Enfin,
(!)
imprime tous les caractères jusqu'à ce que la pile soit vide.la source
Pyth, 7 caractères
Explication:
Essaye ça:
sur le compilateur / exécuteur Pyth en ligne
Si des programmes complets étaient autorisés:
Pyth, 6 caractères
la source
PPb
place de<b_2
C ++ 14, 41 caractères
Inspiré par cette autre réponse. J'en ai fait une réponse distincte car ici j'utilise une fonctionnalité nouvelle en c ++ 14, lambda générique .
Voyez-le en action ici .
la source
T-SQL - 58 caractères
Exécuter en tant qu'EXEC Q (votre chaîne ici)
la source
Perl - 20 caractères
Notez comment
c
est un mot simple et en tant que tel, cela nécessite un manque deuse strict
. Cela doit être utilisé comme une expression, pas comme une déclaration.la source
Marbelous, 24
Prend entrée via STDIN, sorties vers STDOUT.
Cela fonctionne en vérifiant chaque octet avec
.
(0x46
). Comme0x46
ne peut pas tenir dans un seul chiffre de base 36, nous soustrayons 35 (Z
) avant de comparer et l'ajoutons avant de produire.Chaque marbre est dupliqué par
3W
( duplicateur à trois voies, mais le côté gauche est jeté du côté de la planche). Le marbre envoyé vers le bas récupère l'octet suivant de STDIN. La bille à droite est vérifiée.
, puis sortie ou envoyée à!!
, ce qui met fin au programme.Le programme commence par passer
c
(0x63
), qui sera envoyé à STDOUT.Essayez-le en ligne ici. Les bibliothèques doivent être activées, les cartes cylindriques doivent être désactivées.
la source
C, 64
Légèrement plus court que la référence c:
Probablement plus de golf à faire avec cela.
C, 48 (piratage libc)
La
strcpy
page de manuel indique explicitement "Les chaînes ne peuvent pas se chevaucher". Cependant, j'ai trouvé que la libc que j'utilise semble être codée en toute sécurité pour gérer cela correctement tout de même. Il s'agit de la bibliothèque GNU C (Ubuntu EGLIBC 2.19-0ubuntu6.4) sur Ubuntu 14.04.la source
-std=c89
. codegolf.stackexchange.com/a/2204/11259int
.JavaScript (ES6) 20
Je ne peux pas croire qu'ES6 était toujours manquant
la source
Perl, 15 (14 + -p)
la source
mk, 34 caractères
mk (1) est le remplacement du plan 9 pour make. Juste pour le plaisir, ce mkfile convertit les noms d'en-tête C en noms d'en-tête C ++:
Il y a un seul onglet avant
:
etecho
. Utilisez comme ceci:la source
CoffeeScript - 16
la source
TI-BASIC 83/84, 15
la source
R, 33
Cette fonction utilise des expressions régulières.
Exemple d'utilisation:
la source