Anexar, Anexar-Sequência


14

Tarefa

O prefpend, append-Sequence é definido recursivamente, como este

  • a (1) = 1
  • a (n) = a (n-1) .n, se n for par
  • a (n) = na (n-1), se n for ímpar

onde o . representa uma concatenação inteira.

Portanto, os primeiros termos são: 1,12,312,3124,53124,531246,7531246,...Este é A053064 .

Sua tarefa é, dado um inteiro a> 0 para retornar n , tais que o n º elemento na preceder, acrescentar-Sequence é igual a um e se existe tal n existe retorno 0, um número negativo ou erro fora etc.

Regras

  • A entrada pode ser tomada como um número inteiro, sequência, lista de caracteres / dígitos, etc.
  • A saída pode ser impressa em STDOUT ou retornada (número inteiro, sequência etc. está correto)
  • Na entrada inválida e, no caso de não existir esse n, seu programa pode fazer qualquer coisa, exceto retornar um número inteiro positivo (por exemplo: loop para sempre, retornar 0 etc.)
  • Você pode optar por usar a indexação 0, mas a saída, caso não exista n, não pode ser 0

Casos de teste

1 -> 1
12 -> 2
21 -> 0
123 -> 0
312 -> 3
213 -> 0
211917151311975312468101214161820 -> 21
2119171513119753102468101214161820 -> 0
333129272523211917151311975312468101214161820222426283031 -> 0
999795939189878583817977757371696765636159575553514947454341393735333129272523211917151311975312468101214161820222426283032343638404244464850525456586062646668707274767880828486889092949698100 -> 100

Mais formal: a(n-1)*(int(log(n))+1)+ne n*(int(log(n))+1)+a(n-1)?
Mr. Xcoder

1
@ Mr.Xcoder eu chamaria que menos formais: P
post rock Garf Hunter

@ JonathanAllan Isso já está em questão há ~ 10 minutos.
Mr. Xcoder

2
Eu sugiro permitir erros para entradas inválidas.
Kritixi Lithos

Eu sugiro permitir um comportamento indefinido para entradas inválidas.
Mr. Xcoder

Respostas:


6

JavaScript (ES6), 40 bytes

Recebe a entrada como uma sequência. Lança um erro de recursão se nenhum índice for encontrado.

f=(n,s=k='1')=>n==s?k:f(n,++k&1?k+s:s+k)

Demo


Eu acho que você pode salvar um byte com esta: f=(n,s=k='1')=>n-s?f(n,++k&1?k+s:s+k):k
Rick Hitchcock

@ RickHitchcock Infelizmente, isso forçaria comparações de números e introduziria falsos positivos em entradas grandes causadas pela perda de precisão.
Arnauld

Peguei vocês. Ele funciona nos casos de teste, mas não tinha certeza de como lidaria com outras situações.
21717 Rick Stallone

6

C # (.NET Core) , 83, 80, 60 59 bytes

n=>{int i=0;for(var t="";t!=n;)t=++i%2<1?t+i:i+t;return i;}

Experimente online!

Leva a entrada como uma string para uma função lambda. 1 indexado. Retorna o índice do valor para truthy ou infinitamente loops para um "falsey"


6

Python 2 , 63 bytes

-1 byte graças a @EriktheOutgolfer .

f=lambda x,i='1',j=2:i!=`x`and f(x,[i+`j`,`j`+i][j%2],j+1)or~-j

Experimente online!

Python 2 , 64 bytes

-18 bytes graças a @officialaimm , porque eu não percebi que o erro era permitido!

x,i,j=input(),'1',1
while i!=x:j+=1;i=[i+`j`,`j`+i][j%2]
print j

Experimente online!

Python 2 , 82 bytes (não executa um loop para sempre)

Este retorna 0para entradas inválidas.

def f(n,t="",i=1):
 while len(t)<len(n):t=[t+`i`,`i`+t][i%2];i+=1
 print(n==t)*~-i

Experimente online!


2
Ninja'd: D 65 bytes
officialaimm

@officialaimm Muito obrigado! Eu não notei que o erro / loop para sempre foi permitido.
Mr. Xcoder

Salve um byte com uma lambda:f=lambda x,i='1',j=2:i!=`x`and f(x,[i+`j`,`j`+i][j%2],j+1)or~-j
Erik the Outgolfer

@EriktheOutgolfer Espere, gera erro de recursão para tudo, embora eu tenha definido sys.setrecursionlimit(). Você pode fornecer um tio?
Mr. Xcoder

@ Mr.Xcoder Isso gera um erro x=1? Ou x=12? Eu pensei que apenas jogou um erro para pelo menos x=151311975312468101214ou algo assim.
Erik the Outgolfer

