Naprzeciw cyfrowego korzenia!

19

Znany również jako [analogowy root]

( Naprzeciw cyfrowego korzenia! );)

Cyfrowy pierwiastek z liczby jest ciągłym sumowaniem jego cyfr, dopóki nie będzie pojedynczą cyfrą, na przykład cyfrowy pierwiastek z 89456 jest obliczany w następujący sposób:

8 + 9 + 4 + 5 + 6 = 32

3 + 2 = 5

Cyfrowy pierwiastek 89456 to 5.

Biorąc pod uwagę cyfrę wprowadzaną przez STDIN , wydrukuj / zwróć wszystkie możliwe dwucyfrowe liczby, które mają ten cyfrowy pierwiastek. Jeśli zajdzie taka potrzeba, może zawierać siebie, np. 05

Są to wszystkie możliwe wejścia i wyjścia:

(Możesz wybrać, czy ma być wstawiane zero początkowe dla samej cyfry)

I / O

0 => 0 lub 00 lub nic

1 => 01 i / lub 1, 10, 19, 28, 37, 46, 55, 64, 73, 82, 91 - Upewnij się, że 1 nie zwraca 100

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

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

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

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

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

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

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

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

Brak standardowych luk i , więc wygrywa najkrótsza odpowiedź w bajtach.

Gratulacje dla Heeby'ego Jeeby Mana za jego niesamowitą 46-bajtową odpowiedź na uderzenie mózgu!

FantaC
źródło
1
czy sam numer liczy się jako liczba dwucyfrowa? (05)?
Zniszczalna cytryna
2
Odwrotne wyzwanie
FryAmTheEggman
5
Jaka powinna być wartość wyjściowa dla 0? I znowu, w przypadku takim jak ten, w którym jest tylko 10 możliwych danych wejściowych, byłoby bardzo korzystne dostarczenie wyników w twoim wyzwaniu.
FryAmTheEggman
1
Twoja decyzja, jak obsługiwać zero, unieważnia wiele z opublikowanych odpowiedzi. Rozsądnie byłoby poinformować uczestników, że podjęli decyzję.
FryAmTheEggman
2
czy przeciwieństwo cyfrowego root jest analogowym rootem?
tuskiomi

Odpowiedzi:

5

Pyke, 6 bajtów

ITV
9+

Wypróbuj tutaj!

ITV\n9+ - if input: (don't print anything for 0 case)
 TV\n9+ -  repeat 10 times:
   \n   -    print ^
     9+ -   ^ += 9
niebieski
źródło
9

JavaScript (ES6), 27 31 30 bajtów

Powraca 0do 0lub szereg rozwiązań inaczej.

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

Próbny

Arnauld
źródło
3
Opinia negatywna bez komentarza nie pomaga wiele poprawić odpowiedzi ...
Arnauld
Dla niektórych może być niejasne, która część jest faktyczną funkcją kodowania, a która część jest demonstracją. Dobrym pomysłem może być umieszczenie samej funkcji bezpośrednio poniżej linii JavaScript .
David Mulder
@DavidMulder Dzięki za sugestię. Tak właściwie przez większość czasu odpowiadam. Zaktualizowano
Arnauld
Fajne rozwiązanie! Przepraszam, że przeciągnąłem stare rozwiązanie, ale czy mógłbyś je upuścić, +żeby zapisać kolejny bajt? Chociaż nie działałoby tak ze standardowym ciągiem w ten sposób.
Craig Ayre,
@CraigAyre Nie jestem pewien, skąd to się +wzięło ... Zaktualizowano. Dzięki!
Arnauld
8

05AB1E , 13 12 9 bajtów

-3 bajty dzięki Adnanowi

тL<ʒSOSOQ

Wypróbuj online!

Wyjaśnienie

т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
kalsowerus
źródło
Myślę, że możesz zastąpić nieskończoną pętlę SOSO, ponieważ liczba nigdy nie będzie większa niż 99.
Adnan
@Adnan Nie myśl, zapewniam cię, że może.
Erik the Outgolfer
1
тL<nie jest tak naprawdę krótszy niż zwykły 99Ý. ;)
Erik the Outgolfer
1
@EriktheOutgolfer Cóż, prawdopodobnie starałem się tam zapisać bajt; D
kalsowerus
2
Główny „link”? Od kiedy 05AB1E ma linki? To nie jest galaretka.
Andrew Savinykh
7

