แจกแจงตัวเลข palindromic ทั้งหมด (เป็นทศนิยม) ระหว่าง 0 ถึง n


11

รับค่าเป็นจำนวนเต็มที่ไม่ใช่ค่าลบ n ระบุจำนวน palindromic ทั้งหมด (เป็นทศนิยม) ระหว่าง 0 ถึง n (ช่วงที่ครอบคลุม) หมายเลข palindromic ยังคงเหมือนเดิมเมื่อมีการกลับตัวเลข

ตัวเลข palindromic ตัวแรก (ในฐาน 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, 383, 393, 393, 404, 414, 424, 434, 444, 454, 464, 474, 484, 494, 505, 515, ...

นี่คือรหัสกอล์ฟที่มีรางวัลน้อยที่สุดสำหรับตัวละคร หมายเลข palindromic ควรเป็นเอาต์พุตหนึ่งบรรทัดต่อ stdout โปรแกรมควรอ่าน n จาก commandline หรือ stdin


3
ระหว่าง 1 ถึง n (ตามชื่อ) หรือ 0 และ n (ตามร่างกาย)? ขอบเขตใดบ้างที่อยู่ระหว่าง "รวม"
Peter Taylor

@ wok: คุณยังไม่ได้รับคำตอบถ้ามันรวมหรือช่วงพิเศษ? เป็นnส่วนหนึ่งของช่วงที่จะรวมหรือไม่
mellamokb

@mellamokb รวมช่วง
กระทะ

คำตอบ:


7

Golfscript, 15 ตัวอักษร

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

คุณสามารถบันทึกอักขระเปรียบเทียบสตริงแทนตัวเลข '~), {`.-1% =}, n *'
โฮเวิร์ด

@Howard ถ้าคุณต้องการโพสต์ด้วยตัวคุณเองฉันจะ upvote มัน
Peter Taylor

นั่นจะรู้สึกเหมือนการทำสำเนาธรรมดา ;-)
Howard

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

ใช้การประชุม perlgolf เก่าที่#!perlไม่นับ แต่ธงใด ๆ ต่อไปนี้

Perl, 36 ตัวอักษร

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

ถ้าไม่มีคุณสมบัติอื่นใด


คุณจะกรุณาอธิบายว่า $ / ทำอะไร?
Gurzo

1
@Gurzo $/เป็นตัวคั่นเรคคอร์ดอินพุตซึ่งมีค่าดีฟอลต์เป็น newline มันสั้นกว่าตัวอักษร"\n"เล็กน้อย
ฮอบส์

การใช้แผนที่จะสั้นกว่า:map{say if$_==reverse}0..<>
jho

2
@ jho evil ส่ง :)
hobbs

1
หากคุณใช้-Eแทนคุณ-eจะได้รับsayฟรี
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*,^
            ^                      <

ฉันสงสัยว่าฉันสามารถทำให้ขนาดเล็กลงได้โดยเปลี่ยนเส้นทางใหม่ ...

แก้ไข: redid ส่วนบนเพื่อหลีกเลี่ยงการเพิ่มบรรทัด



7

Ruby 1.9, 39 ตัวอักษร

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

อินพุต (ต้องไม่ถูกยกเลิกด้วยการขึ้นบรรทัดใหม่) ผ่าน stdin ตัวอย่างการร้องขอ:

echo -n 500 | ruby1.9 palinenum.rb

40 ตัวอักษรสำหรับเวอร์ชั่นที่ใช้ commandline args:

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

Rohitเสนอประหยัด 3 ตัวอักษรในแต่ละเหล่านี้โดยใช้แทนp puts
ปีเตอร์เทย์เลอร์

ใช้รหัสของคุณฉันได้ผลลัพธ์ต่อไปนี้ซึ่งดูเหมือนว่าผิด (ฉันใช้ ruby ​​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 pและputsจะไม่เทียบเท่าในความเป็นจริงโดยใช้pการแบ่งการส่งออกในขณะที่ทำให้เขียนทุกองค์ประกอบในการขึ้นบรรทัดใหม่ถ้าเรียกว่ามีอาร์เรย์ในขณะที่โทรเพียงp .to_s
Ventero

6

J , 20 ตัวอักษร

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

ฉันสามารถอ่านได้! :) Nice
defhlt

BTW ,"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
Steven Rumbalski

