Rakamları ve rakamları ters çevirmek


26

> 0 olan bir sayı verilirse, toplamı birleştirilmiş ve ters çevrilmiş tüm basamaklarla (1 .. n) birlikte toplayın ve ekleyin. Örneğin, n = 6 ile:

1 - 6 arasındaki sayılar birleştirilir:

123456

ters:

654321

Bunları bir araya getirmek, 777777 olur. Başka bir örnek n = 11:

1 2 3 4 5 6 7 8 9 10 11 > 1234567891011

ve

11 10 9 8 7 6 5 4 3 2 1 > 1110987654321

Bunları bir araya getirmek, buna yol açar 2345555545332. Bu aynı zamanda A078262 olarak da bilinir .

En kısa kod kazanır!



Bağlantılı mı n, yoksa keyfi olarak büyük tamsayıları desteklemek zorunda mıyız?
LegionMammal978

Bence varsayılan "sınırlıdır max(256,yourlanguagesdefaultintegertypelimit)". Ancak belirtilmelidir.
Hesap MakinesiFeline

@ LegionMammal978 Dilinizin desteklediği kadar yüksek.
Lamaro

Önemli test senaryosu: 10vermesi gereken 23333333231.
Adnan

Yanıtlar:


9

05AB1E, 7 bayt

LDRJsJ+

Çevrimiçi deneyin.

açıklama

LDRJsJ+

L        range from 1 .. input
 D       duplicate
  R      reverse
   JsJ   convert both arrays to strings
      +  add (coerces both strings to ints)

+İç içe bir ekleme yapan listelerde öne çıkan tasarım dizisi ile kafam karıştırarak dizgilere dönüştürüp sonra ekleyerek kendimi çok şaşırtıyorum. Ama sanırım burada işe yaradı! : P
FryAmTheEggman

@FryAmTheEggman Ancak iç içe eklemeyi kaldıracağım. Uyguladığım andan beri hiç bir zaman faydalı olmadı ...
Adnan

3
Sheesh, iki saat boyunca PPCG'den ayrılıyorum ve ben yokken kendinize Aqua Tart'ı yeniden adlandırıyorsunuz ... Ah, bir PPCG kullanıcısının hayatı.
ETHProductions

6

Jöle, 9 bayt

R,U$DF€ḌS

livecoding 


2
Bana mı öyle geliyor yoksa bu kodu gizlice bazı U $ D'leri çalarken mi görüyorum?
gcampbell


4

Pyth, 12 10 bayt

ssMjLk_BSQ

@FryAmTheEggman 2 bayt için teşekkürler !

Qgiriş, bir Shaline dönüşür [1, 2, ..., input()], _Biki kola ayrılır ters _(ters) oluşturmak için [rng, rev(rng)], jLkters haritalar joinile k( "boş bir dizge" değişken olan) sMeşler intüzerinde bu diziyi, ve sson olarak da toplamını hesaplar.


4

JavaScript (ES6), 70 67 64 bayt

a=>(z=[...Array(a)].map((b,c)=>c+1)).join``- -z.reverse().join``

Girdiyi yanlış anlama altında eski kod yapıldığı için gereksinimi karşılaması düzeltildi.


@TimmyD Bir açıklama ekledi.
Mwr247

@ TimmyD OH! > _ <Mücadeleyi yanlış anlamam şudur: Evet, bunu düzeltmek zorunda kalacağım.
Mwr247

@TimmyD Çevrimiçi olmak için yeterince uzun sürdü. Şimdi düzeltildi ve onu yakaladığın için teşekkürler.
Mwr247

Başka bir cevap için belirtildiği gibi, bu yalnızca a parametresi 1 ile 12 arasındaysa işe yarar, bu gerçekten çok azdır
edc65

@ edc65 OP'nin yorumlarıyla bu yeterince büyük.
Mwr247

3

Python 3, 74

DSM sayesinde 6 bayt kaydedildi.

Çok heyecan verici bir şey yok, ürün yelpazesine katılın ve ardından isimlerinize dönüştürün ve ekleyin.

lambda x:sum(int(''.join(list(map(str,range(1,x+1)))[::i]))for i in(1,-1))

3

Retina , 71

Çünkü bu iş için kesinlikle yanlış bir araç.

