introduction
Dans les sorties d'erreur de certains langages tels que Java, un pointeur est montré pour donner au programmeur une idée de l'endroit exact où l'erreur s'est produite.
Prenons cet exemple sur Ideone:
Main.java:12: error: ';' expected
Invalid Java!
^
Notez que le curseur indique où se trouve le code invalide?
Défi
Votre défi est: nombre donné N et chaîne S , placez un pointeur sur la N ième caractère S .
Exemples
Entrée :2, "Lorem ipsum, dollar sit amet."
Sortie :
Lorem ipsum, dollar sit amet.
^
Règles
- L'entrée est reçue via STDIN ou des paramètres de fonction
- La sortie est imprimée sur la console ou
return
ed - Les nouvelles lignes, espaces, etc. sont autorisés dans la sortie
- Le caractère de pointeur doit être un ^ caret et doit figurer sur une nouvelle ligne.
- C'est le code de golf, donc la réponse la plus courte gagne. Bonne chance!
Réponses:
C 33
Si seulement une fonction est autorisée, alors même c peut concourir.
(Pour mémoire, 2 octets enregistrés sur ThC @ Guy Cool. Le commentaire de Thx s'est évaporé de manière inattendue.)
1 caractère de plus enregistré thx @Mig
la source
f(a,c){printf("%s\n%*c",a,c,94);}
*
option dans la chaîne de format, mais je l'avais complètement oubliée. Pourrait être utile pour certains des défis artistiques ASCII à l'avenir.Brainf * ck - 133 octets
Attend l'entrée comme
[0-9]{2}.*
par exemple "02Hello world !!!" produiraitla source
e
l'exemple. Au prix d'un octet, cela peut être corrigé en ajoutant un-
devant[->.<]
IA-32 code machine, 24 octets
Hexdump:
C'est une fonction (utilisant la
fastcall
convention MS ) qui met à jour la chaîne sur place:Code d'assemblage:
Il utilise des données de
WORD
taille (16 bits) à quelques endroits. Cela a une pénalité (préfixe de 1 octet) dans le code 32 bits, mais rend le code plus petit de toute façon - utiliser des données 32 bits mettrait deux octets à zéro dans le code!À la fin, il écrit 4 octets (
eax
) au lieu de 2 octets (ax
) - le code est plus petit de cette façon et 2 octets supplémentaires d’ordure disparaissent après la fin de la chaîne, de sorte que personne ne les remarque.Usage:
la source
66 b8 5e 00
se déplace0x5e
versal
, non versah
, et zéro versah
au lieu deal
, votre commentaire dans le code d'assemblage est donc trompeur.naked
là dedans? Et pourquoi est-ce la première chose que j'ai vue?naked
en avant: msdn.microsoft.com/en-us/library/h5w10wxs.aspxPyth , 8
Cette solution ne fonctionne plus, car le commit suivant celui
p
auquel je me suis associé lorsque le nom de la langue a changé a été remplacé par arity 1. Il existe plusieurs autres moyens de réaliser un score similaire en Pyth qui fonctionnent encore de nos jours, commezp+*dQ\^
.Si la chaîne nécessite des guillemets, l'ajout
v
au début du code fonctionne. S'il doit être séparé par des virgules, il peut aller jusqu'à 10 octets:la source
^
sera toujours sous le premier caractère. Et en passant, les paramètres d’entrée sont donnés dans le mauvais ordre à l’interprète en ligne (donc il ne parvient pas à s’exécuter).p
avait arity 1. Cela entraînait l’impression de la première ligne de la sortie, puis du curseur à la ligne suivante, suivie des espaces. Maintenant, vous pouvez le fairez+*dQ\^
pour un score plus court, mais avec une fin de ligne, ou ajouter unp
avant+
pour le supprimer. Je ne sais pas quoi faire ici, puisque les gens ont voté pour cette version de la réponse, je pense que je vais essayer de trouver la version sur laquelle elle a fonctionné.T-SQL, 90
Bien qu’il s’agisse d’une question assez simple, il est toujours intéressant d’essayer ces langues dans des langues qui ne les supportent pas vraiment bien ou qui ne jouent pas bien au golf.
Cette réponse est presque certainement la plus longue.
Cela crée une fonction de table en ligne pour SQL Server qui prend les paramètres @n et @ et renvoie les résultats sous forme de colonne. Le retour de voiture est important, sinon je devrais utiliser le caractère (13).
Il est utilisé de la manière suivante
Et revient
la source
Python, 27
Ceci utilise deux niveaux de formatage de chaîne.
Et voici une solution de 25 octets partiellement volée dans la réponse de feersum (avec l'argument ordre inversé):
la source
Bash, 27 ans
Sortie
la source
$
fin est l'invite du shell. La question précise que les retours à la ligne sont autorisés, mais ne dit pas qu'ils sont nécessaires.Python, 29 ans
Concatène la chaîne, une nouvelle ligne, des
n-1
espaces et une^
.la source
rjust
n'était pas si long ...sed, 16
C'est en quelque sorte un test de cette méta réponse . Plus précisément, je demande que le nombre N soit entré unaire. Par exemple, pour le curseur en position 2, l'entrée pour N serait
11
. De plus, il n'est pas strictement spécifié quel ordre doit être S et N , alors S commence, puis N unaire sur une nouvelle ligne, tout au long de STDIN.Sortie:
la source
2y/1/ /;2s/ $/^/
JavaScript (ES6):
6362565232 octetsMerci à nderscore pour avoir considérablement réduit la taille du code.
Version qui fonctionne sur plusieurs navigateurs (47 octets):
la source
Array(a-1)
. 2. Les fonctions anonymes sont autorisées par défaut, vous n’avez donc pas besoinpoint=
. 3. Pour la version ES6, vous pouvez vous débarrasser de l'return
instruction et des accolades. Il suffit d'utiliser(a,b)=>b+"\n"+Array(a-1).join(" ")+" ^"
.\n
par une nouvelle ligne réelle)p=(a,b)=>b+`\n${' '.repeat(a-1)}^`
Array(1).join(' ')
donne une chaîne vide :)CJam, 9 octets
Essayez-le en ligne.
Comment ça fonctionne
la source
Python, 29 ans
Voici une façon plus amusante de le faire en 29:
Exemple d'utilisation:
la source
TI-BASIC, 10 (?) Octets
L'entrée est donnée dans la variable N, comme le demande la question, mais vous ne pouvez pas utiliser la lettre var S en tant que chaîne. Au lieu de cela, il prend entrée de chaîne de Ans, pour ainsi exécuter l'exemple dans l'OP:
2->N:"Lorem ipsum, dollar sit amet.":prgm<program name>
.Je suis conscient que cela ne compte probablement pas, car chaque segment délimité par des deux-points est techniquement une déclaration distincte; voici un programme de 46 octets qui prend en entrée comme
N "S"
(2 "Lorem ipsum, dollar sit amet."
)Les deux supposent que l'écran a été effacé avant l'exécution.
la source
dc, 19
L'entrée provient de STDIN.
dc
les chaînes sont des définitions de macros contenues dans[
]
. La chaîne d'espaces est générée en calculant le nombre qui, lorsqu'il est exprimé en tant que flux de base de 256 octets, donne la chaîne dont nous avons besoin. Le calcul est((n ^ 256) / 255) * 32)
. Cela donne desn
espaces (caractère ASCII 32), mais nous avons besoin den-1
suivi de^
, nous ajoutons donc simplement 62 au dernier chiffre de base de 256 chiffres.Sortie
la source
C,
595747 octetsAssez simple. Version non-golfée:
Testez-le ici
Merci à @anatolyg d' avoir économisé 10 octets!
la source
puts(a)
etputchar(32)
entre les parenthèses de lafor
boucle - il y a exactement 2 places vides là-bas! En outre, je ne pense pas que vous ayez besoin de déclarer le type de -a
etc
utilisez simplement l'impliciteint
pour eux - fonctionnera si vous ne le faites pas#include <stdio.h>
.C # 55
Une fonction, concept similaire à ma réponse C, mais cette fois le retour est plus court que la sortie.
la source
SAS, 35 octets
C'est l'équivalent SAS d'une fonction nue; ajouter l'étape de données pour l'appeler (l'équivalent de la fonction principale C pour l'appeler) serait un peu plus (9 octets de plus - Ty Alex), mais je pense que ce n'est pas nécessaire pour cela. Comment ça s'appellerait:
Il existe une implémentation macro uniquement mais elle est beaucoup plus longue, même si vous lui permettez de donner un avertissement concernant les paramètres non valides sur n = 1.
Si nous pouvions utiliser des paramètres prédéfinis, SAS serait relativement court par rapport à celui-ci, ce qui est une rareté pour une langue qui n’est certainement pas destinée à être courte.
Si un jeu de données est autorisé à être la source d'entrée, ce qui est le cas de la manière dont vous le feriez dans SAS (ou à l'aide d'instructions% let), sans que cela ne soit probablement pas autorisé, le délai est encore plus court ( 27 octets , ce qui pourrait en réalité être 25 si vous avez garanti que le jeu de données a été construit immédiatement avant d'exécuter ceci [comme vous pouvez simplement l'utiliser
set;
]):(ensemble de données préexistant)
(code actuel)
la source
data a;
, vous pouvez simplement fairedata;
ce qui économisera 2 octets. Mais comme vous l'avez dit, ce n'est pas nécessaire pour cela.Matlab / Octave, 41 ans
C'est une fonction anonyme qui renvoie la chaîne. Cela produit un avertissement qui peut être supprimé en appelant précédemment
warning off
.la source
ans =
bit, donc après avoir corrigé ça, il n'y a plus que 10 caractères.K, 21 octets
Exemple:
Explication (
x
est le nombre,y
est la chaîne):la source
R,
494846En tant que fonction non nommée qui sort vers STDOUT. Merci à @Flounderer pour l'amélioration.
utilise maintenant strwrap pour identifier le curseur avec n-1. cat utilise un séparateur de \ n plutôt qu'une chaîne vide.
Essai
la source
function(n,x)cat(" ",x,"\n",rep("",n),"^")
et enregistre quelques caractèresstrwrap
fonction avant. Existe-t-il un moyen simple de dire ce que cela fait? Je ne peux pas le comprendre à partir de la documentation.Python3,
3836 octetsTestez-le ici
Merci à @Dennis d' avoir économisé 2 octets!
la source
(i-1)
->~-i
Julia, 27 octets
Cela crée une fonction non nommée qui accepte un entier et une chaîne en tant qu'entrée et renvoie une chaîne. Pour l'appeler, donnez-lui un nom, par exemple
f=(n,s)->...
.Tout ce qui se passe ici, c'est que nous ajoutons une nouvelle ligne, des
n-1
espaces et le curseur. La concaténation de chaînes est effectuée à l'aide de*
et la répétition de chaînes avec^
.Ungolfed:
Exemple:
la source
PHP (CLI) - 42
Appelez-le depuis la ligne de commande:
la source
<?printf("$S\n%{$P}s",'^');
. Remplacez-le\n
par une vraie nouvelle ligne. Le total est de 5 octets. Cela ne fonctionne que sur PBP4.1 et inférieur.Matlab, 25 ans
Celui-ci est extrêmement effronté. Apparemment, affiche imprime des caractères non imprimables sous forme d'espaces. Le code suivant définit une fonction nommée
ans
, qui répond aux spécifications.appelant ainsi cette fonction comme ceci:
donne le résultat:
Je n'aime toujours pas la
ans =
partie dans Matlab répond. Si cela pose un problème, je dois ajouter 6 octets ... mais je l’ai toujours vu ainsi dans les réponses Matlab. Notez que l'exécution de ce code écrase la variableans
, vous devez donc redéfinir la fonction si vous souhaitez l'utiliser une seconde fois!la source
x=ans(2, 'asdf');
pas une chose ans =.Mon premier coup au codegolf
Java,
13365Je suis sûr que cela peut être réduit encore plus.
Ancien code
la source
System.out
quelque part?public
. Et changerIntStream.range(1,i).forEach(j->System.out.print(" "));
pourfor(;--i>0;)System.out.print(" ");
s+="\n"
intérieur de l'for()
initialisation pour utiliser le point-virgule ici?Swift, 41 ans
Il est décevant que Swift n'ait pas d'opérateur
*
surArray
ouString
.la source
{$1+(0..<$0).reduce("\n"){$0.0+" "}+"^"}
SpecBAS - 34
Apostrophe
PRINT
force une nouvelle ligne, puis il suffit de déplacer le curseur pour le positionner correctement.la source
GolfScript 11
Testez ici .
la source
JavaScript - 52 octets
Voici le mien, c'est assez simple.
Usage:
Il pointe vers le septième caractère.
la source
alert((P=prompt)()+"\n"+Array(P()+1).join(" ")+"^")
. Et vous économisez 2 octets. En outre, vous pouvez en faire un stasksnippet pour présenter le code en cours d'exécution. Cela attend la chaîne à venir en premier, puis la positionPerl 5, 31
la source