Trova il numero palindromico più vicino


22

Dato un numero N , output / return X in modo che N + X sia un palindromo, dove | X | deve essere il più piccolo possibile.

Palindromo: un numero è un palindromo, se la sua sequenza di cifre è la stessa quando li legge da sinistra a destra come quando legge da destra a sinistra.
95359e 6548456sono simmetrici 123e 2424non lo sono. I numeri con zeri iniziali come 020non sono un palindromo.

L'input è un numero intero positivo inferiore a 10 15 . Leggilo da stdin, come parametro-metodo, qualunque cosa.

L'output deve essere un numero intero (positivo o negativo) e dovrebbe essere 0 se l'input è già un palindrom. Puoi scrivere il tuo output su stdout, restituirlo da una funzione o qualunque cosa ti piaccia. Se sono presenti 2 numeri (ad es. 2E -2) che soddisfano i requisiti, emetterne solo uno.

Esempi:

Input             Output
3                 0
234               -2
1299931           -10
126               5 or -5 (only one of them)

Presumibilmente se un numero si trova a metà strada tra i due palindromi più vicini, o è un risultato accettabile? Ad esempio per N=10l'output può essere X=-1o X=1?
Peter Taylor,

@PeterTaylor Sì, deve solo essere il più piccolo possibile.
CommonGuy

Risposte:


9

Pyth , 26 20

Lnb_bWP`+QZ=Z-g0ZZ)Z

Aggiornato per soddisfare le nuove regole.

Il programma funziona in un ciclo infinito che verifica ogni possibile incremento, nell'ordine 0, -1, 1, -2, -2 ...

Spiegazione:

Q=eval(input())     implicit
Z=0                 implicit
Lnb_b               def P(b): return b != rev(b)
WP`+QZ              while P(repr(Q+Z)):
=Z-g0ZZ             Z=(0>=Z)-Z
)                   <end while>
Z                   print(Z)

Esempio di esecuzione:

python3 pyth.py programs/palin.pyth <<< 965376457643450
-2969881

Ci sono voluti 23 secondi.


Soluzione bonus, conteggio dello stesso personaggio:

Wn`+QZ_`+QZ=Z-g0ZZ)Z

Solo per farti sapere, le regole sono cambiate per trovare il palindromo più vicino (in entrambe le direzioni). Ma immagino che da quando hai pubblicato prima della modifica della regola non c'è alcun obbligo per te di risolverlo.
Martin Ender,

Potrebbe salvare i caratteri per scorrere Z attraverso [0, 1, -1, 2, -2, ...]un aggiornamento Z=-Z+(Z<0)?
xnor

Sì, ci ho pensato in modo indipendente.
isaacg,

@xnor Aggiunto. Filler.
isaacg,

Ok bello. Hai anche cercato di mettere nel frattempo la negazione della condizione? E forse salvando un repr applicandolo all'ingresso su P?
xnor

7

Rubino, 111 84 byte

i=$*[j=-1].to_i
r=->j{s=(i+j).to_s
abort(j.to_s)if s==s.reverse}
loop{r[j+=1]
r[-j]}

Prende il numero come unico argomento della riga di comando.


Che ne dici di questo sito ?
CommonGuy

@Manu Grazie non lo sapevo! La mia presentazione funziona per quanto posso dire.
Martin Ender,

6

CJam, 34 29 25 byte

q~:I!{:R1<R-RI+`_W%=!}g;R

Provalo online.

Esempi

$ cjam palfind.cjam <<< 120; echo
1
$ cjam palfind.cjam <<< 121; echo
0
$ cjam palfind.cjam <<< 122; echo
-1

Come funziona

q~:I    " Read from STDIN, evaluate and save the result in “I”.                           ";
!       " Compute the logical NOT (0 since the integer is positive).                      ";
{       "                                                                                 ";
  :R    " Save the topmost integer in “R”.                                                ";
  1<R-  " Compute (R < 1) - R. This produces the sequence 0 → 1 → -1 → 2 → -2 → … .       ";
  RI+   " Push I + R.                                                                     ";
  `_    " Cast to string and push a copy.                                                 ";
  W%=!  " Check if the reversed copy matches the original.                                ";
}g      " If it doesn't, repeat the loop.                                                 ";
;R      " Discard the integer on the stack and push “R”.                                  ";