Haskell , 21 bajtów

f przyjmuje liczbę całkowitą i zwraca listę liczb całkowitych.

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

Wypróbuj online!

  • Zaczyna się od cyfry di generuje zakres z każdą dziewiątą liczbą do granicy 99, z wyjątkiem trudnego przypadku 0.
  • Aby zatrzymać się wcześniej 0, używa mocy 0^d==1dla 0i ==0dla wszystkich innych cyfr. W ten sposób 99^0^0^ddaje 1o 0ale 99na nic innego.
Ørjan Johansen
źródło
7

Brain-Flak , 46 bajtów

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

Wypróbuj online!

Wyjaśnienie

Ta odpowiedź wykorzystuje pomysł z odpowiedzi Megatom, a mianowicie wykorzystanie wysokości stosu jako różnicy między licznikiem pętli a przyrostem. Podobnie jak poprzednie odpowiedzi, ta odpowiedź ma dużą zewnętrzną pętlę do przechwytywania wszystkich zer. Wewnątrz pętli wciskamy 10, aby działać jak licznik, a następnie uruchamiamy kolejną zagnieżdżoną pętlę. W tej pętli zmniejszamy licznik o 1

({}[()])

Następnie wstawiamy dwa górne elementy, które są licznikiem i ostatnim elementem, który obliczyliśmy. Dodajemy je do wysokości stosu, aby zrównoważyć dekrementację, następnie wciskamy to dwa razy, raz dla wyjścia i raz, aby można go było wykorzystać do obliczenia następnego wyniku. Dwukrotne przesuwanie rzeczy oznacza, że ​​przypadkowo wypychamy dodatkową wartość, którą należy usunąć pod koniec wykonywania.

Powodem, dla którego ledwo pokonuje Megatom, jest odpowiedź Megatom, która musi uzyskać wysokość stosu, podczas gdy ostatni wynik wciąż znajduje się na stosie. Oznacza to, że są zmuszeni użyć raczej drogiego, [()]aby zmniejszyć sumę o jeden. Przenosząc duplikat na koniec pętli, jestem w stanie uniknąć konieczności używania [()]go kosztem dodatkowego {}na samym końcu programu. Gdyby Megatom zastosował tę strategię, jego odpowiedź wyglądałaby następująco:

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

także 46 bajtów.

Brain-Flak , 52 bajty

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

Wypróbuj online!

Wyjaśnienie

Główna pętla zewnętrzna stanowi specjalny przypadek dla wprowadzenia wartości zero. Jeśli wprowadzono zero, przeskakujemy przez całą pętlę, zerujemy zero, a następnie nic nie wypisujemy. W przeciwnym razie wchodzimy w pętlę. Tutaj wciskamy pętlę 10 razy za każdym razem dodając 9 na górze stosu, zachowując stare wartości. Ponieważ 9 zachowuje sumy cyfrowe, otrzymamy kolejną wartość. Po wygaśnięciu pętli używamy wygenerowanego przez nią zera do wyjścia z pętli, która jest następnie wyświetlana {}na końcu.

Brain-Flak , 56 bajtów

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

Wypróbuj online!

Wyjaśnienie

Ta wersja działa bardzo podobnie do poprzedniej, tyle że zapętlamy 9 razy zamiast 10, pomijając pierwotną wartość. W tym celu musimy nieco zmienić sposób obsługi pamięci. Wszystkie bajty, które mogliśmy zapisać za pomocą tej metody, zostaną oczyszczone.

