Whoa, whoa, whoa ... hör auf, dein Programm zu tippen. Nein, ich meine nicht "Drucken ABC...
". Ich spreche von den Hauptstädten der Vereinigten Staaten.
Drucken Sie insbesondere alle in der folgenden Liste aufgeführten Stadt- / Bundeslandkombinationen aus
- In irgendeiner Reihenfolge
- mit Ihrer Wahl der Begrenzer (zB
Baton Rouge`LA_Indianapolis`IN_...
ist akzeptabel), solange es eindeutig ist, welche Wörter Städte, welche Bundesstaaten und welche Einträge unterschiedlich sind
- ohne irgendetwas
ABCDEFGHIJKLMNOPQRSTUVWXYZ
in Ihrem Quellcode zu verwenden
Die Ausgabe sollte auf STDOUT oder gleichwertig erfolgen.
BEARBEITEN - Whoops!
<edit>
Während die Liste aus dem Speicher der Eingabe bis (dank der Animaniacs, wie unten beschrieben), I Washington, DC offenbar vernachlässigt, was nicht ist eine Landeshauptstadt, sondern ist in dem Lied, und wird manchmal in „Listen der Hauptstädte“ enthalten ( wie die Mathematica- Antwort unten). Ich hatte vor, diese Stadt in diese Liste aufzunehmen, habe sie aber irgendwie verpasst. Als Ergebnis Antworten , die nicht bestraft werden , dass die Stadt haben nicht, und Antworten , die Sie , dass die Stadt haben , werden nicht bestraft werden, auch nicht . Im Wesentlichen liegt es an Ihnen, ob Sie Washington, DC
in Ihrer Ausgabe enthalten sind oder nicht. Tut mir leid, Leute!
</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 an Animaniacs für die Liste der Hauptstädte)
Nehmen Sie einen Bonus von -20%, wenn Ihre Einreichung nicht explizit die Zahlen 65
bis 90
oder die Zahl 1
im Code enthält. Das Generieren dieser Zahlen (z. B. a=5*13
oder a="123"[0]
oder a=64;a++
dergleichen) ist im Rahmen dieses Bonus erlaubt, das explizite Vorhandensein dieser Zahlen (z. B. a=65
oder a="1 23 456"[0]
) nicht.
Bestenliste
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(...)
ist traditionell das JS-Äquivalent von STDOUT.Antworten:
R,
96 Bytes98 Bytes -20% -> 78,4Danke an @plasticinsect für den Bonus!
Vorheriger Code bei 96 Bytes:
Aus dem Paket
maps
wird ein Datensatz mit US-Städten geladen. Spaltecapital
enthält ein,2
wenn es eine Landeshauptstadt ist. Die Namen der Städte werdenname
in der Spalte "City StateAbbreviation" (dhAlbany NY
) angegeben, daher muss vor der Ausgabe ein explizites Trennzeichen hinzugefügt werden.Um dies zu tun, benutze ich irgendwann den regulären Ausdruck,Um die Verwendung\1
was bedeutet, dass ich den Bonus, den ich nehme, nicht haben kann.\1
im regulären Ausdruck zu vermeiden, habe ich eine leere Gruppe hinzugefügt, damit ich sie verwenden kann\2
.Verwendung:
quelle
\n
für 1 Byte>0
anstelle von `` == 2` eingeben und ich glaube auch nicht, dass Sie es brauchendata(us.cities)
, auf meinem Computer wird es geladen, wenn Sie das Paket laden. Versuch es!Mathematica,
168153149 Bytes - 20% = 119,2 BytesObligatorisch, aber ich wusste nicht , dass jedes Zeichen durch ersetzt werden kann
\.xx
oder\:xxxx
mit dem entsprechenden Hex - Code.Bearbeiten: 4 weitere Zeichen werden durch
Thread
eine reine Funktion ersetzt.Ausgabe:
quelle
EntityValue[EntityList[EntityClass["AdministrativeDivision", "AllUSStatesPlusDC"]], {"CapitalName","StateAbbreviation"}]
AllUSStatesPlusDC
Ich fürchte!CJam, 312 Bytes
Der Code ist 390 Bytes lang und qualifiziert sich für den 20% Bonus .
Beachten Sie, dass der Code mit nicht druckbaren Zeichen durchsetzt ist. Probieren Sie es online im CJam-Interpreter aus .
Idee
Wir müssen die Ausgabe irgendwie codieren, ohne irgendwo im Code Großbuchstaben oder die Zahlen 1 und 65 bis 90 zu verwenden.
Wir beginnen mit dem Umschreiben der gewünschten Ausgabe als
Indem
`
wir das Zeichen von allen Zeichen dieser Zeichenfolge subtrahieren , erhalten wir ein Array, das Ganzzahlen von 0 bis 26 enthält. Wir können dieses Array von Basis 27 zu Basis 229 konvertieren und so ein Array von Ganzzahlen von 0 bis 228 erhalten.Wenn wir zu jeder Zahl der Basis 229 91 addieren und das Ergebnismodul 256 nehmen, ordnen wir den Bereich [0,…, 164] zu [91,… 255] und den Bereich [165,…, 228] zu [0, 63] . Dadurch bleiben die Zeichen mit Codepunkten von 64 (
@
) bis 90 (Z
) unbenutzt.Die zu codierende Zeichenfolge stimmt nicht mit der in der Frage angegebenen Beispielausgabe überein. Ich habe mehrere Permutationen ausprobiert, bis ich eine gefunden habe, die keine Nullbytes, Zeilenvorschübe, Zeilenumbrüche oder Leerzeichen (problematisch mit dem Online-Interpreter) und keine doppelten Anführungszeichen (Escape-Zeichen erforderlich) enthält.
Code
quelle
Perl, 605 Bytes - 20% = 484
Meine erste Version war ungültig, weil sie mit \ U in Großbuchstaben konvertiert wurde. Dieser verwendet \ u für jeden Buchstaben der Staatsabkürzung. Ich musste auch eine Dummy-Erfassungsgruppe hinzufügen, um die Verwendung von $ 1 zu vermeiden.
Edit: Ich konnte 8 Bytes mit uc () mit dem e Flag abschneiden. (Danke, Dom Hastings.)
quelle
Javascript,
727687 Bytes - 20% = 549,6Javascript ist auch besonders schwierig, wenn man die langen Funktionsnamen und das Kamelgehäuse berücksichtigt. Das Aufteilen der Zustände sparte eine Menge Trennzeichen und erleichterte die Arbeit mit allen.
@ mbomb007 nichts in der Post aus einem Grund großgeschrieben;)
quelle
C,
703700 Bytes - 20% = 560 BytesIch habe die Schleife ein wenig geändert, damit sie mit Nicht-C99-Compilern kompiliert werden kann. Online Version
quelle
Javascript (es6) 516 (645-20%)
532 (664-20%)Testen Sie das folgende Snippet in einem aktuellen Browser: Es wird nur die Funktion es6 verwendet
template strings
quelle
Funktion , 5045 - 20% = 4036 Bytes
Dieser Code enthält nur eine Zahl und liegt nicht im Bereich von 65 bis 90. Es handelt sich auch nicht um die Zahl 1. Tatsächlich handelt es sich bei dieser Zahl um 4187 Dezimalstellen, die sauber in die Primzahlen 79 × 53 zerlegt werden.
Wie immer erhalten Sie ein besseres Rendering, indem Sie es
$('pre').css('line-height',1);
in Ihrer Browserkonsole ausführen .Edit: Kiri-Ban! Diese Antwort ist codegolf.SE Beitrag # 61000!
quelle
x86-Maschinencode, 764 Byte
612 wenn Bonus vergeben
Völlig in sich geschlossenes Programm. Verlässt sich nur darauf, dass (a) Bios int 0x10 verfügbar ist, um jedes Zeichen zu drucken, und (b) DS, ES, SP und SS initialisiert werden, bevor das Programm aufgerufen wird, DOS tut dies. (Und auch DOS-Box) Andernfalls stützt sich der Code auf nichts. Das absolute Minimum ohne jegliche Abhängigkeiten, mit Ausnahme des BIOS-Roms, wären etwa 2 Diskettensektoren mit jeweils 512 Bytes.
Es scheint keine der Standard-Schlupflöcher auszunutzen, obwohl einige Bytes des Programms 01 sind, sind dies keine Zahlen in der Quelle. Da ich jedoch den Binärcode als meine Lösung übergeben möchte, stelle ich mir vor, dass die 01-Bytes nicht zulässig sind.
Hex-Editor-Ansicht der Binärdatei:
'Ungolfed' Version (Quelle - 3126 Bytes)
Ausgabe:
quelle
Python 3,
1416793785779771755734 Zeichen - 20% = 587,2Keine algorithmische Klugheit hier, ich habe nur die erforderliche Ausgabe genommen, sortiert (dies lässt Zlib einen besseren Job machen), komprimiert (mit
zopfli --deflate
), das Ergebnis mit Base64 codiert und dann die Codierung geändert, um Großbuchstaben zu vermeiden.Nicht golfen:
Es ist wahrscheinlich mehr herauszuholen, insbesondere wenn Sie das Argument
translate()
kompakter ausdrücken können. Beachten Sie, dass die Interpunktion dort sorgfältig ausgewählt wird, um die eigene Interpunktion von base64 (+ / =) und alles zu vermeiden, was in einem String-Literal ein Backwhacking erfordern würde.Unterhaltsame Tatsache: Die Module bz2 und lzma schneiden bei dieser Eingabe schlechter ab als zlib:
quelle
import zlib,base6
am Anfang entfernen undDATA.translate(tr).decode('base64').decode('zlib').decode('utf-8')
warum brauchen Sie dasdecode('utf-8')
überhaupt?.translate
funktioniert das anders und{ x:y for x,y in ... }
ist nicht verfügbar. Ohne die.decode('u8')
in Python 3 ist die Ausgabe die repr () der Byte-Zeichenfolge, die weit genug von der angeforderten Ausgabe entfernt ist, dass ich nicht dachte, es sollte zählen.Pyth, (631 & ndash; 20%) = 504,8
Ausgabe:
Der zweite Parameter für
r
wechselt zwischen 5 (capwords()
) und 1 (upper()
)quelle
k
PowerShell,
1038976925904813768758749745 -20% = 596Ungolfed:
quelle
Minkolang 0,7 ,
660705708 * 0,8 = 566,4Vielen Dank an Sp3000 , der mich daran erinnert hat, dass ich
p
Großbuchstaben in den Code einfügen kann!Erläuterung
Das Bit der ersten Zeile vor dem
"
setzt nichts anderes als einenR
(Stapel drehen) anstelle vonr
und ersetzt dann alle Instanzen vono
mitO
in der zweiten Zeile.Danach ist es die Liste der Großbuchstaben ohne Zeilenumbruch und alle Kleinbuchstaben, die Minkolang in umgekehrter Reihenfolge auf den Stapel schiebt. Am
01w
Ende befindet sich ein "Wurmloch" am Anfang der zweiten Zeile. Alle Großbuchstaben werden durch Subtrahieren von 32 vom Kleinbuchstaben ausgegeben, weshalb48*-
viermal angezeigt wird.48*-O
gibt ausB
und(
beginnt dann eine while-Schleife. Die Oberseite des Stapels wird gegen geprüft,
. Wenn es nicht ist,
, dannO)
gibt das Zeichen und springt zum Anfang der Schleife zurück. Wenn der oberste Stapel ist,
, dann springt der ProgrammzählerO)
wegen über2&
eines bedingten Trampolins über, das zwei Felder überspringt.Jetzt springe ich, wenn ich auf einen treffe,
,
weil ich weiß, dass die nächsten sechs Zeichen sind, AB\nC
, was der Rest der Schleife tut. Es wird geprüft, ob der Stapel in der Mitte leer ist (nach demAB
gedruckt wird, bevor\nC
):d?
. Wenn dies der Fall ist, wird das bedingte Trampolin nicht genommen, und das Programm wird beendet, wenn Sie die Taste drücken.
. Andernfalls wird es übersprungen und die Schleife fortgesetzt.quelle
PHP 520 Bytes (650 Bytes - 20%)
Ergebnis
Ungolfed:
Ich habe verschiedene Möglichkeiten ausprobiert, um die Zeichenfolge zu komprimieren, aber am Ende waren alle Lösungen länger als dieser einfache Ansatz.
quelle
Python 2, 658 Bytes * 0,8 = 526,4
Gibt das Ergebnis als Python-Liste mit Python-Tupeln aus. Sie sind auch in Anführungszeichen eingeschlossen. Dies ist definitiv für den Bonus qualifiziert, da die einzige Zahl im Code 2 ist.
Ausgabe:
Ich hoffe, dass dies innerhalb der akzeptablen Grenzen der Formatierung liegt.
quelle
Groovy,
724681 - 20% = 545 BytesInspiriert von Edc65's cleverem Zusammenspiel von Staat und Stadt!
quelle
PowerShell, 627 -20% = 502 Byte
Welches ist dieses Muster:
Großschreibung des einzelnen Buchstabens nach einer Wortgrenze oder der Doppelbuchstaben vor einem Doppelpunkt. Der
"$args,"[3]
Befehl wählt entweder das Komma bei einem Doppelbuchstaben-Statuscode aus oder wählt über und gibt null zurück und fügt die Statustrennzeichen hinzu, wobei ~ 50 in Trennzeichen aus der Codezeile gespeichert werden.quelle
Rubin (925 × 80%) = 740 Bytes
Oof, das war schwer. Dies ist eine Zlib-komprimierte Zeichenfolge in hexadezimal codierten Bytes, die dann dekomprimiert und vom Scan-Regex in ein Array von Zeichenfolgen umgewandelt wird. Anschließend wird jede Zeichenfolge in eine Dezimalzahl und anschließend in ein Zeichen konvertiert Zeichenfolge. Ich werde später möglicherweise eine bessere Version veröffentlichen, die eine geänderte Base64-Codierung verwendet.
Obwohl die codierte Zeichenfolge einige Instanzen von 65-90 oder Einsen aufweisen kann, zähle ich diese nicht, da die Zeichenfolge eine große hexadezimale Zahl ist. Somit ist dies für den 20% Bonus qualifiziert.
quelle
Python 2, 639 Bytes - 20% = 511,2
Die unten stehende Version (675 Bytes) enthält Informationen
''.join([w.capitalize()for w in t[n][2:].split()])
, die ich gerade entdeckt habe.title()
und durch eine anonyme Funktion ersetzen kann. In beiden Antworten sind die staatlichen Abkürzungen an die Hauptstädte angehängt.quelle
x86-Maschinencode - 585 Bytes, 468 mit Bonus
Enttäuscht darüber, wie groß mein letzter Eintrag war, beschloss ich, diesmal etwas ganz anderes zu probieren. Malen auf
insertusernamehere
Da ich mich die Idee stützte, die Namen der Städte von den Namen der Bundesstaaten zu trennen, um unnötige Logik und unnötige Terminatoren zu vermeiden, dachte ich immer noch, ich müsste das Programm kleiner machen können, als es die rohen Zeichenfolgen sind. UPX würde mir nicht helfen zu schummeln und mich beschweren, dass das Programm bereits zu klein war. Beim Komprimieren habe ich versucht, die 662-Byte-Textausgabe mit WinRar zu komprimieren, habe aber immer noch nur 543 Byte - und das ohne irgendetwas, mit dem ich es dekomprimieren könnte. Es schien immer noch viel zu groß zu sein, da es nur das Ergebnis ohne Code war.Dann wurde mir klar - ich verwende nur 26 Zeichen für die Buchstaben und 2 für die Leerzeichen und die Kommas. Hmm, das passt in 32, das braucht nur 5 Bits. Also habe ich ein schnelles Javascript-Programm geschrieben, um die Zeichenfolgen zu codieren. Dabei wurden z 0-25 und Leerzeichen und Komma 26 und 27 zugewiesen. Um die Dinge einfach zu halten, wird jedes Zeichen in 5 Bits codiert, unabhängig davon, ob es so viele benötigt oder nicht. Von da an habe ich einfach alle Teile zusammengeklebt und sie wieder in byte-große Stücke zerlegt. Dies erlaubte mir, die 563 Bytes von Strings in 353 Bytes zu packen - eine Einsparung von 37,5% oder 210 Bytes. Ich habe es nicht ganz geschafft, das Programm und die Daten auf den gleichen Platz zu bringen wie die entpackten Daten, aber ich bin nah genug dran, um glücklich zu sein.
Hxd-Ansicht der Binärdatei:
Quellcode:
quelle