0 ile n arasındaki tüm palindromik sayıları (ondalık olarak) numaralandır


11

Negatif olmayan bir tamsayı n verildiğinde, 0 ile n (dahil aralık) arasındaki tüm palindromik sayıları (ondalık olarak) numaralandırın. Palindromik bir rakam, sayıları ters çevrildiğinde aynı kalır.

İlk palindromik sayılar (taban 10'da) burada verilmiştir :

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 22, 33, 44, 55, 66, 77, 88, 99, 101, 111, 121, 131, 141, 151, 161, 171, 181, 191, 202, 212, 222, 232, 242, 252, 262, 272, 282, 292, 303, 313, 323, 333, 343, 353, 363, 373, 383, 393, 404, 414, 424, 434, 444, 454, 464, 474, 484, 494, 505, 515, ...

Bu ödül golf en az karakter olacak bir kod golf. Palindromik sayıların stdout'a her satıra bir çıkışı yapılmalıdır. Program, komut satırından veya stdin'den n okumalıdır.


3
1 ve n (başlık başına) veya 0 ve n (gövde başına) arasında? Ve "sınırlar" sınırlarından hangisini içerir?
Peter Taylor

@wok: Kapsayıcı veya münhasır menzil olup olmadığını hala cevaplamadınız mı? Is naralık parçası dahil etmek?
mellamokb

@mellamokb Kapsama alanı.
Wok

Yanıtlar:


7

Golfscript, 15 karakter

~),{.`-1%~=},n*

'~), {`.-1% =}, n *' yerine dizeleri karşılaştıran bir karakter kaydedebilirsiniz.
Howard

@Howard, eğer bunu kendin göndermek istiyorsan onu oylayacağım.
Peter Taylor

Bu düz kopyalama gibi görünüyor ;-)
Howard

10

Perl 5.10, 29 (veya 39) karakter

say for grep$_==reverse,0..<>

İhtiyaç sayetkin özelliği. Ücretsiz olduğunu düşünüyorsanız 29 karakter, aksi takdirde 39 ekleyin use 5.010;. STDIN tartışması.

Perl, 35 karakter

#!perl -l
print for grep $_==reverse,0..<>

eski perlgolf konvansiyonu #!perlsayılmaz ama onu takip eden bayraklar kullanılır.

Perl, 36 karakter

print$_,$/for grep $_==reverse,0..<>

Diğerlerinden hiçbiri uygun değilse.


$ / Do ne yapar açıklamak için çok nazik misiniz?
Gurzo

1
@Gurzo $/, varsayılan olarak satırsonu olan giriş kayıt ayırıcısıdır. Kelimenin tam anlamıyla biraz daha kısa "\n".
ocaklar

Haritayı kullanmak daha kısadır:map{say if$_==reverse}0..<>
jho

2
@jho kötü. Gönder :)
ocaklar

1
Bunun -Eyerine kullanırsanız , ücretsiz olarak -ealırsınız say.
tchrist

9

Befunge 320 313 303 karakter

(önemli yeni satırlar ve boşluklar dahil)

 &:#v_v#  #                  :-1<
v91:<         v          <
0     >0.@    >\25**\1-:#^_v
pv   p09+1g09<^_           >$+     v
:>:25*%\25*/:| ^:p18:+1g18\<
 :          > >90g 1-:90p  | >  ^
>|           $^     <      >-|  ^  #<
 @           > 0 81p^        >:.25*,^
            ^                      <

Acaba yolları yeniden yönlendirerek bunu küçültebilir miyim ...

Düzenleme: fazladan bir çizgiden kaçınmak için üst kısmı yeniden düzenleyin.


8

Perl 5.10 - 27 karakter

map{say if$_==reverse}0..<>

Stdin'den argümanı okur.


7

Yakut 1.9, 39 karakter

puts (?0..gets).select{|i|i==i.reverse}

Stdin yoluyla giriş (bir satırsonu ile sonlandırılmamalıdır). Örnek çağırma:

echo -n 500 | ruby1.9 palinenum.rb

Komut satırı argümanlarını kullanan bir sürüm için 40 karakter:

puts (?0..$*[0]).select{|i|i==i.reverse}

Rohit , pyerine kullanarak her birine 3 karakter kaydetmeyi önerdi puts.
Peter Taylor