Kreator pszenicy
źródło
46 nie zachowuje oryginalnego numeru :(
Jo King
@JoKing Tak, robi to tylko 2-cyfrowe przypadki. Wydaje mi się, że taka jest intencja pytania, dlatego jestem bardzo szczęśliwy.
Wheat Wizard
Dobra robota! Zasłużyłeś na nagrodę.
FantaC
5

Brachylog , 12 bajtów

0g|g{t+₉}ᵃ¹⁰

Wypróbuj online!

Wyjaśnienie

0g               Input = 0, Output = [0]
  |              Or
   g{   }ᵃ¹⁰     Accumulate 10 times, starting with [Input]
     t+₉         Take the last element, add 9
Fatalizować
źródło
5

Bash ,31 27 bajtów

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

Wypróbuj online!

poprzedni

eval echo {$1..$(($1?99:0))..9}
marcosm
źródło
jak znaleźć strony man / bash help /? o „{x..y..z}”? Jak to jest nazywane?
Olivier Dulac
znalazłem to: na stronie manuala wyszukaj [^.] \. \. [^.]: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 bajtów

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

W jaki sposób?

⍵,10⍴9- konkatenacja danych wejściowych z 10 9s ( ⍵ 9 9 9 9 9 9 9 9 9 9).

+\ - suma skumulowana.

(×⍵)/ - rozszerz czasy podpisania - gdzie podpis daje 1 dla 1-9 i 0 dla 0.

Wypróbuj online!

Dyalog APL, 24 bajty

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

Wymaga ⎕IO←0.

W jaki sposób?

                      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
Uriel
źródło
5

Brain-Flak , 48 bajtów

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

Wypróbuj online!

Mogę dodać wyjaśnienie później.

MegaTom
źródło
Znakomity! Próbowałem połączyć +9 z długością, aby zrobić licznik, ale nigdy nie myślałem o zrobieniu tego na odwrót
Jo King
1
To jeszcze nie koniec : P
Wheat Wizard
4

Mathematica, 25 bajtów

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

działa dla 0

J42161217
źródło
Nie działa dla 0. Nie obejmowałoby to również liczb, których cyfry sumują się do liczby większej niż 9. (np. 9Nie miałyby 99na wyjściu).
JungHwan Min
Rozumiem, co masz na myśli. Czy sprawdzasz tylko „moje” kody? ponieważ wiele kodów tutaj nie działa dla 0 ...
J42161217
1
Welp, zwykle koncentruję się na kodzie Mathematica, ponieważ jest to język, który znam najlepiej. Nie chciałem celować w ciebie ani nic. Przepraszam, jeśli tak się wydawało.
JungHwan Min
wszystko naprawione i działa
J42161217
Co? Nie masz wbudowanego?
OldBunny2800
4

Galaretka , 12 bajtów

⁵²Ḷµ,³%9EµÐf

Wypróbuj online!

Jak to działa

⁵²Ḷµ,³%9EµÐf
⁵             - literal 10
 ²            - square
  R           - lowered range: 0 to 99 inclusive.
   µ     µÐf  - filter based on:
    ,³          - element and input
      %9        - mod 9
        E       - are equal
fireflame241
źródło
1
Kiedy używam 1 jako argumentu, podaje również 100, które nie jest dwucyfrowe
FantaC
To nie dzieli przypadków 0 i 9.
Ørjan Johansen
To wciąż nie działa dla0
Cairair coinheringaahing
4

Właściwie 18 bajtów

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

Wypróbuj online!

Wyjaśnienie:

╗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)
Mego
źródło
@FryAmTheEggman Naprawiono.
Mego
4

PHP, 41 bajtów

wyświetla wartości rozdzielone podkreśleniem

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

ERAjest najkrótszą stałą w PHP o wartości 131116. Możesz go zastąpić nudną alternatywą 100lub zakończyć programdie

Wersja online

Jörg Hülsermann
źródło
4

Brain-Flak , 54 52 bajtów

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

Wypróbuj online!

Mój pierwszy wypad z Brain-Flak i myślę, że całkiem nieźle sobie poradziłem. Ktoś z większym doświadczeniem ma porady?

Jak to działa:

