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

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

Никаких стандартных лазеек , и это , поэтому выигрывает самый короткий ответ в байтах.

Поздравляю Heeby Jeeby Man с его удивительным 46-байтовым ответом!

FantaC
источник
1
само число считается двухзначным числом? (05)?
Разрушаемый Лимон
2
Обратный вызов
FryAmTheEggman
5
Каким должен быть вывод для 0? И опять же, в таком случае, когда есть только 10 возможных входов, было бы очень полезно предоставить выходы в вашей задаче.
FryAmTheEggman
1
Ваше решение о том, как обрабатывать ноль, лишает законной силы многие ответы, которые были опубликованы. Было бы целесообразно сообщить участникам, что вы приняли решение.
FryAmTheEggman
2
является противоположностью цифрового корня аналогового корня?
Tuskiomi

Ответы:

9

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

Возвращает 0для 0или массив решений в противном случае.

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

демонстрация

Arnauld
источник
3
Downvote без каких - либо комментариев не очень помогает улучшить ответ ...
Arnauld
Некоторым может быть неясно, какая часть является действующей функцией codegolfed, а какая является демонстрацией. Хорошей идеей было бы просто поместить саму функцию прямо под линией JavaScript .
Дэвид Малдер
@DavidMulder Спасибо за предложение. Это на самом деле так, как я отвечаю большую часть времени. Обновлено.
Арно
Отличное решение! Извините за перетаскивание старого решения, но не могли бы вы оставить его, +чтобы сохранить еще один байт? Хотя, я полагаю, это не будет работать со строкой stdin.
Крейг Эйр,
@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
kalsowerus
источник
Я думаю, что вы можете заменить бесконечный цикл на SOSO, так как число никогда не будет больше 99.
Аднан
@ Adnan Не думай, уверяю тебя, он может.
Эрик Outgolfer
1
тL<на самом деле не меньше , чем обычный 99Ý. ;)
Эрик Outgolfer
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

Brain-Flak , 46 байтов

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

Попробуйте онлайн!

объяснение

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

({}[()])

Затем мы выталкиваем два верхних элемента: счетчик и последний вычисленный элемент. Мы добавляем их к высоте стека, чтобы уравновесить декремент, затем нажимаем это дважды, один раз для вывода и один раз, чтобы его можно было использовать для вычисления следующего результата. Двойное нажатие означает, что мы случайно выдвинули дополнительное значение, которое необходимо удалить в конце выполнения.

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

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

также 46 байтов.

Brain-Flak , 52 байта

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

Попробуйте онлайн!

объяснение

Основной внешний цикл делает особый случай для ввода нуля. Если вводится ноль, мы перепрыгиваем через весь цикл, выводим ноль и ничего не выводим. В противном случае мы входим в цикл. Здесь мы нажимаем цикл 10 раз каждый раз, добавляя 9 к вершине стека, сохраняя старые значения. Поскольку 9 сохраняет цифровые суммы, мы получим следующее значение. Когда цикл истек, мы используем сгенерированный ноль для выхода из цикла, который затем выталкивается {}в конце.

Brain-Flak , 56 байт

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

Попробуйте онлайн!

объяснение

Эта версия работает очень похоже на последнюю, за исключением того, что мы зациклились 9 раз вместо 10, оставив исходное значение. Чтобы сделать это, нам нужно немного изменить способ обработки памяти. Все байты, которые мы могли сохранить с помощью этого метода, помещаются в очистку.