3

Gelatina , 12 bytes

Rs2ZU1¦ẎVµ€i

Experimente online!

Explicação:

Rs2ZU1¦ẎVµ€i
         µ€  Eval this link for each (automatic [1..n] range)
R             Range
 s2           Split in pieces of: 2
   Z          Zip
    U1¦       Only keep index: 1 of: Vectorized reverse
       Ẏ      Flatten 1-deep
        V     Concatenate string versions and eval
           i Find index of y in x (y = implicit input)

3

05AB1E , 14 bytes

$vDNÌNFs}«})Ik

Experimente online! ou como um conjunto de testes

Explicação

Indexado a 0 .
Retorna -1 se a entrada não estiver na sequência.

$                 # push 1 and input
 v                # for each y,N (element, index) in input do:
  D               # duplicate top of stack
   NÌ             # push N+2
     NF }         # N times do:
       s          # swap the top 2 elements on the stack
         «        # concatenate the top 2 elements on the stack
          })      # end loop and wrap in a list
            Ik    # get the index of the input in this list

Haha, essa é basicamente a minha solução com a coisa gremovida e a anexada / anexada abreviada. Excluirei minha resposta
Okx

@ Ok: Ah, sim, vejo que você jogou a sua quase exatamente isso apenas alguns minutos após o meu post. Grandes mentes;)
Emigna

2

R , 73 bytes

p=paste0;n=scan(,'');l='';while(l!=n){F=F+1;l="if"(F%%2,p(F,l),p(l,F))};F

Lê de stdin e retorna o valor do índice (impresso implicitamente). Loops infinitos quando o valor não está na sequência. Fé por padrão FALSEconvertido para 0quando usado em aritmética.

Experimente online!


1

Mathematica, 135 bytes

s=t={};x=1;While[x<5!,{s~AppendTo~#&,s~PrependTo~#&}[[x~Mod~2+1]]@x;AppendTo[t,FromDigits@Flatten[IntegerDigits/@s]];x++];t~Position~#&

1

Geléia ,  19 18  15 bytes

+ḂḶṚm2;RḤ$ṁµ€Vi

Um link monádico recebendo e retornando números inteiros.

Experimente online! (muito lento - leva aproximadamente 50 anos no TIO apenas para confirmar que3124está no índice4)

Para uma versão muito mais rápida, use o 18 byter anterior (apenas verifica o comprimento da entrada, o que é suficiente).

Quão?

+ḂḶṚm2;RḤ$ṁµ€Vi - Link: number, v
           µ€   - perform the monadic link to the left for €ach k in [1,2,3,...v]
                -                 (v can be big, lots of k values makes it slow!)
 Ḃ              -   modulo k by 2  = 1 if odd 0 if even
+               -   add to k = k+isOdd(k)
  Ḷ             -   lowered range = [0,1,2,...,k+isOdd(k)]
   Ṛ            -   reverse = [k+isOdd(k),...,2,1,0])
    m2          -   modulo slice by 2 = [k+isOdd(k),k+isOdd(k)-2,...,3,1]
         $      - last two links as a monad:
       R        -   range(k) = [1,2,3,...,k]
        Ḥ       -   double = [2,4,6,...,2k]
     ;          - concatenate = [k+isOdd(k),k+isOdd(k)-2,...,3,1,2,4,6,...,2k]
         ṁ      - mould like range(k) = [k+isOdd(k),k+isOdd(k)-2,...,3,1,2,4,6,...,k-isOdd(k)]
                -   (this is a list of the integers to be concatenated for index k)
             V  - evaluate as Jelly code (yields a list of the concatenated integers)
              i - first index of v in that (or 0 if not found)

Quanto tempo levaria para calcular 211917151311975312468101214161820?
Okx 07/08/19

Um longo, muito tempo: p
Jonathan Allan

Sim, mas quanto tempo?
Okx 07/08/19

Bem, parece que é a ordem v ao quadrado onde v é o número inteiro de entrada.
Jonathan Allan

@JonathanAllan Tecnicamente, você chama isso : p
Erik o Outgolfer

1

Swift 4 , 92 bytes

Isso faz loop infinitamente para casos inválidos, então não os incluí no link de teste.

func f(x:String){var i="1",j=1;while i != x{j+=1;i=[i+String(j),String(j)+i][j%2]};print(j)}

Suíte de teste.

Divertidamente, é mais longo com um fechamento:

var f:(String)->Int={var i="1",j=1;while i != $0{j+=1;i=[i+String(j),String(j)+i][j%2]};return j}

Suíte de teste.




Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.