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

상금이 가장 적은 코드 골프입니다. 회문 번호는 stdout에 한 줄에 하나씩 출력되어야합니다. 프로그램은 명령 행 또는 stdin에서 n을 읽어야합니다.


3
1과 n 사이 (제목 별) 또는 0과 n (본체 별)? 그리고 "범위 사이"에는 어떤 경계가 포함됩니까?
피터 테일러

@ wok : 당신은 그것이 포함 또는 독점 범위인지 여전히 대답하지 않았다? 인가 n범위의 일부를 포함 할?
mellamokb

@mellamokb 포함 범위.
Wok

답변:


7

골프 스크립트, 15 자

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

숫자 '~), {`.-1 % =}, n *'대신 문자열을 비교하는 문자를 저장할 수 있습니다.
Howard

@Howard, 당신이 직접 게시하고 싶다면 그것을 찬성합니다.
피터 테일러

일반 복사처럼 느껴질 것입니다 ;-)
Howard

10

Perl 5.10, 29 (또는 39) 자

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

say기능이 활성화되어 있어야 합니다. 당신이 그것을 무료로 생각하면 29 문자, 그렇지 않으면 추가하려면 39 문자 use 5.010;. STDIN에 대한 주장.

펄, 35 자

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

#!perl계산되지 않은 이전 perlgolf 규칙을 사용 하지만 그 뒤에 오는 플래그는 사용되지 않습니다.

펄, 36 자

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

다른 사람이 자격이없는 경우.


$ /가 무엇을하는지 설명해 주시겠습니까?
구르 조

1
@Gurzo $/는 입력 레코드 구분 기호이며 기본값은 줄 바꿈입니다. literal보다 약간 짧습니다 "\n".
hobbs

map 사용이 더 짧습니다 :map{say if$_==reverse}0..<>
jho

2
@jho 악. 제출 :)

1
-E대신에 사용 -e하면 say무료입니다.
tchrist

9

비 펀지 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

루비 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}

Rohitp대신 에을 사용하여 각 문자에 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풋 브레이크로 출력을 바꿈에있는 모든 요소를 기록은 어레이로 불리는 경우 , 반면 p단순히 호출 .to_s.
Ventero

6

J , 20 자

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

읽을 수 있습니다! :) Nice
defhlt

btw, 한 줄에 하나씩 요구 사항 출력 번호를 충족 시키려면 추가해야합니다 ,"0.
defhlt

@defhlt도 ,.작동합니다
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
Steven Rumbalski

경우 대화 형 인터프리터를 사용하는 것은 합법이다, 당신은 피할 수 print그냥 할 if`i`==`i`[::-1]:i(스칼라 솔루션이에 의존하기 때문에 나는이 말을).
Bakuriu

범위가 포함되어야합니다. 그리고 바이트 수를 50으로 변경할 수 있다고 생각합니다 (리눅스는 줄 바꿈이 짧습니다).
malkaroee



3

자바 스크립트 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()매개 변수가 꼭 필요한 것은 아닙니다.
Clueless

그러나 매개 변수를 사용 하여 하나의 세미콜론을 저장할 있습니다 . 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을 더하십시오.
Thomas Eding

3

펄-43 자

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

이것은 코드 골프에 대한 첫 번째 시도이므로 Perl 프로가 골프를 할 수 있다고 확신합니다.



2

PHP 64 58

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

명령 행 입력을 위해 $ _GET [ 'n']을 $ argv [1]로 변경했습니다.


2

스칼라 59

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

나는 스칼라를 모르지만 실제로 stdout에 인쇄됩니까? 문자열을 반환하는 표현식이라고 생각했을 것입니다.
Omar

대화 형 스칼라 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 루프 주위의 {를 제거하고 공백을 제거하여 echo "$i\n"얻을 수 echo"$i\n"있습니다. 그것은 당신에게 몇 문자를 저장합니다. 또한 건방진을 원한다면 \n``로 바꾸고 문자를 저장할 수 있습니다 .
토마스 클레이 슨

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

매스 매 티카 61

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

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) 원래 숫자와 비교하는 것입니다. 자릿수 반전은 대부분의 코드 (기본적으로 전체 세 번째 및 네 번째 줄)를 차지합니다.

프로그램은 현재 상태 그대로 입력에서 0까지 거꾸로 숫자를 인쇄합니다. 이것이 큰 경우 알려주십시오. (이 과제는 순서를 늘리는 것이 아니라 열거하기 만합니다.)


+1. 행은 \n단독 으로 닫을 수 있으므로 길이는 94 바이트입니다. 귀하의 "그리드 크기"에 특별한 관련이 있다고 생각하지 않습니다.
har-wradim

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ʒÂQ여전히 경쟁이 아닌 4입니다 ..
Magic Octopus Urn

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 규칙을 통해 생성기를 제출로 사용할 수있는시기는 언제입니까?
Leaky Nun

@LeakyNun : 나는 2016 년 11 월 30 일에 제안을 했지만, 합의는 그 시점에서 이미 합법적이었다 (단, 문서화되지 않음). 우리는 지금 그것들을 허용하는 명백한 규칙을 가지고 있습니다. 2016 년 대부분 동안 그들은 명시 적으로 허용되지 않았으며 명시 적으로 금지되지도 않았습니다.

아, 알 겠어요
Leaky Nun

1

파이썬

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

흠 ... 232 문자는 경쟁이 심하지 않습니다. 변수 이름을 한 문자로 줄이고 변수와 연산자 사이의 공백을 삭제할 수 있습니까?
Gareth

잘 했어. 이 질문에서 파이썬 골프를위한 좋은 팁을 찾을 수 있습니다 : codegolf.stackexchange.com/questions/54/…
Gareth

n을 제거 할 수 있습니다-int (n)을 int (raw_input ())로 바꾸면됩니다. if 문에서 str (a)를 r로 바꿀 수 있습니다
Omar

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에 도달하려면 n + 1을 입력하십시오) :

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

파이썬, 106 자

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)

용법:

python a.py 500

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를 대체하지만 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이 더 낮을 수 있습니까? 네 가지 옵션 :

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

피스, 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.