Воу, воу, воу ... хватит печатать вашу программу. Нет, я не имею в виду «печать ABC...
». Я говорю о столицах Соединенных Штатов.
В частности, распечатайте все комбинации городов и штатов, указанные в следующем списке.
- в любом порядке
- с вашим выбором разделителей (например,
Baton Rouge`LA_Indianapolis`IN_...
приемлемо), при условии, что однозначно, какие слова являются городами, которые являются штатами, и которые являются различными записями
- без использования какого-либо из
ABCDEFGHIJKLMNOPQRSTUVWXYZ
в вашем исходном коде
Вывод должен быть STDOUT или эквивалентным.
РЕДАКТИРОВАТЬ - Ой!
<edit>
При вводе списка из памяти (благодаря Animaniacs, как описано ниже), я , видимо , пренебрегал Вашингтон, округ Колумбия, который не является государством капитала, но это в песне, а иногда включается в «списках столиц» ( как ответ Mathematica ниже). Я собирался включить этот город в этот список, но как-то пропустил. В результате за ответы, у которых нет этого города, штраф не будет, и за ответы, в которых есть этот город, штраф также не будет. По сути, вам решать Washington, DC
, включен ли он в ваш вывод или нет. Извините за это, ребята!
</edit>
Baton Rouge, LA
Indianapolis, IN
Columbus, OH
Montgomery, AL
Helena, MT
Denver, CO
Boise, ID
Austin, TX
Boston, MA
Albany, NY
Tallahassee, FL
Santa Fe, NM
Nashville, TN
Trenton, NJ
Jefferson, MO
Richmond, VA
Pierre, SD
Harrisburg, PA
Augusta, ME
Providence, RI
Dover, DE
Concord, NH
Montpelier, VT
Hartford, CT
Topeka, KS
Saint Paul, MN
Juneau, AK
Lincoln, NE
Raleigh, NC
Madison, WI
Olympia, WA
Phoenix, AZ
Lansing, MI
Honolulu, HI
Jackson, MS
Springfield, IL
Columbia, SC
Annapolis, MD
Cheyenne, WY
Salt Lake City, UT
Atlanta, GA
Bismarck, ND
Frankfort, KY
Salem, OR
Little Rock, AR
Des Moines, IA
Sacramento, CA
Oklahoma City, OK
Charleston, WV
Carson City, NV
(ч / т Animaniacs для списка столиц)
Возьмите бонус в размере -20% , если ваша заявка не явно имеют номера 65
через 90
или номер 1
в коде. Генерация этих чисел (например, a=5*13
или, a="123"[0]
или, a=64;a++
или тому подобное) разрешена в рамках этого бонуса, явно иметь их (например, a=65
или a="1 23 456"[0]
) нельзя.
Leaderboard
var QUESTION_ID=60650,OVERRIDE_USER=42963;function answersUrl(e){return"http://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"http://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+(?:[.]\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>
alert(...)
традиционно является JS-эквивалентом STDOUT.Ответы:
R
96 байт98 байт -20% -> 78,4Спасибо @plasticinsect за бонус!
Предыдущий код в 96 байтов:
Из пакета
maps
загружается набор данных по городам США. Колонкаcapital
содержит,2
если это столица штата. Названия городов задаются в столбцеname
в форме «City StateAbbreviation» (т.е.Albany NY
), поэтому перед выводом необходимо добавить явный разделитель между ними.Для этого я в конечном итоге использую регулярное выражение,Чтобы избежать использования\1
означающее, что я не могу получить бонус, я полагаю\1
в регулярном выражении, я добавил пустую группу, чтобы я мог использовать\2
.Использование:
источник
\n
1 байта>0
вместо `` == 2`, а также я не думаю, что вам это нужноdata(us.cities)
, на моей машине он загружается при загрузке pacakage. Попробуйте!Mathematica,
168153149 байт - 20% = 119,2 байтОбязательно, но я не знал, что любой символ может быть заменен
\.xx
или\:xxxx
с соответствующим шестнадцатеричным кодом.Редактировать: Вырезать еще 4 символа, заменив
Thread
их чистой функцией.Выход:
источник
EntityValue[EntityList[EntityClass["AdministrativeDivision", "AllUSStatesPlusDC"]], {"CapitalName","StateAbbreviation"}]
AllUSStatesPlusDC
я боюсь!CJam, 312 байтов
Код длиной 390 байт соответствует 20% бонуса .
Обратите внимание, что код пронизан непечатаемыми символами. Попробуйте онлайн в интерпретаторе CJam .
идея
Мы должны как-то закодировать вывод, не используя прописные буквы или цифры от 1 и 65 до 90 в любом месте кода.
Мы начинаем с переписывания желаемого результата как
Вычитая символ
`
из всех символов этой строки, мы получаем массив, содержащий целые числа от 0 до 26. Мы можем преобразовать этот массив из базы 27 в базу 229, получив массив целых чисел от 0 до 228.Если мы добавим 91 к каждой цифре base-229 и возьмем результаты по модулю 256, мы отобразим диапазон [0,…, 164] на [91,… 255] , а диапазон [165,…, 228] - [0, …, 63] . Это оставляет символы с кодами от 64 (
@
) до 90 (Z
) неиспользованными.Кодируемая строка не в том же порядке, что и пример выходных данных в вопросе. Я пробовал несколько перестановок, пока не нашел один, который не содержит нулевых байтов, перевода строки, возврата каретки или неразрывных пробелов (проблематично с онлайн-интерпретатором) и двойных кавычек (требуется экранирование).
Код
источник
Perl, 605 байт - 20% = 484
Моя первая версия была недействительной, потому что она использовала \ U для преобразования в верхний регистр. Этот использует \ u на каждой букве сокращения штата. Я также должен был добавить фиктивную группу захвата, чтобы избежать использования $ 1.
Изменить: мне удалось сбрить 8 байтов с помощью uc () с флагом e. (Спасибо, Дом Хастингс.)
источник
JavaScript,
727687 байт - 20% = 549,6Javascript также особенно сложен, учитывая его длинные имена функций и верблюд. разделение состояний сэкономило массу разделителей и упростило работу со всеми вокруг.
@ mbomb007 в сообщении ничего не написано с заглавной буквы;)
источник
C
703700 байт - 20% = 560 байтЯ немного изменил цикл, чтобы он компилировался с компиляторами не-C99. Онлайн версия
источник
Javascript (es6) 516 (645-20%)
532 (664-20%)протестируйте приведенный ниже фрагмент в любом недавнем браузере: единственная используемая функция es6
template strings
источник
Funciton , 5045 - 20% = 4036 байт
Этот код содержит только одно число, и он не находится в диапазоне от 65 до 90. И при этом это не число 1. Фактически, это число составляет 4187 десятичных цифр, которые четко разлагаются на простые числа 79 × 53.
Как всегда, получите лучший рендеринг, выполнив
$('pre').css('line-height',1);
в консоли браузера.Изменить: Кири-бан! Этот ответ - codegolf.SE post # 61000!
источник
машинный код x86, 764 байта
612, если бонус начислен
Полностью автономная программа. Полагается только на то, что (a) Bios int 0x10 доступен для печати каждого символа и (б) DS, ES, SP и SS инициализируются до вызова программы, DOS делает это (и DOS-Box тоже). В противном случае код полагается на ничего такого. Абсолютный минимум без каких-либо зависимостей, за исключением BIOS, будет составлять около 2 секторов дискет по 512 байт каждый.
Кажется, он не использует ни одной из стандартных петель, хотя некоторые байты программы равны 01, но они не являются числами в источнике. Однако, поскольку я хотел бы представить двоичный код в качестве своего решения, я думаю, что это запретило бы 01 байт.
Вид Hex-редактора бинарных файлов:
Версия «без игры в гольф» (источник - 3126 байт)
Выход:
источник
Python 3,
1416+793785+779771755734 символа - 20% = 587,2Здесь нет алгоритмического умения, я просто взял требуемый вывод, отсортировал его (это позволяет zlib лучше выполнять свою работу), сжал его (используя
zopfli --deflate
), закодировал в base64 результат, а затем изменил кодировку, чтобы избежать заглавных букв.Un-golfed:
Вероятно, из этого можно извлечь больше, особенно если вы можете выразить аргумент
translate()
более компактно. Обратите внимание, что пунктуация там тщательно выбрана, чтобы избежать собственной пунктуации base64 (+ / =) и всего, что потребовало бы обратного удара в строковом литерале.Интересный факт: модули bz2 и lzma работают на этом входе хуже, чем zlib:
источник
import zlib,base6
в начале и сделать.DATA.translate(tr).decode('base64').decode('zlib').decode('utf-8')
Зачем вам это вообще нужноdecode('utf-8')
?.translate
работает по-другому и{ x:y for x,y in ... }
не доступен. Без.decode('u8')
, в Python 3 выводом является repr () байтовой строки, которая достаточно далека от запрошенного вывода, что я не думаю, что оно должно рассчитывать.Pyth (631-20%) = 504,8
Выход:
Второй параметр для
r
переменных между 5 (capwords()
) и 1 (upper()
)источник
k
PowerShell,
1038976925904813768758749745 -20% = 596Ungolfed:
источник
Минколанг 0,7 ,
660705708 * 0,8 = 566,4Спасибо Sp3000 за напоминание о том, что я могу использовать
p
для ввода заглавной буквы Os в коде!объяснение
Бит первой строки до того , как
"
ничего не делает , но поставитьR
(повернуть стек) вместоr
а затем заменить все экземплярыo
сO
на второй линии.После этого это список столиц без перевода строки и всех букв в нижнем регистре, который Минколанг помещает в стек в обратном порядке. В
01w
конце есть «червоточина» в начале второй строки. Все заглавные буквы выводятся путем вычитания 32 из строчной буквы, поэтому48*-
отображается четыре раза.48*-O
выводитB
, затем(
начинается цикл while. Вершина стека проверяется на соответствие,
. Если это не так,
,O)
выводится символ и возвращается к началу цикла. Если вершина стека равна,
, то программный счетчик перепрыгиваетO)
из-за2&
условного батута, который перепрыгивает два пробела.Теперь я прыгаю, когда сталкиваюсь с,
,
потому что я знаю, что следующие шесть символов - это то, AB\nC
, что делает остальная часть цикла. Существует проверка , чтобы увидеть , если стек пуст в середине (после того, какAB
напечатано до\nC
):d?
. Если это так, то условный батут не берется, и программа завершается после нажатия кнопки.
. В противном случае он пропускается и цикл продолжается.источник
PHP 520 байт (650 байт - 20%)
Результат
Ungolfed:
Я пробовал разные способы сжатия строки, но в итоге все решения оказались длиннее, чем этот прямой подход.
источник
Python 2, 658 байт * 0,8 = 526,4
Печатает результат в виде списка Python из кортежей Python. Они также заключены в кавычки. Это определенно соответствует бонусу, поскольку в коде только 2.
Выход:
Я надеюсь, что это в приемлемых пределах форматирования.
источник
Groovy,
724681 - 20% = 545 байтВдохновленный умным смахиванием Edc65 названия штата и города!
источник
PowerShell, 627 -20% = 502 байта
Какой это шаблон:
Прописные буквы, одиночные после границы слова или двойные буквы перед двоеточием. В
"$args,"[3]
выбираешь либо запятую в случае двойной буквы коды состояния или overselects и возвращает нулевое значение, и добавляют государственные сепараторы, экономя ~ 50 в сепараторах из строки коды.источник
Рубин (925 * 80%) = 740 байт
О, это было сложно. Это сжатая Zlib строка в шестнадцатеричных кодированных байтах, которая затем распаковывается, превращается в массив строк с помощью регулярного выражения сканирования, затем каждая строка преобразуется в десятичное целое число, затем в символ, и, наконец, этот массив объединяется в строка. Я мог бы позже опубликовать лучшую версию, которая использует измененную кодировку base64.
Хотя закодированная строка может иметь несколько экземпляров 65-90 или 1, я не считаю их, потому что строка представляет собой одно огромное шестнадцатеричное число. Таким образом, это дает право на бонус 20%.
источник
Python 2, 639 байт - 20% = 511,2
В приведенной ниже версии (675 байт)
''.join([w.capitalize()for w in t[n][2:].split()])
, которую я только что обнаружил, можно заменить.title()
, и это анонимная функция. В обоих ответах государственные аббревиатуры прикреплены к столицам.источник
Машинный код x86 - 585 байт, 468 с бонусом
Разочаровавшись в моей последней записи, я решил попробовать что-то совсем другое на этот раз. Опираясь на
insertusernamehere
идею отделения названий городов от названий штатов, избегая, таким образом, ненужной логики и ненужных терминаторов, я все еще думал, что смогу сделать программу меньше, чем необработанные строки. UPX не поможет мне обмануть, жалуясь, что программа уже слишком мала. Думая о сжатии, я попытался сжать 662-байтовый текстовый вывод с помощью WinRar, но все еще получил только 543 байта - и это было без чего-либо, чтобы распаковать его. Он все еще казался слишком большим, учитывая, что это был просто результат, без какого-либо кода.Тогда я понял - я использую только 26 символов для букв и еще 2 для пробелов и запятых. Хм, это вписывается в 32, которому нужно всего 5 бит. Итак, я написал быструю javascript-программу для кодирования строк, присваивая z 0-25, а пробел и запятую - 26 и 27. Для простоты каждый символ кодируется в 5 битах, независимо от того, нужно это много или нет. Оттуда я просто склеил все кусочки и разбил их на куски размером в байты. Это позволило мне упаковать 563 байта строк в 353 байта - экономия 37,5% или около 210 байтов. Мне не удалось втиснуть программу и данные в то же пространство, что и распакованные данные, но я подошел достаточно близко, чтобы быть счастливым.
Hxd вид двоичного файла:
Исходный код:
источник