Zählen Sie alle palindromischen Zahlen (in Dezimalzahlen) zwischen 0 und n auf

11

Zählen Sie bei einer nicht negativen Ganzzahl n alle palindromischen Zahlen (in Dezimalzahlen) zwischen 0 und n (einschließlich Bereich) auf. Eine palindromische Zahl bleibt gleich, wenn ihre Ziffern umgekehrt werden.

Die ersten palindromischen Zahlen (in Basis 10) sind hier angegeben :

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

Dies ist ein Code-Golf, bei dem der Preis an die wenigsten Charaktere geht. Die palindromischen Zahlen sollten eine pro Zeile an stdout ausgegeben werden. Das Programm sollte n von der Kommandozeile oder stdin lesen.

Wok
quelle
3
Zwischen 1 und n (gemäß Titel) oder 0 und n (gemäß Text)? Und welche der Grenzen schließt "zwischen" ein?
Peter Taylor
@wok: Sie haben noch nicht geantwortet, ob es sich um eine inklusive oder exklusive Reichweite handelt? Ist ein nTeil des Sortiments einzuschließen?
Mellamokb
@mellamokb Inklusive Reichweite.
Wok

Antworten:

7

Golfscript, 15 Zeichen

~),{.`-1%~=},n*
Peter Taylor
quelle
Sie können ein Zeichen speichern, indem Sie Zeichenfolgen anstelle der Zahlen '~), {`.-1% =}, n *' vergleichen.
Howard
@ Howard, wenn du das selbst posten willst, werde ich es positiv bewerten.
Peter Taylor
Das würde sich wie einfaches Kopieren anfühlen ;-)
Howard
10

Perl 5.10, 29 (oder 39) Zeichen

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

Muss die sayFunktion aktiviert sein. 29 Zeichen, wenn Sie das für kostenlos halten, andernfalls 39 hinzufügen use 5.010;. Argument zu STDIN.

Perl, 35 Zeichen

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

unter Verwendung der alten Perlgolf-Konvention, #!perldie nicht gezählt wird, aber alle darauf folgenden Flags sind.

Perl, 36 Zeichen

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

Wenn sich keiner der anderen qualifiziert.

Hobbs
quelle
Würden Sie so freundlich erklären, was $ / tut?
Gurzo
1
@Gurzo $/ist das Trennzeichen für Eingabedatensätze, das standardmäßig Zeilenumbruch verwendet. Es ist nur ein bisschen kürzer als wörtlich "\n".
Hobbs
Die Verwendung der Karte ist kürzer:map{say if$_==reverse}0..<>
jho
2
@jho böse. Senden Sie es :)
hobbs
1
Wenn Sie -Eanstelle von verwenden -e, erhalten Sie saykostenlos.
Tchrist
9

Befunge 320 313 303 Zeichen

(einschließlich bedeutender Zeilenumbrüche und Leerzeichen)

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

Ich frage mich, ob ich das durch Umleiten der Pfade verkleinern könnte ...

Bearbeiten: Den oberen Teil neu gestalten, um eine zusätzliche Linie zu vermeiden.

Blind
quelle
8

Perl 5.10 - 27 Zeichen

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

Liest das Argument von stdin.

jho
quelle
7

Ruby 1.9, 39 Zeichen

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

Eingabe (darf nicht mit einem Zeilenumbruch abgeschlossen werden) über stdin. Beispielaufruf:

echo -n 500 | ruby1.9 palinenum.rb

40 Zeichen für eine Version, die Befehlszeilenargumente verwendet:

