Навпроти цифрового кореня!


19

Також відомий як [аналоговий корінь]

( Навпроти цифрового кореня! );)

Цифровий корінь числа - це безперервне підсумовування його цифр, поки воно не стане одноцифровим, наприклад, цифровий корінь 89456 обчислюється так:

8 + 9 + 4 + 5 + 6 = 32

3 + 2 = 5

Цифровий корінь 89456 - 5.

Давши цифру як вхід через STDIN , надрукуйте / поверніть усі можливі двоцифрові числа, що мають цей цифровий корінь. Якщо вам це потрібно, він може включати себе, наприклад 05

Це всі можливі входи та виходи:

(Ви можете вибрати, чи потрібно включати провідний нуль для самої цифри чи ні)

I / O

0 => 0 або 00 або нічого

1 => 01 та / або 1, 10, 19, 28, 37, 46, 55, 64, 73, 82, 91 - Переконайтесь, що 1 не повертає 100

2 => 02 та / або 2, 11, 20, 29, 38, 47, 56, 65, 74, 83, 92

3 => 03 та / або 3, 12, 21, 30, 39, 48, 57, 66, 75, 84, 93

4 => 04 та / або 4, 13, 22, 31, 40, 49, 58, 67, 76, 85, 94

5 => 05 та / або 5, 14, 23, 32, 41, 50, 59, 68, 77, 86, 95

6 => 06 та / або 6, 15, 24, 33, 42, 51, 60, 69, 78, 87, 96

7 => 07 та / або 7, 16, 25, 34, 43, 52, 61, 70, 79, 88, 97

8 => 08 та / або 8, 17, 26, 35, 44, 53, 62, 71, 80, 89, 98

9 => 09 та / або 9, 18, 27, 36, 45, 54, 63, 72, 81, 90, 99

Ніякі стандартні лазівки , і це , тому найкоротша відповідь у байтах виграє.

Поздоровлення Хебі Джебі Ман за його дивовижну 46-байтову мозку у відповідь!


1
чи вважається саме число двоцифровим? (05)?
Зруйнований лимон


5
Яким має бути вихід на 0? І знову ж таки, у такому випадку, коли існує лише 10 можливих входів, було б великою користю поставити результати, які є вашими завданнями.
FryAmTheEggman

1
Ваше рішення про те, як обробити нуль, визнає невідомими багато відповідей, які були опубліковані. Було б уважно повідомити учасникам, що ви прийняли рішення.
FryAmTheEggman

2
чи є протилежним цифровому кореню аналоговий корінь?
тускіоми

Відповіді:



9

JavaScript (ES6), 27 31 30 байт

Повертається 0 для 0або масив рішень в іншому випадку.

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

Демо


3
Знімок без жодних коментарів не дуже допомагає покращити відповідь ...
Арнольд,

Для когось може бути незрозуміло, яка частина є фактичною функцією кодового гольфу, а яка - демонстрацією. Це може бути гарною ідеєю просто розмістити саму функцію прямо під лінією JavaScript .
Девід Малдер

@DavidMulder Дякую за пропозицію. Це власне те, на що я відповідаю більшість часу. Оновлено.
Арнольд

Приємне рішення! Вибачте за перетягування старого рішення, але чи можете ви скинути цей файл, +щоб зберегти ще один байт? Хоча я вважаю, що це не буде працювати зі стродовим рядком.
Крейг Айре

@CraigAyre Я не впевнений, звідки це взялося +... Оновлено. Спасибі!
Арнольд

8

05AB1E , 13 12 9 байт

-3 байти завдяки Аднану

тL<ʒSOSOQ

Спробуйте в Інтернеті!

Пояснення

т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

Я думаю, ви можете замінити нескінченну петлю на SOSO, оскільки число ніколи не буде більше 99.
Аднан,

@Adnan Не думай, запевняю, він може.
Ерік Аутгольфер

1
тL<насправді не коротший, ніж звичайний 99Ý. ;)
Ерік Аутгольфер

1
@EriktheOutgolfer Добре, я, мабуть, намагався врятувати там байт; D
kalsowerus

2
Головна "посилання"? З тих пір, коли 05AB1E має посилання? Це не желе.
Андрій Савіних

7

Haskell , 21 байт

f приймає ціле число і повертає список цілих чисел.

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

