Whoa, whoa, whoa ... przestań pisać swój program. Nie, nie chodzi mi o „drukuj ABC...
”. Mówię o stolicach Stanów Zjednoczonych.
W szczególności wydrukuj wszystkie kombinacje miasta / stanu podane na poniższej liście
- w dowolnej kolejności
- z wybranym ogranicznikiem (np.
Baton Rouge`LA_Indianapolis`IN_...
jest akceptowalny), o ile jednoznaczne jest, które słowa są miastami, które są stanami, a które różnymi wpisami
- bez użycia żadnego z
ABCDEFGHIJKLMNOPQRSTUVWXYZ
kodu źródłowego
Dane wyjściowe powinny być STDOUT lub równoważne.
EDYCJA - Ups!
<edit>
Podczas pisania listy z pamięci (dzięki Animaniacs, jak opisano poniżej), najwyraźniej zaniedbałem Waszyngton, który nie jest stolicą stanu, ale jest w piosence i czasami jest zawarty w „listach stolic” ( jak odpowiedź Mathematica poniżej). Zamierzałem umieścić to miasto na tej liście, ale jakoś mi tego brakowało. W rezultacie odpowiedzi, które nie mają tego miasta, nie zostaną ukarane, a odpowiedzi, które mają to miasto, również nie zostaną ukarane. Zasadniczo to od Ciebie zależy, czy Washington, DC
zostanie uwzględniony w Twojej pracy, czy nie. Przepraszam, ludzie!
</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
(h / t do Animaniacs dla listy wielkich liter)
Weź premię w wysokości -20%, jeśli twoje zgłoszenie nie zawiera wyraźnie liczb 65
za pośrednictwem 90
lub liczby 1
w kodzie. Generowanie tych liczb (np. a=5*13
Lub a="123"[0]
lub a=64;a++
podobnych) jest dozwolone w ramach tej premii, wyraźne posiadanie ich (np. a=65
Lub a="1 23 456"[0]
) nie jest.
Tabela liderów
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(...)
jest tradycyjnie JS odpowiednikiem STDOUT.Odpowiedzi:
R,
96 bajtów98 bajtów -20% -> 78,4Dzięki @plasticinsect za bonus!
Poprzedni kod o 96 bajtach:
Z pakietu
maps
ładuje zestaw danych amerykańskich miast. Kolumnacapital
zawiera,2
jeśli jest stolicą stanu. Nazwy miast podane są w kolumniename
w formie „City StateAbbreviation” (tj.Albany NY
), Więc przed wyjściem należy dodać wyraźny separator.Aby to zrobić, w końcu używam wyrażenia regularnego,Aby uniknąć używania\1
co oznacza, że nie mogę mieć premii, jak sądzę.\1
w wyrażeniu regularnym, dodałem pustą grupę, aby móc jej używać\2
.Stosowanie:
źródło
\n
dla 1 bajtu,>0
zamiast `` == 2`, a także nie sądzę, że potrzebujeszdata(us.cities)
, na mojej maszynie ładuje się, gdy ładujesz pakiet. Wypróbuj to!Mathematica,
168153149 bajtów - 20% = 119,2 bajtówObowiązkowe, ale nie wiedziałem, że każdy znak może zostać zastąpiony przez odpowiedni kod szesnastkowy
\.xx
lub\:xxxx
z nim.Edycja: Wytnij 4 kolejne znaki, zastępując
Thread
czystą funkcją.Wydajność:
źródło
EntityValue[EntityList[EntityClass["AdministrativeDivision", "AllUSStatesPlusDC"]], {"CapitalName","StateAbbreviation"}]
AllUSStatesPlusDC
!CJam, 312 bajtów
Kod ma 390 bajtów długości i kwalifikuje się do 20% premii .
Zauważ, że kod jest pełen znaków niedrukowalnych. Wypróbuj online w interpretatorze CJam .
Pomysł
Musimy jakoś zakodować wynik bez użycia wielkich liter lub cyfr od 1 do 65 do 90 w dowolnym miejscu w kodzie.
Zaczynamy od przepisania pożądanego wyjścia jako
Odejmując znak
`
od wszystkich znaków tego ciągu, otrzymujemy tablicę zawierającą liczby całkowite od 0 do 26. Możemy przekonwertować tę tablicę z podstawy 27 na podstawę 229, uzyskując tablicę liczb całkowitych od 0 do 228.Jeśli dodamy 91 do każdej cyfry bazowej 229 i weźmiemy wynik modulo 256, mapujemy zakres [0,…, 164] na [91,… 255] i zakres [165,…, 228] na [0, …, 63] . To pozostawia znaki z punktami kodowymi od 64 (
@
) do 90 (Z
) nieużywanymi.Łańcuch do zakodowania nie jest w tej samej kolejności, co przykładowy wynik w pytaniu. Próbowałem kilku permutacji, dopóki nie znalazłem takiego, który nie zawiera zerowych bajtów, znaków końca wiersza, znaków powrotu karetki lub spacji nierozdzielających (problem z interpreterem online) i żadnych podwójnych cudzysłowów (wymaga ucieczki).
Kod
źródło
Perl, 605 bajtów - 20% = 484
Moja pierwsza wersja była nieprawidłowa, ponieważ użyłem \ U do konwersji na wielkie litery. Ten używa \ u na każdej literze skrótu stanu. Musiałem także dodać grupę przechwytującą, by uniknąć korzystania z 1 USD.
Edycja: Byłem w stanie ogolić 8 bajtów za pomocą uc () z flagą e. (Dziękuję Dom Hastings.)
źródło
javascript,
727687 bajtów - 20% = 549,6javascript jest szczególnie trudny, biorąc pod uwagę ich długie nazwy funkcji i wielbłąd. podział stanów zaoszczędził mnóstwo na ogranicznikach i ułatwił pracę z całym.
@ mbomb007 nic w poście nie było napisane z jakiegoś powodu;)
źródło
C,
703700 bajtów - 20% = 560 bajtówTrochę zmieniłem pętlę, aby kompilowała się z kompilatorami innymi niż C99. Wersja online
źródło
javascript (es6) 516 (645-20%)
532 (664-20%)przetestuj poniższy fragment kodu w dowolnej najnowszej przeglądarce: jedyną używaną funkcją es6 jest
template strings
źródło
Funciton , 5045 - 20% = 4036 bajtów
Ten kod zawiera tylko jedną liczbę i nie należy do przedziału od 65 do 90. Nie jest to również liczba 1. W rzeczywistości liczba ta wynosi 4187 cyfr dziesiętnych, co czysto dzieli się na liczby pierwsze 79 × 53.
Jak zawsze, uzyskaj ładniejsze renderowanie, uruchamiając się
$('pre').css('line-height',1);
w konsoli przeglądarki.Edycja: Kiri-ban! Ta odpowiedź to codegolf.SE post # 61000!
źródło
kod maszynowy x86, 764 bajty
612, jeśli premia przyznana
Całkowicie samodzielny program. Polega tylko na tym, że (a) Bios int 0x10 jest dostępny do drukowania każdego znaku i (b) DS, ES, SP i SS są inicjowane przed wywołaniem programu, DOS to robi. (I DOS-Box też) W przeciwnym razie kod polega na nic. Absolutne minimum bez żadnych zależności, z wyjątkiem ROM BIOS-u, wynosi około 2 sektorów dyskietek po 512 bajtów każdy.
Wydaje się, że nie wykorzystuje żadnego standardowego otworu na pętlę, chociaż chociaż niektóre bajty programu mają wartość 01, nie są to liczby w źródle. Ponieważ jednak chciałbym przesłać kod binarny jako swoje rozwiązanie, wyobrażam sobie, że uniemożliwiłoby to 01 bajtów.
Widok edytora szesnastkowego pliku binarnego:
Wersja „bez golfa” (źródło - 3126 bajtów)
Wydajność:
źródło
Python 3,
1416793785779771755734 znaki - 20% = 587,2Nie ma tutaj sprytności algorytmicznej, po prostu wziąłem wymagane dane wyjściowe, posortowałem je (pozwala to na lepszą pracę zlib), skompresowałem (używając
zopfli --deflate
), zakodowałem wynik w formacie base64, a następnie zmieniłem kodowanie, aby uniknąć wielkich liter.Bez golfa:
Prawdopodobnie trzeba z tego wycisnąć więcej, zwłaszcza jeśli możesz wyrazić argument w sposób
translate()
bardziej zwięzły. Zauważ, że interpunkcja jest tam starannie wybierana, aby uniknąć interpunkcji własnej base64 (+ / =) i wszystkiego, co wymagałoby cofnięcia w dosłownym ciągu.Ciekawostka: oba moduły bz2 i lzma gorzej radzą sobie z tym wejściem niż zlib:
źródło
import zlib,base6
na początku i zrobićDATA.translate(tr).decode('base64').decode('zlib').decode('utf-8')
Dlaczego w ogóle tego potrzebujeszdecode('utf-8')
?.translate
działa inaczej i{ x:y for x,y in ... }
nie jest dostępny. Bez.decode('u8')
w Pythonie 3 wyjściem jest repr () ciągu bajtów, co jest wystarczająco dalekie od żądanego wyniku, że nie sądzę, że powinien się liczyć.Pyth, (631-20%) = 504,8
Wydajność:
Drugi parametr dla
r
naprzemiennych wartości między 5 (capwords()
) a 1 (upper()
)źródło
k
PowerShell,
1038976925904813768758749745 -20% = 596Nie golfowany:
źródło
Minkolang 0,7 ,
660705708 * 0,8 = 566,4Dzięki Sp3000 za przypomnienie mi, że mogę użyć dużej liczby
p
Os do kodu!Wyjaśnienie
Kawałek pierwszej linii przed
"
nie robi nic, tylko umieszczaR
(obróć stos) w miejsce,r
a następnie zamienia wszystkie wystąpieniao
zO
na w drugiej linii.Następnie jest to lista wielkich liter bez znaków nowej linii i wszystkich małych liter, które Minkolang wypycha na stos w odwrotnej kolejności. Na
01w
końcu znajduje się „tunel czasoprzestrzenny” na początku drugiej linii. Wszystkie duże litery są wyprowadzane przez odjęcie 32 od małej litery, dlatego48*-
pojawia się cztery razy.48*-O
wyjściaB
, a następnie(
rozpoczyna pętlę while. Górna część stosu jest sprawdzana przeciwko,
. Jeśli nie,
,O)
wyświetla postać i przeskakuje z powrotem na początek pętli. Jeśli wierzchołek stosu jest,
, to licznik programu przeskakujeO)
z powodu2&
, że warunkowego trampolinie skacze dwie przestrzenie.Teraz podskakuję, gdy napotykam a,
,
ponieważ wiem, że jest sześć następnych znaków, AB\nC
, co robi reszta pętli. Jest tam sprawdzić, czy stos jest pusty w środku (poAB
wydrukowaniu wcześniej\nC
)d?
. Jeśli tak, to nie bierze się warunkowej trampoliny, a program kończy działanie po naciśnięciu przycisku.
. W przeciwnym razie zostanie pominięty, a pętla będzie kontynuowana.źródło
PHP 520 bajtów (650 bajtów - 20%)
Wynik
Nie golfowany:
Próbowałem różnych sposobów kompresji łańcucha, ale ostatecznie wszystkie rozwiązania były dłuższe niż to proste podejście.
źródło
Python 2, 658 bajtów * 0,8 = 526,4
Wyświetla wynik jako listę krotek Python. Są one również ujęte w cytaty. To zdecydowanie kwalifikuje się do premii, ponieważ jedyną liczbą w kodzie jest 2.
Wydajność:
Mam nadzieję, że mieści się to w dopuszczalnych granicach formatowania.
źródło
Groovy,
724681 - 20% = 545 bajtówZainspirowany sprytnym połączeniem nazwy stanu i miasta przez Edc65!
źródło
PowerShell, 627-20% = 502 bajtów
Który jest tym wzorem:
Pojedyncza litera po granicy słowa lub wielkie litery przed dwukropkiem. Do
"$args,"[3]
wybiera albo przecinek w przypadku podwójnego kodu państwowego list lub overselects i zwraca NULL i dodaje separatorów państwowych, oszczędzając ~ 50 w separatorach z linii kodu.źródło
Rubin, (925 * 80%) = 740 bajtów
O, ten był trudny. Jest to skompresowany ciąg Zlib w bajtach zakodowanych heksadecymalnie, który jest następnie dekompresowany, przekształcany w tablicę ciągów przez regex skanowania, następnie każdy ciąg jest konwertowany na liczbę całkowitą dziesiętną, a następnie na znak, a na koniec ta tablica jest łączona w strunowy. Później mogę opublikować lepszą wersję, która używa zmodyfikowanego kodowania base64.
Chociaż zakodowany ciąg może mieć pewne wystąpienia 65-90 lub 1, nie liczę ich, ponieważ ciąg jest jedną wielką liczbą w systemie szesnastkowym. W ten sposób kwalifikuje się to do premii 20%.
źródło
Python 2, 639 bajtów - 20% = 511,2
Wersja poniżej (675 bajtów) ma
''.join([w.capitalize()for w in t[n][2:].split()])
w sobie, którą właśnie odkryłem, że można ją zastąpić.title()
i jest funkcją anonimową. W obu odpowiedziach skróty państw są dołączone do wielkich liter.źródło
kod maszynowy x86 - 585 bajtów, 468 z premią
Zawiedziony tym, jak duży był mój ostatni wpis, postanowiłem tym razem spróbować czegoś zupełnie innego. Opierając się na
insertusernamehere
pomyśle oddzielenia nazw miast od nazw państwowych, unikając w ten sposób niepotrzebnej logiki i niepotrzebnych terminatorów, nadal myślałem, że będę w stanie sprawić, że program będzie mniejszy niż surowe łańcuchy. UPX nie pomógłby mi oszukiwać, narzekając, że program był już zbyt mały. Myśląc o kompresji, próbowałem skompresować wynik 662 bajtów za pomocą WinRar, ale nadal otrzymałem tylko 543 bajty - i nie było nic, za pomocą czego można by go zdekompresować. Nadal wydawał się zbyt duży, biorąc pod uwagę, że był to wynik, bez żadnego kodu.Potem zdałem sobie sprawę - używam tylko 26 znaków dla liter i kolejnych 2 dla spacji i przecinków. Hmm, który pasuje do 32, który potrzebuje tylko 5 bitów. Napisałem więc szybki program javascript do kodowania ciągów, przypisując az do 0-25, a spacja i przecinek mają 26 i 27. Dla uproszczenia, każdy znak jest zakodowany w 5 bitach, niezależnie od tego, czy potrzebuje tak wielu, czy nie. Stamtąd po prostu skleiłem wszystkie bity i rozbiłem je z powrotem na kawałki wielkości bajtów. Pozwoliło mi to spakować 563 bajty ciągów do 353 bajtów - oszczędność 37,5% lub około 210 bajtów. Nie do końca udało mi się wcisnąć program i dane w tę samą przestrzeń, co tylko rozpakowane dane, ale zbliżyłem się wystarczająco, by być szczęśliwym.
Widok binarny Hxd:
Kod źródłowy:
źródło