Desafio
Escreva um programa / função não vazio p
que, dada uma sequência de entrada não vazia s
, produza a posição da primeira ocorrência de cada caractere s
no código fonte de p
.
Por exemplo, se o seu programa for
main() { cout << magic << cin }
^0 ^5 ^10 ^15 ^20 ^25
e recebe uma entrada abcd{
, a saída deve ser
[1, x, 9, x, 7] (0-based) [2, x, 10, x, 8] (1-based)
Aqui, x
representa qualquer saída que não é uma saída válida para uma posição de caractere (por exemplo, um número negativo, 0
se você usa indexação baseada em 1, NaN
, Inf
, a string potato
, um número maior do que o comprimento do seu programa, etc).
Restrições
A leitura do código fonte não é permitida (como em um quine apropriado). O uso de comentários é permitido, mas conta para a sua pontuação.
A entrada e a saída podem ser feitas em um formato razoável, mas devem ser inequívocas (apenas delimitadores adicionais, sem rand
fluxo e alegando que a resposta está em algum lugar), consistente (por exemplo, o x
acima deve sempre ser o mesmo valor) e humano. legível ; por exemplo, uma sequência ou uma matriz de caracteres. Você pode assumir que a entrada é uma sequência (ou matriz) de caracteres ASCII imprimíveis; não há necessidade de lidar com todo o conjunto Unicode.
Página de código personalizada ou ascii não imprimível no seu código?
Se o seu idioma usa uma página de código personalizada (Jelly, APL, etc), você deve levar isso em conta (para que um programa €æÆ
exiba [1, x, 2]
uma entrada €%æ
). Usar apenas caracteres não ASCII para gerar -1
sempre (uma vez que a entrada é somente ASCII) não é uma solução válida. Você pode assumir que seu programa aceita nativamente sua página de códigos personalizada, ou seja, se seu programa possui um método de converter um caractere A
em um número inteiro 65
(codificação ASCII), você pode assumir que agora ele converte o 65º caractere em sua página de código em 65
.
Inspirado no seguinte desafio: Consciência posicional
01030708070
,?Respostas:
Python2, 55 bytes
Inicia com uma sequência que contém todos os caracteres usados no código e, em seguida, procura nos índices
fonte
raw_input
.Linguagem , 56.623 bytes
Abaixo está um hexdump dos primeiros 256 bytes. Os bytes restantes podem ser escolhidos arbitrariamente.
A saída é em bytes, como é habitual para brainfuck et al.
Como funciona
Este é um programa simples para gatos, especificamente
,[.,]
.O código fonte contém todos os valores de 256 bytes em ordem, portanto, o índice de cada byte corresponde ao seu valor.
fonte
+[,.]
uma pontuação muito melhor?Linguagem , 1.22e7 bytes
Consiste em
12263215
NUL
bytes (Hex 0x00) .Emite a
NUL
para cada caractere que não aparece na fonte.Isso se traduz no seguinte programa Brainfuck
E com um colapso ...
Isso apenas mostra o poder absoluto do Lenguage como uma linguagem de golfe. Tema isso.
fonte
,[>.,]
seria mais curto?Geléia ,
109 bytesExperimente online!
Como funciona
fonte
pbrain,
402356340338329 bytesUfa, @KritixiLithos e eu estamos trabalhando nisso há 4 dias.
Imprime
0x00
se o char de entrada não estiver no programa, o índice do char (baseado em 1) em hexadecimal. Experimente online!Explicação:
Esta última função é o loop. Ele percorre os caracteres selecionados
[(:<>)+,-.]
em ordem e compara a entrada com o caractere. Agora vou dar uma explicação mais profunda sobre como esse loop funciona.A pilha fica assim em um loop. O loop será executado até que
12-n
seja0
. Então nós temos o contador que én+2
. Esse contador também é o número da função para cada um dos caracteres selecionados. Entãon=0
, quando ,n+2
será correspondente ao primeiro caractere, ie[
.>[->+>+<<]>>[-<<+>>]<:
faz exatamente isso, converte o contador para o personagem.Quando o ponteiro estiver onde está o cursor, compararemos o caractere produzido a partir da variável do contador com a entrada, preservando-o.
Z
é0
quando o caractere é igual à entrada ou algum outro número inteiro diferente de zero.Agora, criamos uma declaração if para verificar essa igualdade.
Se
Z
for diferente de zero, ou seja, o caractere e a entrada não são os mesmos, incrementamos o próximo local de memória.Depois que saímos dessa instrução if, diminuímos o próximo local de memória. Agora, este local de memória contém
!Z
. Finalmente, usando isso, produzimos o índice do caractere se ele corresponder à entrada e, em seguida, saímos do loop forçosamente. Senão, continuamos com o loop até que ele termine ou seja encontrada uma correspondência.fonte
CJam ,
1412 bytesUsa indexação baseada em 0 e
-1
para caracteres que não aparecem na fonte.Experimente online!
fonte
Javascript, 34 bytes
Ele recebe a entrada como matriz de seqüências de caracteres,
x
é-1
(indexação baseada em 0).fonte
s='s=%s;print s%%s';print s%s
em Python. Não inclui of=
, por isso está tudo bem #a
deve ser uma string. Não hámap
função para seqüências de caracteres.C,
153152143 bytesExperimente online!
fonte
Ruby,
41 88 86 71 69 67 6156 bytesThx Lynn por matar 6 bytes
fonte
a='p$<.chrsm{| #index};"';p$<.chars.map{|c|"a='#{a}".index c}
também deve funcionar, recebendo informações do STDIN.> <> (Peixe) 70 bytes
Provavelmente o forro mais longo que já fiz.
Ele imprimirá a saída para cada caractere encontrado em uma linha separada (0 indexado).
Um caractere não encontrado sempre imprimirá o comprimento do código + 1 (eu poderia alterar isso se não for considerado bom em seu estado atual), portanto, nesse caso, 71 sempre serão os caracteres "Não encontrados".
Vou dar uma explicação assim que tiver tempo.
Alguns casos de teste;
## K = 1 \ n1 \ n71
# "# = 1 \ n69 \ n1
Experimente online
> <> idioma
fonte
Perl 6 ,
5052 bytesTradução da solução Ruby da GB e da solução Python da Rod .
Um lambda que insere uma lista de caracteres e gera uma lista de índices baseados em zero (
Nil
para caracteres inexistentes).EDIT: Corrigido um descuido - necessário adicionar 2 bytes :(
fonte
Clojure,
435648 bytesEdit: Porra, eu esqueci
2
! Aumentado de 43 para 56.Editar 2: atualizado o código de exemplo abaixo deste texto, atualizado o número de bytes para não incluir
(def f ...
), mas apenas a parte do mapa de hash.O mapa de hash consiste apenas de caracteres
01234{\\}
e codifica suas localizações. No Clojure, os hash-maps podem ser funções usadas, como mostrado neste exemplo completo (f
pode ser substituído pela definição do hash-map):Eu acho que isso conta :)
fonte
JavaScript, 39 bytes
fonte
[...s]
por favor?Pitão, 11 bytes
Um programa que recebe entrada de a
"quoted string"
, com quaisquer aspas na cadeia de caracteres escapada com uma precedente\
, e imprime uma lista de valores indexados a zero com-1
caracteres que não estão na origem.Experimente online!
Como funciona
fonte
05AB1E , 19 bytes
Experimente online!
Isso gera -1 no lugar de caracteres ausentes.
Luis Mendo postou isso (um pouco modificado) no Golf you a quine for great good! , adicionar "s" e "k" a esse quine também resulta nessa resposta. No entanto, não posso me responsabilizar por essa modificação trivial ... Luis, você pode me enviar uma mensagem se quiser repassar isso e eu vou excluí-lo. Se você quiser ver meu progresso antes de encontrar essa pergunta, veja as edições. Bem ... Ele era significativamente como o seu em um ponto.
fonte
SmileBASIC,
128968886 bytesUma coisa importante a entender é que esse não é realmente um desafio simples. Você só precisa do código fonte até o último caractere exclusivo .
Coloquei pelo menos 1 de cada caractere no início do código:
?R<3+CD,4LINPUT(S$)WHILE"
portanto, só tenho que armazenar uma cópia do programa até a primeira aspa.fonte
Python,
9088 bytesCaso de teste:
fonte
Empilhados , não concorrentes, 36 bytes
Quando eu disse que essa linguagem ainda estava em desenvolvimento, eu quis dizer isso. Aparentemente,
prompt
costumava consumir toda a pilha. É por isso que não posso ter coisas boas. Experimente aqui!Essa é a estrutura padrão do quine. Basicamente,
:
duplica a função[...]
na pilha, que é então executada com!
. Em seguida, o interior de é[...]
executado com a função na pilha. Ele o converte em uma string, anexa:!
(o próprio programa) e, em seguida, recebe uma entrada de stringprompt
.CS
converte-o em uma cadeia de caracteres. Uma cadeia de caracteres é um pouco diferente de uma cadeia regular, pois possui operadores vetorizados sobre ela. Nesse caso,index
vetoriza sobre a entrada, produzindo cada índice da string de entrada no programa, sendo finalmenteout
colocado.Para entrada
Hello, World!
, isso fornece:Tentei usar o sem quine (ou seja, codificando a sequência de caracteres que aparece na sua fonte), mas há apenas um tipo de aspas no Stacked, a saber
'
, então seria mais demorado fazer esse tipo de solução.fonte
Casca , 12 bytes
Experimente online!
Explicação
A explicação está usando
¨
para delimitar seqüências de caracteres e'
delimitar caracteres:fonte
Java 8,
172122 bytesIndexado com 0 e fornece
-1
caracteres que não fazem parte do código-fonte.Explicação:
Experimente online.
fonte
J ,
3122 bytesExperimente online!
1 indexado, 0 para caracteres que não estão presentes no código.
''
significa uma única citação. Encontre cada caractere na string11|1+i.~&'
, adicione 1, módulo 11.fonte
> <> , 31 bytes
Experimente online!
A saída é indexada em 1,
32
significando que o caractere não está no código.fonte
Perl 5 com
-pl
, 43 bytesUsa entrada separada por nova linha e imprime
-1
para caracteres que não aparecem no programa.Experimente online!
fonte
Stax , 19 bytes
Execute e depure
Gera índice baseado em 0, um caractere por linha. Acontece que é mais curto do que modificar o
"34bL"34bL
quine que escrevi anteriormente.fonte