Рассмотрим процесс:
Принимая неотрицательное целое число,
например27
.Разбив его на целые числа
N - floor(N/2)
иfloor(N/2)
(«большую» и «меньшую» половину) и записав их в таком порядке.
например27
становится14 13
.Удаление пробела для объединения целых чисел в новое, намного большее целое число.
например14 13
становится1413
.Повторите шаги 2 и 3 желаемое количество раз.
например,1413
→707 706
→707706
→353853 353853
→353853353853
→ ...
Задача состоит в том, чтобы сделать именно это, но не всегда в базе 10.
Вызов
Напишите программу, которая принимает три числа, B, N и S:
B - целое число от 2 до 10, которое является основанием N (от двоичного до десятичного).
N - неотрицательное целое число, к которому применяется процесс расщепления-объединения. Чтобы упростить ввод данных пользователем, он задается в виде строки в базе B, а не целым числом.
S - неотрицательное целое число, которое является числом повторений процесса расщепления-воссоединения.
Результатом программы является строковое представление N в базе B после S процедур разделения разбиения.
Когда S 0
, деление не выполняется, поэтому выход всегда равен N.
Когда N равно 0
, все разбиения имеют форму 0 0
и сокращаются до 0
снова, поэтому вывод всегда 0
.
Примеры
B = 10, N = 27, S = 1
→1413
B = 10, N = 27, S = 2
→707706
B = 9, N = 27, S = 1
→1413
B = 9, N = 27, S = 2
→652651
B = anything, N = anything, S = 0
→N
B = anything, N = 0, S = anything
→0
Таблица для всех B с N = 1
для S = 0
до 7
:
B S=0 S=1 S=2 S=3 S=4 S=5 S=6 S=7
2 1 10 11 101 1110 111111 10000011111 10000100001000001111
3 1 10 21 1110 202201 101101101100 1201201201212012012011 212100212102121002121212100212102121002120
4 1 10 22 1111 223222 111311111311 2232222232322322222322 11131111131311311111311113111113131131111131
5 1 10 32 1413 432431 213441213440 104220331443104220331442 2433241322130211014044424332413221302110140443
6 1 10 33 1514 535535 245550245545 122553122553122553122552 4125434125434125434125441254341254341254341254
7 1 10 43 2221 11111110 40404044040403 2020202202020220202022020201 10101011010101101010110101011010101101010110101011010100
8 1 10 44 2222 11111111 44444454444444 2222222622222222222226222222 11111113111111111111131111111111111311111111111113111111
9 1 10 54 2726 13581357 62851746285173 3142536758708231425367587081 15212633743485606571782880411521263374348560657178288040
10 1 10 55 2827 14141413 70707077070706 3535353853535335353538535353 17676769267676676767692676771767676926767667676769267676
Таблица для всех B со случайным N для S = 0
до 3
:
B S=0 S=1 S=2 S=3
2 11011 11101101 11101111110110 11101111110111110111111011
3 2210 11021101 20102012010200 1001212100121210012121001211
4 1113 230223 112112112111 2302302302323023023022
5 101 2323 11341134 31430423143042
6 120 4040 20202020 1010101010101010
7 134 5252 24612461 1230456412304564
8 22 1111 445444 222622222622
9 4 22 1111 505505
10 92 4646 23232323 1161616211616161
Детали
- Возьмите ввод через стандартный ввод или командную строку. Вывод на стандартный вывод.
- Вместо программы вы можете написать функцию, которая принимает B, N и S и печатает результат нормально или возвращает его (в виде строки).
- B, N и S могут быть взяты в любом порядке.
- Все входы, которые производят выходы, чьи десятичные значения меньше 2 32, должны работать.
- N представляется обычным способом. т. е. наиболее значимая цифра первая и никаких начальных нулей, кроме нуля, который записан
0
. (Вывод00
вместо0
недопустим.) - Самый короткий код в байтах побеждает.
Если вам нравятся мои испытания, подумайте о том, чтобы дать блочную сборку ботов! некоторые любят :)
источник
Ответы:
Pyth,
2119 байтПринимает ввод в формате
N\nB\nS
. Попробуйте онлайн: демонстрация или тестовая привязьобъяснение
источник
Pyth,
2921 байтДействительно простая реализация.
Принимает ввод на стандартный ввод в следующем формате:
источник
00
дляN=0
.Mathematica, 101 байт
Использует некоторые
Through
хитрости для применения функций потолка и пола. Просто игнорируйте ошибки.источник
CJam, 24 байта
Проверьте это здесь. Принимает вход как
"N" S B
.объяснение
источник
"0" 1 9
выводится00
. Я попытался сыграть в гольф:,q~:B;{:~Bb,2/z:,Bfbs}*
но также неверно, потому что вместо него выводилась пустая строкаi
в конце позаботится00
. Вы можете вернуть байт, заменив2/:I-I]
на)\]2f/
.JavaScript ( ES6 ) 78
79Рекурсивная функция. Запустите сниппет для тестирования (только Firefox)
Редактирование 1 байта сохранено thx @DocMax
источник
m&&s
наm*s
.ECMAScript 6, 90 байт
Определение рекурсивной функции с использованием переменной не очень хороший стиль, но это самый короткий код, который я мог придумать в ECMAScript 6.
"00" => "0"
Правильный выбор углового случая тратит впустую три байта (s(n)
а не простоN
).Для того, чтобы попробовать его, вы можете использовать REPL Бабеля : копировать / вставить код и печати результатов примера Призыва следующим образом:
console.log(f(9, "27", 2))
.источник
Общий Лисп - 113 символов
Ungolfed
~vR
формате Директива выводит целое число в базеv
, гдеv
предоставляются в качестве аргументовformat
.parse-integer
принимает:radix
аргумент для конвертации из указанной базы.#1=
и#1#
(соответственно присваивайте и используйте) переменные считывателя, которые позволяют совместно использовать общие подвыражения. При расширении они дают следующий код:источник
Пип , 27 байт
Принимает основание, целое число и количество повторений в качестве аргументов командной строки. Алгоритм прост, но использует несколько интересных языковых возможностей:
Здесь полезен скалярный тип Пипа, представляющий как числа, так и строки, а также пошаговые операции над списками; к сожалению, круглые скобки и операторы двухзнакового
FB
,TB
и//
свести на нет все преимущества.Альтернативное решение, без промежуточного назначения, но все еще 27 байтов:
источник
C 245 байтов
Это не собирается выиграть что - нибудь , но это было весело , чтобы сделать!
источник
PHP ,
115112 байтПопробуйте онлайн!
Ungolfed:
Выход
источник
Japt , 17 байт
Попробуйте онлайн!
Принимает ввод в порядке S, N, B с N в виде списка синглтона . Прием N без одноэлементного списка стоит 2 байта .
Объяснение:
источник
Forth (gforth) , 105 байтов
Попробуйте онлайн!
объяснение
Изменяет базу на B, затем в цикле, который выполняется S раз:
Печатает строку после завершения и устанавливает основание обратно на 10 (чтобы мы могли запускаться несколько раз подряд)
Код Объяснение
источник