Imprimir o enésimo número não palíndrico

22

Um número palíndrico (caso você não saiba) é um número que lê o mesmo para trás e para a frente (exemplo, 11). Os primeiros números 15 não palindrómicos são: 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 24, 25, 26. Este é o A029742 . Eu preciso constantemente desses números, mas meu bloco de anotações é muito pequeno, portanto seu código deve ser o mais curto possível.

Regras

  • Cada envio deve ser um programa ou função completo (por exemplo, em C, você não pode simplesmente definir uma função sem cabeçalhos, mas pode definir uma função COM os cabeçalhos necessários).
  • Se possível, forneça um link para um site onde seu programa possa ser testado.
  • Seu programa não deve escrever nada para STDERR.
  • Você pode receber informações como argumento ou de STDIN(ou a alternativa mais próxima em seu idioma).
  • Os programas são pontuados de acordo com os bytes . O conjunto de caracteres usual é UTF-8; se você estiver usando outro, especifique.
  • As brechas padrão são proibidas.

Casos de teste

1
==> 10

-----

5
==> 15

-----

12
==> 23

Pontuação

Isso é , então o mínimo de bytes vence.

Submissões

Para garantir que sua resposta seja exibida, inicie-a com um título, usando o seguinte modelo de remarcação:

# Language Name, N bytes

onde Nestá o tamanho do seu envio. Se você melhorar sua pontuação, poderá manter as pontuações antigas no título, identificando-as. Por exemplo:

# Ruby, <s>104</s> <s>101</s> 96 bytes

Se você quiser incluir vários números no cabeçalho (por exemplo, porque sua pontuação é a soma de dois arquivos ou você deseja listar as penalidades do sinalizador de intérpretes separadamente), verifique se a pontuação real é o último número no cabeçalho:

# Perl, 43 + 2 (-p flag) = 45 bytes

Você também pode transformar o nome do idioma em um link que será exibido no snippet da tabela de classificação:

# [><>](http://esolangs.org/wiki/Fish), 121 bytes

Entre os melhores

Aqui está um snippet de pilha para gerar uma classificação regular e uma visão geral dos vencedores por idioma.

George Gibson
fonte
1
Algum caso de teste?
Freira vazando
@KennyLau eu vou fazer um pouco.
George Gibson
Podemos usar um índice baseado em 0, então 15seria o quarto número?
nimi
@nimi Ou, mas especifique se o seu é indexado em 0.
George Gibson
@ nimi Desculpe, foi isso que eu quis dizer, editei para esclarecer.
George Gibson

Respostas:

9

Pitão, 7 bytes

e.f!_I`

Suíte de teste

Explicação:

e.f!_I`
e.f!_I`ZQ    Implicit variable introduction.
 .f     Q    Find the first Q numbers whether the following is truthy,
             starting at 1, where Q is the input.
      `Z     Convert the number to a string.
     _I      Check if it's the same when reversed.
    !        Logical not.
 e           Return the last element of the list.
isaacg
fonte
5

Haskell, 38 bytes

([x|x<-[1..],(/=)<*>reverse$show x]!!)

Usa índice baseado em 0. ([x|x<-[1..],(/=)<*>reverse$show x]!!) 11-> 23.

O teste para manter um número é (/=)<*>reverse$show xtraduzido (show x) /= (reverse (show x)), ou seja, verifique se a representação em cadeia do número não é igual ao reverso da representação em cadeia.

nimi
fonte
4

Braquilog , 14 11 bytes

;0{<≜.↔¬}ⁱ⁽

-3 bytes de tanques para Fatalizar

Explicação

; {      }ⁱ⁽        --  Find the nth number
 0                  --      (starting with 0)
   <                --      which is bigger then the previous one
    ≜               --      make explicit (otherwise it fucks up)
      .             --      which is the output
       ↔            --      and if reversed
        ¬           --      is not the output

Experimente online!

Kroppeb
fonte
;İ{ℕ≜.↔¬}ᶠ⁽té 2 bytes mais curto.
Fatalize 22/08/19
Na verdade, o uso de iterate1 byte é menor:;0{<≜.↔¬}ⁱ⁽
Fatalize 22/08
3

Geléia, 9 bytes

1 bytes graças a @ Sp3000 .

ṚḌ_
0dz#Ṫ

Experimente online!

Suíte de teste.

Explicação

DUḌ_   Helper link. Check if x is not palindrome.

