Gegenteil der digitalen Wurzel!


19

Auch als [analoge Wurzel] bekannt

( Gegenüber der digitalen Wurzel! );)

Die digitale Wurzel einer Zahl ist die fortlaufende Summe ihrer Ziffern, bis sie eine einzelne Ziffer ist. Die digitale Wurzel von 89456 wird beispielsweise folgendermaßen berechnet:

8 + 9 + 4 + 5 + 6 = 32

3 + 2 = 5

Die digitale Wurzel von 89456 ist 5.

Bei einer über STDIN eingegebenen Ziffer werden alle möglichen zweistelligen Zahlen mit dieser digitalen Wurzel gedruckt / zurückgegeben. Wenn Sie es brauchen, kann es sich selbst einschließen, zB 05

Dies sind alle möglichen Ein- und Ausgänge:

(Sie können wählen, ob die führende Null für die Ziffer selbst eingefügt werden soll oder nicht)

I / O

0 => 0 oder 00 oder nichts

1 => 01 und / oder 1, 10, 19, 28, 37, 46, 55, 64, 73, 82, 91 - Stellen Sie sicher, dass 1 nicht 100 zurückgibt

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

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

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

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

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

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

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

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

Keine Standardlücken , und es ist , also gewinnt die kürzeste Antwort in Bytes.

Herzlichen Glückwunsch an Heeby Jeeby Man zu seiner unglaublichen 46-Byte-Antwort!


1
zählt die nummer selbst als zweistellige nummer? (05)?
Destructible Lemon


5
Was soll der Ausgang für 0 sein? In einem Fall wie diesem, in dem es nur 10 mögliche Eingänge gibt, wäre es von großem Vorteil, die Ausgänge für Ihre Herausforderung bereitzustellen.
FryAmTheEggman

1
Ihre Entscheidung, wie mit Null umzugehen ist, macht viele der Antworten ungültig, die veröffentlicht wurden. Es wäre überlegt, den Teilnehmern mitzuteilen, dass Sie eine Entscheidung getroffen haben.
FryAmTheEggman

2
Ist das Gegenteil einer digitalen Wurzel eine analoge Wurzel?
Tuskiomi

Antworten:



9

JavaScript (ES6), 27 31 30 Bytes

Gibt andernfalls 0für 0oder ein Array von Lösungen zurück.

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

Demo


3
Eine Ablehnung ohne Kommentar hilft nicht viel, um die Antwort zu verbessern ...
Arnauld

Für manche ist es möglicherweise unklar, welcher Teil die eigentliche Codegolf-Funktion ist und welcher Teil eine Demonstration. Es könnte eine gute Idee sein, die Funktion selbst direkt unter die JavaScript- Zeile zu setzen.
David Mulder

@ DavidMulder Danke für den Vorschlag. Das ist eigentlich die Art, wie ich die meiste Zeit antworte. Aktualisiert.
Arnauld

Schöne lösung! Entschuldigen Sie, dass Sie eine alte Lösung nach oben gezogen haben, aber können Sie die fallen lassen +, um ein weiteres Byte zu speichern? Obwohl es mit Standard-Saiten nicht so funktionieren würde, nehme ich an.
Craig Ayre

@CraigAyre Ich bin nicht sicher, woher das kommt +... Aktualisiert. Vielen Dank!
Arnauld

8

05AB1E , 13 12 9 Bytes

-3 Bytes dank Adnan

тL<ʒSOSOQ

Probieren Sie es online!

Erläuterung

т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

Ich denke, Sie können die Endlosschleife durch ersetzen SOSO, da die Zahl nie größer als 99 sein wird.
Adnan

@Adnan Glaube nicht, ich versichere dir, dass er es kann.
Erik der Outgolfer

1
тL<ist nicht wirklich kürzer als normal 99Ý. ;)
Erik der Outgolfer

1
@EriktheOutgolfer Nun, ich habe wahrscheinlich versucht, ein Byte dort zu speichern, D
kalsowerus

2
Haupt "link"? Seit wann hat 05AB1E Links? Es ist nicht Gelee.
Andrew Savinykh

7

Haskell , 21 Bytes

f Nimmt eine ganze Zahl und gibt eine Liste von ganzen Zahlen zurück.

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

Probieren Sie es online!

  • Beginnt mit der Ziffer dund generiert den Bereich mit jeder 9. Ziffer bis zu einer Grenze von 99, mit Ausnahme des schwierigen Falls von 0.
  • Zum vorzeitigen Anhalten 0nutzt das die Leistung 0^d==1für 0und ==0für alle anderen Ziffern. So 99^0^0^dgibt es 1für 0aber 99für alles andere.