Kodunuzu kullanarak aşağıdaki çıktı var, bu yanlış görünüyor (ruby 1.9.2p0 kullanıyorum (2010-08-18) [i386-mingw32]) irb(main):023:0> p (?0..gets).select{|i|i==i.reverse} 1 ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "11", "22", "33", "44", "55", "66", "77", "88", " 99"] => ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "11", "22", "33", "44", "55", "66", "77", "88" , "99"] Aşağıdaki kod benim için çalışıyor p ('0'..gets[0..-2]).select{|i|i==i.reverse} Kodunuzu açıklayabilir misiniz.
Rohit,

@PeterTaylor @Rohit pve putskullanma aslında, eşdeğer değildir pkoyar olarak sonlarını çıktı, bir satır her eleman yazar, bir dizi denir eğer , oysa psadece çağırır .to_s.
Ventero

6

J , 20 karakter

(#~(-:|.)@":"0)>:i.n

Ben okuyabilirim! :) Güzel
defhlt

btw, bir gereksinim karşılamak için satır başına bir çıkış sayıları eklemeniz gerekir ,"0.
2012'de

@defhlt da ,.çalışıyor
Bolce Bussiere

5

Python, 57 51 karakter

for i in range(input()):
 if`i`==`i`[::-1]:print i

Kullanımı:

echo 500 | python palindromic.py

3
Kısa:for i in range(input()):if`i`==`i`[::-1]:print i
Steven Rumbalski

Eğer interaktif tercümanı kullanmak yasalsa, bunu önleyebilirsiniz printve bunu yapabilirsiniz if`i`==`i`[::-1]:i(bunu söylüyorum çünkü Scala çözümü buna bağlıdır).
Mart'ta Bakuriu

