0からnまでのすべての回文数(10進数)を列挙する


11

非負の整数nが与えられた場合、0〜n(範囲を含む)の間のすべての回文数(10進数)を列挙します。回文番号は、数字が逆になっても同じままです。

最初の回文数(10を底とする)は、次のとおりです

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、...

これは、最少のキャラクターに賞品が贈られるコードゴルフです。回文数は、1行に1つずつ標準出力に出力する必要があります。プログラムは、コマンドラインまたは標準入力からnを読み取る必要があります。


3
1〜n(タイトルごと)または0〜n(ボディごと)ですか?「境界」にはどの境界が含まれますか?
ピーターテイラー

@wok:包括的範囲か排他的範囲かはまだ答えていませんか?されたn範囲の一部が含まれますか?
mellamokb

@mellamokb包括的範囲。
ウォック

回答:



10

Perl 5.10、29(または39)文字

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

say機能を有効にする必要があります。無料と見なす場合は29文字、それ以外の場合は39文字を追加しuse 5.010;ます。STDINの引数。

Perl、35文字

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

#!perlカウントされない古いperlgolf規則を使用しますが、それに続くフラグはすべてカウントされます。

Perl、36文字

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

他のどれも資格がない場合。


$ /が何をするのか、とても親切に説明してもらえますか?
グルゾ

1
@Gurzo $/は入力レコードの区切り文字で、デフォルトは改行です。リテラルよりも少し短いです"\n"
ホッブズ

マップの使用は短くなりました:map{say if$_==reverse}0..<>
11

2
@jho悪。それを提出:)
ホッブズ

1
-E代わりに使用すると-esay無料で取得できます。
-tchrist

9

Befunge 320の 313 303文字

(重要な改行と空白を含む)

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

パスを再ルーティングすることでこれを小さくできるのではないかと思います...

編集:余分な行を避けるために上部を再編集します。


8

Perl 5.10-27文字

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

stdinから引数を読み取ります。


7

Ruby 1.9、39文字

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

stdinを介した入力(改行で終了しないでください)。呼び出しの例:

echo -n 500 | ruby1.9 palinenum.rb

コマンドライン引数を使用するバージョンの場合、40文字:

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

Rohitは、のp代わりにを使用して、これらの各3文字を保存することを提案しましたputs
ピーターテイラー