{ 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
Jo King
źródło
1
Dobra robota! Witamy w Brain-Flak.
MegaTom,
3

PHP, 35

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

Tworzy zakres [$argn, 100)z krokiem 9jako tablica i drukuje go. Jeśli dane wejściowe 0to tworzy zakres [0,0]=> array(0).

Christoph
źródło
3

Python, 48 51 bajtów

3 bajty zapisane dzięki @WheatWizard

lambda n:[x for x in range(100)if~-n==~-x%9or x==n]
Uriel
źródło
1
spróbuj ~-xzamiast(x-1)
Wheat Wizard
1
nadal z końcówką @ WheatWizard, usuń miejsce wif ~-x%9
Felipe Nardi Batista
Teraz możesz zrobić, ~-n==~-x%9or x==naby zapisać bajt
Wheat Wizard
Muszę zadać głupie pytanie ... Chciałbym to uruchomić. Jak uruchomić ten kod? Jest kilka konstrukcji, o których się uczę (głównie operator ~)
Allen Fisher
2

R , 23 bajty

pryr::f(x+0:(10*!!x)*9)

Wypróbuj online!

Łącze TIO używa function(x)zamiast tego pryr::f, ponieważ TIO nie ma pryrzainstalowanego pakietu.

Nitrodon
źródło
2

Pyke, 6 bajtów (stara wersja)

Zatwierdzenie robocze

TXU#sq

Wyjaśnienie:

TX     -   10**2
  U    -  range(^)
   #   - filter(^)
    s  -   digital_root(^)
     q -  ^==input
niebieski
źródło
2

C (gcc) , 55 bajtów

f()nie muszą być wywoływane z żadnym argumentem; njest właśnie tam, a nie na zewnątrz funkcja zapisać bajt.

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

Wypróbuj online!

gastropner
źródło
Możesz zapisać 2 bajty, umieszczając printfwewnątrz nagłówka pętli: Wypróbuj online!
DLosc
@DLosc myeah, ale potem zaczyna się o jeden numer za późno.
gastropner
Brzmienie może być jaśniejsze, ale pytanie nie pozwala zaczynając od (na przykład) 10 zamiast. 1:”... wszystkich możliwych dwucyfrowych liczb, które mają ten pierwiastek cyfrowy Jeśli trzeba go , to może zawierać [jednolity -numer cyfrowy], np. 05. ” Innymi słowy, włączenie liczby jednocyfrowej na wyjściu jest dozwolone, ale nie wymagane .
DLosc
2

Węgiel drzewny , 14 11 bajtów

I∧N⁺Iθ×⁹…¹¹

Wypróbuj online! Link jest do pełnej wersji kodu. Edycja: Zapisano 2 bajty, nie drukując niczego dla wejścia zerowego i 1 bajt, stosując operacje wektoryzacji 3 bajty dzięki tylko @ ASCII. Wyjaśnienie:

         ¹¹ 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
Neil
źródło
11 bajtów ?
Tylko ASCII
Myślę, że właśnie znalazłem alternatywę, która wyświetla 0, tutaj
tylko ASCII
1

Julia 0.6 , 18 bajtów

Używam trójki, aby złapać 0skrzynkę, i zakresu, n:9:99aby utworzyć liczby. W Julii zakres jest AbstractVectori może być użyty zamiast liczby rzeczywistej Vectorw większości przypadków, ale po prostu zostanie wydrukowany, ponieważ 1:9:91nie spełnia wyzwania, więc zawijam go, [_;]aby zebrać zawartość w Vector.

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

Wypróbuj online!

gggg
źródło
1

Clojure, 33 bajty

(fn[n](if(> n 0)(range n 100 9)))
użytkownik84207
źródło
1

Clojure , 38 bajtów

(defn f[n](if(pos? n)(range n 100 9)))

lub jako funkcja anonimowa, która ma 29 bajtów

(#(if(pos? %)(range % 100 9))n)

Wypróbuj online!

dzięki @steadybox

Alonoaky
źródło
1
Wyjście gdy n=9brakuje ostatniej cyfry 99. Wypróbuj online! Możesz także zapisać bajt, usuwając spację między f[n]i (if(....
Steadybox
0

Perl 5, 62 bajty

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

Musi być krótsza droga

Tom Tanner
źródło
0

Gol> <> , 12 bajtów

I:ZhbF:N9+|;

Wypróbuj online!

Jak to działa

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
Bubbler
źródło