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!


1
czy sam numer liczy się jako liczba dwucyfrowa? (05)?
Zniszczalna cytryna


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:



9

JavaScript (ES6), 27 31 30 bajtów

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

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

Próbny


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

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.


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.


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

Bash ,31 27 bajtów

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

Wypróbuj online!

poprzedni

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

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


4

Mathematica, 25 bajtów

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

działa dla 0


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

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)

@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


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

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).


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]

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

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!


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


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!





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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.