5

Haskell - 62

f n=[x-n|x<-[0..]>>= \v->[n+v,n-v],show x==(reverse.show)x]!!0

Salvalo in un file chiamato golf.hse poi testalo con ghci:

*Main> :l golf
[1 of 1] Compiling Main             ( golf.hs, interpreted )
Ok, modules loaded: Main.
*Main> map f [1000..1050]
[-1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,-21,-22,-23,-24,-25,-26,-27,-28,-29,-30,-31,-32,-33,-34,-35,-36,-37,-38,-39,-40,-41,-42,-43,-44,-45,-46,-47,-48,-49]
*Main> 

che ne dici di scrivere x<-[0..]>>=(\v->[n+v,n-v])? È più corto e lo rende un one-liner
orgoglioso haskeller il

@proudhaskeller Grazie! Trucco molto elegante con la lista monade.
Ray,

4

Python 2.7, 98 , 81

Crea un palindromo dal numero di input, quindi sottrae quello dall'input per trovare il delta.

def f(n):
    m=map(int,str(n));l=len(m)/2;m[-l:]=m[l-1::-1];return int(`m`[1::3])-n

utilizzo:

print f(3)          # 0
print f(234)        # -2
print f(2342)       # -10
print f(129931)     # -10
print f(100000)     # 1

non golfato e annotato:

def f(n):                      # take a integer n
    m=map(int,str(n));         # convert n into array of ints
    l=len(m)/2;                # get half the length of the array of ints
    m[-l:]=m[l-1::-1];         # replace the last elements with the first elements reversed
    return int(`m`[1::3])-n    # convert array of ints backinto single int and subtract the original number to find the delta

Questo non dà il delta più piccolo. f(19) = -8(palindromo 11), dove dovrebbe essere +3per fare 22.
Geobits il

Sì, i valori 10-100 mi daranno un problema con questo approccio
Moop

Non sono solo quelli. Allo stesso modo, 199999 dà -8 invece di 3, 9911 dà 88 invece di -22. Il semplice invertire le prime cifre non funziona per ottenere il delta più piccolo in molti casi.
Geobits il

beh, non direi molti casi, scommetto il 99,9% dei casi per cui funziona. Ma sì, deve funzionare per il 100% dei casi
Moop,

@Geobits. Certo, quindi tasso di errore del 27% lì. Ma quando arrivi ai 100000000 il tasso di errore diminuisce considerevolmente. Sarebbe interessante calcolare il tasso di errore effettivo.
Moop,

4

Perl 5, 93 89 88 87 75 63 44

$/=($/<1)-$/while$_+$/-reverse$_+$/;$_=$/+0

Ungolfed:

while($input + $adjustment - reverse($input + $adjustment)) {
    $adjustment = ($adjustment < 1) - $adjustment;   
}
$input = $adjustment + 0;  ## gives 0 if $adj is undefined (when $input is a palindrome)
print $input;  ## implicit

Grazie ai suggerimenti di Dennis, è arrivato a 43 + -p = 44


1
1. -$aè più corto di $a*-1. 2. Se lo usi ($a<1), non è necessario ? :$a++. 3. Se si utilizza l' -popzione $_=<>ed print$_è implicito, è possibile eliminare la prima istruzione e modificare l'ultima in $_=$a+0.
Dennis,

@Dennis Nice trova. Questo è solo il mio secondo tentativo di code golf, quindi apprezza il consiglio!
user0721090601

È consuetudine contare lo -pswitch come un byte extra, ma è possibile recuperarlo utilizzando ($a<1)-$ainvece di -$a+($a<1).
Dennis,

@Dennis Pensavo di usare quel metodo basato sulla tua risposta sopra, ma il guadagno si perde perché richiede uno spazio primawhile
user0721090601

Se usi $/invece di $a, funzionerà.
Dennis,


3

Java: 127 109

Iterazione di base, controllo sia negativo che positivo prima di passare al candidato successivo.

int p(long n){int i=0;for(;!(n+i+"").equals(new StringBuilder(n+i+"").reverse()+"");i=i<1?-i+1:-i);return i;}