D      Convert to decimal.
 U     Reverse.
  Ḍ    Convert back to integer.
   _   Subtract x from the result above.
       For 23, this will yield 32-23 = 9.
       Only yield 0 (falsy) if x is palindrome.
       If x is not a palindrome,
       it will return a truthy number.


0dz#Ṫ  Main link.

0      Start from 0.
   #   Find the first         numbers:
  ³                   <input>
 Ç         where the above link returns a truthy number.
    Ṫ  Yield the last of the matches.
Freira Furada
fonte
1
Curiosidade: try123Ṛ
Sp3000
@ Sp3000 Muito interessante mesmo!
Freira vazando
Você pode largar o ³ . Se você inserir a entrada no STDIN, poderá soltá-la 0também. (Na última versão do Jelly, ṚḌ_ø#Ṫfunciona também, mas é mais recente que este desafio.)
Dennis
Não funciona para mim ...
Leaky Nun
7 bytes , mas pode usar mais novos recursos
caird coinheringaahing
3

05AB1E , 8 bytes

Código:

µNÂÂQ>i¼

Usa a codificação CP-1252 . Experimente online! .

Adnan
fonte
Provavelmente, isso tem algo a ver com a versão antiga do 05AB1E, mas por curiosidade: por que o duplo se bifurcou Â? PS para qualquer pessoa que esteja lendo isso: agora pode ter 5 bytes µNÂʽ.
Kevin Cruijssen
@KevinCruijssen: Provavelmente devido a nenhuma saída implícita de N (apenas o topo da pilha). Além disso, agora pode ter 4 bytes, pois ½também está implícito.
Emigna
@Emigna Ah, esqueci completamente de ½estar implícita, apesar de eu ter mencionado isso em uma dica que escrevi para mim ..>. <Pensei que o ¼(aumento counter_variable por 1) estivesse implícito no loop while µpor um momento, mas é de fato o ½( se o topo da pilha for 1: aumente counter_variable em 1).
Kevin Cruijssen
3

Clojure, 62 bytes

#(nth(for[i(range):when(not=(seq(str i))(reverse(str i)))]i)%)

Indexado a 0. Gere um intervalo infinitamente lento de números não palindrômicos usando a compreensão de lista ei um. Veja on-line: https://ideone.com/54wXI3

cliffroot
fonte
2

PowerShell v2 +, 65 bytes

for(;$j-lt$args[0]){if(++$i-ne-join"$i"["$i".length..0]){$j++}}$i

Faz um loop através de números de 0(valor implícito para não inicializado $i) até encontrarmos $args[0]muitas correspondências de entrada e, em seguida, produz a última. Observe que não inicializamos o loop, portanto, $j=0está implícito.

A cada iteração, pré-incrementamos $ie verificamos se não é igual a $iinvertida. Nesse caso, significa que encontramos um não-palíndromo, então incremente $j. O loop continua quantas vezes for necessário.

Exemplos

PS C:\Tools\Scripts\golfing> .\print-nth-palindromic-number.ps1 100
120

PS C:\Tools\Scripts\golfing> .\print-nth-palindromic-number.ps1 5
15

PS C:\Tools\Scripts\golfing> .\print-nth-palindromic-number.ps1 55
70

PS C:\Tools\Scripts\golfing> .\print-nth-palindromic-number.ps1 212
245
AdmBorkBork
fonte
2

Python 2, 60 bytes

f=lambda n,i=0,j=1:j>n and i-1or f(n,i+1,j+(`i`!=`i`[::-1]))

Uma função indexada que recebe entrada de n argumento via e retorna o nnúmero não palindrômico.

Como funciona

Esta é uma pesquisa recursiva exaustiva, que testa consecutivamente números inteiros ino intervalo [1,∞)até que nnúmeros não palindrômicos sejam encontrados; já que ié pré-incrementado,i-1 é retornado. Testar se um número é palíndrico é realizado convertendo-se em uma sequência, revertendo e verificando se as seqüências originais e as revertidas são iguais.

O código é logicamente equivalente a:

def f(n,test=0,count=1):
    if count>n:
        return test
    elif str(test)!=reversed(str(test)):
        return f(n,test+1,count+1)
    else:
        return f(n,test+1,count)

que em si é essencialmente:

def f(n):
    test=0
    count=1
    while count<=n:
        if str(test)!=reversed(str(test)):
            count+=1
        test+=1
    return test-1

Experimente no Ideone

TheBikingViking
fonte
2

Clojure, 62 bytes

#(nth(filter(fn[i](not=(seq i)(reverse i)))(map str(range)))%)

Uma abordagem bem diferente da outra resposta, mas com o mesmo comprimento.

NikoNyrh
fonte
2

R , 133 117 93 76 bytes

-16 bytes graças ao JayCe. -41 bytes graças a Giuseppe.

x=scan();while({F=F+any((D=T%/%10^(1:nchar(T)-1)%%10)!=rev(D));F<=x})T=T+1;T

Experimente online!

Robert S.
fonte
1
Você pode abusar de alguns bytes F, etc .: TIO . Além disso, por que você está restringindo o loop (0:97)+10?
Jayce
1
use a dica nº 3 da minha resposta Tips for Golfing in R para extrair os dígitos; você pode fazer all(D==rev(D))onde Destá um vetor de dígitos. Acredito que um whileloop será mais curto e, como @JayCe pergunta, por que você está verificando apenas números entre 10 e 107?
Giuseppe
@ Giuseppe Atualizado com suas recomendações. Ainda um pouco confuso sobre como implementar um whileloop e ao mesmo tempo salvar bytes.
Robert S.
1
@RobertS. se você tiver alguma dúvida, sinta-se à vontade para me enviar um ping na sala de chat do R !
Giuseppe
2

Quarto (gforth) , 103 99 bytes

: f 9 swap 0 do begin 1+ dup 0 over begin 10 /mod >r swap 10 * + r> ?dup 0= until = 0= until loop ;

Experimente online!

Explicação

Loop n vezes, cada iteração encontra o próximo número não palindrômico, incrementando um contador em 1 até que o número não seja igual a si mesmo invertido

Código Ungolfed

Normalmente eu não "desdobrava" o código, mas como esse código é um pouco confuso, achei que ajudaria

: reverse ( s -- s )
    0 swap 
    begin 
        10 /mod
        >r swap
        10 * +
        r> ?dup 0=
    until 
; 

: f ( s -- s )
    9 swap 0
    0
    do
        begin
            1+ dup dup
            reverse =
        0= until
    loop
;

Código Explicação

: f                \ start a new word definition
  9                \ start at 9, since all positive ints < 10 are palindromic
  swap 0           \ set up loop parameters from 0 to n-1
  do               \ start a counted loop       
    begin          \ start an indefinite loop
      1+ dup       \ increment counter and place a copy on the stack
      ( Reverse )
      0 over       \ add 0 to the stack (as a buffer) and copy the top counter above it
      begin        \ start another indefinite loop
        10 /mod    \ get the quotient and remainder of dividing the number by 10
        >r         \ store the quotient on the return stack
        swap 10 *  \ multiply the current buffer by 10
        +          \ add the remainder to the buffer
        r>         \ grab the quotient from the return stack
        ?dup       \ duplicate if not equal to 0
        0=         \ check if equal to 0
      until        \ end inner indefinite loop if quotient is 0
      ( End Reverse )
      = 0=         \ check if counter =/= reverse-counter            
    until          \ end the outer indefinite loop if counter =/= reverse-counter
  loop             \ end the counted loop
;                  \ end the word definition 
reffu
fonte
1

Perl 6 , 29 bytes

{grep({$_!= .flip},^Inf)[$_]}

(usa índice baseado em 0)

{         # The $_ is implied above
  grep(   # V
    { $_ != $_.flip }, # only the non-palindromic elements of
    ^Inf               # an Infinite list ( 0,1,2,3 ...^ Inf )
  )[ $_ ]              # grab the value at the given index
}

Uso:

my &non-palindrome = {grep({$_!= .flip},^Inf)[$_]}

say non-palindrome 1  - 1; # 10
say non-palindrome 5  - 1; # 15
say non-palindrome 12 - 1; # 23

# this also works:
say non-palindrome 0..20;
# (10 12 13 14 15 16 17 18 19 20 21 23 24 25 26 27 28 29 30 31 32)
Brad Gilbert b2gills
fonte
1

Na verdade, 17 bytes

;τR9+;`$;R=Y`M@░E

Experimente online!

Os valores são indexados em 1. Isso pode ser facilmente alterado para indexado 0, substituindo o primeiro Rporr . Mas, Ré o que eu digitei inicialmente, então é com isso que eu vou.

Os números não palíndricos satisfazem a(n) ≈ n + 10, assim 2n+9como um limite superior suficiente.

Explicação:

;τR9+;`$;R=Y`M@░E
;τ9+R;             push n, range(1,(2*n)+10)
      `$;R=Y`M@░   take values that are not palindromic
                E  take nth element
Mego
fonte
1

JavaScript (ES6), 54 bytes

Usa indexação baseada em 1. Só funciona até o número 7624.

d=(i,a=0)=>i?d(i-=++a!=[...''+a].reverse().join``,a):a

Uso

d=(i,a=0)=>i?d(i-=++a!=[...''+a].reverse().join``,a):a
d(1)
10
d(123)
146
d(7624)
7800
d(7625)
// Uncaught RangeError: Maximum call stack size exceeded

JavaScript (ES6), 59 bytes

Não usa recursão e, portanto, pode lidar com entradas muito maiores.

i=>eval("for(a=9;i-=++a!=[...`${a}`].reverse().join``;);a")

Uso

(i=>eval("for(a=9;i-=++a!=[...`${a}`].reverse().join``;);a"))(1)
10
(i=>eval("for(a=9;i-=++a!=[...`${a}`].reverse().join``;);a"))(7625)
7801
(i=>eval("for(a=9;i-=++a!=[...`${a}`].reverse().join``;);a"))(123456)
124579
Dom Hastings
fonte
1

Javascript (usando biblioteca externa) (97 bytes)

n=>_.Sequence(n,i=>{i=_.From(i+"");if(!i.Reverse().SequenceEqual(i)){return i.Write("")}}).Last()

Link para lib: https://github.com/mvegh1/Enumerable

Explicação do código: A biblioteca possui um método estático chamado Sequence, onde o primeiro parâmetro define quantos elementos a sequência garantirá criar, e o segundo parâmetro é um predicado que aceita o valor atual da iteração, "i". O predicado converte o número inteiro em uma sequência, que é convertida em uma matriz de caracteres chamando _.From. A matriz de caracteres é comparada com a reversão da matriz de caracteres e, se elas não forem iguais, a matriz de caracteres será juntada novamente em uma string e retornada. Caso contrário, nada será retornado (ou seja, o resultado é indefinido, que a biblioteca sempre ignorará). Finalmente, o último elemento da sequência, ou seja, o enésimo elemento é retornado

insira a descrição da imagem aqui

applejacks01
fonte
1

C, 84 bytes

A função f(n)recebe um número inteiro ne retorna n-thum número não palíndrico (baseado em 1).

g(n,r){return n?g(n/10,r*10+n%10):r;}s;f(n){for(s=9;n--;g(++s,0)==s&&s++);return s;}

Teste em Ideone!

É um código bastante trivial, portanto, provavelmente há espaço para melhorias.

Jasmes
fonte
Sugerir em n=n?g(n/10,r*10+n%10):r;}s;f(n){for(s=9;n--;g(++s,0)-s||s++);n=s;vez dereturn n?g(n/10,r*10+n%10):r;}s;f(n){for(s=9;n--;g(++s,0)==s&&s++);return s;
ceilingcat 2/01
1

Ruby, 54 bytes

Essa função é indexada em 1 e é parcialmente baseada na resposta Javascript de Dom Hastings . Eu acho que há uma maneira de jogar isso melhor, especialmente com essa última condição ternária. Além disso, atualmente, essa função retorna uma string, que pode precisar ser editada posteriormente. Todas as sugestões de golfe são bem-vindas.

f=->x,y=?9{x<1?y:(y.next!.reverse!=y)?f[x-1,y]:f[x,y]}

Ungolfed:

def f(x, y="9")
 if x<1
  return y
 else
  y = y.next
  if y.reverse != y
   return f(x-1, y)
  else
   return f(x, y)
  end
 end
end
Sherlock9
fonte
1

C ++ (GCC), 148 bytes

É baseado em 1 e o algoritmo é realmente ingênuo

#import <iostream>
using namespace std;int n,i=1;string s;main(){cin>>n;while(s=to_string(i+1),(n+=equal(begin(s),end(s),s.rbegin()))-i++);cout<<i;}
FoxyZ
fonte
@enedil sobre sua edição: #importé uma extensão do compilador do gcc. Ele foi descontinuado, mas isso realmente não importa aqui
ovs 08/08
1

APL NARS 35 caracteres

r←v a;c
r←c←0
A:r+←1⋄c+←r≠⍎⌽⍕r⋄→A×⍳c<a

é a função v; "⍎⌽⍕" r traduz o número r na string, inverte a string, traduz da string para o número. Teste e funções de ajuda:

  ⍝ return the one string for the basic types ('Char', 'Int', 'Float', 'Complex or Quaternion or Oction')
  ⍝ or one string for composite types ('Tensor 3' 'Tensor 4' etc 'Matrix', 'List', 'String')
  ⍝ follow the example in: /codegolf//a/39745
  type←{v←⍴⍴⍵⋄v>2:'Tensor ',⍕v⋄v=2:'Matrix'⋄(v=1)∧''≡0↑⍵:'String'⋄''≡0↑⍵:'Char'⋄v=1:'List'⋄⍵≢+⍵:'Complex or Quaternion or Oction'⋄⍵=⌈⍵:'Int'⋄'Float'}
  h←{'Int'≢type ⍵:¯1⋄(⍵<1)∨⍵>2e5:¯1⋄v ⍵} 
  h 1
10
  h 1.32
¯1
  h 7878
8057
  h¨3 5 12
13 15 23 
  h 6 7 8
¯1
  h '123'
¯1
  h '1'
¯1
  h 1.0
10
  h 1.0003
¯1
  h ¯2
¯1
  h 0
¯1
  h 200000
201200
  h 200001
¯1
RosLuP
fonte
1

Casca , 6 bytes

Yay for :)

