Константа Champernowne - это число, которое строится путем объединения первых n
чисел с n
тенденцией к бесконечности. Это выглядит примерно так:
0.123456789101112131415161718192021222324252627282930...
Теперь я опишу вам число Рина . Его можно рассматривать как минимизацию константы Champernowne как целого числа. Я буду ссылаться на число Рина с первыми n
цифрами как Ri ( n ). Вот как это сформулировать:
- Первые
n
натуральные числа (последовательность {1,2,3, ...}) объединяются. - Этот результат затем сортируется в соответствии с цифровым значением. Так
1..12
бы выглядело011111223456789
. - Поскольку Rien число не может иметь ведущие нули, мы перемещаем все
0
S так , что они имеют важное значение, в то время сохраняя количество сведено к минимуму, в результате чего, скажем,101111223456789
. Это Ri ( n ), в данном случае Ri (12).
Вот некоторые результаты для Ri ( n ):
n Ri ( n ) 1 1 2 12 3 123 7 1234567 9 123456789 10 10123456789 15 101111111223344556789 34 10001111111111111222222222222223333333334444555666777888999 42 1000011111111111111222222222222222333333333333334444455556666777788889999 45 1000011111111111111222222222222222333333333333344444444444555556666777788889999 55 10000011111111111111122222222222222223333333333333333444444444444444455555555555566666777778888899999 100 100000000000111111111111111111112222222222222222222233333333333333333344444444444444444444555555555555555555566556666666666666666777777777777777777887777778888888888889999999999999999 999100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
Цель Учитывая число 1 ≤ n
<10000 в качестве ввода (через аргументы, STDIN или жесткое кодирование, если ваш язык не поддерживает обычный ввод), выведите / верните Ri ( n
).
Это код-гольф , поэтому выигрывает самый короткий код в байтах. Вы можете использовать язык, созданный после этого конкурса, если он не был создан для ответа на этот вызов. (Конечно, вы можете использовать его, если оно предоставляет интересное решение, но пометьте свой ответ как неконкурентный.)
Ссылочная реализация
Я проверял это в IE, поэтому проблем не должно быть. Если есть проблема, есть простое решение: получить вменяемый браузер.
function min(n) {
var seq = [];
for(var i = 1; i <= n; i++) seq.push(i);
seq = seq.join("").split("").map(Number);
var to;
if(seq.indexOf(1) >= 0) to = seq.splice(seq.indexOf(1), 1);
seq.sort(function(a, b) {
return a - b;
});
if(to) seq = to.concat(seq);
return seq.join("");
}
t.onchange = t.onkeyup = function() {
h.innerHTML = min(this.value)
}
* {
font-family: Consolas, monospace;
}
input {
border: 2px dotted #aaaaaa;
border-radius: 5px;
margin: 10px;
}
<input id="t" type="number">
<div id="h">
Leaderboard
Фрагмент стека в нижней части этого поста создает каталог из ответов а) в виде списка кратчайшего решения для каждого языка и б) в качестве общей таблицы лидеров.
Чтобы убедиться, что ваш ответ обнаружен, начните его с заголовка, используя следующий шаблон уценки:
## Language Name, N bytes
где N
размер вашего представления. Если вы улучшите свой счет, вы можете сохранить старые результаты в заголовке, вычеркнув их. Например:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Если вы хотите включить в заголовок несколько чисел (например, потому что ваш результат равен сумме двух файлов или вы хотите перечислить штрафы за флаг интерпретатора отдельно), убедитесь, что фактический результат является последним числом в заголовке:
## Perl, 43 + 2 (-p flag) = 45 bytes
Вы также можете сделать имя языка ссылкой, которая будет отображаться во фрагменте кода:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
0
это пеп номер.1
s перед0
s, да?Ответы:
Пиф, 8
Создает список,
[1, .. , input]
затем удаляет ведущий, объединяет и сортирует, а затем добавляет 1.Тестирование
источник
Perl,
4442413331 байтYaaay, первый пост когда-либо!
Спасибо primo за сохранение 2 байтов.
Как и другие, удаление 1 и добавление его вручную делает работу.
Попробуйте онлайн
источник
print 1,sort"@{[2..<>]}"=~/\d/g
Japt,
1412 байтПопробуйте онлайн!
Как это работает
источник
Сетчатка , 78 байт
Пришло время продемонстрировать некоторые новые функции Retina (это все еще не очень конкурентоспособно, но до сегодняшнего дня это, вероятно, было бы ближе к 300 байтам).
Попробуйте онлайн.
объяснение
Несмотря на то, что теперь можно удобно конвертировать между десятичным и унарным, это все еще довольно долго, потому что мне приходится конвертировать туда и обратно несколько раз, потому что некоторые операции более выполнимы в десятичной, чем в унарной и наоборот.
Давайте начнем с преобразования ввода в унарный. Это работает путем сопоставления ввода и последующего использования,
$*1
которое повторяется1
столько раз (эта функция повторения является новой на сегодняшний день).Далее мы генерируем диапазон от
1
доN
в унарном. Я объяснил, почему это работает в моем ответе FizzBuzz .Мы конвертируем каждое число в диапазоне обратно в десятичное, чтобы мы могли работать с десятичными цифрами. Это делается путем сопоставления каждого из одинарных чисел таким образом, чтобы каждый
1
генерировал отдельный захват. Затем мы заменим это числом захватов в группе один, используя новый синтаксис числа захватов$#1
.Это удаляет начальные
1
и все пробелы в строке, поэтому у нас остаются только цифры (кроме одного1
).Мы конвертируем обратно в унарное число и добавляем
1
к каждой цифре (чтобы гарантировать, что четное0
число непусто). Мы также вставляем пробел перед каждой цифрой, чтобы обеспечить их разделение.Мы постоянно сопоставляем небольшое число, которому предшествует большее число, и меняем их местами. Это пузырчатка в сетчатке. :)
Ааа и обратно в десятичную.
Наконец, мы вставляем сингл
1
спереди, чтобы учесть тот, который мы удалили ранее.источник
Haskell, 44 байта
К сожалению ,
sort
вData.List
, который 17 байт!источник
JavaScript (ES6),
65625452 байтаСохранено 3 байта благодаря edc65
Создает строку из всех чисел от 2 до
x
, затем разбивает, сортирует, объединяет и добавляет 1 в начало. Это все еще может быть пригодным для игры в гольф; предложения приветствуются!источник
Array(x-1).map((_,y)=>y+2)
?Array(n).fill().map(...
(см. Советы по ES6)n=>1+[...[...Array(n-1)].map(_=>++n,n=1).join``].sort().join``
(1 байт короче, это раскол).split()
было так странно ...n=>1+[...[...Array(n+1).keys()].slice(2).join``].sort().join``
CJam, 9
Попробуйте онлайн
В качестве альтернативы:
источник
Mathematica, 52 байта
Еще раз, обработка строки произошла ...
источник
IntegerDigits
темы над списками, поэтому вам не нужно отображать его.APL (17)
Объяснение:
Тест:
источник
∊
D Я не знал, что это сгладит массив и даст вам строку. Это хорошо знать.Python 2, 60 байт
источник
ClojureScript, 48 байт
Так же, как и все остальные, в значительной степени. REPL доступно здесь .
источник
Рубин, 48 байтов
Анонимная функция. В основном просто Rubyfied некоторые другие ответы здесь ..
источник
Brachylog ,
7641 байтПринимает число в качестве ввода.
Это решение работает с несколькими изменениями, которые я внес во встроенный предикат Findall
f
. OP, по-видимому, в порядке с использованием языков старше, чем ответ, поэтому я думаю, что это нормально (изменения, которые я сделал, были сделаны давно, я просто мотивировал себя сделать это из-за этой проблемы).объяснение
источник
Smalltalk, 76 байт
Как обычно в Smalltalk, концептуально очень кратко, но текстуально очень многословно ...
Добавьте это как метод класса для
String
и вызовите как, например, для 20,String f: 20
источник
Утилиты Bash + GNU, 58
Попробуйте онлайн.
источник
Bash,
3534 байтаЭто основано на ответах @DigitalTrauma и @OlivierDulac . Попробуйте онлайн с Ideone .
Как это работает
seq 2 $1
печатает все целые числа из 2 до указанного в командной строкеfold -1
оборачивает все строки шириной 1, т.е. размещает каждый символ на отдельной строке.-1
кажется недокументированной функцией.sort
сортирует символы по их числовому значению.printf %d 1`...`
предваряется 1 к первой строке и печатает каждую строку как целое число (%d
) без разделения.Это использует любопытную реализацию Bash printf, которая повторяет строку формата снова и снова, пока все аргументы не будут использованы.
источник
JavaScript ES6,
4946 байтСпасибо edc65 за 2 байта
источник
Юлия, 33 байта
Это лямбда-функция, которая принимает целое число и возвращает строку. Чтобы вызвать его, присвойте его переменной.
Мы строим диапазон
2:n
, который будет пустым дляn
<2, соединяем его в строку, разбиваем строку на массив символов, сортируем их, соединяем в строку и добавляем 1.источник
APL, 21 байт
Это безымянная монадическая функция, которая принимает целое число справа и возвращает строку. Чтобы вызвать его, присвойте его переменной.
Объяснение:
Попробуйте онлайн
источник
Python 2, 60 байт
Индексирование на победу. :-)
Python 2, 60 байт
Просто альтернатива.
источник
Млечный Путь 1.6.4 , 22 байта (не конкурирует)
Мне пришлось добавить код операции сортировки для этого вызова.
объяснение
источник
Серьезно, 10 байт
Шестнадцатеричный дамп:
Попробуйте онлайн
Объяснение:
источник
Инструменты Bash и GNU,
5852 байтаисточник
PowerShell,
6159 байтПринимает ввод
param($a)
и затем использует его для индексации в массив с[$a-eq1]
. Если true, мы индексируем второй элемент и выводим1
. В противном случае, мы сцепить"1"
сjoin
массивом эд , созданного 1) , определяющей новый диапазон ,2..$a
который был самjoin
ад вместе, 2) отливки , что в качестве полукокса массива, и 3) посылая его черезSort-Object
командлет, все из которых затем выводится.Edit1 - Сохранено 2 байта путем перемещения внутреннего
-join
оператора.источник
Гога ,
97 байтВы можете запустить это используя:
источник
Желе , 8 байт
Попробуйте онлайн!
Как это работает
источник
Oracle SQL 11.2,
222211 байтUn-golfed
источник
MATL , 17 байт
Использует текущую версию (7.0.0) языка / компилятора.
Вдохновленный ответом FryTheEgggman .
РЕДАКТИРОВАТЬ (29 июля 2016 г.): вы можете попробовать его онлайн с некоторыми изменениями, чтобы соответствовать изменениям в языке.
пример
объяснение
источник
05AB1E , 6 байтов
Примечание. В этом материале используются функции, которые устарели после этого вызова и поэтому не являются конкурентоспособными.
Код:
Объяснение:
Использует кодировку ISO 8859-1
источник
Mathcad, 86 "байтов"
Функция s (n) использует цикл for для построения "целого числа" Champernowne путем преобразования каждого числа в его строковую форму и объединения их вместе. Затем строка преобразуется в эквивалентный вектор кодов ASCII и сортируется. Затем функция заменяет любые ведущие нули на первый, и, наконец, преобразует вектор обратно в строку.
Чтобы проверить функцию, я поместил тестовые случаи в вектор vn, затем применил s к vn, используя оператор векторизации. Затем я сравниваю результаты с данными значениями тестового примера.
Mathcad - это математическое приложение, основанное на двухмерных рабочих листах, состоящих из «областей», каждая из которых может быть текстом, математическим выражением, программой, графиком или компонентом со скриптом.
Математическая или программная инструкция выбирается из панели инструментов палитры или вводится с помощью сочетания клавиш. В целях игры в гольф под операцией («байтом») понимается количество операций клавиатуры, необходимых для создания имени или выражения (например, чтобы установить для переменной a значение 3, мы бы написали a: = 3. Оператор определения : = - это одиночное нажатие клавиши ":", равно как a и 3, дающие в общей сложности 3 "байта". Для программирования оператора требуется набрать ctl-shft- # (или один щелчок на панели инструментов программирования), поэтому снова эквивалентно 1 байт
источник