Per input 123456789012345, ritorna -1358024allo stesso palindromo 123456787654321.

Interruzioni di riga:

int p(long n){
    int i=0;
    for(;!(n+i+"").equals(new StringBuilder(n+i+"").reverse()+"");i=i<1?-i+1:-i);
    return i;
}   

Funziona n+i+""e salva le parentesi? Penso che la precedenza dovrebbe essere corretta.
Peter Taylor,

@PeterTaylor Sì, e ne ho ricevuto un altro toString(). Grazie :)
Geobits il

1
Posso rubare quel dolce i=i<1?-i+1:-i? Lo chiamerò "indecrement".
Jacob,

@Jacob Go for it;)
Geobits,

3

Clojure, 92

Prende il primo da una sequenza pigra che funziona da 0 in poi e include solo valori che rendono i palindromi:

(defn p[x](first(for[i(range)j[1 -1]k[(* i j)]s[(str(+ x k))]:when(=(seq s)(reverse s))]k)))

Sessione REPL-LPER:

golf-flog> (p 3)
0
golf-flog> (p 10)
1
golf-flog> (p 234)
-2
golf-flog> (p 1299931)
-10
golf-flog> (p (bigint 1e15))
1

2

JavaScript, 175 136 117

Semplice. pritorna vero se un dato numero è palindromo, fcerca il più vicino.

EDIT: L' ho anche giocato un po 'di più grazie al dolce trucco "indecrement" di Geobits nella risposta Java qui.

p=function(n){return (s=''+n).split('').reverse().join('')==s}
f=function(n){for(i=0;!p(n+i);i=i<1?-i+1:-i);return i}

Uso:

f(3)
f(234)
f(1299931)

104 in ES6: p=n=>[...s=''+n].reverse().join('')==s f=n=>{r=t=0;while(!(p(n+r++)||p(n+t--)));return p(n+r-1)?r-1:t+1}:)
William Barbosa,

1
Scommetto che è. functione returnsono parole riservate terribilmente lunghe ...
Jacob,

1
Ci scusiamo per il ritardo di 3 anni, ma giocato a golf a 68 in ES6: s=>{for(i=0;[...s+i+""].reverse().join``!=s+i;i=i<0?-i:~i);r‌​eturn i}. Stack-overflow incline 61 f=(s,i=0)=>[...s+i+""].reverse().join``==s+i?i:f(s,i<0?-i:~i‌​)
:;

2

J - 49 caratteri

Una funzione che associa numeri interi a numeri interi.

((0{g#f)>:@]^:(+:/@g=.(-:|.)@":@+f=._1 1*])^:_&0)

Ecco come potresti ottenere questo risultato, in tre parti. Questo è il display di J REPL: le righe rientrate sono input dell'utente e quelle superate sono REPL. E sì, J scrive il segno negativo con un trattino basso _.

   236 (_1 1*]) 4                          NB. -ve and +ve of right arg
_4 4
   236 (f=._1 1*]) 4                       NB. name it f
_4 4
   236 (+f=._1 1*]) 4                      NB. add left to each
232 240
   236 (":@+f=._1 1*]) 4                   NB. conv each to string
232
240
   236 ((-:|.)@":@+f=._1 1*]) 4            NB. palindrome? on each
1 0
   236 (g=.(-:|.)@":@+f=._1 1*]) 4         NB. name it g
1 0
   236 (+:/@g=.(-:|.)@":@+f=._1 1*]) 4     NB. logical NOR (result 1 if both=0)
0
   palin =: (+:/@g=.(-:|.)@":@+f=._1 1*])


   236 (>:@]) 0                            NB. increment right
1
   236 (>:@]^:2) 0                         NB. functional power
2
   236 (>:@]^:(236 palin 3)) 3             NB. power 1 if no palindromes
4
   236 (>:@]^:(236 palin 4)) 4             NB. power 0 if has palindrome
4
   236 (>:@]^:palin) 4                     NB. syntactic sugar
4
   236 (>:@]^:palin^:_) 0                  NB. increment until palindrome, start with 0
