Introducción
En las salidas de error de algunos lenguajes, como Java, se muestra un puntero para darle al programador una idea exacta de dónde se produjo el error.
Tome este ejemplo en Ideone:
Main.java:12: error: ';' expected
Invalid Java!
^
¿Observe que el cursor muestra dónde está el código no válido?
Desafío
Su reto es: número dado N y la cadena S , coloque un puntero en el N º personaje en S .
Ejemplos
Entrada :2, "Lorem ipsum, dollar sit amet."
Salida :
Lorem ipsum, dollar sit amet.
^
Reglas
- La entrada se recibe a través de STDIN o parámetros de función
- La salida se imprime en la consola o
return
ed - Se permiten nuevas líneas, espacios, etc. en la salida
- El carácter del puntero debe ser un ^ caret y debe estar en una nueva línea.
- Este es el código de golf, por lo que gana la respuesta más corta. ¡Buena suerte!
Respuestas:
C 33
Si solo se permite una función, incluso c puede competir.
(Para el registro, 2 bytes guardaron thx en @Cool Guy. El comentario de Mt thx se evaporó inesperadamente).
1 char más guardado gracias a @Mig
fuente
f(a,c){printf("%s\n%*c",a,c,94);}
*
opción en la cadena de formato antes, pero me había olvidado por completo. Podría ser útil para algunos de los desafíos del arte ascii en el futuro.Brainf * ck - 133 bytes
Espera entrada como,
[0-9]{2}.*
por ejemplo, "¡¡¡Hola mundo !!!" produciríafuente
e
en el ejemplo. Al costo de 1 byte, esto se puede solucionar agregando un-
frente a[->.<]
Código de máquina IA-32, 24 bytes
Hexdump:
Es una función (usando la
fastcall
convención de MS ) que actualiza la cadena en el lugar:Código de montaje:
Utiliza datos de
WORD
tamaño (16 bits) en algunos lugares. Esto tiene una penalización (prefijo de 1 byte) en el código de 32 bits, pero de todos modos hace que el código sea más pequeño: ¡usar datos de 32 bits colocaría dos bytes cero en el código!Al final, escribe 4 bytes (
eax
) en lugar de 2 bytes (ax
): el código es más pequeño de esa manera y 2 bytes adicionales de basura van después de la terminación de la cadena, por lo que nadie los nota.Uso:
fuente
66 b8 5e 00
mueve0x5e
aal
, no aah
, y a cero enah
lugar deal
, por lo que su comentario en el código de ensamblaje es engañoso.naked
ahí? ¿Y por qué es lo primero que vi?naked
frente: msdn.microsoft.com/en-us/library/h5w10wxs.aspxPyth , 8
Esta solución ya no funciona, ya que la confirmación después de la que he vinculado cuando el nombre del idioma cambió
p
a arity 1. Hay varias otras formas de lograr una puntuación similar en Pyth que todavía funcionan hoy en día, comozp+*dQ\^
.Si la cadena necesita comillas, agregar
v
al principio del código funciona. Si tiene que estar separado por comas, sube a 10 bytes:fuente
^
que siempre estará bajo el primer carácter. Y, por cierto, los parámetros de entrada se dan en el orden incorrecto al intérprete en línea (por lo que no se ejecuta).p
tenía arity 1. Esto causó que la primera línea de la salida se imprimiera primero y luego el cursor en la siguiente línea seguido de los espacios. Ahora puede hacerloz+*dQ\^
para una puntuación más corta pero con una nueva línea final, o agregar unp
antes+
para eliminarlo. No estoy seguro de qué hacer aquí, ya que las personas votaron por esta versión de la respuesta, creo que intentaré encontrar la versión en la que funcionó.T-SQL, 90
Si bien es una pregunta bastante simple, siempre es interesante probarlos en idiomas que realmente no tienden a admitirlos bien o jugar bien al golf.
Esta respuesta está casi garantizada como la más larga.
Esto crea una función de tabla en línea para SQL Server que toma @n y @ como parámetros y devuelve los resultados como una columna. El retorno de carro es significativo, de lo contrario necesitaría usar char (13).
Se usa de la siguiente manera
Y vuelve
fuente
Python, 27
Esto utiliza dos niveles de formato de cadena.
Y aquí hay una solución de 25 bytes parcialmente robada de la respuesta de feersum (con el orden de los argumentos invertido):
fuente
Bash, 27
Salida
fuente
$
al final es el indicador de comandos de shell. La pregunta especifica que las nuevas líneas finales están permitidas, pero no dice que sean necesarias.Python, 29
Concatena la cadena, una nueva línea,
n-1
espacios y a^
.fuente
rjust
no fuera tanto tiempo ...sed, 16
Esto es algo así como un caso de prueba de esta meta respuesta . Específicamente, estoy requiriendo que el número N se ingrese en unario. Por ejemplo, para el cursor en la posición 2, la entrada para N sería
11
. Además, no se especifica estrictamente qué orden deben ser S y N , por lo que aquí S va primero, seguido de N unario en una nueva línea, todo a través de STDIN.Salida:
fuente
2y/1/ /;2s/ $/^/
JavaScript (ES6):
6362565232 bytesGracias a nderscore por reducir en gran medida el tamaño del código.
Versión que funciona en más navegadores (47 bytes):
fuente
Array(a-1)
. 2. Las funciones anónimas están permitidas de manera predeterminada, por lo que no es necesariopoint=
. 3. Para la versión ES6, puede deshacerse de lareturn
declaración y las llaves. Solo úsalo(a,b)=>b+"\n"+Array(a-1).join(" ")+" ^"
.\n
con una nueva línea real)p=(a,b)=>b+`\n${' '.repeat(a-1)}^`
Array(1).join(' ')
da como resultado una cadena vacía :)CJam, 9 bytes
Pruébalo en línea.
Cómo funciona
fuente
Python, 29
Aquí hay una forma más divertida de hacerlo en 29:
Ejemplo de uso:
fuente
TI-BASIC, 10 (?) Bytes
La entrada se da en la variable N, como se hace en la pregunta, pero no se puede usar la letra var S como una cadena. En lugar de eso, se toma la entrada de la cadena de Ans, por lo que para ejecutar el ejemplo en el PO:
2->N:"Lorem ipsum, dollar sit amet.":prgm<program name>
.Sin embargo, soy consciente de que eso probablemente no cuenta, ya que cada segmento delimitado por dos puntos es técnicamente una declaración separada; aquí hay un programa de 46 bytes que toma la entrada como
N "S"
(2 "Lorem ipsum, dollar sit amet."
)Ambos suponen que la pantalla se ha borrado antes de ejecutarse.
fuente
dc, 19
La entrada es de STDIN.
dc
las cadenas son definiciones de macro y están contenidas en[
]
. La cadena de espacios se genera calculando el número que cuando se expresa como un flujo base de 256 bytes proporciona la cadena que necesitamos. El calculo es((n ^ 256) / 255) * 32)
. Esto proporcionan
espacios (carácter ASCII 32), pero necesitamosn-1
seguirlos^
, por lo que simplemente agregamos 62 a la última base de 256 dígitos.Salida
fuente
C,
595747 bytesMuy claro. Versión sin golf:
Probarlo aquí
Gracias a @anatolyg para el ahorro de 10 bytes!
fuente
puts(a)
yputchar(32)
entrar entre paréntesis delfor
bucle: ¡hay exactamente 2 lugares vacíos allí! Además, no creo que necesite declarar el tipo dea
yc
, solo use lo implícitoint
para ellos, funcionará si no lo hace#include <stdio.h>
.C # 55
Una función, concepto similar a mi respuesta C, pero esta vez el retorno es más corto que el resultado.
fuente
SAS, 35 bytes
Ese es el equivalente SAS de una función desnuda; agregar el paso de datos para llamarlo (equivalente a la función principal de C para llamarlo) sería un poco más (9 bytes más - Ty Alex), pero creo que eso no es necesario para este propósito. Cómo se llamaría:
Hay una implementación de solo macro, pero es mucho más larga, incluso si le permite dar una advertencia sobre parámetros no válidos en n = 1.
Si pudiéramos usar parámetros predefinidos, SAS sería bastante corto comparativamente en este caso, lo cual es una rareza para un lenguaje que definitivamente no pretende ser corto.
Si se permite que un conjunto de datos sea la fuente de entrada, que es la forma en que 'lo haría' en SAS (o por% sentencias let), pero probablemente no está permitido, esto es aún más corto ( 27 bytes , que en realidad podría ser 25 si garantizó que el conjunto de datos se construyó inmediatamente antes de ejecutar esto [como podría usar
set;
]]:(conjunto de datos preexistente)
(código real)
fuente
data a;
, solo puedes hacerdata;
lo que ahorrará 2 bytes. Pero como dijiste, no es necesario para este propósito de todos modos.Matlab / Octave, 41
Esta es una función anónima que devuelve la cadena. Esto produce una advertencia, que se puede suprimir llamando previamente
warning off
.fuente
ans =
bit, así que después de arreglar eso, solo hay 10 caracteres de diferencia.K, 21 bytes
Ejemplo:
Explicación (
x
es el número,y
es la cadena):fuente
R,
494846Como una función sin nombre que sale a STDOUT. Gracias a @Flounderer por la mejora.
usa strwrap ahora para identificar el cursor a n-1. cat usa un separador de \ n en lugar de una cadena vacía.
Prueba de funcionamiento
fuente
function(n,x)cat(" ",x,"\n",rep("",n),"^")
y ahorra unos cuantos personajesstrwrap
función antes. ¿Hay una manera simple de decir lo que hace? No puedo entenderlo de la documentación.Python3,
3836 bytesProbarlo aquí
Gracias a @Dennis para el ahorro de 2 bytes!
fuente
(i-1)
->~-i
Julia, 27 bytes
Esto crea una función sin nombre que acepta un entero y una cadena como entrada y devuelve una cadena. Para llamarlo, dale un nombre, por ejemplo
f=(n,s)->...
.Todo lo que sucede aquí es que estamos agregando una nueva línea,
n-1
espacios y el cursor. La concatenación de cadenas se realiza utilizando*
y la repetición de cadenas con^
.Sin golf:
Ejemplo:
fuente
PHP (CLI) - 42
Llámalo desde la línea de comando:
fuente
<?printf("$S\n%{$P}s",'^');
. Reemplace el\n
con una nueva línea real . El total es de 5 bytes. Eso solo funciona en PBP4.1 y versiones inferiores.Matlab, 25
Este es extremadamente descarado. Aparentemente muestra impresiones de caracteres no imprimibles como espacios. El siguiente código define una función llamada
ans
, que cumple con las especificaciones.llamando a esta función así:
da la salida:
Siempre me desagrada la
ans =
parte de las respuestas de Matlab. Si esto es un problema, necesito agregar 6 bytes ... pero siempre lo he visto así en las respuestas de Matlab. Tenga en cuenta que la ejecución de este código sobrescribe la variableans
, por lo que debe redefinir la función si desea usarla por segunda vez.fuente
x=ans(2, 'asdf');
, no obtienes un ans = cosa.Mi primer tiro al codegolf
Java,
13365Estoy seguro de que se puede reducir aún más.
Código antiguo
fuente
System.out
alguna parte?public
. Y cambiaIntStream.range(1,i).forEach(j->System.out.print(" "));
afor(;--i>0;)System.out.print(" ");
s+="\n"
interior de lafor()
inicialización para usar el punto y coma allí?Swift, 41
Es decepcionante que Swift no tiene operador
*
enArray
oString
.fuente
{$1+(0..<$0).reduce("\n"){$0.0+" "}+"^"}
SpecBAS - 34
Apostrophe en
PRINT
fuerza una nueva línea, luego solo tiene que mover el cursor para corregir la posición.fuente
GolfScript 11
Prueba aquí .
fuente
JavaScript: 52 bytes
Aquí está el mío, es bastante simple.
Uso:
Apunta al séptimo personaje.
fuente
alert((P=prompt)()+"\n"+Array(P()+1).join(" ")+"^")
. Y ahorras 2 bytes. Además, puede convertirlo en un stasksnippet para mostrar el código en ejecución. Eso espera que la cuerda llegue primero, luego la posiciónPerl 5, 31
fuente