var QUESTION_ID=86647,OVERRIDE_USER=48934;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+)(?=[^\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>
Antworten:
V ,
1514 BytesProbieren Sie es online!
Eine ziemlich einfache Lösung. Die perfekte Herausforderung für V!
Erläuterung:
Abhängig von der Funktionsweise der Rekursion wird dies zweckmäßigerweise einmal für jedes einzelne Caret ausgeführt.
quelle
Cheddar,
777267 BytesKein Regex!
Ich liebe diese Antwort, da es eine wunderbare Demonstration von Cheddars Fähigkeiten ist. Hauptsächlich dank der von Conor hinzugefügten Ersetzungsfunktion. Der PR für die Entwicklung wurde nie erstellt, so dass die Ersetzungsfunktion nur für diesen Zweig vorhanden ist (Update: Ich habe den PR erstellt und jetzt für den neuesten Beta-Zweig, mit dem Sie ihn installieren können
npm install -g cheddar-lang
).Ich habe einen Weg gefunden, um Golf zu spielen, aber leider führt ein Versehen dazu, dass die Artikellängen nicht gleich sind:
Ich hätte mit regulären Ausdrücken eine Menge Bytes sparen können, und tatsächlich habe ich gerade reguläre Ausdrücke für Cheddar erstellt ... das einzige Problem ist, dass es keine regulären Ausdrücke gibt: /
Erläuterung
Zum besseren Verständnis. Dafür
.lines
kehrt zurück1^2
das
.turn
mit drehen das:in:
Ein weiteres Beispiel, das es klarer machen wird:
wird:
Warum formatieren?
Was der
%-2s
macht ist ziemlich einfach.%
Gibt an, dass ein "Format" gestartet wird oder dass an dieser Stelle eine Variable in diese Zeichenfolge eingefügt wird.-
bedeutet, die Zeichenfolge mit der rechten Maustaste aufzufüllen, und2
ist die maximale Länge. Standardmäßig wird mit Leerzeichen aufgefüllt.s
Gibt nur an, dass es sich um eine Zeichenfolge handelt. Um zu sehen, was es tut:quelle
turn
Methode für Streicher?Perl, 21 + 1 = 22 Bytes
Laufen Sie mit der
-p
Flagge. Ersetzen Sie♥
durch ein unformatiertesESC
Byte (0x1b
) und↓
durch einen vertikalen Tabulator (0x0b
).Die vertikale Registerkarte ist die Idee von Martin Ender. Es hat zwei Bytes gespart! Vielen Dank.
quelle
JavaScript (ES6),
56-55ByteRegexps zur Rettung natürlich. Der erste ersetzt alle Zeichen durch Leerzeichen, es sei denn, er findet ein Caret. In diesem Fall löscht er das Caret und behält das Zeichen danach bei. (Diese Zeichen sind garantiert vorhanden.) Das zweite ist das offensichtliche, bei dem jedes Caret und das folgende Zeichen durch ein Leerzeichen ersetzt werden.
Bearbeiten: 1 Byte gespart dank @Lynn, der einen Weg gefunden hat, die Ersetzungszeichenfolge für die zweite Ersetzung wiederzuverwenden, sodass die Ersetzung über ein Array von regulären Ausdrücken abgebildet werden kann.
quelle
s=>[/.(\^(.))?/g,/\^.(())/g].map(r=>s.replace(r,' $2'))
ist ein Byte kürzer.Python 3,
15710198858374 BytesDiese Lösung verfolgt, ob das vorherige Zeichen vorhanden war
^
, und entscheidet dann basierend darauf, ob die Ausgabe in die erste oder zweite Zeile erfolgt.Ausgänge als Array von
['firstline', 'secondline']
.Gespeichert
1315 Bytes dank @LeakyNun!7 Bytes gespart dank @Joffan!
quelle
a=['','']
und zu verketten' '
undc
direkt ina[l]
unda[~l]
?Python 2, 73 Bytes
Kein Regex. Erinnert sich, ob das vorherige Zeichen war
^
, und setzt das aktuelle Zeichen darauf basierend in die oberste oder unterste Zeile und ein Leerzeichen in das andere.quelle
Pyth, 17 Bytes
Gibt ein Array mit 2 Zeichenfolgen zurück. (Bereite dich
j
darauf vor, sie mit einem Zeilenumbruch zu verbinden.)Probieren Sie es online aus .
quelle
MATL , 18 Bytes
Probieren Sie es online!
quelle
Ruby, 47 + 1 (
-n
Flag) = 48 BytesFühren Sie es so aus:
ruby -ne 'puts$_.gsub(/\^(.)|./){$1||" "},gsub(/\^./," ")'
quelle
$_=$_.gsub(/\^(.)|./){$1||" "}+gsub(/\^./," ")
und-p
anstelle von speichern-n
.+$/
bedeutet, dass keine Bytes gespart werden.puts
wirft für Sie automatisch den Zeilenumbruch ein, wenn der,
zwischen den Argumenten steht.ruby -p ... <<< 'input'
aber ich stimme zu, wenn die neue Zeile fehlt, ist es nicht gut! Eigentlich hätte ich vielleicht früher in meinen Tests einen Zeilenvorschub angehängt bekommen ... Es war aber in Arbeit, also kann ich nicht nachsehen!gets
die nachgestellte Newline die meiste Zeit mit einbezogen wird. Wenn Sie jedoch eine Datei einfügen, die die nachgestellte Newline nicht enthält, wird sie nicht angezeigt und die Ausgabe ist falsch . Testen Sie Ihren Code mit,ruby -p ... inputfile
da Ruby den Codegets
in die Datei umleitet , wenn es sich um ein Befehlszeilenargument handelt.Python (2),
766867 Bytes-5 Bytes dank @LeakyNun
-3 Bytes dank @ KevinLau-notKenny
-1 Byte dank @ValueInk
-0 Bytes dank @DrGreenEggsandIronMan
Diese anonyme Lambda-Funktion verwendet die Eingabezeichenfolge als einziges Argument und gibt die beiden durch eine neue Zeile getrennten Ausgabezeilen zurück. Um es zu nennen, geben Sie ihm einen Namen, indem Sie "f =" davor schreiben.
Ziemlich einfacher regulärer Ausdruck: Der erste Teil ersetzt das Folgende durch ein Leerzeichen: ein beliebiges Zeichen und ein
Karotten-Caret oder nur ein Char, aber nur, wenn kein Caret vor ihnen steht. Der zweite Teil ersetzt ein beliebiges Caret in der Zeichenfolge und das Zeichen danach durch ein Leerzeichen.quelle
from re import*
lambda i,s=re.sub:[s("(?<!\^).\^?"," ",i),s("\^."," ",i)]
für -1 ByteKonvex, 24 Bytes
Probieren Sie es online!
quelle
Netzhaut, 16 Bytes
Ein Port meiner Perl-Antwort, auf den Martin Ender hingewiesen hat. Ersetzen Sie
♥
durch ein unformatiertesESC
Byte (0x1b
) und↓
durch einen vertikalen Tabulator (0x0b
).quelle
shell + TeX + catdvi,
5143 bytesVerwendet
tex
, um einige schöne Mathematik zu setzen, und verwendetcatdvi
, um eine Textdarstellung zu machen. Der Befehl head entfernt ansonsten vorhandenen Junk (Seitennummerierung, Zeilenumbruch).Bearbeiten: Warum das lange, richtige, Ding machen und umleiten,
/dev/null
wenn man Nebeneffekte ignorieren und in eine einzelne Briefdatei schreiben kann?Beispiel
Eingang:
abc^d+ef^g + hijk^l - M^NO^P (Ag^+)
TeX-Ausgabe (auf Gleichung beschnitten): Endausgabe:
Annahmen: Beginnen Sie in einem leeren Verzeichnis (oder einem Verzeichnis, dessen Name nicht mit "i" endet). Die Eingabe ist ein einzelnes Argument für das Shell-Skript. Die Eingabe ist keine leere Zeichenfolge.
Jemand sagt mir, ob dies vor allem Regelmissbrauch ist
catdvi
.quelle
Haskell,
745655 BytesGibt ein Stringpaar zurück. Anwendungsbeispiel:
unzip.g $ "abc^d+e:qf^g + hijk^l - M^NO^P: (Ag^+)"
->(" d g l N P + ","abc +e:qf + hijk - M O : (Ag )")
g
erstellt eine Liste von Paaren, wobei das erste Element das Zeichen in der oberen Zeile und das zweite Element das Zeichen in der unteren Zeile ist.unzip
verwandelt es in ein Paar Listen.Edit: @xnor vorgeschlagen,
unzip
die 18 Bytes speichert. @Laikoni hat ein weiteres Byte zum Speichern gefunden. Vielen Dank!quelle
j=unzip.g
?g[]=[]
mitg x=x
einem Byte zu speichern.Perl, 35 Bytes
34 Byte Code + 1 für
-p
Verwendung
Hinweis: Dies ist genau das Gleiche wie die Antwort von Value Ink , die ich später ausspioniert habe. Wird bei Bedarf entfernt, da dies die Ruby-Lösung nicht wirklich erweitert.
quelle
Java 8 Lambda,
132128112 ZeichenDie ungolfed version sieht so aus:
Wird als Array ausgegeben, indem einfach geprüft wird, ob ein Caret vorhanden ist. Wenn dies der Fall ist, wird das nächste Zeichen in die obere Zeile eingefügt, andernfalls wird ein Leerzeichen angezeigt.
Aktualisierung
Ersetzte Zeichen mit ihren ASCII-Werten, um 4 Zeichen zu speichern.
Vielen Dank an @LeakyLun für den Hinweis, stattdessen ein char-Array als Eingabe zu verwenden.
Vielen Dank auch an @KevinCruijssen für die Umstellung
int
aufchar
, um weitere Zeichen zu speichern.quelle
char[]
und zu verwenden,for(char c:i)
um festzustellen, ob die Byteanzahl verringert werden kann.i->{String[]r={"",""};for(char j=0,c;j<i.length;j++){c=i[j];r[0]+=c==94?i[++j]:32;r[1]+=c==94?32:c;}return r;}
with"abc^d+ef^g + hijk^l - M^NO^P (Ag^+)".toCharArray()
als Eingabe verwenden. ( Ideone dieser Änderungen. )Kokosnuss ,
122 11496 BytesEdit:
826 Bytes mit Hilfe von Leaky Nun.Wie ich heute erfuhr, hat Python einen ternären bedingten Operator, oder zwei davon:
<true_expr> if <condition> else <false_expr>
und der<condition> and <true_expr> or <false_expr>
letzte kommt mit einem Zeichen weniger.Eine Python- konforme Version kann ideonisiert werden .
Erster Versuch:
Mit
f("abc^d+ef^g + hijk^l - M^NO^P (Ag^+)")
Abzügen telefonierenHat jemand schon versucht, in Kokosnuss zu golfen? Es bereichert Python mit mehr funktionalen Programmierkonzepten wie dem oben verwendeten Pattern Matching und der Funktionsverkettung (mit
..
). Da dies mein erster Versuch bei Kokosnuss ist, würden alle mögliche Spitzen geschätzt.Dies könnte definitiv verkürzt werden, da jeder gültige Python-Code auch eine gültige Kokosnuss ist und kürzere Python-Antworten veröffentlicht wurden. Ich habe jedoch versucht, eine rein funktionale Lösung zu finden.
quelle
x and y or z
) verwenden, um die zu ersetzencase
.s[0]=="^"
anstelle vonmatch['^',c]+r in l
match['^',c]+r
mits[0]=="^"
, dannc
undr
sind nicht mehr gebunden. Wie würde das helfen?s[1]
, um zu ersetzenc
unds[2:]
zu ersetzenr
.Dyalog APL, 34 Bytes
Es wird ein Vektor mit zwei Elementen mit den beiden Linien zurückgegeben
Probelauf (der vordere Pfeil dient zum Formatieren des zweielektrischen Vektors für den menschlichen Verzehr):
quelle
PowerShell v2 +,
8883 ByteEin bisschen länger als die anderen, zeigt aber ein bisschen PowerShell-Magie und eine etwas andere Logik.
Im Wesentlichen dasselbe Konzept wie die Antwort von Python - wir durchlaufen die Eingabe zeichenweise, merken uns, ob es sich bei dem vorherigen um ein Caret (
$c
) handelte, und setzen das aktuelle Zeichen an die entsprechende Stelle. Die Logik und Methode zum Bestimmen, wo ausgegeben werden soll, wird jedoch etwas anders gehandhabt, und zwar ohne Tupel oder separate Variablen. Wir testen, ob das vorherige Zeichen ein Caret war, und geben das Zeichen in die Pipeline aus und verketten ein Leerzeichen darauf$b
. Andernfalls prüfen wir, ob das aktuelle Zeichen ein Caret ist.elseif($_-94)
Solange dies nicht der Fall ist , verketten wir das aktuelle Zeichen$b
und geben ein Leerzeichen in der Pipeline aus. Zuletzt stellen wir ein, ob der aktuelle Charakter ein Caret für die nächste Runde ist.Wir sammeln diese Zeichen aus der Pipeline in Parens, kapseln sie in eine,
-join
die sie in eine Zeichenfolge verwandelt, und belassen sie zusammen mit$b
in der Pipeline. Die Ausgabe am Ende erfolgt implizit mit einem Zeilenumbruch dazwischen.Zum Vergleich ist hier ein direkter Port von @ xnors Python-Antwort mit 85 Bytes :
quelle
Gema,
4241 ZeichenGema verarbeitet Eingaben als Stream, daher müssen Sie sie in einem Durchgang lösen: Die erste Zeile wird sofort als verarbeitet geschrieben, die zweite Zeile wird in der Variablen $ s gesammelt und am Ende ausgegeben.
Probelauf:
quelle
Zimtgummi, 21 Bytes
Nicht konkurrierend. Probieren Sie es online aus.
Erläuterung
Ich bin kein großer Regex-Golfer, also gibt es wahrscheinlich einen besseren Weg, dies zu tun.
Die Zeichenfolge wird dekomprimiert, um:
(Beachten Sie das nachfolgende Leerzeichen)
Die erste
S
Stufe empfängt Eingaben und verwendet einen negativen Lookbehind, um alle Zeichen außer Carets ohne vorangestelltes Caret durch ein Leerzeichen zu ersetzen. Anschließend werden alle Carets gelöscht. Anschließend wird die geänderte Eingabezeichenfolge sofort mit einem Zeilenumbruch ausgegeben und dieseS
Stufe entfernt. Da STDIN jetzt erschöpft ist und die vorherige Stufe keine EingabeS
geliefert hat, empfängt die nächste Stufe die letzte Zeile von STDIN erneut und ersetzt dann alle Carets, gefolgt von einem beliebigen Zeichen, mit einem Leerzeichen und gibt dieses aus.Im Perl-Pseudocode:
quelle
J ,
2827 BytesProbieren Sie es online!
Es muss einen besseren Weg geben ...
quelle