Dijital kökün tam tersi!


19

[Analog kök] olarak da bilinir

( Dijital kökün tam tersi! );)

Bir sayının dijital kökü, tek bir basamak olana kadar basamaklarının sürekli toplamıdır, örneğin 89456'nın dijital kökü şu şekilde hesaplanır:

8 + 9 + 4 + 5 + 6 = 32

3 + 2 = 5

89456'nın dijital kökü 5'tir.

STDIN aracılığıyla giriş olarak bir rakam verildiğinde , dijital kökü olan tüm olası iki basamaklı sayıları yazdırın / döndürün . İhtiyacınız olursa, kendini içerebilir, örneğin 05

Bunların hepsi olası giriş ve çıkışlardır:

(Basamak için baştaki sıfırı dahil edip etmemeyi seçebilirsiniz)

I / O

0 => 0 veya 00 ya da hiçbir şey

1 => 01 ve / veya 1, 10, 19, 28, 37, 46, 55, 64, 73, 82, 91 - 1'in 100 döndürmediğinden emin olun

2 => 02 ve / veya 2, 11, 20, 29, 38, 47, 56, 65, 74, 83, 92

3 => 03 ve / veya 3, 12, 21, 30, 39, 48, 57, 66, 75, 84, 93

4 => 04 ve / veya 4, 13, 22, 31, 40, 49, 58, 67, 76, 85, 94

5 => 05 ve / veya 5, 14, 23, 32, 41, 50, 59, 68, 77, 86, 95

6 => 06 ve / veya 6, 15, 24, 33, 42, 51, 60, 69, 78, 87, 96

7 => 07 ve / veya 7, 16, 25, 34, 43, 52, 61, 70, 79, 88, 97

8 => 08 ve / veya 8, 17, 26, 35, 44, 53, 62, 71, 80, 89, 98

9 => 09 ve / veya 9, 18, 27, 36, 45, 54, 63, 72, 81, 90, 99

Hiçbir standart boşluklar , ve bu , böylece bayt en kısa cevap kazanır.

Tebrikler Heeby Jeeby Man üzerinde yaptığı inanılmaz 46 bayt beyin kurşun geçirmez cevap!


1
sayının kendisi iki basamaklı bir sayı olarak sayılır mı? (05)?
Yıkılabilir Limon


5
Çıktı 0 için ne olmalı? Ve yine, sadece 10 olası girdinin olduğu böyle bir durumda, çıktılarınızı mücadelenizde sağlamak büyük yarar sağlayacaktır.
FryAmTheEggman

1
Sıfırın nasıl ele alınacağına ilişkin kararınız gönderilen cevapların çoğunu geçersiz kılar. Katılımcılara bir karar verdiğinizi bildirmek düşünceli olacaktır.
FryAmTheEggman

2
dijital kökün tersi analog bir kök mü?
tuskiomi

Yanıtlar:


5

Pyke, 6 bayt

ITV
9+

Burada deneyin!

ITV\n9+ - if input: (don't print anything for 0 case)
 TV\n9+ -  repeat 10 times:
   \n   -    print ^
     9+ -   ^ += 9

9

JavaScript (ES6), 27 31 30 bayt

İade 0için 0ya da başka çözümler dizisi.

n=>n&&[...1e9+''].map(_=>n+=9)

gösteri


3
Herhangi bir yorumu olmayan bir düşüş, cevabı geliştirmek için pek yardımcı olmaz ...
Arnauld

Bazılarına göre, hangi bölümün gerçek codegolfed işlevi ve hangi bölümün bir gösterim olduğu belirsiz olabilir. Fonksiyonun kendisini JavaScript satırının hemen altına koymak iyi bir fikir olabilir .
David Mulder

@DavidMulder Öneri için teşekkürler. Aslında çoğu zaman böyle cevap veriyorum. Güncellenmiş.
Arnauld

Güzel çözüm! Eski bir çözümü sürüklediğim için özür dilerim ama +başka bir bayt kaydetmek için Sanırım bu şekilde stdin dizgisi ile çalışmaz.
Craig Ayre

@CraigAyre Bunun nereden +geldiğinden emin değilim ... Güncellendi. Teşekkürler!
Arnauld

8

05AB1E , 13 12 9 bayt

Adnan sayesinde -3 byte

тL<ʒSOSOQ

Çevrimiçi deneyin!

açıklama

тL<ʒSOSOQ   Main link. Argument n
тL<         List from 1 to 100, then decrement to get 0 to 99
   ʒ        Filter
    SOSO    Sum of all chars, twice
        Q   Compare to input

Sanırım sonsuz döngüyü değiştirebilirsin SOSO, çünkü sayı asla 99'dan büyük olmayacak.
Adnan

@Adnan Düşünme, yapabileceğinden eminim.
Outgolfer Erik

1
тL<ovadan çok daha kısa değil 99Ý. ;)
Outgolfer Erik

