Menzil, Ters, Sum!


21

Girdi olarak n pozitif bir tamsayı verildiğinde, n'nin tersine çevrilmiş toplamı çıkar.

Tersine çevrilmiş bir aralık toplamı, 1'e kadar başlayan ve n'yi içeren, içindeki sayıların her birini tersine çevirerek ve toplayarak n'e kadar kapsayıcı bir aralık oluşturarak oluşturulur.

Örnek:

İşte 10 girdi için ne olacağını:

aralık: [1,2,3,4,5,6,7,8,9,10]

Ters Çevir: [1,2,3,4,5,6,7,8,9,01]( Tersine çevrilmiş 1 karakterlik numaralar kendileri, tersine çevrilmiş 10 sayı 01 veya 1'dir)

Toplam: 46

3+ rakamlı sayılar, 2 rakamlı sayılarla aynı şekilde ters çevrilir. Örneğin, 1234, 4321 olur.

Test durumları:

Input -> Output

10 -> 46
5 -> 15
21 -> 519
58 -> 2350
75 -> 3147
999 -> 454545

@ Fireflame241'e çok teşekkürler, burada 999'un girişini tamamlayan metin durumlarını burada bulabilirsiniz.


Daha fazla test durumu sonucu (numaralandırılmadı, üzgünüm, ancak isterseniz ayrıştırıp satır numaralarını alabilirsiniz): Çevrimiçi deneyin!
Stephen




4
-1 çünkü bu ilginç değil. Başvuruların tümü olmasa da çoğu aynı yaklaşımı kullanıyor gibi görünüyor. Bu zorluk, daha önce sorulmuş bir sorun gibi gözüküyor, belirgin bir kısayol olmadan bir araya geldi.
Esolanging Fruit

Yanıtlar:




8

JavaScript (ES6), 42 bayt

f=n=>n&&+[...n+""].reverse().join``+f(n-1)

En sevdiğim çift özyinelemeli çözüm maalesef 3 byte daha uzun:

f=n=>n&&+(g=x=>x?x%10+g(x/10|0):"")(n)+f(n-1)

8

Perl 6 , 20 bayt

{(1..$_)».flip.sum}

Dene

Expanded:

{
   ( 1 .. $_ )\  # Range
   ».flip        # flip each value in the Range (possibly in parallel)
   .sum          # sum up the list
}

'Muhtemelen paralel' gerekli mi? Görünüşe göre bir ya da iki bayttan kurtulabilirsiniz.
Fon Monica'nın Davası

@QPaysTaxes Hayır. Aralıktaki değerlerin her birinin yöntemini ».flipçağırır .flip. Bunu yapmanın bir sonraki en kısa yolu .map(*.flip)5 bayt daha fazla.
Brad Gilbert b2gills

Oh, yani kilit kısım "her", "değil (muhtemelen paralel)". Öyleyse onları bölmeye değer olabilir.
Fon Monica'nın Davası

@QPaysTaxes Ne demek istediğimi ».fliphiper yöntemi çağrısı olduğundan emin değilim . Ben ayrılmadan mümkün olmakla birlikte »ve .flipbir unspace kullanarak \ bunu daha önce yaptığı gibi; Bu, bir qqww/ /yapı ( « a b "c d" ») gibi göründüğü gibi anlaşılmasını zorlaştırır .
Brad Gilbert b2gills

7

Retina , 41 36 35 bayt

.+
$*
1
1$`¶
1+
$.&
%O^$`.

.+
$*
1

Çevrimiçi deneyin! Link, test durumlarını içerir. Düzenleme: @ FryAmTheEggman sayesinde 5 bayt kaydedildi. @ PunPun1000 sayesinde 1 bayt kaydedildi. Açıklama:

.+
$*

Birliğe dönüştür.

1
1$`¶

Bir dizi oluşturma 1için n.

1+
$.&

Ondalık basamağa dönüştür.

%O^$`.

Her numarayı ters çevirin.

.+
$*

Birliğe geri dön.

1

Toplayın ve ondalık basamağa dönüştürün.


@ FryAmTheEggman Bah, bunu unutmaya devam ediyorum.
Neil

Buna gerek yok içinde .+¶ hatlarında maç olacak maçı
PunPun1000

@ PunPun1000 FryAmTheEggman'ın düzeltmesinden önce ihtiyacım vardı!
Neil

O^$s`.Dizenin tamamını tersine çevirmenin de işe yaradığını fark ettim .
Neil




5

cQuents , 4 bayt

;\r$

Çevrimiçi deneyin!

açıklama

       Implicit input n.
;      Series mode. Outputs the sum of the sequence from 1 to n.
 \r$   Each item in the sequence equals:
 \r    String reverse of
   $                     current index (1-based)

5

Python 2,38 bayt

Özyineleme sınırından daha yüksek terimler hesaplanamıyor:

f=lambda x:x and int(`x`[::-1])+f(x-1)

Çevrimiçi deneyin!


Tio başlığında, daha büyük sayıları işlemek istiyorsanız import sysve kullanabilirsiniz sys.setrecursionlimit().
Bay Xcoder


5

Röda , 56 41 36 bayt

@Fergusq sayesinde 15 bayt kurtarıldı

{seq 1,_|parseInteger`$_`[::-1]|sum}

Çevrimiçi deneyin!

Bu, giriş akışından bir tamsayı alan ve çıkış akışına bir tamsayı çıkaran isimsiz bir fonksiyondur.

açıklama

{seq 1,_|parseInteger`$_`[::-1]|sum} Anonymous function
 seq 1,_                             Create a sequence 1 2 3 .. input and push each value to the stream
        |                            For each value in the stream:
                     `$_`             Cast it into a string
                         [::-1]       And reverse it
         parseInteger                 And parse the resulting string as an integer, while pushing the value to the stream
                               |sum  Sum all the values in the stream

Tersini kullanarak çok fazla bayt kaydedebilirsiniz [::-1]. Ayrıca ` $_` daha kısadır _..""ve ayrıştırmadan sonra parantez gerekli değildir.
fergusq

@fergusq Püf noktaları için teşekkürler, Röda'm biraz paslandı :)
Kritixi Lithos

4

C # (.NET Core) , 103 97 bayt

using System.Linq;r=>new int[r+1].Select((_,n)=>int.Parse(string.Concat((n+"").Reverse()))).Sum()

Çevrimiçi deneyin!

TIO bağlantısı tüm sonuçları 1'den 999'a çıkarır, bu yüzden işimi kontrol etmekten çekinmeyin.

Bunun biraz daha kısa olmasını bekliyordum, ancak başka bir dize yerine Reverse()geri döndürdüğü ortaya çıktı , IEnumerable<char>böylece tekrar bir dizgeye dönüştürmek için fazladan bir miktar eklemek zorunda kaldım, böylece bir int'ye ayrıştırdım. Belki de gidilmesi gereken daha kısa bir yol vardır.IEnumerable<char> int'den doğru .

Küçük notta, bu aynı zamanda işlevleri Range() Reverse()ve Sum()hepsini sırayla kullanır .

TheLethalCoder sayesinde -6 bayt


Takip eden yarı kolona ihtiyacınız yok. Bence new int[r]ve .Select((_,n)=>...)bayt koruyacak düşünüyorum .
TheLethalCoder

@TheLethalCoder new int[r+1]Dizin 0'dan başladığından beri doğru çıktıyı almak gerekir, ancak yine de birkaç bayttan tasarruf sağlar. RIP Range()olsa
Kamil Drakari

4

Yakut, 56, 52, 41, 39 bayt

->n{(1..n).sum{|i|i.to_s.reverse.to_i}}

Yakut, 34 bayt (lambda param bir dize ise)

->n{(1..n).sum{|i|i.reverse.to_i}}

İkinci çözüm için @Unihedron'a teşekkürler.


1
->n{de çalışır.
Değer Mürekkep

1
Aynı araçta (Ruby) daha farklı bir program hazırladım (Ruby) kendi gönderimi için yeterince farklı (giriş ve çıkışla ilgileniyor), burada bulabilirsiniz: codegolf.stackexchange.com/a/150636/21830
Unihedron

@Unihedron, haha, Ruby'nin ip aralıklarına izin verecek kadar delice olduğunu bilmiyordum. Teşekkürler.
akostadinov

Evet, Ruby'de ayrıca ?a..?zve gibi şık özellikler de var ?a1..?h8(Her ne kadar 2. formatta dikkatli olsan da: D)
Unihedron

Aralıklar, 1. (başlangıç ​​değeri için) uygulamalı succve 2. (başlangıç ​​veya bitiş değeri uygulanmıyorsa succ) sayısal olmalıdır, bu nedenle int..string"aralık için hatalı değer" olarak reddedilir. Tersi doğrudur (ama ne yazık ki menzile düşmez), ya (?1..n)da yerine kullanılabilir
Unihedron


3

Kömür , 14 13 bayt

Carlos Alejo sayesinde -1 bayt

I∕…·⁰N«⁺ιI⮌Iκ

Çevrimiçi deneyin! Bağlantı ayrıntılı versiyonudur.

açıklama

I                  Cast
  ∕     «           Reduce
   …·⁰N            Inclusive range from 0 to input as number
         ⁺          Plus
          ι         i
           I⮌Iκ   Cast(Reverse(Cast(k)))

Sonuncuyu bırakarak bir byte kaydedebilirsiniz ». Bu arada, Charcoal wiki'de Reduceoperatör nerede belgeleniyor?
Charlie,

Hiçbir yerde, bu bir bölümünün aşırı yüklenmesi: | İsterseniz size düzenleme erişimi verebilirim (üzgünüm kendim yapmak için çok tembelim)
ASCII-sadece

Ayrıca evet neden biten telleri bırakmanın işe yaradığını unuttum
ASCII-sadece

Charcoal wiki'nin biraz daha belgelenmesini istiyorum, çünkü hala çalışan ancak gizli özellikler var. Bana düzenleme erişim izni verirseniz, bunları belgelemek için elimden geleni yapacağım. Örnek: ModuloOperatör, Kömür'de dizeleri formatlamak için nasıl kullanılabilir?
Charlie,

1
@CarlosAlejo Biraz boş zamanım oldu, bu yüzden bir şeyleri belgelemeye başladım, umarım beğenirsiniz!
Neil

3

Magneson , 102 bayt

Kaynak

Bu çok görünür değil, bu yüzden ölçeklendirilmiş bir sürümü var (Not: Gerçekten çalışmaz ve hala çok hoş değildir)

Yalnızca Amaçları Göster

Magneson, bir görüntüyü ayrıştırıp okuduğu piksellerin renklerinden komutları değerlendirerek çalışır. Yani bu meydan okuma için görüntü adım adım, biz var:

  • R: 0, G: 1, B: 1değişken bir ad ve atanacak değer için bir dize alan bir tamsayı atama komutudur. Toplamı depolamak için bunu kullanacağız.
  • R: 0, G: 1, B: 0değeri önceden oluşturulmuş bir dizedir VAR_1(Not: Bu yalnızca bir dize isterken; renk kodu başka yerde kullanıldığında ayrı bir işleve sahiptir).
  • R: 3, G: 0, B: 0Ham bir sayıdır. Magneson, Red bileşeninin tam olarak 3 olmasını zorunlu kılarak standart sayıları ele alır ve ardından doğrudan mavi değeri artı 256 ile çarpılan yeşil değeri kullanarak bir sayı oluşturur . Bu durumda, sadece 0 sayısını alıyoruz.
  • R: 0, G: 1, B: 1başka bir tamsayı atama komutu. Bu sefer, hangi sayıda olduğumuzu takip etmek için bir yineleme değişkenini saklıyoruz
  • R: 0, G: 1, B: 1değeri önceden oluşturulmuş bir dizedir VAR_2(Bir kez daha, yalnızca bir dizeye ihtiyacımız olduğunda)
  • R: 3, G: 0, B: 00, bir kez daha sayıdır. Şimdi ilginç parçalara.
  • R: 1, G: 0, B: 0bir döngünün başlangıcını gösterir. Bu bir sayı alır ve aşağıdaki kod pasajını birçok kez döndürür.
  • R: 2, G: 0, B: 0STDIN işlevi veya en azından bir numaraya ihtiyacımız olduğunda olduğu gibi. Bu, konsoldan bir girdi satırı okur ve sayı istediğimizden beri sayıya çevirir.
  • R: 0, G: 8, B: 0döngü kodumuzu başlatır ve ek bir komuttur. Bu bir tamsayı değişkenine bir sayı ekler ve bu nedenle değişken adı ve eklenecek sayı için bir dize alır.
  • R: 0, G: 1, B: 1VAR_2yineleme değişkenimiz olan önceden oluşturulmuş dize .
  • R: 3, G: 0, B: 1 Ham bir sayıdır, ancak bu sefer 1 sayı.
  • R: 0, G: 8, B: 0 başka bir ekleme komutu.
  • R: 0, G: 1, B: 0VAR_1toplamın toplamı olan dizedir .
  • R: 0, G: 3, B: 0bir dizgeyi tersine çeviren bir işlevdir. Bir sayı istemek bağlamında, ters çevrilen dizeyi bir sayıya dönüştürür.
  • R: 0, G: 2, B: 1bir tamsayı alma komutudur ve verilen bir değişkende saklanan sayıyı alır. Bir dize isteme bağlamında (örneğin ters komutundan), sayıyı bir dizeye dönüştürür.
  • R: 0, G: 1, B: 1isim VAR_2; yineleme değişkenimiz.
  • R: 1, G: 0, B: 1Döngüyü sona erdirmek için belirteçtir ve ölçütler karşılanmadığında döngünün başlangıcına geri dönersiniz (yani döngü devam etmemiz gerekiyorsa). Aksi takdirde, devam edin.
  • R: 0, G: 0, B: 1 çok basit bir println komutu ve bir dize alır.
  • R: 0, G: 2, B: 1 bir değişkenden bir tam sayı alır
  • R: 0, G: 1, B: 0 toplam toplam değişkenimizin adı, VAR_1

    Sonuçta, program:

  • 0 değerini VAR_1ve atar.VAR_2
  • STDIN'de verilen bir numaradan 0'a döngüler
    • Bir ekler VAR_2
    • İçin tamsayı değerini ekler VAR_2.VAR_1
  • İçeriğini yazdırır VAR_1


3

CJam , 12 bayt

ri){sW%i}%:+

Çevrimiçi deneyin!

Business Cat sayesinde -1 .

Açıklama:

ri){sW%i}%:+
r            Get token
 i           To integer
  )          Increment
   {sW%i}    Push {sW%i}
    s         To string
     W        Push -1
      %       Step
       i      To integer
         %   Map
          :+ Map/reduce by Add

Bir açıklama ekler misiniz? CJam'ı (ya da GolfScript) anlamıyorum. Ancak MY iki (golf-lang bakımından antik olsa da) golf dillerini yendi!
Zacharý

@ Zacharý bitmiş ...
Outgolfer Erik

İhtiyacınız yok,
Business Cat

@ BusinessCat Ohhh görünüşe göre GolfScript için çok fazla kullanılmış ...
Erik Outgolfer

3

APL (Dyalog) , 10 7 bayt

@ Adám sayesinde 3 byte golf oynadı

+/⍎⌽⍕⍳⎕

Çevrimiçi deneyin!

          Input (example input: 10)
          Range; 1 2 3 4 5 6 7 8 9 10
          Stringify; '1 2 3 4 5 6 7 8 9 10'
          Reverse; '01 9 8 7 6 5 4 3 2 1'
          Evaluate; 1 9 8 7 6 5 4 3 2 1
+/         Sum; 46

@Uriel & Cows için şu sohbet sorusunu sorguluyor: Eh, Matematik bölümünü yaptım, buna ek olarak, sohbetten uzaklaştırıldım, bu yüzden orada cevap vermedim.
Zacharý


@ Adám Tahmininiz için teşekkürler. ¨
Zekayı

3

Java 8, 97 bayt

IntStream.range(1,n+1).map(i->Integer.valueOf(new StringBuffer(""+i).reverse().toString())).sum()

DÜZENLE

Yorumuna göre Kevin Cruijssen cevabımı geliştirmek istiyorum.

Java 8, 103 bayt

n->java.util.stream.LongStream.range(1,n+1).map(i->new Long(new StringBuffer(""+i).reverse()+"")).sum()

1
Integer.valueOfgolf oynayabilir new Integerve .reverse().toString()golf oynayabilir .reverse()+"". Ayrıca, gibi gerekli ithalat ve lambda parametreleri içermelidir java.util.stream.IntStreamve n->ondan önce. Ve golf de yapabilirsiniz IntStream& Integeriçin LongStreamve Long. Son cevap n->java.util.stream.LongStream.range(1,n+1).map(i->new Long(new StringBuffer(""+i).reverse()+"")).sum()( 103 bayt - Eklenen ithalat ve lambda parametresi ile mevcut cevabınız 117 bayt olacaktır .) Yine de +1, güzel cevap!
Kevin Cruijssen

@KevinCruijssen Değerli girdileriniz için teşekkür ederiz. Cevabımı güncelleyeceğim. Teşekkürler. :)
CoderCroc

3

Japt , 7 5 bayt

@Shaggy sayesinde -2 bayt.

õs xw

Çevrimiçi deneyin!

açıklama

õs xw  Implicit input of integer U
õs     Create range [1,U] and map to strings
    w  Reverse each string
   x   Sum the array, implicitly converting to numbers.

Eski çözüm, 7 bayt

Bunu tutmak gerçekten güzel bir kullanım olduğundan beri z2.

õs z2 x

Çevrimiçi deneyin!

açıklama

õs z2 x  Implicit input of integer U
õs       Create range [1,U] and map to strings
   z2    Rotate the array 180°, reversing strings
      x  Sum the array, implicitly converting back to integers

1
z2Düz bir dizide bildiğiniz gibi aynı w, sağa ... uhm ... Japt'taki yetersizliğimden dolayı ...
ETHproductions

6 bayt: õ_swÃxyeni eklemesi sayesinde N.s(f).
Shaggy

Veya sadece õs xw5 bayt için bile .
Shaggy,

@Shaggy Şu ana kadar hiç kimsenin şu ana kadar 5 baytlık çözümden bahsetmediğine inanamıyorum. 6 bayt olana gelince, eğer bu meydan okuma yayınlandıktan sonra eklendiyse, bunun rekabet edemeyeceğini düşünüyorum.
Justin Mariner

@JustinMariner, ben de yapamam! : D Her ne kadar, bu z2numarayı atlatmak utanç verici görünüyor ; Bu oldukça lanet olası bir dahiydi. Rekabet etmenin artık bir şey olmadığını unutmayın .
Shaggy

3

C ++, 146 bayt

#include<string>
using namespace std;int r(int i){int v=0,j=0;for(;j<=i;++j){auto t=to_string(j);reverse(t.begin(),t.end());v+=stoi(t);}return v;}

Aferin! Başlığı kaldırarak ve "namespace std kullanarak" koyarak bazı baytları yedekleyebilirsiniz (burayı kontrol edin tio.run/#cpp-gcc ). Ben de "auto t" yerine sadece "t" (?)
İle koyabileceğinizi düşünüyorum

Evet, koita_pisw_sou ilk bölüm hakkında haklı. Ama ihtiyacın var auto.
Zacharý

@koita_pisw_sou Başlık direktifini bayt sayısından hariç tutabileceğimi mi kastediyorsunuz? İsim alanı için aynı mı? autoanahtar kelime gerekli
HatsuPointerKun

Evet, gönderdiğim bağlantıyı kontrol et
koita_pisw_sou

(Hata! Başlığı kaldıracağımdan emin değilim!) Ama using namespace std;baytları kurtarmaya değiniyordum.
Zacharý



2

RProgN 2,8 bayt

{Ø.in}S+

Açıklaması

{Ø.in}S+
{    }S # Create a stack in range 0 through the implicit input, using the function defined
 Ø.     # Append nothing, stringifying the number
   i    # Reverse the string
    n   # Convert back to a number
       +# Get the sum of the stack, and output implicitly.

Çevrimiçi deneyin!




2

Neim , 4 bayt

Δ𝐫)𝐬

Çevrimiçi deneyin!

açıklama

Δ )              for each element 1 to n (outputs list)
 𝐫               reverse 
   𝐬             sum 

2
Alternatif çözüm: 𝐈Ψ𝐫𝐬(dahil edici bir alan oluşturun, her bir öğeyi ters çevirin, toplam)
Okx

@Okx Ψbelirtecin var olduğunu bilmiyordu ! kesinlikle bunu gece görüşünde kullanacaktı. gerçek güzel
uzay önemsiz

2

C (gcc) , 71 bayt

q(n,x,p){p=n?q(n/10,x*10+n%10):x;}f(w,a,e){for(a=0;w;)a+=q(w--,0);e=a;}

Çevrimiçi deneyin!


Bir dakika ne? f()Herhangi bir returnifade olmadan sonucunu nasıl verir ? Does e=atalimat işleyen sonucu döndürülür değerlerle kullanılandan daha aynı kayıtta saklanır şekilde kayıtlarını?
scottinet
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.