Задача:
Учитывая целое число в десятичной системе счисления, уменьшите его до одной десятичной цифры следующим образом:
- Преобразуйте число в список десятичных цифр.
- Найти самую большую цифру, D
- Удалить D из списка. Если D встречается несколько раз, выберите первое слева (в наиболее значимой позиции), все остальные должны остаться нетронутыми.
- Преобразовать полученный список в десятичное число и умножить его на D.
- Если число больше 9 (имеет более 1 десятичной цифры), повторите всю процедуру, вводя в нее результат. Остановитесь, когда вы получите однозначный результат.
- Показать результат.
Пример:
26364 ->
1. 2 6 3 6 4
2. The largest digit is 6, so D=6
3. There are two occurrences or 6: at positions 1 and 3 (0-based). We remove the left one,
at position 1 and get the list 2 3 6 4
4. we convert the list 2 3 6 4 to 2364 and multiply it by D:
2364 * 6 = 14184
5. 14184 is greater than 9 so we repeat the procedure, feeding 14184 into it.
Мы продолжаем, повторяя процедуру для 14184 и так далее, и мы проходим следующие промежуточные результаты, в конечном итоге достигая 8:
11312
3336
1998
1782
1376
952
468
368
288
224
88
64
24
8
Таким образом, результат для 26364 - 8.
Входные данные: целое число / строка, представляющая целое число
Выход: одна цифра, результат сокращения, примененный к числу.
Тестовые случаи:
9 -> 9
27 -> 4
757 -> 5
1234 -> 8
26364 -> 8
432969 -> 0
1234584 -> 8
91273716 -> 6
Это код-гольф , поэтому выигрывают самые короткие ответы в байтах на каждом языке.
code-golf
arithmetic
integer
Гален Иванов
источник
источник
10 -> 10
?Ответы:
05AB1E , 6 байтов
Код:
Использует кодировку 05AB1E . Попробуйте онлайн!
объяснение
источник
JavaScript (ES6), 49 байт
Принимает ввод как строковое представление целого числа, например
f("26364")
.Тестовые случаи
Показать фрагмент кода
источник
Желе , 13 байт
Попробуйте онлайн!
-1 благодаря уловке, которую я нашел в ответе Джонатана Аллана .
Полная программа.
источник
Pyth , 16 байт
Принимает ввод в виде строки. Попробуй это здесь! (Альтернатива:
.WtH`*s.-ZeSZseS
)Pyth , 18 байт
Принимает ввод как целое число. Попробуй это здесь!
Как это работает
16-byter
18-byter
Быть так близко к Желе в таких соревнованиях очень хорошо для Pyth IMO :-)
источник
Шелуха ,
141312 байтСпасибо Згарбу за сохранение 1 байта.
Попробуйте онлайн!
Объяснение:
источник
R ,
9995 байтовПопробуйте онлайн!
Рекурсивная функция. Добавление
f(number)
в нижний колонтитул можно использовать для проверки других значенийnumber
. Простая реализация,d
представляет собой список цифр и10^(n:2-2)%*%d[-M]
вычисляет число с удалением самой большой цифры.источник
Python 2 , 72 байта
Попробуйте онлайн!
источник
432969
. «ValueError: недопустимый литерал для int () с основанием 10: ''»n
было бы 0, тоn*(n<=9)
все равно было бы равно ложному значению 0, что заставляло бы рекурсию продолжаться и вызывать ошибку, тогда как строка'0'
является истинным значением, и поэтому рекурсия была остановлена.Рубин , 59 байт
Попробуйте онлайн!
Рекурсивная лямбда-функция называется как
f[26364]
.источник
Желе , 15 байт
Попробуйте онлайн! или посмотрите набор тестов .
Как?
источник
Haskell ,
706766 байтСохранено
34 байта благодаря NIMI!Попробуйте онлайн!
источник
until
. Попробуйте онлайн! ,...span=<<(>).maximum...
.C # (.NET Core) , 126 байт
Попробуйте онлайн!
источник
if(n<10)return n;...return F(...);
к одному возврату с помощью ternary-if, например так:int F(int n){var x=(n+"").ToList();var m=x.Max(d=>d);x.RemoveAt(x.IndexOf(m));return n<10?n:F(int.Parse(string.Concat(x))*(m-48));}
( 131 байт )using System.Linq;
(18 байт) в байтовый счет.APL (Dyalog) ,
363533 байта-1 из-за обновленных спецификаций OP. -2 благодаря нгн.
Функция анонимного молчаливого префикса. Принимает целое число в качестве аргумента.
Попробуйте онлайн!
{
...}
функция где⍵
аргумент:⍵>9:
если аргумент больше 9, то:⍕⍵
отформатировать (stringify) аргумент⍎¨
выполнить (оценить) каждый (мы получаем цифры как числа)(
…)
Применить следующую молчаливую функцию к тем⌈/
самая большая цифра×
раз10⊥
Расшифровка базы-10 (собирает цифры)⊂
все цифры⌷⍨¨
индексируется каждым из⍳∘≢
я ndices из числа цифр≠
отличается от⊢⍳⌈/
самая большая цифра я ndex во всем списке цифр∇
рекурсировать (т.е. называть себя) на этом⋄
еще⍵
вернуть аргумент без измененийисточник
>10
быть>9
?>9
сэкономит байт.Perl 6 ,
4541 байтПопробуй это
Попробуй это
Expanded:
источник
Сетчатка , 67 байт
Попробуйте онлайн! Ссылка включает тесты достаточно быстро, чтобы не забить сервер Денниса. Объяснение:
Для двухзначных чисел это дублирует число с
;
разделителем, добавляя префикс 1 к дубликату. Для однозначных чисел это префикс1;
к номеру.Сортировать цифры дубликата. (Для однозначных чисел это не имеет никакого эффекта.)
Найдите первое вхождение самой большой цифры и удалите ее, а также другие цифры в дубликате и дополнительный 1, который был добавлен ранее. (Для однозначных чисел совпадение не удается, так что это ничего не делает.)
Умножьте число на цифру. Для однозначных чисел это приводит к исходному номеру, и цикл завершается. В противном случае программа зацикливается, пока не будет достигнута одна цифра.
источник
C # (.NET Core) ,
177164 + 18 байтБлагодаря @raznagul сэкономлено 13 байтов!
Попробуйте онлайн!
источник
s.Length<2
наn<10
. Также вы можете удалить троичный оператор и простоreturn f(y)
в конце, так как случай обрабатывается наif
следующем шаге рекурсии.Java 8,
126104 байта-22 байта благодаря @ OlivierGrégoire .
Объяснение:
Попробуй это здесь.
источник
n>9
и возвращать условия вместоn<10
).Jq 1,5 , 86 байт
расширенный
Попробуйте онлайн!
источник
Perl 5 , 41 + 1 (
-p
) = 42 байтаПопробуйте онлайн!
источник
9
. :( но немного повозился и сумел получить 41 байт с исправлением: попробуйте онлайн!Lua,
137108 байтСпасибо Джонатану S за то, что он выложил в гольф 29 байтов.
Попробуйте онлайн!
источник
D ,
188186185 байтПопробуйте онлайн!
Я очень ненавижу ленивую оценку. Любые советы приветствуются!
источник
Луа, 154 байта
У меня должно быть несколько способов сыграть в гольф, сейчас я экспериментирую.
Попробуйте онлайн!
Пояснения
источник
PowerShell , 123 байта
Попробуйте онлайн!
Ooof. Массивы PowerShell являются неизменяемыми, поэтому нам нужно использовать длительное
[Collections.ArrayList]
приведение здесь, чтобы мы могли вызвать.remove()
позже.Принимает ввод
$args
, преобразует его в строку, затемchar
-array, затем вArrayList
. Хранит это в$a
. Затем мыwhile
зациклимся, пока не достигнем уровня или ниже9
. Каждая итерация, мы вызываем.remove
на наибольшем элементе$a
(сделаноsort
и с последним элементом[-1]
$b
к самому ), сохраняя самый большой элемент одновременно. Это работает, потому что значения ASCII сортируются так же, как и буквенные цифры.Затем, мы
$a
сноваchar
вычисляем , снова как -array (иArrayList
неявно), приводя нашу$b
(которая в настоящее время являетсяchar
) к строке, затем к int+
и умножая это на$a
-join
ed в строку (неявно приводим к int). Это удовлетворяет части задачи «умножить на D».Наконец, как только мы выходим из цикла, мы помещаем
$a
в конвейер и вывод неявный.источник
Пип ,
2221 байтПринимает ввод в качестве аргумента командной строки. Проверьте все контрольные примеры: попробуйте онлайн!
объяснение
Ungolfed, с комментариями:
В версии для гольфа тело петли сведено в одно выражение:
источник
С
103,9590 байтовПопробуйте онлайн!
источник
Java 8: 115 байт
-10 байтов благодаря Джо Кингу
К сожалению, вы не можете вызывать лямбда-функцию рекурсивно, поэтому для заголовка метода требуются дополнительные 11 байтов. Я знаю, что вместо этого есть более короткий ответ Java, но я решил придумать это самостоятельно.
Попробуйте онлайн
источник
-48
от карты до концаm
определения. Попробуйте онлайн! У вас также есть дополнительные пробелы в вашей ссылке TIOJ, 40 байт
Попробуйте онлайн!
объяснение
источник
PowerShell , 230 байт
Попробуйте онлайн!
Потрачено слишком много на все типы литья.
источник
PHP,
8277 + 1 байтЗапустите как трубу с
-nR
или попробуйте онлайн .источник
постоянный ток ,
9885 байтБольшое спасибо за этот ответ за идею использования
~
при извлечении цифр из числа, что привело к двум сохраненным байтам по сравнению с исходной версией кода.Это было довольно хотя, чтобы закончить в
dc
с его несуществующими возможностями манипулирования строками.Попробуйте онлайн!
источник
Баш, 80 байт
Используются пакеты Core Utilities (для
sort
аtail
) иgrep
.Как это работает?
источник