หากใช้ล่ามแบบโต้ตอบนั้นถูกต้องคุณสามารถหลีกเลี่ยงprintและทำเช่นนั้นได้if`i`==`i`[::-1]:i(ฉันพูดแบบนี้เพราะวิธีแก้ปัญหาของสกาล่าขึ้นอยู่กับสิ่งนี้)
Bakuriu

ช่วงควรรวม และฉันคิดว่าคุณสามารถเปลี่ยนจำนวนไบต์เป็น 50 (linebreaks จะสั้นกว่าบน linux)
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
เคล็ดลับคือที่i++<nเปรียบเทียบi<nก่อนที่จะเพิ่ม i1 ดังนั้นมันจึงวิ่งไปi=nเรื่อย ๆ หากคุณต้องการหยุดที่i=n-1คุณจะใช้++i<nแทน
mellamokb

1
alert(o.join(" "))จะต้องเป็นไปalert(o.join("\n"))ตามข้อกำหนด เพิ่ม 1 เข้ากับจำนวนตัวละครของคุณเมื่อคุณแก้ไข
Thomas Eding

3

Perl - 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 จริงเหรอ? ฉันจะเดาได้ว่ามันเป็นนิพจน์ที่ส่งคืนสตริง
โอมาร์

ใน REPA สกาล่าแบบโต้ตอบใช่ คุณสามารถทดสอบได้ที่นี่justscala.comแต่ต้องแทนที่readIntด้วยหมายเลขที่เป็นรูปธรรมทางออนไลน์
ผู้ใช้ที่ไม่รู้จัก

2

PHP, 59 55 53 ตัวอักษร

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

การใช้

php palindromic.php 500

แก้ไข: ขอบคุณ Thomas


คุณสามารถเอา {s รอบสำหรับวงและลบพื้นที่ในที่จะได้รับecho "$i\n" echo"$i\n"ที่จะช่วยให้คุณประหยัดไม่กี่ตัวอักษร นอกจากนี้หากคุณต้องการที่จะหน้าด้านคุณสามารถเปลี่ยน\nสำหรับ `` และประหยัดถ่าน
Thomas Clayson




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 ไบต์ (ไม่แข่งขัน)

ภาษา postdates ความท้าทายและดังนั้นจึงเป็นเรื่องที่ไม่ใช่การแข่งขัน รหัส:

ƒ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) คำถามภาษา postdates:

ด้วยรูปแบบ 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 ที่ทันสมัยช่วยให้คุณใช้เครื่องกำเนิดไฟฟ้าเป็นการส่งได้อย่างไร
Leun Nun

@LeakyNun: ฉันทำข้อเสนอในวันที่ 30 พฤศจิกายน 2559แต่ฉันทามติว่าพวกเขาถูกกฎหมายแล้ว ณ จุดนั้น (ไม่ได้บันทึกไว้) เรามีกฎที่ชัดเจนที่อนุญาตให้ใช้ในขณะนี้ ตลอดปี 2559 พวกเขาไม่ได้รับอนุญาตอย่างชัดเจนและพวกเขาก็ไม่ได้ถูกแบนเช่นกัน

ฉันเข้าใจแล้ว
Leun 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

ทำได้ดีมาก เคล็ดลับดีๆสำหรับการเล่น Python สามารถพบได้ในคำถามนี้: codegolf.stackexchange.com/questions/54/…
Gareth

คุณสามารถกำจัด n - เพียงแค่แทนที่ int (n) ด้วย int (raw_input ()) - และคุณสามารถเปลี่ยน str (a) เป็น r ในคำสั่ง if
โอมาร์


1

Q (34 ตัวอักษร)

ผ่าน n แทน n + 1 เป็นอาร์กิวเมนต์สำหรับโซลูชัน Q นี้

{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 ตัวอักษร)

รุ่น Golfed:

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

สิ่งนี้จะพิมพ์ palindromes ตามลำดับจากมากไปน้อยโดยใช้ตัวดำเนินการ n -> 0 (เมื่อ n ไปที่ 0)

* เวอร์ชันที่แก้ไขจะถูกแทนที่ด้วย ... ในขณะที่ในขณะที่ประหยัด 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 ลดลงได้ไหม สี่ตัวเลือกที่แตกต่างกัน:

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

คุณต้องละเว้นข้อความแสดงข้อผิดพลาด อย่างไรก็ตามหมายเลข palindrome ยังคงส่งออกไปยังบรรทัดคำสั่งอย่างไรก็ตาม


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.