var QUESTION_ID=59014,OVERRIDE_USER=42963;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>
Ответы:
Желе , 8 байт
Работает на месте менее чем за восемь минут.
Попробуйте онлайн! (изменено, чтобы найти числа с шестью цифрами или меньше)
Как это работает
источник
Python 2, 85 байт
Распечатывает список.
Я в основном комбинирую два моих ответа на предыдущие вызовы:
Проверка, делится ли число на каждую из его цифр
(спасибо FryAmTheEggman за напоминание об этом).
Определите, все ли десятичные цифры уникальны
Спасибо xsot за 1 байт, сэкономленный путем лучшего сочетания условий.
источник
print[n for n in range(1,9**9)if(n<10**len(set(`n`)))>any(n%(int(d)or.3)for d in`n`)]
Perl,
6147 байтКод 46 байтов + параметр командной строки 1 байт.
Использование:
объяснение
/(.).*\1|0/
возвращает 1, если проверяемое число содержит повторяющийся символ или 0s/./$_%$&/rge
заменяет каждую цифру значением проверяемого числа% цифрой. Например, 15 -> 00, 16 -> 04 (потому что 16% 6 = 4). Это означает, что любой ввод, который делится на все его цифры, будет состоять из всех 0, в противном случае он будет содержать цифру> 0. Чтобы обработать это как число, мы * 1, что означает, что любой тестируемый номер вернет 0 для этого блока, если он делится на все его цифры, в противном случае> 0.Разделив эти два оператора и напечатав 'или', если одно из первых двух условий вернет> 0, условие совпадет, и последующие части выражения не будут оцениваться. Если и только если оба предыдущих условия равны 0, печать будет выполнена.
-l
Флаг обеспечивает , чтобы добавить новую строку после каждой печати.источник
say
вместоprint
+-l
:-)say
требуется явное объявление в первую очередь ?use feature 'say'
илиuse 5.012
бесплатно - я всегда упоминаю, когда делаю это, и никто никогда не оспаривал это. Я видел, как несколько других делали то же самое :)map
иsay
до 43: попробуйте онлайн!Пиф,
2221Спасибо Jakube за удаление 1 байта ненужного форматирования.
Сильно вдохновлен этим CW ответом на соответствующий вопрос.
У меня есть вставка результата здесь , с того момента, когда он печатал разделенную новую строку, теперь он печатает как список с питоном.
Я бы порекомендовал не пробовать это онлайн, если вы не используете число меньше 7 ... Я установил его на 2 в этой ссылке.
Фильтры из
1
к10^7-1
которой охватывает все необходимые значения. Эта версия может вызвать ошибку памяти, если она не может составить списокS^T7
, который похож наlist(range(1,10**7))
Python 3 (однако, он прекрасно работает для меня). Если это так, вы можете попробовать:Который находит первые 548 числа понедельника. Это также демонстрирует другой способ проверки числа
0
s в номере, вместо замены на него.3
используется блок try-catch. Кредит на эту версию целиком и полностью принадлежит Якубе. (Обратите внимание, что для онлайн-переводчика это все еще очень медленно)источник
.f&.{`Z.x!s%LZjZT0548
оно в несколько раз быстрее (4x-5x), чем ваш подход while-loop, и имеет длину всего 21 байт.55, 66, 77, 88, 99
, все числа с дублированными цифрами ...{
изменено, так как замена его,{I
кажется, работает.GS2 ,
2019 байтgs2 использует широкий диапазон байтов, а не только печатные символы ascii. Я представлю свое решение в шестнадцатеричном виде.
Вот некоторые объяснения. gs2 - это язык, основанный на стеке, поэтому здесь нет переменных. (кроме 4 регистров, один из которых я использую здесь)
источник
Python 3,
132128114111104 байтаЕсть 548 номеров понедельника.
источник
1e8
вместо даже9**9
?'0' not
. Кроме того,i%int(k)==0
возможно , может бытьi%int(k)<1
?j=`i`
.if len(set(j))+2==len(j)+('0'in j)+all(i%int(k)<1 for k in j)
APL,
443937 байтUngolfed:
Благодаря Moris Zucca сэкономлено 7 байт!
источник
TI-BASIC,
6059 байт∟D
это список цифр, который генерируется с использованием математики иrandIntNoRep(
команды (случайная перестановка всех целых чисел между1
и1+int(log(X
включительно). Я использую несколько сложную цепочку утверждений, чтобы проверить, выполнены ли все условия:Чтобы пропустить числа с повторяющимися или нулевыми цифрами, я заменяю нули на
2X
, потому чтоX
никогда не делится на2X
.Для особого случая 1 ~ 9 (потому что
ΔList(
в списке ошибок одного элемента) я используюIf
оператор в четвертой строке, чтобы пропустить проверку в пятой строке, автоматически отображая всеX
≤9.Выходные числа разделены новыми строками.
источник
Mathematica 105
IntegerDigits
ломает доn
на список его цифрi
.FreeQ[i,0]
проверяет, нет ли нулей в списке.Length[i]==Length[Union[i]]
проверяет, что нет повторяющихся цифр.And@@(Divisible[n,#]&/@i)
проверяет, что каждая цифра является делителемn
.источник
9^9
или1e8
или что - тоUnion
проверкой на наличие дубликатов.Haskell, 77 байт
Пример использования (первые 20 цифр):
Как это работает: переберите все числа от 1 до 9 ^ 9 и проверьте условия. Текущее число
x
превращается в его строковое представление (show x
) для работы с ним как список символов.источник
R, 99 байт
Немного меньше в гольф:
источник
Perl,
907570 байтисточник
^
а$
вокруг0
в вашемgrep
, вы можете заменить ,&&
прежде чемs/./
с одним ,&
и я думаю , что последний|0
является ненужным (хотя только испытано к1e3
. ..). Ну и по-настоящему избили мой счет! :)CJam, 25 байтов
Попробуйте онлайн . Обратите внимание, что онлайн-ссылка работает только до 10000. Я не уверен, закончится ли он онлайн, если вы достаточно терпеливы. Он не тестировал его с автономной версией CJam, но я ожидаю, что он прекратит работу.
Объяснение:
источник
C #,
230227Прошло довольно много времени с тех пор, как я вырос, поэтому я, вероятно, забыл несколько хитростей, чтобы сломать счет. Будет лучше, когда я думаю о них ... А пока
Ungolfed:
источник
TI-BASIC,
5553 байтаЭто сравнительно небольшая правка ответа Томаса Ква , но я представляю его как новый ответ, потому что я слышал, что он щедро заплатил за игру в гольф своими ответами TI-BASIC.
Мое основное изменение заключается
randIntNoRep(1,
вrandIntNoRep(0,
том, что теперь в каждом сгенерированном списке цифр будет ноль.Поскольку теперь в каждом наборе цифр есть ноль, это влияет на сумму остатков. Обычно сумма остатков равна 0, но теперь наличие дополнительного нуля приводит к одному провалу нашего теста делимости.
Чтобы противодействовать этому, я изменился
2Xnot(
наXnot(
. Изначально 2 был там, чтобы сделать тест неудачным при 0, но теперь он проходит в нуле. Числа, которые содержат ноль в своих цифрах, однако, теперь имеютmin(ΔList(∟D
равно ноль (так как в их списках 2 или более нулей), поэтому это изменение не приводит к тому, что какие-либо дополнительные числа проходят тест.Преимущество этого метода заключается в том, что, поскольку теперь число «две цифры» производится из числа 1–9,
ΔList(
функция не выдает ошибку, что позволяет нам избавиться от специального условия для однозначных чисел.источник
05AB1E ,
302221181413129 байт-9 байт благодаря помощи и поддержке @Enigma и @ Mr.Xcoder . Спасибо, что позволили мне самому разобраться в этом, даже если вы уже имели в виду 12-байтовое решение, когда мне было еще 30. Узнал много о 05AB1E из этого испытания!
-3 байта благодаря @Grimy
Попробуйте онлайн (выводятся только цифры ниже 10 3 вместо 10 7 чтобы предотвратить тайм-аут через 60 секунд).
Объяснение:
Предыдущая 12-байтовая версия (один из моих самых первых ответов 05AB1E):
ПРИМЕЧАНИЕ. Работает только в устаревшей версии 05AB1E.
Попробуйте онлайн (выводятся только числа ниже 10 3 вместо 10 7, чтобы предотвратить тайм-аут через 60 секунд).
Объяснение:
источник
297
, которого нет в последовательности чисел Линч-Белла.7°LʒÐÑÃÙQ
Юлия, 88 байт
Это просто берет все числа от 1 до самого большого числа Линч-Белла и фильтрует их до только чисел Линч-Белла.
Ungolfed:
источник
Python 2, 101 байт
Вы можете опустить
print
в интерпретаторе значение до 96. Используется,6**9
так как это 8 цифр, а наибольшее число в понедельник - всего 7 цифр, что-то вроде9**9
бы, вероятно, займет много времени, 6 ** 9 - всего около 10 секунд.источник
1e7
- это число с плавающей точкой, диапазон принимает целые числа.Perl, 97 байт
Требуется некоторое время для запуска, но выдает требуемый результат, перейдите к
1e3
более быстрому примеру!источник
y///c==grep{2>eval"$n=~y/$_//"}/./g
, чтобы вы могли использовать что-то вроде!/(.).*\1/
?MATLAB, 100
И в более читаемом формате:
В основном это считается через каждое число между1 а также 1 × 107 и проверяет, являются ли они номером понедельника. Каждое число преобразуется в строку, так что цифры могут быть обработаны индивидуально.
Проверки заключаются в следующем:
Сначала проверьте, есть ли дубликаты. Сортировка массива, если разница между любыми последовательными цифрами равна нулю, то есть дубликаты
Проверьте, есть ли нули. ASCII для 0 - 48, поэтому мы проверяем, что все цифры не равны этому.
Проверьте, делится ли он на все его цифры. Мы проверяем, что остаток при делении на каждую цифру (преобразованный из ASCII в десятичную, следовательно, -48) равен нулю.
Наконец, мы
all()
проверяем , что проверки верны, и если это так, мы добавляем его к выходной строке через запятую.У MATLAB нет STDOUT, поэтому вместо этого я печатаю строку результата в конце, используя
disp()
Этот код медленный! Я все еще запускаю его, чтобы убедиться, что он правильно находит все числа понедельника, но пока выглядит хорошо.
Обновить:
Код закончил работу. Он печатает следующее:
Который, если вы запустите этот код с этим в качестве ввода:
Yeilds 548.
источник
Руби, 79
Более интересное, но немного более длинное решение с регулярным выражением:
В каждом случае мы используем возможность Руби перебирать строки, как если бы они были десятичными целыми числами:
?1.upto(?9*7)
эквивалентно1.upto(9999999).map(&:to_s).each
. Мы соединяем строку с каждой ненулевой цифрой, используя оператор по модулю, и оцениваем результат, чтобы проверить делимость.Решение Bonus Ruby 1.8 (
-l
для правильного вывода требуется флаг):1.8 позволил итератору блока быть глобальной переменной. Назначение
$_
делает его неявным получателем для строковых операций. Мы также упрощаем интерполяцию массивов в регулярное выражение: в 1.8/[#{[1,2]}]/
оценивается как/[12]/
.источник
digits
функция для целых чисел , вы можете сохранить байты от взлома eval, поскольку вы больше не работаете со строками!63 байта.Пип , 25 байт
Выводит каждый номер в отдельной строке. Это продолжалось около 10 минут и до сих пор доходило до 984312, но я уверен, что это правильно. (Изменить: пару часов спустя ... код закончен, сгенерировано все 548 из них.)
Вот представление псевдокода Python-esque:
#=
Оператор сравнивает два итерируемых по длине. Если числоU
NiQ
Ue символов вa
одно и то же , как число символовa
, нет повторов.Проверка, делимая на каждую цифру, производится в одной из моих примеров программ Pip. Я написал это после просмотра предыдущий вызов , но не разместил его там, потому что язык был новее, чем вопрос. В противном случае, при 8 байтах, это был бы победный ответ на этот вопрос. Вот пошаговое объяснение:
источник
Couple hours later
Хорошо, что производительность не учитывается.Javascript (ES6),
1069083 байтаДети, не пытайтесь делать это дома; JS не будет доволен возможностью перебирать каждую цифру каждого целого числа от одного до десяти миллионов с помощью регулярного выражения.
Первое регулярное выражение (относится к @Jarmex) возвращается,
true
если число содержит повторяющиеся цифры или нули. Если это получаетсяfalse
, программа переходит ко второму, который заменяет каждую цифруj
наi%j
. Результатом являются все нули, если он делится на все его цифры, и в этом случае он переходит кconsole.log(i)
.Предложения приветствуются!
источник
JavaScript (ES6), 76
Тест регулярного выражения для 0 или повторяющихся цифр. Затем проверяется массив цифр, который ищет ненулевое значение по модулю для любой цифры.
вот объяснение семизначного макс.
источник
Рубин, 130 байт
... не считая пробелов
Новичок в программировании, просто хотел участвовать
источник
C 122 байта
Красивее:
Для каждого кандидата
i
мы повторяем его цифрыa
в порядке с прямым порядком байтов, отслеживая увиденные цифры в битахm
. Если цикл завершается, то все цифры являются факторами,i
и мы не увидели нулей или повторяющихся цифр, поэтому выведите его на печать, иначе мы выйдем раньше, чтобы продолжить внешний цикл.источник
goto
команда используется.CJam, 34 байта
источник
Луа, 129 байт
Я отказался от строкового подхода для чистого перебора цифр, который кажется немного более быстрым и, вероятно, также сэкономил мне несколько байтов. (Я проверю эту теорию, но обработка строк в Lua довольно многословна по сравнению с некоторыми другими языками.)
источник
gawk, 99 байт
Я мог бы уменьшить это до 97, если бы использовал
END
вместоBEGIN
, но тогда вам нужно было бы нажать Ctrl-D, чтобы начать фактический вывод, сигнализируя, что не будет никакого ввода.Я мог бы уменьшить его до 94, если бы ничего не писал вместо
BEGIN
илиEND
, но тогда вам нужно было бы нажать клавишу возврата один раз, чтобы запустить его, что можно было бы считать вводом.Он просто просматривает цифры каждого номера и проверяет, удовлетворены ли критерии.
Требуется 140 секунд, чтобы завершиться на моем Core 2 Duo.
источник
Желе , 11 байт
Это использует двухнедельный
œ!
атом. На самом деле достаточно быстро, чтобы работать на TIO.Попробуйте онлайн!
Как это работает
источник