var QUESTION_ID=162408,OVERRIDE_USER=21034;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>
Ответы:
Октава , 44 байта
Попробуйте онлайн!
Результат функции, при использовании каждого из символов в функции в качестве ввода:
Все остальные входные символы возвращают ноль.
Тот факт, что мне пришлось бежать,
'
сделал это намного дольше. Чтобы учесть 4 скобки, у меня просто был дубликат в строке. Однако дублирование апострофов требует апострофов, так что это только уводит нас от правильного результата. Поэтому мне пришлось подсчитать количество апострофов с его ASCII-значение,39
. Это, конечно, означало, что мне нужно было проверять персонажей3
и9
делать это намного дольше.источник
Excel, 84 байта
Find()
будет искать значение в ячейкеA1
в строке"123456789,()=MINORFADEOMEN
("""
в начале это экранирующий символ и будет вычисляться просто"
).Основываясь на результатах
Find()
, тоMid()
функция возвращает соответствующий символ из строки чисел. Эта строка была создана путем итерации, пока она не перестала изменяться.Если символ in
A1
не найден,Find()
возвращает ошибку, поэтомуIfError()
функция избегает ее возврата0
.В
OMEN
конце строки, в которой выполняется поиск вFind()
функции, присутствуют повторяющиеся буквы, поэтому их позиция никогда не будет возвращена, но они были необходимы для настройки количества символов. Без них существовал бесконечный цикл смены чисел. Буквенное расположение - стилистический выбор.источник
JavaScript (ES6), 70 байт
Не читает источник функции, но это довольно долго. Принимает ввод в виде 1-символьной строки.
Попробуйте онлайн!
источник
i=>'36335633'[i='\\36=\'i|&()25.>[]Odefx~n'.indexOf(i)]||~i&&2
(сохранено 8 байт)Сетчатка , 1 байт
Это было бы недопустимо, если бы строго следовал правилам квина, но ОП явно разрешил это в комментарии .
Попробуйте онлайн!
В сетчатке однострочная программа подсчитывает вхождения этого регулярного выражения во входных данных. Эта задача решается с помощью какого - либо одного символа ASCII , за исключением
`
,.
,+
,*
,?
,[
,(
,)
,^
,$
,\
и символ новой строки.источник
C # (компилятор Visual C #) ,
8857 байтПопробуйте онлайн!
Возвращает 3, если строка содержит переданный символ, в противном случае возвращает 0. Строка содержит каждый символ кода по крайней мере один раз и точно столько, сколько требуется, чтобы символ был 3 раза в коде.
-31 байт благодаря Кевину Круйссену
источник
(a)=>
и взяв ввод в виде строки вместо символа, чтобы больше не нуждаться.ToString()
(и,a+""
возможно, также использовать его для задач кода-гольфа, которые вам никогда не понадобятся.ToString()
). Кроме того, так как.Contains
уже содержитa
переменную, вы можете сделать входную переменную другим неиспользуемым символом (например,x
илиq
), чтобы иметь 3 для каждого символа вместо 4. РЕДАКТИРОВАТЬ: не берите в голову последнюю часть, я вижу, что"
она также используется 4 раза.Haskell , 66 байт
Первые две версии, по сути, представляют собой quine, которая фильтрует необходимые символы, а затем принимает длину:
Попробуйте онлайн или протестируйте со всеми персонажами! *
Альтернатива без
(<>)
, 72 байтаПопробуйте онлайн или протестируйте со всеми персонажами!
Альтернатива не Quine,
8786 байтВозможно, все еще будет улучшено, но я рад, что получил его только в трех разных группах.
Мне больше нравится этот, хотя он насчитывает больше байтов. Он вычисляет количество символов / байтов как сумму 2,3 и 7 (обратите внимание, что некоторые символы находятся в нескольких группах):
Попробуйте онлайн или протестируйте со всеми персонажами!
* импорт,
(<>)
потому что версия TIO GHC - 8.0.2источник
Python 2 ,
545232 байта-20 байт благодаря овсу
Попробуйте онлайн!
источник
"xxx".count
эквивалентенlambda c:"xxx".count(c)
.f="xxx".count
иf=lambda c:"xxx".count(c)
будет называтьсяf('a')
Шелуха ,
11 108 байтСпасибо Лео за -2 байта!
Попробуйте онлайн!
объяснение
Это гарантирует, что он использует только ASCII (потому что
show
это испортит его), и что каждый символ содержится дважды:Стандартное расширение Quine, 11 байт
Попробуйте онлайн!
объяснение
источник
Java 10,
1648157 байтПорт @Hyarus 'C # ответа , поэтому обязательно проголосуйте за него!
Объяснение:
Попробуйте онлайн.
Старый Quine 164-байтовый ответ:
Объяснение:
Попробуйте онлайн.
Куайн -часть:
s
содержит неформатированный исходный код.%s
используется для ввода этой строки в себя с помощьюs.format(...)
.%c
,%1$c
И34
используются для форматирования двойных кавычек.s.format(s,34,s)
складывает все вместеЗадание часть:
.replaceAll("[^"+c+']',"")
удаляет все символы кроме тех, которые равны вводу..length()
затем принимает длину этой строки.ПРИМЕЧАНИЕ:
.split(c).length
(сString
вводом вместоchar
) может показаться короче, но имеет две проблемы:c
(сc->
ведущей частью) вводится, он неверно вернет один символ слишком мало. Это можно исправить, добавив+(c==99?1:0)
как исходный код, так и неформатированный исходный код String (и изменив.split(c)
на.split(c+"")
, но тогда у нас все еще будет следующая проблема:$
), Он.split
будет интерпретироваться как регулярное выражение, давая неверный результат.источник
Haskell , 58 байт
Попробуйте онлайн! или проверьте решение .
Те же варианты подсчета байтов:
Haskell , 90 байт
Попробуйте онлайн! или проверьте решение . Использует тот факт, что
sum Nothing = 0
и, например,sum (Just 4) = 4
.источник
Болтовня , 112
132байтаSmalltalk не совсем известен своей пригодностью для игры в гольф :-)
Метод, определенный в классе Character (протестирован в VA Smalltalk и Squeak, должен работать и на других диалектах, таких как VisualWorks и Pharo):
Символы, встречающиеся в источнике, группируются по количеству вхождений. Группы тестируются для первой, которая содержит получателя, и возвращается соответствующий счетчик вхождений.
Старый метод:
Каждый символ, который появляется в методе, появляется ровно 6 раз (повторяется в строковой константе), поэтому метод просто проверяет, содержится ли получатель в строке, и возвращает 6, если это так, 0 в противном случае.
После определения метода, как указано выше, вы можете проверить его, используя
Результат должен быть пустым.
источник
JavaScript, 31 байт
Попробуйте онлайн
источник
Python 2 , 57 байт
Попробуйте онлайн!
источник
05AB1E , 17 байт
Попробуйте онлайн!
источник
Haskell , 96 байт
Попробуйте онлайн!
Haskell , 109 байт
Попробуйте онлайн!
Haskell , 122 байта
Попробуйте онлайн!
Пояснения
Эти ответы не очень сложны. Это серия объявлений, по одному на каждый символ, присутствующий в программе. В конце у нас есть catch, который возвращает 0 для символов, которых нет в программе.
Я использую несколько приемов, чтобы минимизировать количество символов, необходимых в программе, и оттуда я возился с вещами, пока цифры не оказались правильными. Вы можете видеть, что я добавил имя переменной в последнем объявлении во всех трех из них. Разница между этими 3 программами заключается в том, выбрал ли я новую строку или
;
для разрыва строки, и решил ли я использовать в качестве входных данных символы или строки. Такой;
подход не кажется по своей сути превосходящим другие, он просто приносит удачу и в итоге оказывается короче, однако кажется, что использование Strings - лучшая идея, чем Chars, потому что Chars требуют пробелов после имени функции, а Strings - нет.источник
Пробел , 140 байт
Буквы
S
(пробел),T
(табуляция) иN
(новая строка) добавляются только как подсветка.[..._some_action]
добавлено только в качестве объяснения.70 пробелов, 37 вкладок и 33 новых строки.
Обычно я использую Создать ярлыки в порядке
NSSN
,NSSSN
,NSSTN
,NSSSSN
,NSSSTN
,NSSTSN
,NSSTTN
и т.д. Но так как печать номер , в котором двоичныйS=0
/T=1
используется влияет на количество , мне нужно вывести, я использовал этикеткиNSSN
,NSSSN
,NSSTN
иNSSSTN
вместо того , который дал идеальное количество пробелов / табуляций для двоичных чиселSSSTSSSSTN
(33; количество новых строк),SSSTSSTSTN
(37; количество табуляций) иSSSTSSSTTSN
(70; количество пробелов).Объяснение в псевдокоде:
Пример работы:
Вход: пробел
Программа останавливается с ошибкой: выход не определен.
Попробуйте онлайн (только с необработанными пробелами, вкладками и новыми строками).
Вход: вкладка
STDIN будет
\t
(9
) вместо этого, и в этом случае он будет0
на первомIf 0
проверке, перейдет вLABEL_TAB
/NSSSTN
и будет нажимать и печатать37
вместо этого .Попробуйте онлайн (только с необработанными пробелами, вкладками и новыми строками).
Ввод: новая строка
Вместо этого будет STDIN
\n
(10
), в этом случае он будет0
при второйIf 0
проверке, перейдет кLabel_NEWLINE
/NSSSN
и будет нажимать и печатать33
вместо этого .Попробуйте онлайн (только с необработанными пробелами, вкладками и новыми строками).
Вход: все остальное
Любой другой символ ввода будет делать
NSTN
(Перейти к Label_PRINT) после третьейIf 0
проверки, печатая0
который все еще был в стеке (который мы продублировали в самом начале).Попробуйте онлайн (только с необработанными пробелами, вкладками и новыми строками).
источник
Japt , 27 байт
Дольше, чем существующий ответ Japt, но использует другой подход.
Имеет врожденное ограничение, что все символы должны встречаться уникальное количество раз.
Принимает ввод в виде строки.
Попробуйте онлайн!
источник
Perl, 130 байт
Не имеет новой строки или других пробелов. Читает строку из стандартного вывода, но заботится только о его первых байтах, а затем печатает число раз, которое байт встречается в его собственном исходном коде в десятичном виде, без новой строки.
Программа проста. Большая часть исходного кода занята литеральной таблицей, которая дает ответ для каждого возможного байта. Конечные нули опущены, а соседние нули сжаты во время выполнения, но кроме этого нет особого трюка. Остальная часть программы просто читает входные данные и ищет ответ в таблице.
Например, часть
22, 12, 6, 3, 5, 2, 4, 0, 1, 0
в исходном коде дает частоту цифр, поэтому в исходном коде есть 22 нуля, 12 единиц, 6 двойок и т. Д. В результате, если вы введете0
стандартный ввод программы, программа напечатает22
.источник
C (gcc) , 1033 байта
Попробуйте онлайн!
Это ни в коем случае не является удачным ответом, но было интересно попробовать выполнить эту задачу на языке, с которым я не знаком. Это не было особенно сложной задачей, пока не пришло время найти вхождения цифр, теперь ЭТО было проблемой. Пришлось немного творчески заняться балансировкой :)
источник
C (gcc) , 192 байта
Попробуйте онлайн!
Вероятно, возможно, гольф дальше. В конце используется комментарий как «пустое место» для добавления дополнительных цифр. Когда мне нужно сменить цифру с X на Y, я заменяю один из Y на пустом месте на X для компенсации. Кроме этого это просто функция, которая принимает целое число, используя трюк присваивания, чтобы вернуть значение, основанное на большой троичной условной переменной.
источник
0*84332211
в другом ответе на C, но я также могу сохранить байты, изменив рефакторинг, чтобы он был меньше, поэтому я пока не буду беспокоиться.J&1?
чтобы соответствовать всем нечетным символам). Я могу продолжить игру в гольф, если найду время для этого.x86 .COM, 17 байт, спорный
36 байт
источник
Japt , 14 байт
Попытайся
объяснение
источник
V , 12 байт
Попробуйте онлайн!
HexDump:
источник
Желе , 16 байт
Попробуйте онлайн!
Каждый персонаж появляется ровно дважды.
источник
х86,
4240 байтЗдесь я использую ту же стратегию, что и другие: создайте строковую копию программы с уникальными байтами, а затем верните 2 в
al
если входal
находится в строке. Если мы позволим себе читать код, который на самом деле выполняется, мы получим решение l4m2 .Я должен использовать классную инструкцию строки
scasb
. Насколько я знаю, дублирующих байтов не существует, но это то, что я легко испортил. Загрузка строки адреса занимает 5 байт , но я не знаю ни одного короткого решения (64-битlea
изrip
со смещением занимает 6 байт).-2, прыгая назад, чтобы избежать использования
02
дважды.Hexdump (двоичного формата файла elf32-i386, так как, к сожалению, в файле obj есть
00
байты дляstr
адреса):x86, 256 байт
Скучный ответ, который является эквивалентом гигантского комментария. Ввод
cl
, немедленно возвращает 1 вal
. Я сделаю реальный ответ, когда у меня будет свободное время.источник
APL (Dyalog Classic) , 30 байтов
Попробуйте онлайн!
объяснение
В APL одинарные кавычки в строках экранируются путем удвоения,
'''''''1''⊢-⍳⍳0'
как и строка'''1'⊢-⍳⍳0
, которые содержат все символы, используемые в программе.Массивы APL по умолчанию 1-проиндексированы, а функция index-of, что интересно, возвращает
1 + max index
если элемент не найден.Таким образом, используя index-of для строки и входные данные возвращаются
Как видно,
11 - index
дает количество символов в программе. Итак, основной алгоритмВсе остальное - раздутый счет персонажей, позволяющий им хорошо вписаться в слоты.
источник
R 135 байтов
Вдохновлен этим ответом Python .
Предыдущие версии были сломаны. Спасибо @Giuseppe за указание на то, что
paste
это не требуется, он сэкономил 18 байтов или около того.lengths(regmatches(z,gregexpr(x,z)))
это из этого ответа .Попробуйте онлайн!
источник
Пари / ГП , 36 байт
Попробуйте онлайн!
источник
Рубин, 48 байтов
%q[str]
это более удобный способ написания строкового литерала, чем"str"
потому, что он может быть вложен внутрь себя, без экранирования. Поэтому я просто поместил весь код, за исключением копии, внутри, а затем удвоил счет.источник
Желе ,
1210 байтПопробуйте онлайн!
Читает символ из STDIN.
12 байт
Попробуйте онлайн!
Использование ввода из аргумента командной строки.
Также 12 байтов:
Попробуйте онлайн!
источник