puts (?0..$*[0]).select{|i|i==i.reverse}
Ventero
quelle
Rohit schlug vor, jeweils 3 Zeichen zu speichern, indem panstelle von verwendet wird puts.
Peter Taylor
Mit Ihrem Code habe ich die folgende Ausgabe erhalten, die falsch zu sein scheint (ich verwende Ruby 1.9.2p0 (18.08.2010) [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"] Der folgende Code funktioniert für mich. Können p ('0'..gets[0..-2]).select{|i|i==i.reverse} Sie Ihren Code erklären ?
Rohit
@PeterTaylor @Rohit pund putssind nicht äquivalent, in der Tat unterbricht pdie Ausgabe, da jedes Element in eine neue Zeile geschrieben wird, wenn es mit einem Array aufgerufen wird , während peinfach aufgerufen wird.to_s .
Ventero
6

J , 20 Zeichen

(#~(-:|.)@":"0)>:i.n
kurzlebig
quelle
Ich kann es lesen! :) Schön
defhlt
Übrigens, um eine Anforderung zu erfüllen, sollten Sie eine Nummer pro Zeile hinzufügen ,"0.
defhlt
@defhlt ,.funktioniert auch
Bolce Bussiere
5

Python, 57 51 Zeichen

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

Verwendung:

echo 500 | python palindromic.py
Ahnungslos
quelle
3
Kürzere:for i in range(input()):if`i`==`i`[::-1]:print i
Steven Rumbalski
Wenn die Verwendung des interaktiven Interpreters legitim ist, können Sie dies vermeiden printund einfach tun if`i`==`i`[::-1]:i(ich sage dies, weil die Scala-Lösung davon abhängt).
Bakuriu
Der Bereich sollte inklusive sein. Und ich denke, Sie können Ihre Byteanzahl auf 50 ändern (Zeilenumbrüche sind unter Linux kürzer).
Malkaroee
5

Perl> 5.10: 25 Zeichen

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

APL ( 25 17)

↑t/⍨t≡∘⌽¨t←⍕¨0,⍳⎕
Marinus
quelle
3

Javascript 122 108 107 Zeichen ...

Ich bin mir sicher, dass dies mehr Golf gespielt werden kann - ich bin neu in diesem Bereich!

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

oder

n=prompt(o=[]);i=-1;while(i++<n)if(i+''==(i+'').split("").reverse().join(""))o.push(i);alert(o.join("\n"));
Thomas Clayson
quelle
Nun, für den Anfang sind die vars nicht erforderlich, Sie können die Dinge einfach global machen. Auch prompt()nicht streng Parameter benötigen.
Ahnungslos
Sie können jedoch Parameter verwenden prompt(), um ein Semikolon zu speichern : n=prompt(o=[]);.
Mellamokb
Auch Sie haben noch eine var i=0, die die varin Ihrem entfernt haben kann for.
Mellamokb
1
Der Trick ist, dass vor dem Hinzufügen von 1 zu i++<nverglichen . Somit läuft es den ganzen Weg nach . Wenn Sie bei anhalten möchten, würden Sie stattdessen verwenden. i<nii=ni=n-1++i<n
Mellamokb
1
alert(o.join(" "))muss alert(o.join("\n"))den Spezifikationen entsprechen. Fügen Sie Ihrer Charakterzahl 1 hinzu, wenn Sie dies beheben.
Thomas Eding
3

Perl - 43 Zeichen

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

Dies ist mein erster Versuch, Code-Golf zu spielen, daher bin ich mir ziemlich sicher, dass ein Perl-Profi Golf spielen könnte.

Gurzo
quelle
3

Haskell 66 Zeichen

main=do n<-readLn;mapM_ putStrLn[s|s<-map show[0..n],s==reverse s]
Thomas Eding
quelle
Der Name der Sprache wurde falsch geschrieben ...
ewigmatt
Behoben (Füllzeichen)
Thomas Eding
2

PHP 64 58

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

$ _GET ['n'] wurde für die Befehlszeileneingabe in $ argv [1] geändert.

Thomas Clayson
quelle
2

Scala 59

(0 to readInt)filter(x=>""+x==(""+x).reverse)mkString("\n")
Benutzer unbekannt
quelle
Ich kenne keine Scala, aber druckt das wirklich auf stdout? Ich hätte gedacht, dass es ein Ausdruck ist, der eine Zeichenfolge zurückgibt.
Omar
In der interaktiven Scala REPL ja. Sie können es hier auf simplyscala.com testen, müssen es jedoch readIntonline durch eine konkrete Nummer ersetzen .
Benutzer unbekannt
2

PHP, 59 55 53 Zeichen

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

Verwendung

php palindromic.php 500

Edit: danke Thomas

Alfwed
quelle
Sie können die {s um die for-Schleife entfernen und das Leerzeichen entfernen echo "$i\n", um zu erhalten echo"$i\n". Das erspart Ihnen ein paar Zeichen. Wenn Sie frech sein möchten, können Sie auch \nfür `` wechseln und ein Zeichen speichern.
Thomas Clayson
2

C, 98 Zeichen

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;}
saeedn
quelle
2

k (23 Zeichen)

{i@&{&/i=|i:$x}'i:!1+x}
skeevey
quelle
2

Mathematica 61

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

Befunge, 97 (Rastergröße 37x4 = 148)

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

Haben Sie eine bessere Antwort auf diese Frage. Dies ist speziell Befunge-93; Mit Befunge-98 könnte ich es wahrscheinlich noch kompakter machen. Ich werde das in eine zukünftige Bearbeitung aufnehmen.

Da Sie in Befunge keine Zeichenfolgen bearbeiten können, war das Beste, was ich tun konnte, die Umkehrung der Ziffern jeder Zahl zu berechnen (was ich überrascht bin, dass ich ohne pund auskommen konnte g) und sie mit der ursprünglichen Zahl zu vergleichen. Die Ziffernumkehr nimmt den größten Teil des Codes ein (im Grunde die gesamte dritte und vierte Zeile).

Beachten Sie, dass das Programm in seiner jetzigen Form die Zahlen von der Eingabe bis 0 rückwärts druckt. Wenn dies eine große Sache ist, lassen Sie es mich wissen. (Die Herausforderung besteht nur darin, sie aufzuzählen, nicht speziell in aufsteigender Reihenfolge.)

Kasran
quelle
+1. Zeilen können \nalleine geschlossen werden , sodass sie 94 Byte lang sind. Ich denke nicht, dass Ihre "Gittergröße" eine besondere Relevanz hat.
Har-Wradim
2

05AB1E , 5 Bytes (nicht konkurrierend)

Die Sprache datiert die Herausforderung nach und ist daher nicht konkurrierend . Code:

ƒNÂQ–

Erläuterung:

ƒ      # 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

Verwendet die CP-1252- Codierung. Probieren Sie es online aus! .

Adnan
quelle
LʒÂQist 4, aber immer noch nicht konkurrierend.
Magic Octopus Urn
2

Brachylog (2), Frage nach den Sprachdaten:

Mit dem in der Frage angegebenen E / A-Format 8 Bytes

≥ℕA↔A≜ẉ⊥

Probieren Sie es online aus!

Mit modernen PPCG-E / A-Regeln 4 Bytes

≥ℕ.↔

Probieren Sie es online aus!

Dies ist eine Funktion, die alle Ausgaben generiert, kein vollständiges Programm wie im vorherigen Beispiel, und daher nicht der angegebenen Spezifikation entspricht, aber ich dachte, ich würde zeigen, wie das Programm aussehen würde, wenn die Frage geschrieben worden wäre nach modernen E / A-Standards (die die Verwendung von Funktionen und die Ausgabe über Generatoren ermöglichen).

Erläuterung

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

Für die vollständige Programmversion erstellen wir eine temporäre Variable A, um die Ausgabe zu speichern, sie explizit zu kennzeichnen (dies erfolgt implizit für das Hauptprädikat eines Programms) und verwenden die bekannte ẉ⊥Technik zum Ausgeben der Elemente eines Generators an die Standardausgabe.


quelle
Wann konnten Sie nach modernen PPCG-E / A-Regeln einen Generator als Übermittlung verwenden?
Undichte Nonne
@LeakyNun: Ich habe den Vorschlag am 30. November 2016 gemacht , aber der Konsens ist, dass sie zu diesem Zeitpunkt bereits legal waren (nur nicht dokumentiert). Wir haben eine explizite Regel, die sie jetzt erlaubt; Während des größten Teils des Jahres 2016 waren sie nicht ausdrücklich erlaubt und auch nicht ausdrücklich verboten.
Na ja, ich verstehe.
Undichte Nonne
1

Python

n=raw_input('')
for a in range(0,int(n)+1):
    r=str(a)
    if str(a)==r[::-1]:
        print r
user1027046
quelle
Hmm ... 232 Zeichen sind nicht wirklich sehr wettbewerbsfähig. Vielleicht könnten Sie die Variablennamen auf ein Zeichen reduzieren und die Leerzeichen zwischen den Variablen und Operatoren löschen?
Gareth
Gut gemacht. Einige gute Tipps zum Golfen Python finden Sie in dieser Frage: codegolf.stackexchange.com/questions/54/…
Gareth
Sie können n loswerden - ersetzen Sie einfach int (n) durch int (raw_input ()) - und Sie können str (a) in der if-Anweisung in r ändern
Omar
1

Groovy, 83

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

Q (34 Zeichen)

Übergeben Sie n anstelle von n + 1 als Argument für diese Q-Lösung.

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

Q, 32

{a(&)a~'((|:)')a:((-3!)')(!)1+x}
tmartin
quelle
1

Q (33)

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

Wahrscheinlich ein besserer Weg, dies zu tun, aber trotzdem, Beispielverwendung (Sie geben n + 1 ein, um zu n zu gelangen):

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

Vorschlag von tmartin, bringt es auf 29:

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

Gleiche Verwendung.

sinedcm
quelle
1

Python, 106 Zeichen

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)

Verwendung:

python a.py 500
Ashwini Chaudhary
quelle
1

C # ( 217 214 191 Zeichen)

Golfversion:

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

Lesbar:

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

Dies druckt Palindrome in absteigender Reihenfolge unter Verwendung des Operators n -> 0 aus. (wenn n auf 0 geht).

* Die bearbeitete Version ersetzt do ... während mit while und spart 3 Zeichen, aber jetzt müssen Sie mit n + 1 eingeben.

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

* bearbeitet: Es wurde eine bessere Möglichkeit gefunden, Zeichenfolgen umzukehren, ohne sie in ein Array zu konvertieren:

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

Lesbar:

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

PHP 53

Kann 53 niedriger sein? Vier verschiedene Optionen:

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

Wenn du funky werden willst ...

PHP 47

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

Sie müssen den Fehlertext ignorieren. Die Palindromnummern werden jedoch weiterhin in der Befehlszeile ausgegeben.

jdstankosky
quelle
1

Pyth, 11

VhQIq`N_`NN

Beispiel:

$ 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
isaacg
quelle