Предоставляется ввод в виде целого числа без знака:
13457
Ваша функция / подпрограмма должна вернуть:
75431
Так как это конкурс популярности, будьте креативны. Творческие решения используют необычные или умные методы для выполнения поставленной задачи.
Ограничения:
- Вы не можете использовать массивы.
- Вы не можете использовать строки.
- Нет переопределения RTL (
‮
)
Брауни набирает очки за использование креативной арифметики.
Поскольку это конкурс популярности, я предлагаю не использовать %
оператор modulo ( ) в вашем коде.
О ведущих нолях:
Если ввод:
12340
Тогда вывод:
4321
было бы приемлемо.
popularity-contest
duci9y
источник
источник
1230
вход? Разрешено ли выводить321
? (В противном случае строки необходимы).Ответы:
Mathematica, не по модулю!
Давайте разберемся с этим.
Сначала мы используем «творческую арифметику», чтобы узнать, сколько цифр в числе:
length = Ceiling[Log[10, n]];
Далее мы растеризуем число в красивое большое изображение:
Теперь мы запрашиваем ограничивающую рамку этого изображения и заполняем ширину и высоту (фактически используя смещение базовой линии вместо высоты изображения, потому что MM добавляет некоторые пробелы ниже базовой линии в изображении).
Затем NestList рекурсивно вычитает ширину изображения, деленную на длину строки, чтобы ImageTake мог выщипывать символы с конца изображения один за другим, и они повторно собираются ImageAssemble в это изображение:
Затем мы передаем это функции TextRecognize для оптического распознавания символов, которая при таком размере изображения и качестве растеризации может безупречно распознать окончательный результат и дает нам целое число:
Логарифмы и распознавание текста - это как шоколад и арахисовое масло!
Новый и улучшенный
Эта версия дополняет число, чтобы справиться с упрямым поведением TextRecognize с небольшими числами, а затем вычитает площадку в конце. Это даже работает для однозначных чисел!
Хотя почему вы запускаете обратную процедуру для одного числа, для меня загадка. Но для полноты картины я даже сделал так, чтобы он работал для входов ноль и единица, которые обычно ломаются, потому что журнал с полами не возвращает 1 для них.
источник
TextRegognize
не работает для небольших номеров. И у вас есть опечатка вheight = b[[3]];
. Также проверьте мой ответ тоже, пожалуйста! :)TextRecognize
, что он возвращает строку, что недопустимо, а также вам нужно преобразовать ее обратно в число.Perl / LuaTeX / Тессеракт
Следующий скрипт Perl читает число как аргумент командной строки, например:
1234567890
Следующий скрипт Perl печатает число через LuaTeX. Виртуальный шрифт создается на лету, который отражает цифры по горизонтали.
Затем все число снова отражается по горизонтали:
Окончательное изображение перечитывается через OCR (tesseract):
0987654321
источник
Brainfuck
По сути, это просто программа реверсирования ввода.
UPD: как указывал Сильвестер в комментариях, в классических интерпретаторах / компиляторах Brainfuck (без возможности перехода влево от нулевой точки в массиве памяти) эта программа не будет работать при отсутствии «>» в начале, поэтому более стабильный версия:
источник
>
начала, чтобы сделать нулевую ячейку перед данными, это не будет работать во многих интерпретаторах / компиляторах.[.<]
из-за этого не имеет нулевой ячейки, на которой можно остановиться. Ошибка отbf -n rev1.bf
естьError: Out of range! Youwanted to '<' below the first cell.
. Если вы компилируете, вы получитеsegfault
возможно.,[.,]
Haskell
Нет массивов, строк или модулей.
Кроме того, я знаю, что мы не должны использовать списки или строки, но мне нравится, как коротко вы это делаете:
источник
C ++
источник
?:
Я полагаю, кто-то должен быть участником вечеринки.
удар
Ограничения по размеру зависят от вашей оболочки, но вы будете в пределах разумного.
источник
declare -i
. Сравнитеfoo=089
иdeclare -i foo=089
(неверное восьмеричное число).Javascript
РЕДАКТИРОВАТЬ : так как есть предложение не использовать
%
оператор, я использую небольшую хитрость сейчас.Я знаю, что это не код-гольф, но нет никаких причин, чтобы продлить его.
r(13457)
возвращается75431
Более того, это намного быстрее, чем метод string (
n.toString().split('').reverse().join('')
):==> Отчет JSPerf <==
источник
~~
вместоMath.floor
?~~
вместоMath.floor
(изменение, предложенное @Victor)питон
Не уверен, что эта реализация подходит для творческой математики
Также оператор% не использовался сам по себе, хотя можно утверждать, что divmod делает то же самое, но тогда Вопрос необходимо перефразировать :-)
Реализация
демонстрация
Как это работает?
Это рекурсивное решение divmod * Это решение определяет наименее значимую цифру, а затем помещает ее в конец числа. *
Еще одна реализация Python
Как это работает?
Это рекурсивное решение, которое меняет крайние цифры с числа
Пример выполнения
источник
Просто чтобы быть наоборот, чрезмерное использование оператора по модулю:
Обратите внимание, что это всегда переворачивает 5 цифр, и 32-разрядные целые числа будут переполнены для входных значений более 39045.
источник
C #
Вот способ сделать это без
%
оператора Modulus ( ) и простой арифметики.источник
%
оператор. :) Я понимаю, что вы имеете в виду, хотя мой текст был немного вводит в заблуждение.удар
источник
С
Нет строк, массивов, модулей или делений. Вместо этого деление путем повторного вычитания.
источник
Mathematica
Создание изображения из числа, его отражение, разбиение на цифры. Тогда есть две альтернативы:
Сравните каждое изображение отраженной цифры с подготовленными ранее изображениями, замените ее соответствующей цифрой и составьте число из этого.
Отразите каждую цифру отдельно, создайте новое изображение и передайте его функции распознавания изображений.
Я сделал оба
РЕДАКТИРОВАТЬ : Добавлено заполнение из трех нулей, потому что
TextRecognise
работает правильно только с целыми числами> 999.источник
Lua
Никакие массивы или строки не используются. Номер разбивается на цифры и собирается с использованием списка аргументов.
источник
%
! : Ppython2
Предполагается, что "целое число без знака" является 32-разрядным
Когда дан вход
1230
, он выводит0321
.источник
"Since this is a popularity contest, I suggest not using the modulus (%) operator in your code."
постскриптум
Нет массивов, ни строк, ни переменных.
То же самое без
mod
(это просто ярлык, так что нет большой разницы):источник
C #
При этом не используются строки или массивы, но используется
Stack<T>
тип .NET (EDIT: первоначально использовался оператор модуля; теперь удален).источник
С
В связи с тем, что очевидное решение представлено в паре других языков, можно также разместить его на C.
Golfed:
Ungolfed:
РЕДАКТИРОВАТЬ: Только что видел модуль редактирования.
Гольф (без модуля):
Ungolfed (без модуля):
источник
Джава
Это то, что я придумал, ни строк, ни массивов ... даже переменных (в Java я имею в виду):
РЕДАКТИРОВАТЬ более читаемую версию
источник
PowerShell
Быстрое решение в PowerShell. Не используются массивы или строки, неявно или явно.
Тестирование:
источник
Python (легко делается в сборке)
Обращает биты байта. Очки за то, что не делали то же самое, что и все остальные?
пример
источник
C ++
ВЫХОД
Три пробных прогона
Тест с нулями
Это также полностью изменяет плавающие числа !!!
Если вы хотите запустить этот код, запустите его на своем компьютере, потому что он создает временный файл во время выполнения, и я не уверен, что онлайн-компиляторы создадут временный файл на вашем компьютере.
источник
ECMAScript 6
Затем:
reverse(12345)
выходы54321
reverse(3240)
выходы423
reverse(6342975)
выходы5792436
источник
расщепление
Эта программа меняет ввод.
источник
ВПЕРЕД
Я думаю, что это противоположность популярному ... но использование Forth всегда креативно ...Давайте создадим новое слово
Здесь используется слово U /, которое возвращает остаток и частное, остаток отправляется на вывод в виде числа в поле длиной 1 символ, пока дивиденд не станет равным нулю. Строка не используется, по крайней мере, до тех пор, пока что-то не будет отправлено в видео. Я не использую оператор по модулю, вместо этого я использую целочисленное деление с остатком и частным. Давай попробуем
источник
Машинный код Тьюринга
Используя синтаксис отсюда.
Попробуйте онлайн!
источник
питон
источник
rev(1230)
дает321
. Я полагаю, это должно дать0321
?С
источник
партия
Пропустил часть о неиспользовании строк - да ладно.
источник
Python 2
источник