Спробуйте в Інтернеті!

  • Починається з цифри dі генерує діапазон з кожним 9-м числом до межі 99, за винятком складного випадку 0.
  • Щоб зупинитися рано 0, використовує цю потужність 0^d==1для 0та ==0для всіх інших цифр. Таким чином, 99^0^0^dдає 1для іншого, 0але 99нічого іншого.


7

Мозок-Флак , 46 байт

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

Спробуйте в Інтернеті!

Пояснення

У цій відповіді використовується ідея відповіді Мегатома, а саме використання висоти стека як різниці між лічильником циклу і збільшенням. Як і в попередніх відповідях, у цієї відповіді є велика зовнішня петля, щоб зловити всі нулі. Всередині циклу натискаємо 10, щоб діяти як лічильник, потім запускаємо інший вкладений цикл. У цій петлі декрементуємо лічильник на 1

({}[()])

Потім ми з'являємо два найпопулярніших пункту - лічильник та останній елемент, який ми обчислили. Ми додаємо їх до висоти стека для того, щоб протистояти зменшенню, потім натискаємо це двічі, один раз для виведення і один раз, щоб його можна було використати для обчислення наступного результату. Натискання речей двічі означає, що ми випадково підштовхуємо додаткове значення, яке потрібно видалити в кінці виконання.

Причина, по якій Мегатом ледве перемагає, відповідь Мегатома змушена домогтися висоти стека, поки останній результат все ще на стеку. Це означає, що вони змушені використовувати досить дороге, [()]щоб зменшити загальну суму на одиницю. Переміщуючи дублікат до кінця циклу, я можу уникнути необхідності використовувати [()]додаткову ціну {}в самому кінці програми. Якби Мегатом користувався цією стратегією, його відповідь виглядала б так:

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

також 46 байт.

Мозок-Флак , 52 байти

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

Спробуйте в Інтернеті!

Пояснення

Основна зовнішня петля робить спеціальний корпус для введення нуля. Якщо нуль введений, ми переходимо через весь цикл, виводимо нуль, а потім нічого не виводимо. Інакше вводимо цикл. Тут ми натискаємо цикл 10 разів кожен раз, додаючи 9 у верхню частину стека, зберігаючи старі значення. Оскільки 9 зберігає цифрові суми, це отримає для нас наступне значення. Як тільки цикл закінчився, ми використовуємо нуль, який він створив, щоб вийти з циклу, який потім спливає {}в кінці.

Мозок-Флак , 56 байт

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

Спробуйте в Інтернеті!

Пояснення

Ця версія працює дуже аналогічно попередній, за винятком того, що ми циклічно робимо 9 разів замість 10, залишаючи вихідне значення. Для цього нам потрібно трохи змінити спосіб обробки пам'яті. Усі байти, які ми могли зберегти за допомогою цього методу, потрапляємо в очищення.