.+
$*a:$&$*
+`^(a+)a\b(.*)\b1(1+)$
$1 $& $3
 ?(\w)+ ?
$#1
\d+:?
$&$*c
c

Çevrimiçi deneyin.

6'ya kadar olan girişler için çalışır, ancak çevrimiçi tercüman bundan sonra zaman aşımına uğrar.


1
Sen son satırı kaldırarak ve değiştirerek 74 kadar kısaltın olabilir (c)+için c.
daavko

@daavko evet, elbette, teşekkürler!
Dijital Travma,

Ayrıca, $&$*c-> $*cve \d+:?-> \d+ve 70
yaşında.

3

Jolf, 9 bayt

Burada dene! Değiştir ile \x10.

+P►γzjP_γ
    zj    range 1...j
   γ      γ = ^
  ►        ^ .join("")
 P         as a number
+     P_γ  and γ reversed

Ben edebilir türü çevrim etrafında hareket ettirerek golf o muktedir.


Pyth ve kapı tokmağını yendin!
Cyoce

@Cyoce öyleyse yaptım O_O
Conor O'Brien

3

JavaScript (ES6), 67 66 bayt

n=>(a=[...Array(n+1).keys()].slice(1)).join``- -a.reverse().join``

Evet, bu bir boşluk. Ugh. En azından @Downgoat bir baytı kurtarmama yardım etti.


1
++ +- -
İlkini

n => (a = [... Array (n)] _ => n (map -.)) katılmak.- -a.reverse().join
edc65

Not: Basit js aritmetiği kullanılarak, bu, 1 .. 12
edc65

2

Cidden, 12 bayt

,R;Rεj≈@εj≈+

Çevrimiçi deneyin!

Açıklama:

,R;Rεj≈@εj≈+
,R;           push two copies of range(1, input()+1)
   R          reverse one copy
    εj≈@εj≈   concatenate both and cast both to ints
           +  add

2

PowerShell, 35 bayt

param($a)+-join(1..$a)+-join($a..1)

Girdiyi aralıklar ile dönüştürür .., sonra -joinbunları bir araya getirir ve ekler.

Kadar girdi numaraları için çalışacak 138ederken, 139verecektir Infinityve 140bir Dehşet ayrıntılı döküm hatayı dışarı barf yukarıda ve:

Cannot convert value "12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413
5136137138139140" to type "System.Int32". Error: "Value was either too large or too small for an Int32."


2

JavaScript (ES6), 99

Bu, rakamı basamak ekler, böylece javascript'in 53 bit hassasiyetinin üzerindeki sayıları işleyebilir.

n=>eval("for(a=b=c=r='';n;a+=n--)b=n+b;for(i=a.length;i--;r=c%10+r)c=(c>9)-(-a[i]-b[i]);c>9?1+r:r")

Ölçek

f=n=>eval("for(a=b=c=r='';n;a+=n--)b=n+b;for(i=a.length;i--;r=c%10+r)c=(c>9)-(-a[i]-b[i]);c>9?1+r:r")

// Less golfed
U=n=>{
  for(a=b=c=r=''; n; --n)
      b=n+b, a+=n;
  for(i=a.length; i--; r = c%10+r) 
      c=(c>9)-(-a[i]-b[i]);
  return c>9? 1+r : r;
}

function test() {
  var n=+I.value
  R.textContent=f(n)
}  

test()
N: <input id=I value=11 oninput="test()"> -> <span id=R></span>


9 için çalışıyor gibi görünmüyor. Ayrıca, neden cdiğer değişkenlerle başlamıyorsunuz?
Neil

Benim artı oyum var.
Neil


2

MATL , 13 bayt

:tP2:"wVXvU]+

EDIT (20 Mayıs 2016) Bağlantıdaki kod , dilde yapılan son değişiklikler nedeniyle Xzyerine kullanılır Xv.

Çevrimiçi deneyin!

:                % range [1,2,...,n], where n is input
 tP              % duplicate and flip
   2:"     ]     % do this twice
      w          % swap
       V         % convert array of numbers to string with numbers and spaces
        Xv       % remove spaces
          U      % convert to number
            +    % add the two numbers

11 ya da 10 için çalışmaz (İpucu: string'e dönüştürmeden önce menzili tersine çevirir.)
Mama Fun Roll

@ ӍѲꝆΛҐӍΛПҒЦꝆ Teşekkürler! Düzeltildi
Luis Mendo

Harika! Olumlu bir oy ver.
Mama Fun Roll

2

05AB1E , 5 bayt

LJDR+

Açıklama:

L     # Pushes an array containing 1 .. [implicit] input
 J    # Join the array to a string (eg. [1, 2, 3] -> 123)
  D   # Duplicate the array
   R  # Reverse the duplicate
    + # Add them together

Çevrimiçi deneyin!



1

Perl 6 , 25 bayt

{([~] @_=1..$^n)+[R~] @_}
{
  (
    [~]           # reduce with the string concatenation infix op:
    @_ = 1 .. $^n # the range 1 to input ( also stored in @_ )
  )
  +               # add that to
  [R~] @_         # @_ reduced in reverse
}

Kullanımı:

for 6, 11, 12 -> $n {
  say {([~] @_=1..$^n)+[R~] @_}( $n )
}
777777
2345555545332
244567776755433

Sanırım bunun $nyerine$^n
andlrc ile

@ dev-null Bloğun bir girişi olmasını istemezsem olmaz. bu -> $n {farklı bir şey $^n.
Brad Gilbert

1

R, 34 60 64 bayt

f=pryr::f;g=f(as.numeric(paste(x,collapse='')));f(g(1:n)+g(n:1))

pryrPaketin yüklü olduğunu varsayar . bu verirf işlevler oluşturmak için bir steno olarak .

Düzenleme 26 bayt ekledi, ancak tamamen yanlış bir şey değil, çalışan bir işlev döndürür.

Düzenleme, strtoi'nin (daha önce kullanılan) döndürdüğü n = 10'un üzerindeki durumları ele almak için başka bir 4 bayt ekledi NA


1

Lua, 57

a=''b=''for i=1,...do a=a..i b=b.. ...-i+1 end return a+b

1

Lua, 53 Bayt

Bu program nbir komut satırı argümanı olarak alır .

s=""r=s for i=1,arg[1]do r,s=i..r,s..i end print(s+r)

Ondalık kısmı olan 777777.0bir sayı çıktısının tamam olduğunu kabul ettim (formda, çünkü bu, lua'da bir sayı çıktısının varsayılan yoludur (integer ve float arasında bir ayrım yoktur)


Onun ters dize kendisi değil, rakamlar. Kodunuz n> = 10 ile başarısız oluyor.
07:47

@Moop 1 byte ^^ 'fiyata düzeltildi.
Yorumunuz

Arg [1] yerine 3 r daha tasarruf edebilirsiniz, bunun için ters konserde iyi iş çıkardın, cevabımı düşünmedim. +1
Moop

@Moop Yazınızı gördüm, güzel kullandım, böyle kullanabileceğinizi bile bilmiyordum ...! Şimdilik bu şekilde devam edeceğim, çünkü çevrimiçi derleyiciden başka bir şey kullanamıyorum ve bununla başa çıkamıyor. answer :))
Katenkyo

1

Perl 5, 37 bayt

25 bayt, artı 1 -pve 11-MList::Gen

$_=<[.]1..$_>+<[R.]1..$_>

Önceki çözüm, 40 bayt: 39, artı bir -p

@a=reverse@_=1..$_;$"=$\;$_="@a"+"@_"

1

Perl, 36 bayt

İçin +1 içerir -p

STDIN ile koş

perl -p reverse.pl <<< 6

reverse.pl

$_=eval join"",map{abs||"+"}-$_..$_

1

Dyalog APL , 17 bayt

+/⍎¨∊¨⍕¨¨x(⌽x←⍳⎕)

istemi girişi için
giriş dek 'numaralandırmak
x←x mağaza listesinden
x ters
x(... )orijinal liste ile başa getirebilir ters liste
⍕¨¨karakter dizesine her listenin her sayı dönüştürmek
∊¨tek karakter dizeleri içine karakter dizeleri her listesini yapmak
⍎¨bir numara haline her karakter dizesini dönüştürmek
+/toplamı iki sayı .



0

Retina, 80 bayt (ISO 8859-1 kodlaması)

'+
$0¶$0
+`^(('+)')
$2 $1
+`('('+))$
$1 $2
(')+( |$)?
$#1
(\d+)¶(\d+)
$1$*'$2$*'

IO, 'sayma karakteri ile aynı düzeydedir . Teoride attığınız herhangi bir tamsayıyı destekler, pratikte ... çevrimiçi tercüman 6'dan (unary '''''') büyük olan herhangi bir şeyi işlemeyi reddeder .

Çevrimiçi deneyin!
Çevrimiçi deneyin! (ondalık GÇ - 91 bayt)


0

12, 12 karakter / 15 bayt

⨭⟮⩤⁽1ï⟯⨝,Ⅰᴚ⨝

Try it here (Firefox only).

Meh.

açıklama

Bir dizi alır [1,input], katılır; aynı mesafeyi alır, tersine çevirir, sonra ona katılır; Her iki aralığın toplamı da sonuçtur.


0

Yakut, 40 karakter

->n{eval (l=[*1..n])*''+?++l.reverse*''}

Örnek çalışma:

irb(main):001:0> ->n{eval (l=[*1..n])*''+?++l.reverse*''}[11]
=> 2345555545332

irb(main):002:0> ->n{eval (l=[*1..n])*''+?++l.reverse*''}[6]
=> 777777

0

C #, 126 bayt

using System.Linq;a=>{var b=Enumerable.Range(1,a);return long.Parse(string.Concat(b))+long.Parse(string.Concat(b.Reverse()));}

Muhtemelen daha fazla golf oynayabilir. Pek emin değilim.


0

Büyük, 42 39 karakter

{[1..it,it..1]*.join()*.toLong().sum()}

Örnek çalışma:

groovy:000> ({[1..it,it..1]*.join()*.toLong().sum()})(11)
===> 2345555545332

groovy:000> ({[1..it,it..1]*.join()*.toLong().sum()})(6)
===> 777777
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.