Introdução
Nas saídas de erro de algumas linguagens como Java, um ponteiro é mostrado para dar ao programador uma idéia exata de onde o erro deu errado.
Veja este exemplo no Ideone:
Main.java:12: error: ';' expected
Invalid Java!
^
Observe que o sinal de intercalação mostra onde está o código inválido?
Desafio
Seu desafio é: dado número N e corda S , coloque um ponteiro no N º personagem em S .
Exemplos
Entrada :2, "Lorem ipsum, dollar sit amet."
Saída :
Lorem ipsum, dollar sit amet.
^
Regras
- A entrada é recebida via STDIN ou parâmetros de função
- A saída é impressa no console ou
return
ed - Trailing novas linhas, espaços etc são permitidos na saída
- O caractere do ponteiro deve ser um caractere ^ e deve estar em uma nova linha.
- Isso é código de golfe, então a resposta mais curta vence. Boa sorte!
Respostas:
C 33
Se apenas uma função é permitida, mesmo c pode competir.
(Para o registro, 2 bytes salvos thx no @Cool Guy. O comentário do Mt thx é evaporado inesperadamente.)
Mais 1 char economizado thx @Mig
fonte
f(a,c){printf("%s\n%*c",a,c,94);}
*
opção na string de formato antes, mas tinha esquecido completamente. Pode ser útil para alguns dos desafios da arte ascii no futuro.Brainf * ck - 133 bytes
Espera entrada como,
[0-9]{2}.*
por exemplo, "02Olá mundo !!!" produziriafonte
e
do exemplo. Com o custo de 1 byte, isso pode ser corrigido com a adição de um-
na frente de[->.<]
Código de máquina IA-32, 24 bytes
Hexdump:
É uma função (usando a
fastcall
convenção da MS ) que atualiza a string no local:Código de montagem:
Ele usa dados de
WORD
tamanho (16 bits) em alguns lugares. Isso tem uma penalidade (prefixo de 1 byte) no código de 32 bits, mas diminui o código de qualquer maneira - o uso de dados de 32 bits colocaria dois bytes zero no código!No final, ele grava 4 bytes (
eax
) em vez de 2 bytes (ax
) - o código é menor dessa maneira e 2 bytes extras de lixo eletrônico são eliminados após o término da string, para que ninguém os note.Uso:
fonte
66 b8 5e 00
movida0x5e
paraal
, não paraah
e zero para emah
vez deal
, portanto, seu comentário no código de montagem é enganoso.naked
aí? E por que é a primeira coisa que vi?naked
à frente: msdn.microsoft.com/en-us/library/h5w10wxs.aspxPitão , 8
Essa solução não funciona mais, pois o commit após o qual eu
p
vinculei como o nome do idioma mudou para ter aridade 1. Existem várias outras maneiras de obter uma pontuação semelhante no Pyth que ainda funcionam hoje, comozp+*dQ\^
.Se a sequência precisar de aspas, adicionar
v
ao início do código funcionará. Se tiver que ser separado por vírgula, aumentará para 10 bytes:fonte
^
que sempre estará sob o primeiro caractere. E pela maneira como os parâmetros de entrada são fornecidos na ordem errada ao intérprete on-line (por isso, falha na execução).p
havia arity 1. Isso fez com que a primeira linha da saída fosse impressa primeiro e, em seguida, o cursor na próxima linha, seguido pelos espaços. Agora você pode fazerz+*dQ\^
uma pontuação menor, mas com uma nova linha à direita, ou adicionar ump
antes do+
para removê-lo. Não tenho certeza do que fazer aqui, já que as pessoas aprovaram esta versão da resposta, acho que tentarei encontrar a versão em que ela trabalhou.T-SQL, 90
Embora seja uma pergunta bastante simples, é sempre interessante experimentá-las em idiomas que realmente não tendem a apoiá-los ou jogar bem nesse assunto.
É quase garantido que esta resposta seja a mais longa.
Isso cria uma função de tabela embutida para o SQL Server que usa @n e @ como parâmetros e retorna os resultados como uma coluna. O retorno de carro é significativo, caso contrário eu precisaria usar char (13).
É usado da seguinte maneira
E retorna
fonte
Python, 27
Isso usa dois níveis de formatação de string.
E aqui está uma solução de 25 bytes , parcialmente roubada da resposta do feersum (com a ordem dos argumentos invertida):
fonte
Bash, 27
Resultado
fonte
$
final é o prompt do shell. A pergunta especifica que as novas linhas à direita são permitidas, mas não dizem que são necessárias.Python, 29
Concatena a sequência, uma nova linha,
n-1
espaços e a^
.fonte
rjust
não fosse tanto tempo ...sed, 16
Isso é uma espécie de caixa de teste dessa meta resposta . Especificamente, estou exigindo que o número N seja inserido como unário. Por exemplo, para o cursor na posição 2, a entrada para N seria
11
. Também não está estritamente especificado qual ordem S e N deve ser, então aqui S vai primeiro, seguido por N unário em uma nova linha, por todo STDIN.Resultado:
fonte
2y/1/ /;2s/ $/^/
JavaScript (ES6):
6362565232 bytesAgradecemos ao nderscore por reduzir bastante o tamanho do código.
Versão que funciona em mais navegadores (47 bytes):
fonte
Array(a-1)
. 2. A função anônima é permitida por padrão, portanto você não precisapoint=
. 3. Para a versão ES6, você pode se livrar dareturn
instrução e do aparelho. Apenas use(a,b)=>b+"\n"+Array(a-1).join(" ")+" ^"
.\n
por uma nova linha real)p=(a,b)=>b+`\n${' '.repeat(a-1)}^`
Array(1).join(' ')
resultado em uma seqüência vazia :)CJam, 9 bytes
Experimente online.
Como funciona
fonte
Python, 29
Aqui está uma maneira mais divertida de fazer isso em 29:
Exemplo de uso:
fonte
TI-BASIC, 10 (?) Bytes
A entrada é fornecida na variável N, conforme a pergunta, mas você não pode usar a letra var S como uma string. Em lugar disso, é preciso entrada para a cadeia de Ans, de modo a executar o exemplo no OP:
2->N:"Lorem ipsum, dollar sit amet.":prgm<program name>
.Estou ciente de que isso provavelmente não conta, pois cada segmento delimitado por dois pontos é tecnicamente uma declaração separada; aqui está um programa de 46 bytes que recebe entrada como
N "S"
(2 "Lorem ipsum, dollar sit amet."
)Ambos assumem que a tela foi limpa antes da execução.
fonte
dc, 19
A entrada é de STDIN.
dc
strings são definições de macro e estão contidas em[
]
. A sequência de espaços é gerada calculando o número que, quando expresso como um fluxo base de 256 bytes, fornece a sequência necessária. O cálculo é((n ^ 256) / 255) * 32)
. Isso fornecen
espaços (caractere ASCII 32), mas precisamosn-1
segui-los^
, portanto, basta adicionar 62 ao último dígito base de 256.Resultado
fonte
C,
595747 bytesBem direto. Versão não destruída:
Teste aqui
Graças a @anatolyg por economizar 10 bytes!
fonte
puts(a)
eputchar(32)
entrar nos parênteses dofor
loop - existem exatamente 2 lugares vazios lá! Além disso, não acho que você precise declarar o tipo dea
ec
- apenas use o implícitoint
para eles - funcionará se não o fizer#include <stdio.h>
.C # 55
Uma função, conceito semelhante à minha resposta C, mas esse retorno de tempo é menor que a saída.
fonte
SAS, 35 bytes
Esse é o equivalente do SAS a uma função nua; adicionar a etapa de dados para chamá-lo (equivalente à função principal C para chamá-lo) seria um pouco mais (9 bytes a mais - Ty Alex), mas acho que isso não é necessário para esse fim. Como seria chamado:
Existe uma implementação somente de macro, mas é muito mais longa, mesmo que você permita que ele avise sobre parâmetros inválidos em n = 1.
Se pudéssemos usar parâmetros predefinidos, o SAS seria relativamente curto nesse caso, o que é uma raridade para um idioma que definitivamente não pretende ser curto.
Se um conjunto de dados pode ser a fonte de entrada, é como você o faria no SAS (ou por instruções% let), mas provavelmente não é permitido, isso é ainda mais curto ( 27 bytes , que na verdade pode ser 25). se você garantiu que o conjunto de dados foi construído imediatamente antes de executar isso [como você poderia usar
set;
]]):(conjunto de dados pré-existente)
(código real)
fonte
data a;
, basta fazer odata;
que economizará 2 bytes. Mas, como você disse, não é necessário para esse fim.Matlab / Octave, 41
Esta é uma função anônima que retorna a string. Isso produz um aviso, que pode ser suprimido pela chamada anterior
warning off
.fonte
ans =
bit; portanto, depois de consertar isso, há apenas 10 caracteres de diferença.K, 21 bytes
Exemplo:
Explicação (
x
é o número,y
é a sequência):fonte
R,
494846Como uma função sem nome que gera STDOUT. Obrigado a @Flounderer pela melhoria.
usa strwrap agora para identificar o sinal de intercalação para n-1. cat usa um separador de \ n em vez de uma string vazia.
Execução de teste
fonte
function(n,x)cat(" ",x,"\n",rep("",n),"^")
e poupa alguns personagensstrwrap
função antes. Existe uma maneira simples de dizer o que faz? Não consigo descobrir na documentação.Python3,
3836 bytesTeste aqui!
Obrigado ao @Dennis por economizar 2 bytes!
fonte
(i-1)
->~-i
Julia, 27 bytes
Isso cria uma função sem nome que aceita um número inteiro e uma string como entrada e retorna uma string. Para chamá-lo, dê um nome, por exemplo
f=(n,s)->...
.Tudo o que está acontecendo aqui é que estamos acrescentando uma nova linha,
n-1
espaços e o sinal de intercalação. A concatenação de strings é realizada usando*
e repetição de strings com^
.Ungolfed:
Exemplo:
fonte
PHP (CLI) - 42
Chame a partir da linha de comando:
fonte
<?printf("$S\n%{$P}s",'^');
. Substitua\n
por uma nova linha real . O total é de 5 bytes. Isso funciona apenas no PBP4.1 e abaixo.Matlab, 25
Este é extremamente atrevido. Aparentemente, exibe imprime caracteres não imprimíveis como espaços. O código a seguir define uma função chamada
ans
, que atende às especificações.chamando essa função assim:
dá a saída:
Eu sempre não gosto da
ans =
parte das respostas do Matlab. Se isso for um problema, preciso adicionar 6 bytes ... mas sempre o vi assim nas respostas do Matlab. Observe que a execução desse código substitui a variávelans
; portanto, você precisa redefinir a função se quiser usá-la uma segunda vez!fonte
x=ans(2, 'asdf');
não receber uma coisa ans =.Minha primeira chance no codegolf
Java,
13365Tenho certeza que pode ser reduzido ainda mais.
Código antigo
fonte
System.out
lugar?public
. E mudeIntStream.range(1,i).forEach(j->System.out.print(" "));
parafor(;--i>0;)System.out.print(" ");
s+="\n"
interior dafor()
inicialização para usar o ponto-e-vírgula aí?Swift, 41
É decepcionante que o Swift não tenha o operador
*
ligadoArray
ouString
.fonte
{$1+(0..<$0).reduce("\n"){$0.0+" "}+"^"}
EspecificaçõesBAS - 34
O apóstrofo
PRINT
força uma nova linha, basta mover o cursor para a posição correta.fonte
GolfScript 11
Teste aqui .
fonte
JavaScript - 52 bytes
Aqui está o meu, é bem simples.
Uso:
Aponta para o sétimo caractere.
fonte
alert((P=prompt)()+"\n"+Array(P()+1).join(" ")+"^")
. E você economiza 2 bytes. Além disso, você pode transformá-lo em um stasksnippet para mostrar o código em execução. Que espera que a corda para vir em primeiro lugar, então a posiçãoPerl 5, 31
fonte