7

Brain-Flak , 46 Bytes

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

Probieren Sie es online!

Erläuterung

Diese Antwort basiert auf einer Idee aus Megatoms Antwort, nämlich der Verwendung der Stapelhöhe als Differenz zwischen dem Schleifenzähler und dem Inkrement. Wie die vorherigen Antworten hat diese Antwort eine große äußere Schleife, um alle Nullen abzufangen. Innerhalb der Schleife drücken wir 10, um als Zähler zu fungieren, und starten dann eine weitere verschachtelte Schleife. In dieser Schleife dekrementieren wir den Zähler um 1

({}[()])

Dann platzieren wir die beiden obersten Elemente, die der Zähler und das letzte Element sind, das wir berechnet haben. Diese addieren wir zur Stapelhöhe, um die Dekrementierung auszugleichen, und drücken diese zweimal, einmal für die Ausgabe und einmal, damit sie zur Berechnung des nächsten Ergebnisses verwendet werden kann. Zweimaliges Pushen bedeutet, dass wir versehentlich einen zusätzlichen Wert pushen, der am Ende der Ausführung entfernt werden muss.

Der Grund, warum dies Megatom kaum schlägt, ist, dass Megatoms Antwort gezwungen ist, seine Stapelhöhen zu erreichen, während das letzte Ergebnis noch auf dem Stapel liegt. Dies bedeutet, dass sie gezwungen sind, eine ziemlich teure [()]zu verwenden, um die Summe um eins zu verringern. Indem ich das Duplikat an das Ende der Schleife verschiebe, kann ich vermeiden, dass es [()]am {}Ende des Programms auf Kosten eines zusätzlichen verwendet werden muss. Wenn Megatom diese Strategie anwenden würde, würde seine Antwort so aussehen:

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

auch 46 Bytes.

Brain-Flak , 52 Bytes

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

Probieren Sie es online!

Erläuterung

Der Haupt-Outerloop macht einen Sonderfall für die Eingabe von Null. Wenn Null eingegeben wird, springen wir über die gesamte Schleife, platzieren Null und geben dann nichts aus. Ansonsten betreten wir die Schleife. Hier drücken wir die Schleife jedes Mal 10-mal und addieren 9 zum oberen Rand des Stapels, wobei die alten Werte beibehalten werden. Da 9 digitale Summen bewahrt, erhalten wir den nächsten Wert. Sobald die Schleife abgelaufen ist, verlassen wir die erzeugte Null, um die Schleife zu verlassen, die dann {}am Ende durch das geknallt wird .

Brain-Flak , 56 Bytes

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

Probieren Sie es online!

Erläuterung

Diese Version funktioniert sehr ähnlich wie die letzte, außer dass wir 9-mal eine Schleife machen anstatt 10, wobei der ursprüngliche Wert weggelassen wird. Dazu müssen wir den Umgang mit dem Speicher etwas umstellen. Alle Bytes, die wir möglicherweise mit dieser Methode gespeichert haben, werden bereinigt.