あなたのコードを使用して、私が間違っているように思われる次の出力を、得た(私はルビー1.9.2p0(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"] 私のための作品次のコードは p ('0'..gets[0..-2]).select{|i|i==i.reverse} 、あなたのコードを説明してもらえます。
-Rohit

@PeterTaylor @Rohit pputs同等ではありません。実際に使用pすると出力が中断されます。puts は配列呼び出されるとすべての要素を改行で書き込みますが、p単にを呼び出します.to_s
ヴェンテロ

6

J、20文字

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

私はそれを読むことができます!:)ニース
-defhlt

ところで、要件を満たすには、1行に1つずつ出力番号を追加する必要があり,"0ます。
-defhlt

@defhlt ,.も同様に動作します
Bolce Bussiere

5

Python、57 51文字

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

使用法:

echo 500 | python palindromic.py

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

場合は、対話型インタプリタを使用することが合法的である、あなたは避けることができprint、ちょうど行うif`i`==`i`[::-1]:i(Scalaのソリューションは、これに依存しているため、私はこれを言います)。
バクリウ

範囲は包括的でなければなりません。そして、バイト数を50に変更できると思います(Linuxでは改行が短くなります)。
マルカローイ14年



3

Javascript 122 108 107文字...

これはもっとゴルフできると確信しています-これは初めてです!

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

または

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

さて、初心者にとってvarは不要です。グローバルなものにすることができます。またprompt()、厳密にパラメーターを必要としません。
無知

ただし、パラメータを使用してセミコロンを1つ保存できます。prompt()n=prompt(o=[]);
mellamokb

また、あなたはまだ持ってvar i=0持つことができるvar取り外しをあなたにfor
mellamokb

1
トリックは、に1を追加する前にi++<n比較i<nすることiです。したがって、それはずっと実行されi=nます。で停止したい場合はi=n-1++i<n代わりに使用します。
mellamokb

1
alert(o.join(" "))alert(o.join("\n"))仕様に従っている必要があります。これを修正するとき、文字数に1を加えます。
トーマスエディング

3

Perl-43文字

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

これはコードゴルフでの私の最初の試みであるため、Perlのプロがゴルフをすることができると確信しています。




2

Scala 59

(0 to readInt)filter(x=>""+x==(""+x).reverse)mkString("\n")

私はScalaを知りませんが、それは本当に標準出力に出力されますか?文字列を返す式だと思いました。
オマー

インタラクティブなscala REPLでは、はい。ここでは単にscala.comでテストできますがreadInt、オンラインで具体的な番号に置き換える必要があります。
ユーザー不明

2

PHP、59 55 53文字

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

使用法

php palindromic.php 500

編集:トーマスありがとう


forループの周りの{sを削除し、echo "$i\n"取得するためにスペースを削除できecho"$i\n"ます。これにより、数文字節約できます。また、生意気になりたい場合は\n、 ``に変更してcharを保存できます。
トーマスクレイソン

2

C、98文字

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

Befunge、97(グリッドサイズ37x4 = 148)

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

この質問に対するより良いBefungeの回答があります。これは特にBefunge-93です。Befunge-98でもっとコンパクトにできたでしょう。将来の編集でそれを含めます。

Befungeで文字列を操作することはできないため、私ができる最善の方法は、各番号の逆桁を計算し(となしpで管理できたことに驚いていますg)、元の番号と比較することでした。桁反転は、ほとんどのコード(基本的に3行目と4行目全体)を占めます。

このプログラムは、現状では、入力から0まで逆方向に数字を出力することに注意してください。これが大したことなら、私に知らせてください。(課題は、具体的に昇順ではなく、それらを列挙するだけです。)


+1。行は\n単独で閉じることができるため、長さは94バイトです。あなたの「グリッドサイズ」に特定の関連性があるとは思わない。
har-wradim 14年

2

05AB1E、5バイト(非競合)

この言語は課題を先送りしているため、競合していません。コード:

ƒNÂQ–

説明:

ƒ      # 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エンコードを使用します。オンラインでお試しください!


LʒÂQ4である、けれどもまだ非競合...
マジックタコ壺

2

Brachylog(2)、言語の延期に関する質問:

質問に記載されているI / O形式では、8バイト

≥ℕA↔A≜ẉ⊥

オンラインでお試しください!

最新のPPCG I / Oルールでは、4バイト

≥ℕ.↔

オンラインでお試しください!

これは、前の例のような完全なプログラムではなく、すべての出力を生成する関数であるため、記述された仕様に準拠していませんが、質問が記述された場合のプログラムの外観を示すと思いました最新のI / O規格(関数の使用、およびジェネレーター経由の出力を許可する)

説明

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

完全なプログラムバージョンでは、一時変数を作成Aして出力を保持し、明示的にラベル付けし(これはプログラムのメイン述語に対して暗黙的に行われます)、ẉ⊥ジェネレーターの要素を標準出力に出力するためのよく知られた手法を使用します。


最新のPPCG I / Oルールにより、ジェネレーターを提出として使用できるようになったのはいつですか?
リーキー修道女

@LeakyNun:私は2016年11月30日に提案をしましたが、コンセンサスはその時点ですでに合法であったということです(文書化されていません)。現在、それらを許可する明示的なルールがあります。2016年のほとんどを通じて、それらは明示的に許可されておらず、明示的に禁止されていませんでした。

ああ、まあ、なるほど。
漏れの修道女

1

Python

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

うーん... 232文字はあまり競争力がありません。おそらく、変数名を1文字に減らし、変数と演算子の間のスペースを削除できますか?
ガレス

よくやった。:Pythonのをゴルフのためのいくつかの良いヒントは、この問題で見つけることができcodegolf.stackexchange.com/questions/54/...
ギャレス・

あなたは取り除くことができますn個のint(raw_input())でINT(n)を置き換える--just -あなたはif文におけるRとSTR()に変更することができます
オマール

1

グルーヴィー、83

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

1

Q(34文字)

このQソリューションの引数として、n + 1ではなくnを渡します。

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


1

Q(33)

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

おそらくこれを行うためのよりきれいな方法ですが、とにかく、使用例をサンプリングします(n + 1を入力してnに到達します):

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

tmartinによる提案は、29まで引き下げます。

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

同じ使用法。



1

C#の(217 214 191文字)

ゴルフバージョン:

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();}}

読みやすい:

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();
    }
}

これは、n-> 0演算子を使用して、回文を降順で出力します。(nが0になるため)。

*編集されたバージョンでは、do ... whileが3文字保存されますが、n + 1で入力する必要があります。

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();}}

*編集:配列に変換せずに文字列を逆にするより良い方法を見つけました:

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();}}

読みやすい:

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はそれよりも低くできますか?4つの異なるオプション:

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

ファンキーになりたいなら...

PHP 47

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

エラーテキストは無視する必要があります。ただし、回文番号は引き続きコマンドラインに出力されます。


1

Pyth、11

VhQIq`N_`NN

例:

$ 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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.