Aralık dahil olmalıdır. Ve bence bayt sayınızı 50 olarak değiştirebilirsiniz (linux'ta çizgi çizgileri daha kısadır).
malkaroee

5

Perl> 5.10: 25 karakter

map$_==reverse&&say,0..<>


3

JavaScript 122 108 107 karakter ...

Eminim bu daha fazla golf olabilir - Ben bu konuda yeniyim!

n=prompt(o=[]);for(i=0;i<=n;i++)if(i+''==(i+'').split("").reverse().join(""))o.push(i);alert(o.join("\n"));

veya

n=prompt(o=[]);i=-1;while(i++<n)if(i+''==(i+'').split("").reverse().join(""))o.push(i);alert(o.join("\n"));

Peki, yeni başlayanlar için vargereksizdir, sadece küresel şeyler yapabilirsiniz. Ayrıca prompt()kesinlikle parametrelere ihtiyaç duymaz.
Clueless

Ancak, olabilir parametreleri kullanmak prompt()bir noktalı virgül kurtarmak için: n=prompt(o=[]);.
mellamokb

Ayrıca hala sizin kaldırılmış var i=0olabilir bir var . varfor
mellamokb

1
Hile, 1 eklemeden önce i++<nkarşılaştırılır . Böylece, tüm yol boyunca çalışır . Eğer durdurmak isteseydin , bunun yerine kullanırdın. i<nii=ni=n-1++i<n
mellamokb

1
alert(o.join(" "))ihtiyaçları için alert(o.join("\n"))özelliklerine göre. Bunu düzelttiğinizde karakter sayınıza 1 ekleyin.
Thomas Eding

3

Perl - 43 karakter

for$i(0..<>){if($i==reverse$i){print$i,$/}}

Bu benim ilk denemede kod golf, bu yüzden bir Perl pro aşağı golf olabilir eminim.



2

PHP 64 58

for($i=0;$i<=$argv[1];print$i==strrev($i)?$i.'\n':'',$i++)

Komut satırı girişi için $ _GET ['n'] öğesini $ argv [1] olarak değiştirdi.



2

PHP, 59 55 53 karakter

for($i=0;$i++<$argv[1];)if($i==strrev($i))echo"$i\n";

kullanım

php palindromic.php 500

Düzenleme: teşekkürler Thomas


for döngüsünün çevresindeki {s işaretini kaldırabilir ve echo "$i\n"almak için boşluğu kaldırabilirsiniz echo"$i\n". Bu size birkaç karakter kazandıracak. Ayrıca, arsız olmak istiyorsanız \n`` için bir karakter değiştirebilir ve bir char kaydedebilirsiniz.
Thomas Clayson

2

C, 98 karakter

n,i,j,t;main(){for(scanf("%d",&n);i<=n;i-j?1:printf("%d ",i),i++)for(t=i,j=0;t;t/=10)j=j*10+t%10;}


2

Mathematica 61

Column@Select[0~Range~Input[],#==Reverse@#&@IntegerDigits@#&]

2

Befunge, 97 (ızgara boyutu 37x4 = 148)

#v&#:< ,*25-$#1._.@
:>:::01-\0v >-!#^_$1-
*\25*/:!#v_::1>\#* #*25*#\/#$:_$\25*%
   `-10:\<+_v#

Bu soruya daha iyi bir Befunge cevabı ver. Bu özellikle Befunge-93; Befunge-98 ile muhtemelen daha da kompakt hale getirebilirim. Bunu gelecekteki bir düzenlemeye ekleyeceğim.

Befunge'de dizelerde çalışamayacağınız için yapabileceğim en iyi şey, her sayının rakam tersini hesaplamaktı (ki bu olmadan pveg ) ve orijinal sayısıyla karşılaştırabilirsiniz. Rakam-tersi kodun çoğunu alır (temel olarak üçüncü ve dördüncü satırların tümü).

Programın şu anda olduğu gibi, sayıları girişten geriye doğru 0'a yazdırdığını unutmayın. Bu çok önemliyse, bana bildirin. (Zorluk, sadece artan sıralamada değil, sadece numaralandırmayı söylüyor.)


+1. Hatlar \ntek başına kapatılabilir , bu yüzden 94 bayt uzunluğundadır. "Izgara boyutunuzun" belirli bir ilgisi olduğunu düşünmüyorum.
har-wradim

2

05AB1E , 5 bayt (rakip olmayan)

Dil bu mücadeleden sonra gelir ve bu nedenle rekabet etmez . Kod:

ƒNÂQ–

Açıklama:

ƒ      # For N in range(0, input() + 1)
 N     #   Push N
  Â    #   Bifurcate (pushes N and N[::-1])
   Q   #   Check for equality
    –  #   If true, pop and print N

CP-1252 kodlamasını kullanır . Çevrimiçi deneyin! .


LʒÂQ 4, yine de rakipsiz ..
Sihirli Ahtapot Urn

2

Brachylog (2), dil postdates sorusu:

Soruda belirtilen I / O formatı ile 8 bayt

≥ℕA↔A≜ẉ⊥

Çevrimiçi deneyin!

Modern PPCG I / O kuralları ile 4 bayt

≥ℕ.↔

Çevrimiçi deneyin!

Bu, önceki örnekte olduğu gibi tam bir program değil, tüm çıktıları üreten bir işlevdir ve bu nedenle yazılı spesifikasyona uymaz, ancak soru yazıldıysa programın nasıl görüneceğini göstereceğimi düşündüm Modern I / O standartlarına (fonksiyonların kullanımına ve jeneratörler aracılığıyla çıkışa izin verir).

açıklama

≥ℕ.↔ 
 ℕ    Generate natural numbers
≥     less than or equal to the input
  .   but output only the ones
   ↔  that would produce the same output if reversed

Tam program sürümü için, Açıktıyı tutmak, açıkça etiketlemek (bu bir programın ana yüklemi için örtük olarak yapılır) ve ẉ⊥bir jeneratörün elemanlarını standart çıktıya çıkarmak için iyi bilinen tekniği kullanarak geçici bir değişken oluştururuz .


Modern PPCG I / O kuralları bir jeneratörü gönderim olarak kullanmanıza ne zaman izin verdi?
Leaky Nun

@LeakyNun: 30 Kasım 2016 tarihinde teklifte bulundum , ancak fikir birliği, bu noktada zaten yasal oldukları (belgelenmemiş). Şimdi onlara izin veren açık bir kuralımız var; 2016'nın çoğunda, açıkça izin verilmedi ve açıkça yasaklanmadı.

Oh, anlıyorum.
Leaky Nun

1

piton

n=raw_input('')
for a in range(0,int(n)+1):
    r=str(a)
    if str(a)==r[::-1]:
        print r

Hmm ... 232 karakter gerçekten çok rekabetçi değil. Belki de değişken isimlerini bir karaktere indirgeyebilir ve değişkenler ve operatörler arasındaki boşlukları silebilirsiniz?
Gareth

Aferin. Python golf için bazı iyi ipuçları bu soruda bulunabilir: codegolf.stackexchange.com/questions/54/…
Gareth

İnt (raw_input ()) - ile n --just replace int (n) öğesinden kurtulabilir ve if deyiminde str (a) öğesini r olarak değiştirebilirsiniz
Ömer

1

Harika, 83

System.in.eachLine{(0..it.toInteger()).each{if("$it"=="$it".reverse())println(it)}}

1

Q (34 karakter)

Bu Q çözümü için argüman olarak n + 1 yerine n değerini iletin.

{i(&)({all i=(|)i:($)x}')i:(!)1+x}


1

Q (33)

{if[x="I"$(|:) -3!x;:x]} each til

Muhtemelen bunu yapmanın daha temiz bir yolu ama yine de, örnek kullanım (n'ye ulaşmak için n + 1 girersiniz):

q){if[x="I"$(|:) -3!x;:x]} each til  10
0 1 2 3 4 5 6 7 8 9

Tmartin tarafından öneri, 29'a indirir:

({$[x="I"$(|:) -3!x;x;]}')(!)

Aynı kullanım.


1

Python, 106 karakter

import sys as a
print(type(a.argv[1]))
for x in range(int(a.argv[1])+1):
 x=str(x)
 if x==x[::-1]:print(x)

kullanımı:

python a.py 500

1

C # ( 217 214 191 karakter)

Golf versiyonu:

using System;using System.Linq;class P{static void Main(){int n=int.Parse(Console.ReadLine());do{var t=(n+"").ToArray();Array.Reverse(t);Console.Write(n+""==new string(t)?n+"\n":"");}while(n-->0);Console.ReadLine();}}

Okunabilir:

using System;
using System.Linq;
class P
{
    static void Main()
    {
        int n = int.Parse(Console.ReadLine());
        do
        {
            var t = (n + "").ToArray();
            Array.Reverse(t);
            Console.Write(n + "" == new string(t) ? n + "\n" : "");
        } while (n-->0);

        Console.ReadLine();
    }
}

Bu n -> 0 operatörünü kullanarak palindromları azalan sırada yazdırır. (n 0'a giderken).

* Düzenlenen sürüm, ... karakterini değiştirirken, 3 karakter kaydeder, ancak şimdi n + 1 ile giriş yapmanız gerekir.

using System;using System.Linq;class P{static void Main(){int n=int.Parse(Console.ReadLine());while(n-->0){var t=(n+"").ToArray();Array.Reverse(t);Console.Write(n+""==new string(t)?n+"\n":"");}Console.ReadLine();}}

* düzenlendi: diziye dönüştürmeden dizeyi ters çevirmenin daha iyi bir yolunu buldu:

using System;using System.Linq;class P{static void Main(){int n=int.Parse(Console.ReadLine());while(n-->0)Console.Write(n+""==string.Join("",(""+n).Reverse())?n+"\n":"");Console.ReadLine();}}

Okunabilir:

using System;
using System.Linq;
class P
{
    static void Main()
    {
        int n = int.Parse(Console.ReadLine());
        while (n-->0)
            Console.Write(n + "" == string.Join("", ("" + n).Reverse()) ? n + "\n" : ""); 
        Console.ReadLine();
    }
}

1

PHP 53

53 daha düşük olabilir mi? Dört farklı seçenek:

for($i=$argv[1];$i-->0;)echo$i==strrev($i)?"$i\n":"";
for($i=$argv[1];$i-->0;)if($i==strrev($i))echo"$i\n";
while(($i=$argv[1]--)>0)echo$i==strrev($i)?"$i\n":"";
while(($i=$argv[1]--)>0)if($i==strrev($i))echo"$i\n";

Eğer korkak almak istiyorsanız ...

PHP 47

while(($i=$argv[1]--)>0)if($i==strrev($i))`$i`;

Hata metnini yok saymanız gerekir. Bununla birlikte, palindrom numaraları hala komut satırına gönderilir.


1

Pyth, 11

VhQIq`N_`NN

Misal:

$ pyth -c 'VhQIq`N_`NN' <<< 200
0
1
2
3
4
5
6
7
8
9
11
22
33
44
55
66
77
88
99
101
111
121
131
141
151
161
171
181
191
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.