Это происходит из реальной жизни. Конечно, мы решили это, но у нас остается ощущение, что это можно было бы сделать лучше, что это слишком длинное и обходное решение. Однако ни один из моих коллег не может придумать более сжатый способ его написания. Поэтому я представляю это как код-гольф.
Цель состоит в том, чтобы преобразовать неотрицательное целое число в строку так же, как Excel представляет заголовки столбцов. Таким образом:
0 -> A
1 -> B
...
25 -> Z
26 -> AA
27 -> AB
...
51 -> AZ
52 -> BA
...
16,383 -> XFD
Он должен работать как минимум до 16383, но и за пределами приемлемо (хотя никаких бонусных баллов). Я с нетерпением жду решения C #, но, согласно традициям код-гольфа, любой настоящий язык программирования приветствуется.
code-golf
conversion
Vilx-
источник
источник
Ответы:
Perl 6 ,
1614 байтРаботает даже за XFD. Благодаря бесконечным спискам в Perl 6, это не займет вечность (полтора) для выполнения.
Попробуйте онлайн!
источник
Excel Formula :), 36 символов
Использование:
Извините, не удержался ...
источник
<laughter type="evil">Muhahahahaha!</laughter>
"1"
на1
Perl, 17 символов
..
Оператор делает то же самое, что и волшебное автоприращение, но без необходимости временных переменного и петли. Если толькоstrict subs
в области видимости, голые словаA
иXFD
интерпретируются как строки.( Этот ответ был предложен анонимным пользователем в качестве правки к существующему ответу . Я чувствовал, что он заслуживает того, чтобы быть отдельным ответом, и сделал его одним. Поскольку было бы несправедливо получить от него повторение, я ' Мы сделали это Сообщество Wiki. )
источник
$_
а для выходных данных выбрано значение выражения, тогда(A..XFD)[$_]
задача решается только с 12 символами .perl -E 'say[A..XFD]->[<>]' < number.txt
. Или в оболочках, которые его поддерживают, просто введите данные в командной строке с помощьюperl -E 'say[A..XFD]->[<>]' <<< 123
.say+(A..XFD)[<>]
C, 53 символа
Это как играть в гольф с молотком ...
Нормальная версия:
И использование так:
источник
Хаскелл, 48
Менее гольф:
объяснение
sequence
Комбинатор Haskell берет список действий и выполняет их, возвращая результат каждого действия в списке. Например:эквивалентно:
В Haskell действия обрабатываются как значения и склеиваются друг с другом с помощью
>>=
(bind) иreturn
примитивов. Любой тип может быть «действием», если он реализует эти операторы, имея экземпляр Monad .Между прочим, у типа списка есть экземпляр монады. Например:
Это равно
[(1,4),(1,5),(1,6),(2,4),(2,5),(2,6),(3,4),(3,5),(3,6)]
. Обратите внимание, что понимание списка поразительно похоже:Поскольку списки являются типом «действия», мы можем использовать
sequence
со списками. Выше может быть выражено как:Таким образом,
sequence
дает нам комбинации бесплатно!Итак, для построения списка:
Мне просто нужно создать списки для передачи
sequence
Затем используйте
concatMap
для примененияsequence
к спискам и объединения полученных списков. По совпадению,concatMap
это=<<
функция для списков, поэтому монада списков позволяет мне побрить несколько символов и здесь.источник
Perl, 26 символов
источник
Рубин, 35 знаков
Использование:
Примечание. Существует также более короткая версия (30 символов) с использованием рекурсии.
Но с помощью этой функции вам может потребоваться увеличить размер стека для больших чисел в зависимости от вашего интерпретатора ruby.
источник
Groovy, 47
источник
Python 45
51источник
+chr(65+i%26)
внутрь и проверивi>=0
, сохранив вам 1 символ :)f=lambda i:
вместо этогоdef f(i):return
f = lambda i: i >= 0 and f(math.floor(i / 26 - 1)) + chr(int(round(65 + i % 26))) or ''
Скала, 62 персонажа
Использование:
возвращает:
Вы можете попробовать это на Просто Скала . Скопируйте и вставьте функцию и используйте,
f(some integer)
чтобы увидеть результат.источник
""+
поelse
делу.Excel VBA, 31 байт
Функция анонимного непосредственного окна VBE, которая принимает входные данные из ячейки
[A1]
и выводит их в непосредственное окно VBEисточник
JavaScript (Node.js) , 50 байт
Попробуйте онлайн!
Видя, что многие стали отвечать на это, я тоже ответил.
Замечания :
По сути, это сокращение от @ kevinCruijssen в Java, сокращенное благодаря тому, что это JS.
источник
PHP, 30 байт
Запустите как трубу с `-nr 'или попробуйте онлайн .
источник
Z
как это пошло бы,[
а неAA
.VBA / VB6 / VBScript (не Excel), 73 байта
Звонок
s(16383)
вернетсяXFC
.источник
i>675
s(676)=A@@
YZ
s(677)=A@A
ZA
Javascript, 147 байт
У меня была аналогичная проблема. Это гольф решения. Столбцы Excel являются биективными основаниями-26 .
Расширено, кроме использования 1-индексов:
источник
Java, 57 байт (рекурсивно)
Попробуйте онлайн.
Объяснение:
Java 10, 62 байта (итеративный)
Попробуйте онлайн.
Объяснение:
источник
Forth (gforth) , 59 байтов
Попробуйте онлайн!
объяснение
источник
R 65 байт
Рекурсивный ответ, как и многие предыдущие ответы.
Попробуйте онлайн!
источник
Powershell, 68 байт
Альтернативная рекурсивная версия, 68 байт:
Тестовый скрипт:
Выход:
Примечание: Powershell не предоставляет
div
оператора.источник
Хаскелл, 48
Я действительно думал, что смогу обыграть другую запись на Haskell, но увы ...
Я уверен, что от этого можно сбрить пару символов, но я не программировал на Хаскеле почти год, так что я довольно ржавый.
Это не совсем то, что вы бы назвали элегантным.
источник
string f(int n){return n<0?"":f(n/26-1)+(char)(n%26+65);}
57 символов, так что я бы почти почувствовал себя плохо, разместив его как ответ.Jq 1,5 , 71 байт
Ожидает ввода в
N
. напримерExpanded:
Попробуйте онлайн!
источник
> <> , 29 байт
Попробуйте онлайн!
источник
Значок , 58 байт
Попробуйте онлайн!
источник