Cetak nomor non-palindromik ke-N


22

Angka palindrom (jika Anda tidak tahu) adalah angka yang membaca mundur dan maju yang sama (misalnya, 11). Nomor 15 non-palindromic pertama adalah: 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 24, 25, 26. Ini A029742 . Saya selalu membutuhkan angka-angka ini, tetapi catatan tempel saya sangat kecil, jadi kode Anda harus sesingkat mungkin.

Aturan

  • Setiap pengiriman harus berupa program atau fungsi lengkap (mis. Dalam C, Anda tidak bisa hanya mendefinisikan suatu fungsi tanpa header, tetapi Anda dapat mendefinisikan suatu fungsi DENGAN header yang diperlukan).
  • Jika memungkinkan, berikan tautan ke situs tempat program Anda dapat diuji.
  • Program Anda tidak boleh menulis apa pun STDERR.
  • Anda dapat mengambil input sebagai argumen atau dari STDIN(atau alternatif terdekat dalam bahasa Anda).
  • Program diberi skor berdasarkan byte . Set karakter yang biasa adalah UTF-8, jika Anda menggunakan yang lain, silakan tentukan.
  • Celah standar dilarang.

Uji Kasus

1
==> 10

-----

5
==> 15

-----

12
==> 23

Mencetak gol

Ini adalah , jadi paling tidak byte menang.

Pengajuan

Untuk memastikan bahwa jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama, menggunakan templat Penurunan harga berikut:

# Language Name, N bytes

di mana Nukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda dapat menyimpan skor lama di headline, dengan mencoretnya. Contohnya:

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

Jika Anda ingin memasukkan beberapa angka dalam tajuk Anda (mis. Karena skor Anda adalah jumlah dari dua file atau Anda ingin membuat daftar hukuman penterjemah secara terpisah), pastikan bahwa skor sebenarnya adalah angka terakhir di tajuk:

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

Anda juga dapat membuat tautan nama bahasa yang kemudian akan muncul di cuplikan papan peringkat:

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

Papan peringkat

Berikut ini adalah Stack Snippet untuk menghasilkan leaderboard biasa dan gambaran umum pemenang berdasarkan bahasa.


1
Adakah testcases?
Leaky Nun

@ KennyLau saya akan melakukan beberapa.
George Gibson

Bisakah kita menggunakan indeks berbasis 0, jadi 15akan menjadi angka 4?
nimi

@nimi, tapi tolong tentukan apakah indeks Anda 0-diindeks.
George Gibson

@nimi Maaf, itulah yang saya maksud, telah diedit untuk menjelaskan.
George Gibson

Jawaban:


9

Pyth, 7 byte