Die 46 bewahrt nicht die ursprüngliche Nummer :(
Jo King

@JoKing Ja, es macht nur die 2-stelligen Fälle. Was ich für die Absicht der Frage halte, macht mich ziemlich glücklich.
Weizen-Zauberer

Gute Arbeit! Du hast das Kopfgeld verdient.
FantaC



5

Bash ,31 27 Bytes

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

Probieren Sie es online!

Bisherige

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

wie findet man die manpages / bash help /? über "{x..y..z}"? wie heißt es
Olivier Dulac

Gefunden: Suchen Sie in der Manpage nach [^.] \. \. [^.]: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 Bytes

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

Wie?

⍵,10⍴9- Eingabe mit 10 9s verketten ( ⍵ 9 9 9 9 9 9 9 9 9 9).

+\ - kumulative Summe.

(×⍵)/ - Erweitern Sie die Signum-Zeiten, wobei signum 1 für 1-9 und 0 für 0 ergibt.

Probieren Sie es online!

Dyalog APL, 24 Bytes

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

Benötigt ⎕IO←0.

Wie?

                      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 Bytes

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

arbeitet für 0


Funktioniert nicht für 0. Dies würde auch keine Zahlen einschließen, deren Ziffern sich zu einer Zahl von mehr als 9 summieren (z. B. 9nicht 99in der Ausgabe enthalten).
JungHwan Min

Ich verstehe was du meinst. Prüfen Sie nur "meine" Codes? Viele Codes funktionieren hier nicht für 0 ...
J42161217

1
Welp, ich neige dazu, mich auf Mathematica-Code zu konzentrieren, weil ich diese Sprache am besten kenne. Wollte nicht auf dich oder irgendetwas zielen. Ich entschuldige mich, wenn es so schien.
JungHwan Min

alles
repariert

Was? Kein eingebautes?
OldBunny2800


4

Eigentlich 18 Bytes

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

Probieren Sie es online!

Erläuterung:

╗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 Behoben.
Mego

4

PHP, 41 Bytes

druckt durch Unterstriche getrennte Werte

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

ERAist die kürzeste Konstante in PHP mit dem Wert 131116. Sie können es durch die langweilige Alternative ersetzen 100oder das Programm mit beendendie

Online Version


4

Brain-Flak , 54 52 Bytes

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

Probieren Sie es online!

Mein erster Ausflug mit Brain-Flak, und ich denke, ich habe es ziemlich gut gemacht. Wer mit mehr Erfahrung hat Ratschläge?

Wie es funktioniert:

{ 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
Gut gemacht! Willkommen bei Brain-Flak.
MegaTom


3

PHP, 35

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

Erstellt den Bereich [$argn, 100)mit dem Schritt 9as array und druckt ihn aus. Wenn die Eingabe lautet 0, wird der Bereich erstellt [0,0]=> array(0).


3

Python, 48 51 Bytes

3 Bytes gespart dank @WheatWizard

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

1
versuchen Sie es ~-xstatt(x-1)
Wheat Wizard

1
Immer noch mit @ WheatWizard's Tipp, entferne das Leerzeichen inif ~-x%9
Felipe Nardi Batista

Jetzt können Sie ~-n==~-x%9or x==nein Byte speichern
Weizen-Assistent


Ich muss eine dumme Frage stellen ... Ich würde das gerne machen. Wie bringe ich diesen Code zum Laufen? Hier lerne ich einige Konstrukte (hauptsächlich den Operator ~)
Allen Fisher


2

Pyke, 6 Bytes (alte Version)

Working Commit

TXU#sq

Erläuterung:

TX     -   10**2
  U    -  range(^)
   #   - filter(^)
    s  -   digital_root(^)
     q -  ^==input


2

C (gcc) , 55 Bytes

f()muss eigentlich nicht mit einem Argument aufgerufen werden; Das nist einfach da anstatt außerhalb der Funktion ein Byte zu speichern.

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

Probieren Sie es online!


Sie können 2 Bytes sparen, indem Sie printfden Loop-Header einfügen: Probieren Sie es online aus!
DLosc

@ DLosc myeah, aber dann fängt es eine Nummer zu spät an.
Gastropner

Der Wortlaut könnte klarer sein, aber die Frage erlaubt es, bei (z. B.) 10 statt 1 zu beginnen: "... alle möglichen zweistelligen Zahlen, die diese digitale Wurzel haben. Wenn Sie es brauchen , können Sie [die einzelne -Ziffer] selbst, zB 05. " Das heißt, die Einbeziehung der einstelligen Zahl in die Ausgabe ist zulässig, aber nicht erforderlich .
DLosc

2

Holzkohle , 14 11 Bytes

I∧N⁺Iθ×⁹…¹¹

Probieren Sie es online! Link ist eine ausführliche Version des Codes. Bearbeiten: 2 Bytes gespart, indem nichts für die Null-Eingabe gedruckt wird, und 1 Byte, indem Vektorisierungsoperationen verwendet werden. 3 Bytes nur dank @ ASCII. Erläuterung:

         ¹¹ 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


Ich glaube, ich habe gerade eine Alternative gefunden, die hier
ASCII

1

Julia 0,6 , 18 Bytes

Ich benutze ein Ternär, um den 0Fall zu erfassen , und einen Bereich n:9:99, um die Zahlen zu erstellen. In Julia ist ein Bereich ein AbstractVectorund kann anstelle eines tatsächlichen verwendet werdenVector , in den meisten Fällen von Zahlen, aber es wird gedruckt wie 1:9:91denen sich der Herausforderung nicht gerecht, so dass ich es wickeln in [_;]den Inhalt in eine zu sammeln Vector.

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

Probieren Sie es online!





0

Perl 5, 62 Bytes

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

Es wird bestimmt einen kürzeren Weg geben


0

Gol> <> , 12 Bytes

I:ZhbF:N9+|;

Probieren Sie es online!

Wie es funktioniert

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.