var QUESTION_ID=69385,OVERRIDE_USER=20260;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/69385/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>
**Leaderboard:**
"oozing snotter"
imo ~ seinAntworten:
Vim, 18 Tastenanschläge
Der entscheidende Trick besteht darin, dass beim Einfügen von Objekten im visuellen Modus der alte Inhalt der visuellen Auswahl tatsächlich in den Einfügepuffer verschoben wird.
quelle
v
, einbezogen zu sein und zu versuchen, aus dem Vokal zurück zu wählen.Brainfuck,
238207 BytesErfordert
,
die Rückgabe von 0 bei EOF, 8-Bit-Zeilenumbruch und die Möglichkeit, von Zelle 0 nach links zu wechseln. Nach meiner Erfahrung sind dies die häufigsten Standardeinstellungen.Ich bin ziemlich glücklich mit diesem. Mein erster Versuch war 314 Bytes und das ist sicherlich eine Verbesserung. :)
Es speichert jedes Byte von der Eingabe in zwei Zellen. eines mit dem tatsächlichen Wert des Bytes und das andere mit der Ausgabe des folgenden Codes, wenn angegeben (der Wert des Bytes - 97):
Wenn das Zeichen ein Konsonant ist, ergibt sich daraus ein Wert ungleich Null. Wenn es sich um einen Vokal handelt, wird er zu 0. Von dort aus müssen Sie nur herausfinden, wo das zweite Wort beginnt, und alles in der richtigen Reihenfolge ausdrucken.
Die 238-Byte-Version dieses Programms hat das Leerzeichen gefunden, nachdem alle Eingaben gesammelt wurden. Es bereitete mir Kopfschmerzen, weil dabei eine Zelle mit 0 erstellt wurde, genau dort, wo ich versuchte, eine Schleife darüber zu erstellen. Die Art und Weise, wie ich sie gelöst habe, hatte zur Folge, dass 30 von jedem Zeichen im ersten Wort und 32 von jedem Zeichen danach abgezogen wurden. Ein ziemlich großer Teil des Codes war dem Umgang mit diesem Unsinn gewidmet.
Jetzt wird von jedem Zeichen in der Eingabeschleife 32 subtrahiert , was kürzer ist und einen ähnlichen Nebeneffekt hat, mit dem leichter umzugehen ist. Als Bonus konnte ich auf diese Weise mein eigenes Leerzeichen auf kürzere Weise erstellen: Anstatt 139 von 171 zu subtrahieren (171 erhalten Sie, wenn Sie ein Leerzeichen durch den obigen Vokaldetektor laufen lassen), ergibt die Schleife 32 Jedes Zeichen tut alles, um der 171-Zelle 32 hinzuzufügen. Dies kostet dort vier Bytes, bedeutet aber, dass ich 171 davon später subtrahieren kann (anstatt 139 zu subtrahieren), um insgesamt 3 Bytes zu sparen.
Mit Kommentaren:
quelle
y
als Vokal, aber die Frage sagt, dass dies nicht der Fall ist. (nye cat
->ce nyat
)y
als Konsonant behandelt ... Ich werde untersuchen, warum das so ist.vim, 23
Ich frage mich, ob vim bei dieser Herausforderung konkurrenzfähig ist. Wahrscheinlich nicht mit den Golfsprachen, aber vielleicht mit Ruby / Python / Perl / etc.
quelle
Python,
686360 BytesProbieren Sie es online auf Ideone .
Wie es funktioniert
Die Musterfolge wird dreimal wiederholt (
*3
), was zu dem Muster führtAlle Instanzen stimmen entweder mit einer nicht leeren Folge von Nicht-Vokalen überein oder mit einer nicht leeren Folge, gefolgt von einem einzelnen Leerzeichen.
Die erste Instanz entspricht den Konsonanten am Anfang des ersten Wortes. Da
+
es gierig ist, wird es versuchen, so viele wie möglich zu finden, dh alle bis zum ersten Vokal.Aus diesem Grund beginnt die zweite Instanz mit einem Vokal, sodass sie mit dem Rest des ersten Wortes bis einschließlich des Leerzeichens übereinstimmt, das die Wörter trennt.
Ähnlich wie bei der ersten Instanz stimmt die dritte Instanz mit allen Konsonanten am Anfang des zweiten Wortes überein, was zu einer erfolgreichen Übereinstimmung für das gesamte Muster führt.
Die Rohzeichenfolge
\3\2\1
(r
verhindert, dass Python\3
usw. durch Steuerzeichen ersetzt) kehrt die Reihenfolge der Übereinstimmungen der in Klammern gesetzten Muster um, dh, sie ersetzt sie durch die Konsonanten am Anfang des zweiten Wortes und dann durch alle Zeichen aus dem ersten Vokal des erstes Wort bis zum Leerzeichen und schließlich die Konsonanten am Anfang des ersten Wortes.Das letzte Argument für
sub
(1
) bewirkt, dass es unmittelbar nach dem ersten erfolgreichen Ersetzen zurückgegeben wird, um unsinnige Ersetzungen im Rest des zweiten Wortes zu vermeiden. Dies ist erforderlich, da das Muster mit einer beliebigen Zeichenfolge von drei oder mehr aufeinanderfolgenden Konsonanten übereinstimmen kann.quelle
JavaScript (ES6), 54 Byte
Erläuterung
Prüfung
quelle
match
wenn ich nach Hause komme+!i
Trick ist eine schöne Lösung. +1Python 3,
10810199 Bytes(Keine Verwendung von Regex)
Diese Funktion erwartet Eingaben über 2 Argumente, z
f('blushing','crow')
. Gibt die neuen Wörter in einem Tupel zurück.Da es viele reguläre Ausdrücke gibt, wollte ich etwas schreiben, das nicht die reguläre Bibliothek von Python verwendet.
Wie es funktioniert
Der einzig komplizierte Teil ist der Lambda-Ausdruck
S
(die Abkürzung bedeutet " S plit before the first vokal"). Es "iteriert" rekursiv über das gegebene Wort und bewegt jeweils ein Zeichen vom Anfangs
(der mit dem ganzen Wort beginnt) bis zum Endep
(der leer beginnt). Beim ersten angetroffenen Vokal wird zurückgegeben(p,s)
, dh (Präfix, Suffix). Beachten Sie, dass dies im Vergleich zu den Parametern die falsche Reihenfolge ist!Ich dachte, es wäre sinnvoller, wenn die zurückgegebene Bestellung ein Präfix und dann ein Suffix ist (da in der Regel ein Präfix vor einem Suffix steht). Diese Reihenfolge kann die Lesbarkeit des
a,b=S(x)
Codes etwas verbessern.Aber ich hatte keine Wahl , um in die Parameter des Lambda, so dass ich nicht definieren konnte
p
vors
. Der erste Parameters
, hatte das ganze Wort zu nehmen , weilp
ein Standardwert hatte und Standardparameter zuletzt gehen. Dabei musste ich die Funktion nichtS
zweimal mit einer leeren Zeichenfolge aufrufen , und einige Bytes konnten gespeichert werden. Vielleicht war es jedoch einfach eine schlechte Entscheidung, das Präfix / Suffix in der entgegengesetzten Reihenfolge zurückzugeben, wie es im Lambda-Ausdruck verwendet wurde.Für die Wahl des Lambda-Ausdrucks gegenüber der Funktion sind mehr Bytes erforderlich
def S(s,p=""):return
alsS=lambda s,p="":
. Ich kann diese Wahl treffen, weil Python eine Kurzschlussauswertung und den ternären Operator hat. Ich kann jedoch nicht ausreichend erklären, wie ich Kurzschlüsse verwendet habe. Es ist schwer zu überlegen.Dies ist meine erste Antwort. Ich hoffe, dass ich das richtig gemacht habe und dass es einen Wert hat, eine Lösung zu veröffentlichen, die nicht gewinnen kann.
Änderungen: Dankeschön-Kommentatoren: Die Anzahl der Bytes wurde ein wenig reduziert, zweimal, und unnötige Informationen wurden entfernt. Es wurde versucht, das Schreiben zu verbessern. Hoffentlich keine Fehler gemacht.
quelle
C # 6, 115 Bytes
Es ist nur ein Schmerz, der Namespace für Regex ist so lang.
quelle
System.Text.RegularExpressions.Regex.Replace
44 Zeichen! +1, weil das eine Art Rekord sein muss.CJam,
272422 BytesI / O ist ein Wort pro Zeile. Probieren Sie es online!
Wie es funktioniert
quelle
Perl, 33 Bytes
Der obige Code ist 32 Byte lang und erfordert den
-p
Schalter ( +1 Byte ).Die Substitution ist der Retina-Antwort von @ DigitalTrauma sehr ähnlich, nutzt jedoch die rekursiven Submuster von PCRE .
Probieren Sie es online auf Ideone .
quelle
Retina , 34
Probieren Sie es online aus.
quelle
JavaScript ES6,
935852 Bytes6 Bytes gespart dank ETHProductions!
Probier es aus! (Nur ES6)
Code-Snippet anzeigen
quelle
$4
;)C
255201199 BytesIch sehe hier nicht viele C-Antworten, also viel Spaß. Auch das erste Mal Golfen, Anregungen und Kritik sind willkommen.
Wenn main () nicht benötigt wird, können wir 24 Bytes einsparen und 179 Bytes erreichen
Ungolfed:
EDIT: Dank Feersums Vorschlag habe ich 54 Bytes gespart. = D
quelle
strpbrk
.Python 2,
364352269251 BytesEDIT: Vielen Dank an @Cyoce für die Hilfe beim Golfen mit 83 Bytes!
Bitte hilf mir Golf zu spielen! Jedenfalls bin ich der erste Python-Beantworter. Und ich hoffe, ich kann Java schlagen, wenn es jemals eine Java-Antwort gibt!
Probieren Sie es hier aus
quelle
Japt,
2625 BytesGlücklicherweise habe ich vor ein paar Tagen Japts Regex-Funktionen um eine Vokal-Klasse erweitert. Leider habe ich keine Nicht-Vokal-Klasse oder einen Weg um die doppelten Backslashes in Regex-Strings hinzugefügt.
Das
¿
sollte das Rohzeichen U + 0093 sein. Die Eingabe ist eine mehrzeilige Zeichenfolge, ein Wort / eine Zeile. Probieren Sie es online!BEARBEITEN: Ich habe jetzt die Nicht-Vokal-Klasse
\V
und einen Weg um\\
(mit%
) hinzugefügt , so dass dieser Code jetzt für 21 Bytes funktioniert : ( Online ausprobieren )Wie es funktioniert
Alte Version (26 Bytes):
Probieren Sie es online!
Wie es funktioniert
quelle
Python 3, 100 (oder 99) Bytes
Spielte mit ein paar Versionen, scheint es aber nicht zu verstehen. Kann 99 Bytes reduzieren, indem
def f(g)
stattdessen eine Liste von Zeichenfolgen anstelle von zwei separaten Zeichenfolgen verwendet wird, aber ich bevorzuge die beiden Argumente.Die Alternative ist gleich lang:
Ich habe versucht zu ersetzen, wie es @ TanMath verwendet, aber ich konnte es nicht kürzer bekommen. Außerdem kann TanMath seine Antwort um ein Byte kürzer machen, indem er
"[aeiou]"
stattdessen auch verwendet,"[aeiou]+"
weil wir nur die einzelnen Instanzen abgleichen müssen. Schließlichinput()
scheint sich die Implementierung von zwischen py2 und py3 geändert zu haben - stdin wird automatisch als String ausgewertet.quelle
s=re.split
das alternativ?*
Eingabe zu geben*g
. 2. Die zweite Version kann bis zu Golf gespielt werdenlambda x,y,s=lambda s:re.split("[aeiou]",s)[0]:(s(y)+x[len(s(x)):],s(x)+y[len(s(y)):])
.f=
.s
ist ein Standardargument, daher müssen Sie es nicht angeben. Ein unbenanntes Lambda ist eine akzeptable Vorlage;f=
ist nicht nötig.sed, 38 zeichen
Verwendung eines erweiterten regulären Ausdrucks aus der Retina-Lösung .
Das obige ist 37 Zeichen lang und erfordert den
-r
Schalter (+1 Zeichen).Beispiel:
quelle
C # 6, 165 Bytes
Erweitert:
quelle
"aeiou".ToCharArray()
kann aber'a','e','i','o','u'
für -2 Bytes seinIndexOfAny
es braucht keine Params, also müsste es seinnew[]{'a','e','i','o','u'}
IndexOfAny
ist eine Methode von params. Wie auch immer, tolle Antwort𝔼𝕊𝕄𝕚𝕟 24 Zeichen / 42 Byte
Try it here (Firefox only).
Wenn Sie Hilfe benötigen, um dies zu verstehen, wird dies in ES6 als übersetzt
quelle
PowerShell, 52 Byte
Es ist ein regulärer Ausdruck, der durch vier Erfassungsgruppen ersetzt wird. mit:
('(.*?)([aeiou]\S+) '*2)
zu'(.*?)([aeiou]\S+) (.*?)([aeiou]\S+) '
"$args "
erzwingt die Bildung eines Strings aus dem args-Array und fügt ein nachfolgendes Leerzeichen hinzu, damit das nachfolgende Leerzeichen in der Regex es nicht unterbricht.quelle
JavaScript (ES6),
1201071021019992 ByteDies berücksichtigt, ob die Parameter ein Objekt wie dieses sind und umgekehrt:
var a = {x: "man", y:"plaster"]}
quelle
.match(/[aeiou]/).index
kann werden:.search`[aeiou]`
Python,
129108105109 BytesDieses Programm nimmt eine Liste solcher Wörter auf
["master","plan"]
EDIT : Danke @Volatility
EDIT: Jetzt mit re.split
In dieser Antwort wird wie in den meisten Fällen Regex verwendet.
Probieren Sie es hier aus
quelle
str.replace
ersetzt alle Instanzen einer Teil, so dass Sie es auf einen Ersatz begrenzen wollen , indem er.replace(f,l,1)
. Sie können jedoch ein Bündel unter Verwendung speicherni,j=input()
und neu zu bindenre.findall
und'[^aeiou]+'
zu einzelnen Zeichenvariablen.input()
in zwei Variablen zu entpacken . Meinten Siei,j=input().split()
(undraw_input()
in Python 2)?"sass","bit" -> "babb", "sit"
.Java 8, 343 Bytes
Hier haben Sie Ihre erste Java-Antwort. Nicht so viel Erfahrung mit Golfspielen, daher wird jeder Vorschlag geschätzt!
Ungolfed:
quelle
java.util.function.Function
? Ich bezweifle sehr, dass es dort sein muss, es sei denn, Sie meinenimport
, aber lassen den Import fallen, weil Sie nur einmal darauf verweisen. Wechselnpublic class C{public static void Main(String[] a)
zuinterface C{void Main(String[]a)
Function<String, Integer>
braucht kein Leerzeichenfor(int i=0;i<s.length();++i)if("aeiou".contains(s.substring(i,i+1)))return i;
auffor(int i=0;i++<s.length();if("aeiou".contains(s.substring(i,i+1))){return i;})
i1
ist ein schrecklicher, viel zu langer varname.Function<String, Integer>
zujava.util.function.Function<String,Integer>
und legen Sie die ImportOktave, 96 Bytes
Dank der Inline-Zuweisungen von Octave und der "Index-Anywhere" -Funktionalität ist dieses Ganze nur die Definition einer einzelnen anonymen Funktion. Grundsätzlich rekonstruieren wir die spoonerized Zeichenfolge während die abgeschnittenen Punkte in Speichern
a
undb
. Ich bin besonders zufrieden mit der Inline-f
Funktion, die den Cut-Off-Punkt findet und verhindert, dass ich dasfind(ismember(a,b),1)
Ganze zweimal verwenden muss. Auch kein Regex :) .quelle
TeaScript , 27 Bytes
\w
ist eigentlich[^aeiou]
.quelle
\w
Regex-Meta in geändert[^aeiou]
. Warum?\w
bereits von JavaScript verwendet wurde. Ich werde es bald wieder ändernElixier ,
143117 BytesTeilen Sie die beiden Zeichenfolgen (a, b) im ersten Vokal auf und konstruieren Sie neue Zeichenfolgen für die Rückkehr.
BEARBEITEN: Ein paar Bytes weniger mit Pattern Matching anstatt mit klobigen
elem
Aufrufen, um die Werte aus den Tupeln herauszuholen.quelle
Java, 147 Bytes
Ich gehe davon aus, dass nur eine Funktion auch in Ordnung ist.
split(regex)
Leider verbraucht der Begrenzer, was bedeutet, dass ich verwenden musssubstring
, um die Suffixe zu erhalten.quelle
Pyth,
3028 BytesÜbernimmt die Eingabe und gibt die Ausgabe als Liste der beiden Wörter aus.
Probieren Sie es online aus.
quelle
ACm,Kh:d"[aeiou]"3.-dKQ+V_GH
.A
Weist G und H eine Liste mit zwei Elementen zu undC
transponiert. Es kann etwas noch besseres geben.Python (keine regulären Ausdrücke), 85 Byte
Probelauf:
t
ist eine rekursive Funktion, die den Index des frühesten Vokals nach dem ersten Zeichen in ihrem Argument berechnets
. Wenn das zweite Zeichens[1]
ein Vokal ist, wird es zu ausgewertetTrue
, derint
Wert hat1
. Andernfalls wird ein rekursiver Aufruf ausgeführt, bei dem das erste Zeichen entfernt wird, und dem resultierenden Index wird mit-~
(Zweierkomplement des eigenen Komplements) eine 1 hinzugefügt. Schließlich werden die Ergebnisse vont
als Indizes für das Aufteilen von Zeichenfolgen verwendet, um den Spoonerismus zu berechnen.quelle
GNU Awk 4.0, 48 Zeichen
Probelauf:
quelle
PowerShell, 61 Byte
Verwendet Regex, um die ersten Nicht-Vokalzeichen jedes Wortes auszutauschen
quelle