!fS≠↔N

Experimente online!

Explicação

 f   N  -- filter the naturals by:
  S≠    --   is it not equal to..
    ↔   --   ..itself reversed
!       -- index into that list
ბიმო
fonte
1

C # 7, 89 bytes

n=>{int i=9;for(;n-->0;)if(Enumerable.SequenceEqual(++i+"",(""+i).Reverse()))i++;return i;}

1 tentativa indexada de Repl.It

n=>
  int i = 9;                                  | Start at 9. Iterate exactly n times. Assume n >= 1      
  for(;n-->0;)                                | Iterate n times
  if(EnumerableSequenceEqual(                 | Compare two sequences
  ++i+"",(""+i).Reverse())                    | Generate the forward and backward strings, which behave like char sequences for Linq
  i++                                         | If the sequences are equal, the number is a palindrome. Increment i to skip
  return i;                                   | Return the number after the for loop exits

Eu não acho que isso use nenhum recurso de linguagem do c # 7, mas eu coloquei lá, já que foi contra isso que testei

ryzngard
fonte
Bem-vindo ao PPCG.
22618 Jonathan Frech
1

Japt , 14 12 11 10 9 bytes

Indexado 1

@UµX¦sw}f

Tente

Shaggy
fonte
1

Java 8, 117 95 94 bytes