Мастер пшеницы
источник
46 не сохраняет первоначальный номер :(
Джо Кинг
@JoKing Да, это просто 2-значные случаи. То, что я думаю, является своего рода намерением вопроса, так что я очень счастлив.
Пшеничный волшебник
Хорошая работа! Вы заработали награду.
FantaC
5

Баш ,31 27 байт

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

Попробуйте онлайн!

предыдущий

eval echo {$1..$(($1?99:0))..9}
marcosm
источник
как найти справочные страницы / 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

Дьялог АПЛ, 15 байт

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

Как?

⍵,10⍴9- объединить ввод с 10 9с ( ⍵ 9 9 9 9 9 9 9 9 9 9).

+\ накопительная сумма.

(×⍵)/ - увеличить время signum - где signum дает 1 для 1-9 и 0 для 0.

Попробуйте онлайн!

Дьялог АПЛ, 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

Brain-Flak , 48 байтов

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

Попробуйте онлайн!

Я могу добавить объяснение позже.

MegaTom
источник
Brilliant! Я пытался объединить +9 с длиной, чтобы создать счетчик, но я никогда не думал, что могу сделать это наоборот
Джо Кинг,
1
Это еще не конец : P
Волшебник Пшеницы
4

Mathematica, 25 байтов

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

работает на 0

J42161217
источник
Не работает 0. Это также не будет включать числа, чьи цифры в сумме составляют число больше 9. (например 9, не будет 99в выходных данных).
JungHwan Мин
Я понимаю что ты имеешь ввиду. Вы проверяете только «мои» коды? потому что многие коды здесь не работают для 0 ...
J42161217
1
Хорошо, я склонен концентрироваться на коде Mathematica, потому что это язык, который я знаю лучше всего. Не хотел нацеливаться на тебя или что-то еще. Я прошу прощения, если это казалось так.
JungHwan Мин
все исправлено и работает
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
fireflame241
источник
1
Когда я использую 1 в качестве аргумента, он также выдает 100, что не является двузначным
числом
Это не разделяет 0 и 9 случаев.
Орджан Йохансен
Это до сих пор не работает0
Caird coinheringaahing
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)
Mego
источник
@FryAmTheEggman Исправлено.
Мего
4

PHP, 41 байт

печать подчеркивает разделенные значения

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

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

Онлайн версия

Йорг Хюльсерманн
источник
4

Brain-Flak , 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).

Christoph
источник
3

Python, 48 51 байт

3 байта сохранены благодаря @WheatWizard

lambda n:[x for x in range(100)if~-n==~-x%9or x==n]
Уриэль
источник
1
попробуй ~-xвместо(x-1)
Wheat Wizard
1
все еще с подсказкой @ WheatWizard, удалите пробел вif ~-x%9
Фелипе Нарди Батиста
Теперь вы можете сделать, ~-n==~-x%9or x==nчтобы сохранить байт
Мастер пшеницы
Мне нужно задать глупый вопрос ... Я хотел бы запустить это. Как мне заставить этот код работать? Здесь есть некоторые конструкции, о которых я узнаю (в основном оператор ~)
Аллен Фишер
2

R , 23 байта

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

Попробуйте онлайн!

function(x)Вместо ссылки используется ссылка TIO pryr::f, поскольку pryrпакет TIO не установлен.

Nitrodon
источник
2

C (gcc) , 55 байтов

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

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

Попробуйте онлайн!

gastropner
источник
Вы можете сохранить 2 байта, поместив printfвнутри заголовка цикла: попробуйте онлайн!
DLosc
@DLosc myeah, но тогда он начинает один номер слишком поздно.
гастропнер
Формулировка может быть более четкой, но вопрос позволяет начинать с (например) 10 вместо 1: «... все возможные двузначные числа, имеющие этот цифровой корень. Если вам это нужно , он может включать [единственное число -значное число], например 05. " Другими словами, включение однозначного числа в выводе разрешено, но не обязательно .
DLosc
2

Древесный уголь , 14 11 байтов

I∧N⁺Iθ×⁹…¹¹

Попробуйте онлайн! Ссылка на подробную версию кода. Редактировать: 2 байта сохранены , не печатая ничего для нулевого ввода и 1 байт, используя векторизационные операции 3 байта благодаря @ ASCII-only. Объяснение:

         ¹¹ 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
Нил
источник
11 байт ?
Только для ASCII
я думаю, что я только что нашел альтернативу, которая печатает 0, здесь
только ASCII
1

Юлия 0,6 , 18 байт

Я использую троичный, чтобы поймать 0случай, и диапазон, n:9:99чтобы создать числа. В julia диапазон является AbstractVectorи может использоваться вместо фактических Vectorчисел в большинстве случаев, но он будет печатать только то, 1:9:91что не удовлетворяет задаче, поэтому я обертываю его, [_;]чтобы собрать содержимое в Vector.

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

Попробуйте онлайн!

GGGG
источник
1

Clojure, 33 байта

(fn[n](if(> n 0)(range n 100 9)))
user84207
источник
1

Clojure , 38 байт

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

или как анонимная функция, которая составляет 29 байт

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

Попробуйте онлайн!

спасибо @steadybox

Alonoaky
источник
1
Вывод, когда n=9отсутствует последний номер 99,. Попробуйте онлайн! Также вы можете сохранить байт, удалив пробел между f[n]и (if(....
Steadybox
0

Perl 5, 62 байта

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

Там должен быть более короткий путь

Том Таннер
источник
0

Gol> <> , 12 байт

I:ZhbF:N9+|;

Попробуйте онлайн!

Как это устроено

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
фонтанчик для питья
источник