У 46 не зберігається початковий номер :(
Jo King

@JoKing Так, це просто 2-розрядний кейс. Я вважаю, що це такий собі намір питання, що робить мене дуже щасливим.
Пшеничний чарівник

Хороша робота! Ви заробили виграш.
FantaC



5

Bash ,31 27 байт

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

Спробуйте в Інтернеті!

Попередній

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

як можна знайти сторінки man / bash help /? про "{x..y..z}"? Як це називається?
Олів'є Дулак

знайдено це: на сторінці чоловіка, пошук [^.] \. \. [^.]: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.
Олів'є Дулак

5

Діалог APL, 15 байт

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

Як?

⍵,10⍴9- об'єднати вхід з 10 9s ( ⍵ 9 9 9 9 9 9 9 9 9 9).

+\ - сукупна сума.

(×⍵)/ - розширити час реєстрації - де signum дає 1 для 1-9 і 0 для 0.

Спробуйте в Інтернеті!

Діалог APL, 24 байти

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

Вимагає ⎕IO←0.

Як?

                      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

5

Мозок-Флак , 48 байт

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

Спробуйте в Інтернеті!

Я можу додати пояснення пізніше.


Блискуче! Я спробував поєднати +9 з довжиною, щоб зробити лічильник, але ніколи не думав робити це навпаки
Джо Кінг


4

Математика, 25 байт

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

працює на 0


Не працює для 0. Сюди також не включатимуться цифри, цифри яких доходять до числа, що перевищує 9 (наприклад 9, не було б 99у висновку).
JungHwan Min

Я бачу, що ти маєш на увазі. Ви перевіряєте лише "мої" коди? тому що багато кодів тут не працюють за 0 ...
J42161217

1
Welp, я схильний зосереджуватися на коді Mathematica, тому що це мова, яку я найкраще знаю. Не означав націлити на вас чи на що-небудь. Прошу вибачення, якщо так здалося.
JungHwan Min

все виправлено і працює
J42161217

Що? Немає вбудованих?
OldBunny2800

4

Желе , 12 байт

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

Спробуйте в Інтернеті!

Як це працює

⁵²Ḷµ,³%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

1
Коли я використовую 1 як аргумент, він також видає 100, що не є двозначним
FantaC

Це не розділяє 0 та 9 випадків.
Ørjan Johansen


4

Власне , 18 байт

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

Спробуйте в Інтернеті!

Пояснення:

╗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
Мего

4

PHP, 41 байт

друкує розділені значення підкреслення

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

ERA- найкоротша константа в PHP зі значенням 131116. Ви можете замінити його нудною альтернативою 100або закінчити програмуdie

Інтернет-версія


4

Мозг-Флак , 54 52 байти

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

Спробуйте в Інтернеті!

Перший мій напад на Brain-Flak, і я думаю, що я зробив досить добре. Хто має більший досвід має поради?

Як це працює:

{ 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
Хороша робота! Ласкаво просимо в Brain-Flak.
MegaTom


3

PHP, 35

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

Створює діапазон [$argn, 100)з кроком 9як масив і друкує його. Якщо вхід є, 0він створює діапазон [0,0]=> array(0).


3

Пітон, 48 51 байт

3 байти збережено завдяки @WheatWizard

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

1
спробуйте ~-xзамість(x-1)
Пшеничний майстер

1
все ще з підказкою @ WheatWizard, видаліть пробіл уif ~-x%9
Феліпе Нарді Батіста

Тепер ви можете зробити, ~-n==~-x%9or x==nщоб зберегти байт
Wheat Wizard


Мені потрібно задати дурне питання ... Я хотів би це запустити. Як змусити цей код запустити? Тут я знаю кілька конструкцій (головним чином оператора)
Аллена Фішера




2

C (gcc) , 55 байт

f()насправді не потрібно викликати жодним аргументом; nтільки там замість того , щоб за межами функції , щоб зберегти байт.

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

Спробуйте в Інтернеті!


Ви можете зберегти 2 байти, помістивши printfвсередину заголовка циклу: Спробуйте в Інтернеті!
DLosc

@DLosc так, але потім воно починається з одного числа занадто пізно.
гастропнер

Формулювання може бути зрозумілішим, але питання дозволяє починати з (наприклад) 10 замість 1: "... всі можливі двоцифрові числа, що мають цей цифровий корінь. Якщо вам потрібно , він може включати [єдиний -дід цифрою], наприклад 05. " Іншими словами, включення однозначного числа у висновок дозволено, але не обов'язково .
DLosc

2

Вугілля деревне , 14 11 байт

I∧N⁺Iθ×⁹…¹¹

Спробуйте в Інтернеті! Посилання на багатослівну версію коду. Редагувати: збережено 2 байти, не надрукувавши нічого для нульового введення та 1 байт за допомогою операцій векторизації 3 байти завдяки @ ASCII. Пояснення:

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


i think i just found an alternative that prints 0, here
ASCII-only

1

Julia 0.6, 18 bytes

I use a ternary to catch the 0 case, and a range n:9:99 to create the numbers. In julia a range is an AbstractVector and can be used in place of an actual Vector of numbers in most cases, but it will just print as 1:9:91 which doesn't satisfy the challenge, so I wrap it in [_;] to collect the contents into a Vector.

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

Try it online!




1

Clojure, 38 bytes

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

or as anonymous function which is 29 bytes

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

Try it online!

thanks @steadybox


1
The output when n=9 is missing the last number, 99. Try it online! Also, you can save a byte by removing the space between f[n] and (if(....
Steadybox

0

Perl 5, 62 bytes

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

There's bound to be a shorter way


0

Gol><>, 12 bytes

I:ZhbF:N9+|;

Try it online!

How it works

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.