n->{int r=10;for(;n-->0;)if((++r+"").contains(new StringBuffer(r+"").reverse()))r++;return r;}

Indexado a 0

Explicação:

Experimente aqui.

n->{             // Method with integer as both parameter and return-type
  int r=10;      //  Result-integer, starting at 10
  for(;n-->0;)   //  Loop an amount of times equal to the input
    if((++r+"")  //   First raise `r` by 1, and then check if `r`
               .contains(new StringBuffer(r+"").reverse()))
                 //   is the same as `r` reversed (and thus a palindrome)
      r++;       //    And if it is: raise `r` by 1 again
  return r;}     //  Return result-integer
Kevin Cruijssen
fonte
@ceilingcat Isso dá resultados incorretos .. new StringBuffer(int)não é igual a new StringBuffer(String), nem é em String.equals(StringBuffer)vez de String.equals(String).. Esta é uma resposta antiga, no entanto, para que eu possa usar (++r+"").contains(new StringBuffer(r+"").reverse())para salvar 1 byte.
Kevin Cruijssen 03/01
-2

TCC, 11 bytes

?>!~<>;i;'T

Experimente online!

            | Printing is implicit
?>          | Find n-th number for which the following is "T":
  !~        | If not equal...
    <>;     | reverse. No value specified, so input is assumed.
       i;   | Input, since double semicolons are ignored
         'T | ... print string "T"
brianush1
fonte
1
Isso não funciona com o tcc.luaarquivo com carimbo de data / hora 16-07-26 12:46 UTC, que não tinha o ?>comando. Se sua resposta exigir uma versão do idioma que pós-desafio, você deve rotulá-la como não concorrente no cabeçalho. Vou remover meu voto negativo quando você o fizer.
Dennis
@Dennis Eu me deparei com este post de dois anos e queria mencionar que agora as respostas não devem mais ser marcadas como não concorrentes quando o idioma deles pós o desafio.
22418 Jonathan Frech