4
   (>:@]^:(+:/@g=.(-:|.)@":@+f=._1 1*])^:_&0) 236    NB. bind 0
4
   delta =: >:@]^:(+:/@g=.(-:|.)@":@+f=._1 1*])^:_&0


   ((f) delta) 236       NB. f=: -ve and +ve
_4 4
   ((g) delta) 236       NB. g=: which are palindromes
1 0
   ((g#f) delta) 236     NB. select the palindromes
_4
   ((g#f) delta) 126     NB. what if both are equal?
_5 5
   ((0{g#f) delta) 126   NB. take the first element
_5
   ((0{g#f)>:@]^:(+:/@g=.(-:|.)@":@+f=._1 1*])^:_&0) 236   NB. it works!
_4

Esempi:

   pal =: ((0{g#f)>:@]^:(+:/@g=.(-:|.)@":@+f=._1 1*])^:_&0)
   pal 3
0
   pal every 234 1299931 126
_2 _10 _5
   pal 2424
18
   2424 + pal 2424
2442

Puoi anche fare in modo che il golf preferisca la soluzione positiva a quella negativa quando sono uguali, cambiando _1 1in 1 _1.


2

Javascript 86

n=>{s=(n+'').split('');for(i=0,j=s.length-1;i<j;i++,j--)s[j]=s[i];return s.join('')-n}

Questa è la mia prima sfida con il codegolf. Spero che questa soluzione sia accettabile.

ungolfed: n => { s = (n + '').split(''); for (i = 0, j = s.length - 1; i < j; i++,j--) s[j] = s[i]; return s.join('') - n } Spiegazione:
Convertire l'input n in String e dividere.
Scorrere su entrambi i lati dell'array risultante e copiare la cifra da s [i] a s [j] fino a i <j. Ciò comporterà il nostro palindromo desiderato.
Unire nuovamente l'array e sottrarre n per ottenere x


Benvenuti in PPCG! Questa risposta ha la struttura giusta (l'invio di funzioni normalmente funziona meglio in JavaScript) e sembra dare anche le risposte giuste. Il tuo post potrebbe essere migliorato tramite una spiegazione del perché questo algoritmo funziona (non è ovvio per me perché lo fa), ma al momento va bene.

Grazie, Iive ha aggiunto una piccola spiegazione e una versione non
golfata

puoi cambiare s=(n+'').split('')in s=[...(n+'')]. radersi 5 byte
Brian H.

Stavo pensando allo stesso modo, ma 19 sembra essere il primo controesempio: f(19)=3perché 22 è il palindromico più vicino, ma la funzione restituisce -8 per convertire 19 in 11. btw [...n+'']funzionerà anche per -2 byte extra
Shieru Asakoto

2

JavaScript (ES6), 84 byte

n=>[...(''+n)].reduce((p,c,i,s,m=s.length-1)=>i<m/2?p+(c-s[m-i])*Math.pow(10,i):p,0)

La mia prima sfida di golf! So che la soluzione più breve ed elegante è già stata pubblicata da @Brian H., ma questo è un altro approccio.

Codice test


1
Benvenuti in PPCG!
Steadybox,

2

Brachylog , 8 byte

;.≜+A↔A∧

Provalo online!

Il predicato dell'etichetta è di vitale importanza qui, perché usandolo sull'output prima che accada qualsiasi altra cosa (anche se è realmente invocato nell'elenco che contiene l'input e l'output), il suo valore assoluto è minimizzato, perché invece di fare qualcosa di più intelligente in base al vincola il programma a indovinare ogni numero intero a partire da 0 fino a quando non trova quello che funziona. Se viene omesso, viene visualizzato sul programma che 0 è un gradevole palindromo e produrrà sempre il negativo dell'input.

            The input
;  +        plus
 .          the output
  ≜         which is instantiated immediately
    A       is A
     ↔      which reversed
      A     is still A
       ∧    but isn't necessarily the output.

1

Groovy - 131 111 107 caratteri

golfed:

n=args[0] as long;a=n;b=n;f={if("$it"=="$it".reverse()){println it-n;System.exit 0}};while(1){f a++;f b--}

esecuzioni campione:

bash-2.02$ groovy P.groovy  0
0
bash-2.02$ groovy P.groovy  234
-2
bash-2.02$ groovy P.groovy  1299931
-10
bash-2.02$ groovy P.groovy  123456789012345
-1358024

Ungolfed:

n=args[0] as long
a=n
b=n
f={ if("$it"=="$it".reverse()) {
       println it-n
       System.exit 0
    }
}

while(1) {
    f a++
    f b--
}

1

Python 2 - 76

i=input()
print sorted([r-i for r in range(2*i)if`r`==`r`[::-1]],key=abs)[0]

Ottiene il numero di input e genera un elenco delle differenze tra l'input e ogni numero tra 0e 2*isolo se il numero è palindromico.

Quindi ordina l'elenco per valore assoluto e stampa il primo elemento.


Non credo che il range (2 * i) funzionerà per input di grandi dimensioni.
Moop,

È possibile utilizzare mincon un argomento parola chiave anziché l'ordinamento.
xnor

Per utilizzare intervalli così lunghi, è necessario passare a xrange, che è un generatore, e min, quali cortocircuiti, per evitare di sovraccaricare la memoria.
isaacg,

1

C ++ 289

La funzione P controlla i palindromi usando il <algorithm>metodo.

Ungolfed:

bool P(int32_t i)
{
string a,b;
stringstream ss;
ss<<i;
ss>>a;
b=a;
reverse_copy(b.begin(),b.end(),b.begin());
int k=a.compare(b);
return (k==0);
}
int main()
{
int32_t n; cin>>n;
int32_t x=0,y=n,z=n,ans=x;
while(1)
{
if(P(y)){ans=x; break;}
if(P(z)){ans=-1*x; break;}
x++;
y+=x;
z-=x;
}
cout<<ans<<endl;
return 0;
}

Sarà più breve mettere tutto su una riga.
cat

1

Mathematica 75

Probabilmente si può giocare a golf di più ..

p = (j=0; b=#; While[a=IntegerDigits[b]; b += ++j(-1)^j; a!=Reverse[a]]; #-b+(-1)^j) &

Spazi non conteggiati e non necessari.


1

CoffeeScript: 73

(x)->(x+="")[0...(y=x.length/2)]+x[0...-y].split("").reverse().join("")-x

Spiegazione: Questo sfrutta il fatto che se abbiamo un numero di lunghezza dispari (diciamo 1234567), x.slice(0, y)non includeremo la cifra media ma lo x.slice(0, -y)faremo. JavaScript sliceprobabilmente non dovrebbe funzionare in questo modo, ma funziona.

Mi aspettavo che CoffeeScript / JavaScript avesse un modo migliore per invertire una stringa, ma il metodo split / reverse / join sembra essere tutto ciò che c'è.


1

PHP, 56 byte

for(;strrev($i+$n=$argv[1])-$n-$i;$i=($i<1)-$i);echo+$i;

accetta input dall'argomento della riga di comando; corri con -nr.


1

javascript 68 byte

(n,s=[...(''+n)],j=s.length)=>s.map((v,i,)=>i>--j?s[j]:v).join('')-n

Enormi oggetti di scena a @Beldraith per l'algoritmo, sto pubblicando questo come risposta, perché mi ci è voluto del tempo per farlo funzionare in una singola istruzione.

Eventuali suggerimenti sono benvenuti;)

ungolfed

(
    n, // input
    s=[...(''+n)], // input split to array of chars
    j=s.length, // highest available index in s
)=> 
s.map( // this will return a new array, without modifying s
    (
        v, // value of current iteration
        i, // index of current iteration
    )=> i > --j ? s[j] : v
).join('') - n

@Beldraith spero che non ti dispiaccia portarmi la tua risposta a una singola funzione di dichiarazione, mi sono divertito molto a farlo: D
Brian H.

Golfable to 63:, (n,s=[...n+''],j=s.length)=>s.map((v,i)=>i>--j?s[j]:v).join``-nma esiste anche un controesempio non ovvio (19);)
Shieru Asakoto,

ahi, non sono solo 19, è un numero che termina con un 9 e dovrebbe ottenere un risultato positivo
Brian H.

0

Python, 109

def q(x,z):
 r=lambda s:int(str(s)[::-1])
 if x+z==r(x+z):return z
 if x-z==r(x-z):return -z
 return q(x,z+1)

questo genera un errore durante l'esecuzione (superata la profondità massima di ricorsione)
Moop,

Questo non è un errore nel mio codice. Supererà la profondità massima di ricorsione su un numero enorme, ma funziona su numeri di dimensioni decenti. Poiché nelle specifiche non esiste un caso di test massimo, questa dovrebbe essere comunque considerata una soluzione valida.
RageCage,

1
Il numero 123456789causa un errore, ben al di sotto del limite di 10 ^ 15 pubblicato nella domanda.
Moop,

1
Potresti facilmente trasformare la ricorsione in un ciclo ed evitare del tutto questo problema
Moop,

1
L'esecuzione di questo nell'implementazione Stackless Python dovrebbe evitare il problema della profondità di ricorsione.
xnor

0

QBIC , 38 byte, nc

:{[-1,1,2|A=!a+b*c$~A=_fA||_xb*c]c=c+1

Spiegazione:

Il codice legge un input e quindi applica un modificatore. Quindi verifica se il modificatore numero + è un palindromo. Quindi, lancia il sospiro sul modificatore, lo riapplica e prova di nuovo.

:{        Read the input value, start a DO-loop
[-1,1,2|  FOR (b = -1; b <= 1; b+=2 )
A=!a+b*c$ Get a string from the input number, 
            plus modifier c (which is 0 at the start of QBIC)
            times -1 or 1, depending on b's iteration.
~A=_fA|   if that string is equal to it's own reversed version
|_xb*c]   then Quit, printing the modifier * sign
c=c+1     Increment the modifoer and DO-LOOP again.
          The DO-loop is implicitly closed by QBIC at EOF

0

Bash, 73 byte

i=$1;x=$i;while((x-10#$(rev<<<$x)));do ((r=(1>r)-r,x=r+i));done;echo $x

L'input va al 1 ° argomento della riga di comando:

foo.sh 123456789

0

Axiom, 720 594 412 byte

R(x)==>return x;p(r,a)==(n:=#(a::String);if r<0 then(a=0=>R a;n=1 or a=10^(n-1)=>R(a-1);a=10^(n-1)+1=>R(a-2));if r>0 then(n=1 and a<9=>R(a+1);a=10^n-1=>R(a+2));r=0 and n=1=>1;v:=a quo 10^(n quo 2);repeat(c:=v;w:=(n rem 2>0=>v quo 10;v);repeat(c:=10*c+w rem 10;w:=w quo 10;w=0=>break);r<0=>(c<a=>R c;v:=v-1);r>0=>(c>a=>R c;v:=v+1);R(c=a=>1;0));c)
D(a:NNI):INT==(p(0,a)=1=>0;w:=p(-1,a);s:=p(1,a);a-w<s-a=>w-a;s-a)

Il conteggio dei byte è di nuovo questo, ma l'algo sarebbe O (log (n)) perché dipenderebbe solo dalla lunghezza delle cifre del suo input (e log10 (n) sarebbe vicino alla lunghezza delle cifre decimali di n ). ungolfed e risultati

-- Ritorna il precedente numero palidrome rispetto ad 'a' NNI, se r<0
--                               ha la particolarita' palpn(-1,0) = 0
-- Ritorna il successivo numero palidrome rispetto ad 'a' NNI, se r>0
-- Se r=0 ritorna 1 se 'a' e' palindrome, 0 se 'a' non e' palindrome
R(x)==>return x
palpn(r,a)==
    n:=#(a::String) -- n la lunghezza in cifre di base 10 di a
    if r<0 then(a=0        =>R a;n=1 or a=10^(n-1)=>R(a-1);a=10^(n-1)+1=>R(a-2))
    if r>0 then(n=1 and a<9=>R(a+1);    a=10^n-1  =>R(a+2))
    r=0  and n=1=>1
    v:=a quo 10^(n quo 2)
    repeat -- because here not there is a goto instruction i have to use repeat
        c:=v;w:=(n rem 2>0=>v quo 10;v)
        repeat
          c:=10*c+w rem 10
          w:=w quo 10
          w=0=>break
        r<0=>(c<a=>R c;v:=v-1)
        r>0=>(c>a=>R c;v:=v+1)
        R(c=a=>1;0) -- for r==0
    c

-- Ritorna la distanza minima tra l'input 'a' e una palindrome:
--        0 se 'a' e' una palindrome
--        r numero con segno negativo se tale palindrome precede 'a'
--        r numero con segno positivo se tale palindrome e' successiva ad 'a'
palDistance(a:NNI):INT==
    palpn(0,a)=1=>0
    p:=palpn(-1,a);s:=palpn(1,a)
    a-p<s-a=>p-a
    s-a

--------------------------------------

(3) -> [[i,D(i)] for i in [3,10,234,1299931,126]]
   (3)  [[3,0],[10,1],[234,- 2],[1299931,- 10],[126,5]]
                                                  Type: List List Integer
(4) -> D 7978986575546463645758676970789089064235234524548028408198401348930489104890184018410
   (4)  - 199223418598327604580355025458434427119613
                                                            Type: Integer
(5) ->  p(0,7978986575546463645758676970789089064235234524548028408198401348930489104890184018410+%)
   (5)  1
                                                    Type: PositiveInteger
(6) -> 7978986575546463645758676970789089064235234524548028408198401348930489104890184018410+%%(-2)
   (6)
       7978986575546463645758676970789089064235234325324609809870796768575463646455756898797
                                                    Type: PositiveInteger

Quelli avevano parlato di nuovo (o per la completa eliminazione) dell'uso di goto per i linguaggi dei computer, per il mio modesto programmatore di hobby hobby: sono incompetenti nell'informatica !!!!
RosLuP,

0

Buccia , 16 12 9 byte

ḟoS=↔+⁰İZ

Grazie @ H.PWiz per -4 byte!

Provalo online!

Spiegazione

ḟ(S=↔+⁰)İZ  -- input ⁰ a number, for example: 126
        İZ  -- built-in integers: [0,1,-1,2,-2...]
ḟ(     )    -- first element that satisfies the following (eg. 5):
     +⁰     --   add element to input: 131
  S=        --   is it equal to itself..
    ↔       --   ..reversed: 131 == 131

0

APL NARS 47 caratteri

r←s a;b
r←0
A:b←⍕a+r⋄→0×⍳b≡⌽b⋄r←-r⋄→A×⍳r<0⋄r+←1⋄→A

questo sopra cerca ma algo non può essere veloce e giusto come g sotto ...

Questo

A:b←⍕a+r⋄→0×⍳b≡⌽b⋄r←-r⋄→A×⍳r<0⋄r+←1⋄→A

è una semplice uscita ad anello solo quando trova b≡⌽b, quindi b è un palindromo di stringhe

  s¨3,10,234,1299931,126
0 1 ¯2 ¯10 5 

∇r←g w;n;a;y;t;o;h;v
         r←0J1
   →0×⍳0≠⍴⍴w⋄→0×⍳''≡0↑w ⍝ if arg is not scalar int>=0→0J1
   →0×⍳(w<0)∨w≠⌊w
   h←{z←⍕⍺⋄q←⍕⍵⋄⍎(z,⌽q)}⍝ h return as digit ⍺⌽⍵
   n←⍴⍕w⋄r← 0
   →0×⍳n≤1              ⍝ arg one digit return r←0
   a←10*⌊n÷2
B: v←a⋄→C×⍳∼2∣n⋄v←a×10
C: t←⌊w÷v ⋄y←⌊w÷a
   o←y h t⋄r←(y+1)h t+1
   →D×⍳∼(∣r-w)<∣o-w⋄r←r-w⋄→0
D: r←o-w
∇

  g¨3,10,234,1299931,126
0 1 ¯2 ¯10 ¯5 


0

Japt , 8 byte

nȥsw}cU

Provalo

nȥsw}cU     :Implicit input of integer U
      cU     :Get the first number in the sequence [U,U-1,U+1,U-2,U+2,...,U-n,U+n]
 È           :That returns true when passed the the following function
  ¥          :  Test for equality with
   s         :  Convert to string
    w        :  Reverse
     }       :End function
n            :Subtract U from the result
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.