1
@EriktheOutgolfer Eh, orada bir bayt kaydetmek için muhtemelen zor çalışıyordum; D
kalsowerus

2
Ana "bağlantı"? Ne zamandan beri 05AB1E bağlantıları var? Jelly değil.
Andrew Savinykh

7

Haskell , 21 bayt

f bir tamsayı alır ve bir tamsayı listesi döndürür.

f d=[d,d+9..99^0^0^d]

Çevrimiçi deneyin!

  • Rakamla başlar ve zor durum haricinded , her 9 numaradan 99'luk bir sınıra kadar olan aralığı oluşturur .0
  • Erken durmak için 0, tüm diğer basamaklar 0^d==1için 0ve bu gücü kullanır ==0. Böylece 99^0^0^dverir 1için 0ama 99başka bir şey için.


7

Brain-Flak , 46 bayt

{((()()()()()){}){(({}[()])<(({}{}[]))>)}}{}{}

Çevrimiçi deneyin!

açıklama

Bu cevap Megatom'un cevabından bir fikir kullanır, yani yığın sayacı ve artış arasındaki fark olarak yığın yüksekliğini kullanır. Önceki cevaplar gibi bu cevabın da tüm sıfırları yakalamak için büyük bir dış döngüsü vardır. Döngünün içinde bir sayaç gibi davranmak için 10'u itiyoruz, sonra başka bir iç içe döngü başlatıyoruz. Bu döngüde sayacı 1 azaltırız.

({}[()])

Sonra sayaç ve hesapladığımız son öğe olan ilk iki öğeyi açıyoruz. Bunları, yığılmayı dengelemek için yığın yüksekliğine ekliyoruz, daha sonra bunu bir kez çıktı için ve bir kez de bir sonraki sonucu hesaplamak için tüketilmesi için iki kez itiyoruz. Bir şeyleri iki kez itmek, infazın sonunda yanlışlıkla kaldırılması gereken bir ek değeri ittiğimiz anlamına gelir.

Bunun Megatom'u zar zor yenmesinin nedeni, Megatom'un cevabının yığın yüksekliğini elde etmek zorunda kalmasıdır. Bu [()], toplamı bir azaltmak için oldukça pahalı kullanmaya zorlandıkları anlamına gelir . Kopyayı döngünün sonuna taşıyarak , programın sonunda [()]ek bir ücret karşılığında kullanmak zorunda kalmam {}. Megatom bu stratejiyi kullanacak olsaydı cevabı şöyle olurdu:

{<>((()()()()()){}){((({}[()])<>{}[]))<>}}<>{}

ayrıca 46 bayt.

Brain-Flak , 52 bayt

{((()()()()()){}){({}[()]<(({})((()()())){}{})>)}}{}

Çevrimiçi deneyin!

açıklama

Ana dış döngü sıfır girişi için özel bir durum oluşturur. Sıfır girilirse, tüm döngünün üzerine atlar, sıfıra gider ve hiçbir şey vermeziz. Aksi takdirde döngüye gireriz. Burada, her seferinde 10 kez iterek, eski değerleri koruyarak yığının üstüne 9 ekliyoruz. 9 dijital toplamı koruduğu için bu bize bir sonraki değeri verecektir. Döngünün süresi dolduktan sonra, döngüden çıkmak için ürettiği sıfırı kullanırız {}.

Brain-Flak , 56 bayt

{([(((()()())){}{})]){({}()<(({})<(({}{}))>)>)}}{}({}{})

Çevrimiçi deneyin!

açıklama