e.f!_I`

Suite uji

Penjelasan:

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.

5

Haskell, 38 byte

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

Menggunakan indeks berbasis 0. ([x|x<-[1..],(/=)<*>reverse$show x]!!) 11-> 23.

Tes apakah akan menyimpan nomor yang (/=)<*>reverse$show xditerjemahkan (show x) /= (reverse (show x)), yaitu memeriksa apakah representasi string dari angka tidak sama dengan kebalikan dari representasi string.


4

Brachylog , 14 11 byte

;0{<≜.↔¬}ⁱ⁽

-3 Bytes tank untuk di Fatalkan

Penjelasan

; {      }ⁱ⁽        --  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

Cobalah online!


;İ{ℕ≜.↔¬}ᶠ⁽tlebih pendek 2 byte.
Fatalkan

Sebenarnya, menggunakan iterate1 byte lebih pendek:;0{<≜.↔¬}ⁱ⁽
Fatalize

3

Jelly, 9 byte

1 byte terima kasih kepada @ Sp3000 .

ṚḌ_
0dz#Ṫ

Cobalah online!

Suite uji.

Penjelasan

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.

1
Fakta menyenangkan: coba123Ṛ
Sp3000

@ Sp3000 Memang sangat menarik!
Leaky Nun

Anda dapat menjatuhkan ³. Jika Anda menempatkan input pada STDIN, Anda dapat menjatuhkannya 0juga. (Dalam versi terbaru Jelly, ṚḌ_ø#Ṫbekerja juga, tetapi ini lebih baru daripada tantangan ini.)
Dennis

Tidak bekerja untuk saya ...
Leaky Nun

7 byte tetapi mungkin menggunakan fitur yang lebih baru
caird coinheringaahing

3

05AB1E , 8 byte

Kode:

µNÂÂQ>i¼

Menggunakan pengodean CP-1252 . Cobalah online! .


Ini kemungkinan besar ada hubungannya dengan versi lama 05AB1E, tetapi karena penasaran: mengapa dobel bercabang dua Â? PS untuk orang lain yang membaca ini: Sekarang bisa 5 byte µNÂʽ.
Kevin Cruijssen

@KevinCruijssen: Kemungkinan karena tidak ada output implisit dari N (hanya atas tumpukan). Juga, itu bisa menjadi 4 byte sekarang karena ½juga implisit.
Emigna

@Emigna Ah, benar-benar lupa tentang ½menjadi implisit, meskipun saya sebutkan di tip saya tulis sendiri ..>. <Pemikiran yang ¼(peningkatan counter_variable oleh 1) adalah implisit untuk sementara loop µuntuk sesaat, tapi itu memang ½( jika puncak tumpukan adalah 1: tingkatkan counter_variable sebesar 1) sebagai gantinya ..
Kevin Cruijssen

3

Clojure, 62 byte

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

Diindeks 0. Hasilkan rentang angka-angka non-palindromik malas yang tak terbatas menggunakan pemahaman daftar dan ambil nomor isatu. Lihat online: https://ideone.com/54wXI3


2

PowerShell v2 +, 65 byte

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

Putaran melalui angka dari 0(nilai implisit untuk tidak diinisialisasi $i) sampai kami menemukan input yang $args[0]cocok, kemudian mengeluarkan yang terakhir. Perhatikan bahwa kami tidak menginisialisasi loop, jadi $j=0ini implisit.

Setiap iterasi, kami melakukan pra-kenaikan $i, dan memeriksa apakah itu tidak sama dengan $iterbalik. Jika demikian, itu berarti kami telah menemukan non-palindrome, jadi peningkatan $j. Lingkaran kemudian berlanjut sebanyak yang diperlukan.

Contohnya

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

2

Python 2, 60 byte

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

Fungsi satu-diindeks yang mengambil input nmelalui argumen dan mengembalikan nomor nnon-palindromik.

Bagaimana itu bekerja

Ini adalah pencarian rekursif lengkap, yang secara berturut-turut menguji bilangan bulat idalam kisaran [1,∞)sampai nangka non-palindrom ditemukan; karena ipra-incremented, i-1kemudian dikembalikan. Pengujian apakah suatu bilangan adalah palindromik dilakukan dengan mengonversi suatu string, membalikkan, dan kemudian memeriksa apakah string asli dan yang dibalik sama.

Kode ini secara logis setara dengan:

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)

yang pada dasarnya adalah:

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

Cobalah di Ideone


2

Clojure, 62 byte

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

Pendekatan yang sangat berbeda dari jawaban yang lain, tetapi panjangnya sama.


2

R , 133 117 93 76 byte

-16 byte terima kasih kepada JayCe. -41 byte terima kasih kepada Giuseppe.

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

Cobalah online!


1
Anda dapat menyalahgunakan beberapa byte F, dll .: TIO . Juga, mengapa Anda membatasi loop (0:97)+10?
JayCe

1
gunakan tip # 3 dari jawaban saya Tip untuk Golf di R untuk mengekstrak digit; Anda dapat melakukannya di all(D==rev(D))mana Dadalah vektor digit. Saya percaya sebuah whileloop akan lebih pendek, dan ketika @JayCe bertanya, mengapa Anda hanya memeriksa angka antara 10 dan 107?
Giuseppe

@Giuseppe Diperbarui dengan rekomendasi Anda. Masih sedikit bingung tentang cara mengimplementasikan whileloop sementara pada saat yang sama menghemat byte.
Robert S.

1
@RobertS. jika Anda memiliki pertanyaan, silakan ping saya di ruang obrolan R !
Giuseppe

2

Keempat (gforth) , 103 99 byte

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

Cobalah online!

Penjelasan

Loop n kali, setiap iterasi menemukan nomor non-palindromik berikutnya dengan menambah penghitung dengan 1 sampai angka tidak sama dengan dirinya sendiri terbalik

Kode Tidak Terkunci

Biasanya saya tidak akan "ungolf" kode, tetapi karena kode ini agak berantakan saya pikir itu akan membantu

: 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
;

Penjelasan Kode

: 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 

1

Perl 6 , 29 byte

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

(menggunakan indeks berbasis 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
}

Pemakaian:

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)

1

Sebenarnya, 17 byte

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

Cobalah online!

Nilai diindeks 1. Ini dapat dengan mudah diubah menjadi 0-diindeks dengan mengganti yang pertama Rdengan r. Tapi, Ritulah yang awalnya saya ketik, jadi itulah yang saya lakukan.

Angka-angka nonpalindromik memuaskan a(n) ≈ n + 10, demikian 2n+9juga batas atas yang cukup.

Penjelasan:

;τ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

1

JavaScript (ES6), 54 byte

Menggunakan pengindeksan berbasis 1. Hanya berfungsi hingga nomor 7624.

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

Pemakaian

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 byte

Tidak menggunakan rekursi sehingga bisa menangani input yang jauh lebih besar.

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

Pemakaian

(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

1

Javascript (menggunakan perpustakaan eksternal) (97 byte)

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

Tautan ke lib: https://github.com/mvegh1/Enumerable

Penjelasan kode: Pustaka memiliki metode statis yang disebut Sequence, di mana param pertama mendefinisikan berapa banyak elemen yang akan dijamin urutannya, dan parameter ke-2 adalah predikat yang menerima nilai iterasi saat ini, "i". Predikat mengubah integer menjadi string, yang akan dikonversi ke array char dengan memanggil _.From. Array char dibandingkan dengan pembalikan array char, dan jika mereka tidak sama array char bergabung kembali ke dalam string dan dikembalikan. Kalau tidak, tidak ada yang dikembalikan (yaitu hasilnya tidak ditentukan, yang akan selalu diabaikan oleh perpustakaan). Akhirnya, elemen terakhir dari urutan, yaitu elemen N dikembalikan

masukkan deskripsi gambar di sini


1

C, 84 byte

Fungsi f(n)mengambil integer ndan mengembalikan n-thnomor non-palindrom (berbasis 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;}

Uji di Ideone!

Ini kode yang cukup sepele, sehingga mungkin ada ruang untuk perbaikan.


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

1

Ruby, 54 byte

Fungsi ini 1-diindeks dan sebagian didasarkan pada jawaban Javascript Dom Hastings . Saya pikir ada cara untuk bermain golf ini lebih baik, terutama dengan kondisi ternary terakhir itu. Selain itu, fungsi ini saat ini mengembalikan string, yang mungkin perlu diedit nanti. Saran bermain golf dipersilakan.

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

Tidak Disatukan:

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

1

C ++ (GCC), 148 byte

Ini berbasis 1 dan algoritma ini benar-benar naif

#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;}

@enedil mengenai hasil edit Anda: #importadalah ekstensi kompilator gcc Itu sudah usang, tetapi ini tidak terlalu penting di sini
ovs

1

APL NARS 35 karakter

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

itu adalah fungsi v; "⍎⌽⍕" r angka traslate r dalam string, balikkan string itu, traslate dari string ke angka. Fungsi tes dan bantuan:

  ⍝ 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

1

Sekam , 6 byte

Yay untuk :)

!fS≠↔N

Cobalah online!

Penjelasan

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


1

C # 7, 89 byte

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

1 diindeks Coba pada 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

Saya tidak berpikir ini menggunakan fitur bahasa apa pun dari c # 7, tapi saya meletakkannya di sana karena itulah yang saya uji


Selamat datang di PPCG.
Jonathan Frech


1

Java 8, 117 95 94 byte

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

Diindeks 0

Penjelasan:

Coba di sini.

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

@ceilingcat Itu memberikan hasil yang salah .. new StringBuffer(int)tidak sama dengan new StringBuffer(String), juga String.equals(StringBuffer)bukan String.equals(String).. Ini adalah jawaban lama, jadi saya bisa gunakan (++r+"").contains(new StringBuffer(r+"").reverse())untuk menyimpan 1 byte.
Kevin Cruijssen

-2

TCC, 11 byte

?>!~<>;i;'T

Cobalah 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"

1
Ini tidak berfungsi dengan tcc.luafile dengan timestamp 16-07-26 12:46 UTC, yang tidak memiliki ?>perintah. Jika jawaban Anda memerlukan versi bahasa yang mengunggah tantangan, Anda harus menandainya sebagai tidak bersaing di header. Saya akan menghapus downvote saya ketika Anda melakukannya.
Dennis

@Dennis Saya menemukan posting berusia dua tahun ini dan ingin menyebutkan bahwa jawaban sekarang tidak lagi ditandai tidak bersaing ketika bahasa mereka memposting tanggal tantangan.
Jonathan Frech
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.