Bu sürüm sonuncuya çok benzer şekilde çalışır, ancak 10'u orijinal değer dışında bırakarak 9 kez döngüsüz. Bunu yapmak için hafızayı biraz işleme biçimimizi yeniden düzenlemeliyiz. Bu yöntemi kullanarak kaydetmiş olabileceğimiz tüm baytlar temizlemeye alınır.


46 orijinal numarayı korumaz :(
Jo King

@JoKing Evet, sadece 2 haneli vakaları yapıyor. Sanırım sorunun niyeti böyle, bu beni oldukça mutlu ediyor.
Buğday Büyücüsü

İyi iş! Ödül sen kazandın.
FantaC



5

Bash ,31 27 bayt

seq $1 9 $(($1?99:0))|xargs

Çevrimiçi deneyin!

önceki

eval echo {$1..$(($1?99:0))..9}

kişi man sayfalarını / bash yardımını nasıl bulur? "{x..y..z}" hakkında mı? buna ne denir
Olivier Dulac

buldum: man sayfasında, [^.] \. \. [^.]:brace expansion: (...) A sequence expression takes the form {x..y[..incr]}, where x and y are either integers or single characters, and incr, an optional increment, is an integer. (...) When the increment is supplied, it is used as the difference between each term. The default increment is 1 or -1 as appropriate.
Olivier Dulac

5

Dyalog APL, 15 bayt

{(×⍵)/+\⍵,109}

Nasıl?

⍵,10⍴9- girişi 10 9sn ( ⍵ 9 9 9 9 9 9 9 9 9 9) ile birleştirin .

+\ - kümülatif toplam.

(×⍵)/ - oturum sürelerini genişlet - burada oturum 1-9 için 1 ve 0 için 0 verir.

Çevrimiçi deneyin!

Dyalog APL, 24 bayt

{⍵/⍨⎕=(⍵≠01+9|⍵-1}⍳100

Gerektirir ⎕IO←0.

Nasıl?

                      100   0 .. 99
              1+9|⍵-1       digit sum (⍵-1 mod 9 + 1)
        (⍵≠0              edge case for 0
     ⎕=                     equals to the input
 ⍵/⍨                        compress with the range


4

Mathematica, 25 bayt

If[#==0,0,Range[#,99,9]]&

0 için çalışıyor


Çalışmıyor 0. Bu, basamakları 9'dan büyük bir sayı ekleyen sayılar da içermez (örneğin , çıktıda 9bulunmaz 99).
JungHwan Min

Ne demek istediğini anlıyorum. Sadece "benim" kodlarımı mı inceliyorsunuz? çünkü burada birçok kod 0 için çalışmıyor ...
J42161217

1
Welp, Mathematica koduna odaklanma eğilimindeyim çünkü en iyi bildiğim dil bu. Seni ya da başka bir şeyi hedeflemek istememiştim. Öyle gözüküyorsa özür dilerim.
JungHwan Min

tüm sabit ve çalışma
J42161217

Ne? Yerleşik yok mu?
OldBunny2800


4

Aslında 18 bayt

╗2╤DR⌠╜-9@%Y⌡░╜;)I

Çevrimiçi deneyin!

Açıklama:

╗2╤DR⌠╜-9@%Y⌡░╜;)I
╗                   save input to register 0
 2╤DR               range(1, 100)
     ⌠╜-9@%Y⌡░      elements in range where function returns truthy:
      ╜-              subtract from input
        9@%           mod 9
           Y          is equal to 0
              ╜;)   push a copy of the input on the top and the bottom of the stack
                 I  if input is truthy, return the filtered range, else return the input (special-cases 0)

@FryAmTheEggman Düzeltildi.
Mego

4

PHP, 41 Bayt

alt çizgi ayrılmış değerleri yazdırır

for(;100>$a=&$argn;$a+=$a?9:ERA)echo$a._;

ERAPHP değeri ile en kısa sabittir 131116. Sıkıcı alternatif ile değiştirebilir 100veya programı sonlandırabilirsiniz.die

Çevrimiçi sürüm


4

Brain-Flak , 54 52 bayt

{<>((((()()())){}{})()){({}<(({})<>({}))><>[()])}}<>

Çevrimiçi deneyin!

Brain-Flak ile ilk görüşmem ve bence gayet iyi iş çıkardım. Daha fazla tecrübesi olan birisinin tavsiyesi var mı?

Nasıl çalışır:

{ Don't do anything if input is 0
  <>((((()()())){}{})()) Switch to other stack and add 9 and 10
                         10 is the counter, 9 is to add to the current num
  { While counter
     (
       {} Pop the counter
       <(({})<>({}))> Get a copy of the 9, switch to the other stack and add it to a copy of the top of it. Use <...> to make it return 0
       <>[()] Switch to the other stack and decrement the counter
     ) 
  }
}<> Switch to the stack with the values on it

1
Aferin! Brain-Flak'a hoş geldiniz.
MegaTom


3

PHP, 35

print_r(range($argn,!!$argn*99,9));

Aralığı [$argn, 100)adım 9olarak dizi ile oluşturur ve yazdırır. Giriş ise => 0aralığını oluşturur .[0,0]array(0)


3

Python, 48 51 bayt

@WheatWizard sayesinde 3 bayt kaydedildi

lambda n:[x for x in range(100)if~-n==~-x%9or x==n]

1
~-xyerine deneyin(x-1)
Buğday Sihirbazı

1
@ WheatWizard'ın bahşişiyle, alanı kaldırınif ~-x%9
Felipe Nardi Batista

Şimdi ~-n==~-x%9or x==nbir bayt kaydetmek için yapabilirsiniz
Buğday Sihirbazı


Aptalca bir soru sormalıyım ... Bunu çalıştırmak istiyorum. Bu kodun çalıştırılmasını nasıl sağlayabilirim? Burada öğrendiğim bazı yapılar var (esas olarak ~ operatör)
Allen Fisher




2

C (gcc) , 55 bayt

f()aslında herhangi bir argüman ile çağrılması gerekmez; nyerine işlevi byte kaydetmek dışında sadece vardır.

f(n){for(scanf("%d",&n);n&&n<100;n+=9)printf("%d ",n);}

Çevrimiçi deneyin!


printfDöngü başlığının içine koyarak 2 bayt kaydedebilirsiniz : Çevrimiçi deneyin!
DLosc

@DLOSc myeah, ama sonra bir sayı çok geç başlar.
gastropner

İfadeler daha net olabilir, ama soru (örn) 10 yerine 1 başlayarak izin vermez:" ... bu dijital kökü var mümkün iki basamaklı sayılar hepsi. Eğer bunu gerekiyorsa , o olabilir [dahil tek -digit numarası], örneğin 05. " Başka bir deyişle, çıktıya tek basamaklı sayı dahil edilmesine izin verilir ancak zorunlu değildir .
DLosc

2

Kömür , 14 11 bayt

I∧N⁺Iθ×⁹…¹¹

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı versiyonudur. Düzenleme: Sadece @ ASCII sayesinde 3 bayt vektörleme işlemlerini kullanarak sıfır giriş ve 1 bayt için hiçbir şey basmadan 2 bayt kaydedildi. Açıklama:

         ¹¹ Literal 11
        …   Range
       ⁹    Literal 9
      ×     Vector multiply
     θ      (First) input
    I       Cast to number
   ⁺        Vector add
  N         Input digit as a number
 ∧          Logical AND
I           Cast to string
            Implicitly print on separate lines


Ben sadece burada
ASCII-sadece

1

Julia 0.6 , 18 bayt

0Davayı yakalamak için bir üçlü n:9:99ve sayıları oluşturmak için bir aralık kullanıyorum. Julia'da bir aralık bir AbstractVectorve Vectorçoğu durumda gerçek sayıların yerine kullanılabilir , ancak sadece 1:9:91meydan okumayı tatmin etmediği gibi yazdırılacaktır , bu yüzden [_;]içeriği bir toplamak için sarın Vector.

n->n>0?[n:9:99;]:0

Çevrimiçi deneyin!





0

Perl 5, 62 bayt

sub x{$f=$_[0];@x=("0$f",$f);push@x,map$f+$_*10,(1..9)if$f;@x}

Daha kısa bir yol olmalı


0

Gol> <> , 12 bayt

I:ZhbF:N9+|;

Çevrimiçi deneyin!

Nasıl çalışır

I:ZhbF:N9+|;

I             Take input as number
 :            Duplicate
  Z           Pop and skip one if nonzero
   h          If zero, print the top as number and halt
              Otherwise...
    bF....|   Repeat these commands 11 times
      :N      Print top as number, with newline
        9+    Add 9
           ;  Halt
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.