Geben Sie bei einer vorgegebenen Zeichenfolge aus ASCII-Zeichen das Zeichen in der Mitte aus. Wenn es kein mittleres Zeichen gibt (wenn die Zeichenfolge eine gerade Länge hat), geben Sie das ASCII-Zeichen aus, dessen Ordnungszahl der bodenständige Durchschnitt der beiden mittleren Zeichen ist. Wenn der String leer ist, sollte ein leerer String ausgegeben werden.
Testfälle:
12345 => 3
Hello => l
Hiya => q
(empty input) => (empty output)
Das kürzeste Programm in den Charakteren gewinnt. (Nicht Bytes.)
Bestenliste
Das Stapel-Snippet am Ende dieses Beitrags generiert die Rangliste aus den Antworten a) als Liste der kürzesten Lösungen pro Sprache und b) als Gesamtrangliste.
Um sicherzustellen, dass Ihre Antwort angezeigt wird, beginnen Sie Ihre Antwort mit einer Überschrift. Verwenden Sie dazu die folgende Markdown-Vorlage:
## Language Name, N characters
Wo N
ist die Größe Ihres Beitrags? Wenn Sie Ihren Score zu verbessern, Sie können alte Rechnungen in der Überschrift halten, indem man sich durch das Anschlagen. Zum Beispiel:
## Ruby, <s>104</s> <s>101</s> 96 characters
Wenn Sie mehrere Zahlen in Ihre Kopfzeile aufnehmen möchten (z. B. weil Ihre Punktzahl die Summe von zwei Dateien ist oder wenn Sie die Strafen für Interpreter-Flags separat auflisten möchten), stellen Sie sicher, dass die tatsächliche Punktzahl die letzte Zahl in der Kopfzeile ist:
## Perl, 43 + 2 (-p flag) = 45 characters
Sie können den Namen der Sprache auch als Link festlegen, der dann im Snippet angezeigt wird:
## [><>](http://esolangs.org/wiki/Fish), 121 characters
<style>body { text-align: left !important} #answer-list { padding: 10px; width: 290px; float: left; } #language-list { padding: 10px; width: 290px; float: left; } table thead { font-weight: bold; } table td { padding: 5px; }</style><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="language-list"> <h2>Shortest Solution 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> <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> <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><script>var QUESTION_ID = 64599; var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe"; var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk"; var OVERRIDE_USER = 47556; var answers = [], answers_hash, answer_ids, answer_page = 1, more_answers = true, comment_page; function answersUrl(index) { return "https://api.stackexchange.com/2.2/questions/" + QUESTION_ID + "/answers?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + ANSWER_FILTER; } function commentUrl(index, answers) { return "https://api.stackexchange.com/2.2/answers/" + answers.join(';') + "/comments?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + COMMENT_FILTER; } function getAnswers() { jQuery.ajax({ url: answersUrl(answer_page++), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { answers.push.apply(answers, data.items); answers_hash = []; answer_ids = []; data.items.forEach(function(a) { a.comments = []; var id = +a.share_link.match(/\d+/); answer_ids.push(id); answers_hash[id] = a; }); if (!data.has_more) more_answers = false; comment_page = 1; getComments(); } }); } function getComments() { jQuery.ajax({ url: commentUrl(comment_page++, answer_ids), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { data.items.forEach(function(c) { if (c.owner.user_id === OVERRIDE_USER) answers_hash[c.post_id].comments.push(c); }); if (data.has_more) getComments(); else if (more_answers) getAnswers(); else process(); } }); } getAnswers(); var SCORE_REG = /<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/; var OVERRIDE_REG = /^Override\s*header:\s*/i; function getAuthorName(a) { return a.owner.display_name; } function process() { var valid = []; answers.forEach(function(a) { var body = a.body; a.comments.forEach(function(c) { if(OVERRIDE_REG.test(c.body)) body = '<h1>' + c.body.replace(OVERRIDE_REG, '') + '</h1>'; }); var match = body.match(SCORE_REG); if (match) valid.push({ user: getAuthorName(a), size: +match[2], language: match[1], link: a.share_link, }); else console.log(body); }); valid.sort(function (a, b) { var aB = a.size, bB = b.size; return aB - bB }); var languages = {}; var place = 1; var lastSize = null; var lastPlace = 1; valid.forEach(function (a) { if (a.size != lastSize) lastPlace = place; lastSize = a.size; ++place; var answer = jQuery("#answer-template").html(); answer = answer.replace("{{PLACE}}", lastPlace + ".") .replace("{{NAME}}", a.user) .replace("{{LANGUAGE}}", a.language) .replace("{{SIZE}}", a.size) .replace("{{LINK}}", a.link); answer = jQuery(answer); jQuery("#answers").append(answer); var lang = a.language; lang = jQuery('<a>'+lang+'</a>').text(); languages[lang] = languages[lang] || {lang: a.language, lang_raw: lang.toLowerCase(), user: a.user, size: a.size, link: a.link}; }); var langs = []; for (var lang in languages) if (languages.hasOwnProperty(lang)) langs.push(languages[lang]); langs.sort(function (a, b) { if (a.lang_raw > b.lang_raw) return 1; if (a.lang_raw < b.lang_raw) return -1; return 0; }); for (var i = 0; i < langs.length; ++i) { var language = jQuery("#language-template").html(); var lang = langs[i]; language = language.replace("{{LANGUAGE}}", lang.lang) .replace("{{NAME}}", lang.user) .replace("{{SIZE}}", lang.size) .replace("{{LINK}}", lang.link); language = jQuery(language); jQuery("#languages").append(language); } }</script>
Antworten:
Pyth, 15 Bytes
Demonstration
Beginnend mit "Hiya" als Eingabe:
Beachten Sie, dass dies mit einem Fehler bei der Leereingabe abstürzt und nichts an STDOUT ausgibt. Dies ist eine gültige Methode, um eine leere Zeichenfolge per Code-Golf-Standard auszugeben.
quelle
B
ifurcate zeigt ihre Nützlichkeit wieder.C
Funktionalität für Bodenbeläge hinzugefügt hat : github.com/isaacg1/pyth/commit/0baf23ec Notieren Sie sich den Tag des Hinzufügens, an dem diese Frage gestellt wurde. Das ist , weil diese Frage mich dazu inspiriert , die Funktionalität hinzufügen, dass diese Marke nicht für die Verwendung in dieser Frage zu machen.Brainf ***, 61 Bytes
Chinesisch , 16 Zeichen
Dies setzt voraus, dass die Eingabe im ASCII-Bereich von 1 bis 127 liegt und nullterminiert ist. Es werden Zeichenpaare vom Anfang und Ende der Zeichenfolge gelöscht, bis ein oder zwei Zeichen übrig sind. Wenn es zwei gibt, addiert es sie, dividiert durch 2 und rundet ab. Das verbleibende Zeichen wird gedruckt.
Probieren Sie es mit diesem Interpreter aus .
Präparation:
* Da jeder Befehl auf 3 Bit komprimiert und in UTF-32 codiert werden kann, kann das gesamte Programm technisch in 6 Zeichen ausgedrückt werden.
EDIT: Und dank Jan Dvorak für mich auf die Einführung Chinesen , die dies in 16 Zeichen komprimiert, gleichauf mit Dennis' CJam Antwort .
quelle
Given each instruction could be compressed to 3 bits and encoded in UTF64, the whole program could technically be expressed in 3 characters.
Du gewinnst. Das Internet. Und alles andere.+-<>,.[]
, in welcher Kodierung auch immer, nicht aus deren binären Darstellungen. Wir sind uns einig, dass eine Codierung, die von einem vorhandenen Interpreter nicht verwendet werden kann, ungültig ist.CJam, 16 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
TeaScript , 23 Bytes
25 30 31 33Uses @ isaacg Idee des Strings umzukehren.
Probieren Sie es online aus
Testen Sie alle Fälle
Ungolfed && Erklärung
TeaScript ist immer noch JavaScript und funktioniert daher ähnlich wie JavaScript.
quelle
Matlab,
3937 Bytesfloor((end+[1,2])/2)
Gibt die mittleren zwei Indizes des Strings zurück, wenn die Länge gerade ist, und gibt den mittleren Index zweimal zurück, wenn die Länge ungerade ist.mean
nur gibt den Mittelwert dieser Werte undchar
es automatisch Etagen.quelle
8086 Maschinencode + DOS, 31 Byte
Hexdump:
Assembly-Quellcode (kann mit tasm zusammengestellt werden):
Das FLAGS-Register wird hier nur sehr selten verwendet. Nachdem es die Länge der Zeichenfolge rechts um 1 Bit verschiebt (die von 2 bis Teilung äquivalent ist), zwei Flags zusätzliche Informationen speichern:
Normalerweise sollten die Fahnen sofort überprüft werden, aber hier habe ich die Tatsache nutzen , dass die
mov
Anweisung nicht Flags ändert. So können sie nach dem Laden des mittleren Zeichens untersucht werden.quelle
Python 3,
61595755 BytesIch versuche, nicht zu Golf mit Sprachen, die ich in Arbeit, aber das ist nicht zu böse.
Danke an @xsot für 2 Bytes!
Das vollständige Programm besteht aus 59 Bytes:
Probieren Sie es hier aus .
quelle
-1-len(x)//2
entspricht~len(x)//2
aufgrund der Funktionsweise der Floor-Division für negative ganze Zahlen.Prolog, 111 Bytes
Code
Erklärt
Beispiele
quelle
R , 73 Bytes
Probieren Sie es online!
Vielen Dank an @ngm für diese nicht-rekursive Idee - 20 Bytes Golf spielen dürfen.
Alte Lösung:
R ,
10195 BytesProbieren Sie es online!
Rekursive Lösung. Ein Problem zum Preis von 2 Bytes behoben:
try(expr, silent = TRUE)
, um den Fall ordnungsgemäß zu verwalten, in dem die Eingabe leer ist.danke Giusppe für 4 Bytes!
quelle
intToUtf8
nicht-Zahlen gestutzt?Schale , 11 Bytes
Probieren Sie es online!
Erläuterung
Leckere, leckere Kombinatoren ganz nach unten.
ö
heißt "komponiere diese vier Funktionen",¤
heißt "wende das erste Argument auf die Ergebnisse an, wenn das zweite Argument separat auf zwei zusätzliche Argumente angewendet wird" undS
heißt "wende diese Funktion (die zwei Argumente annehmen sollte) aufS
das dritte Argument und auf das Ergebnis an dasS
zweite Argument auf das dritte anzuwenden ". Deshalb,Bearbeitet, um hinzuzufügen: Streng genommen entspricht dies leicht nicht der Problemspezifikation, die im Fall einer leeren Eingabe eine Zeichenfolge und in anderen Fällen ein Zeichen anfordert.
Aufgrund der strengen Schreibweise von Husk ist es einfach nicht möglich, eine Funktion / ein Programm zu definieren, die / das einen von zwei Typen zurückgeben kann. Ich habe mich in jedem Fall für die Rückgabe eines einzelnen Zeichens entschieden, und für Husk ist es am sinnvollsten,
'(space)'
wenn ein einzelnes Zeichen die leere Zeichenfolge darstellt, da dies der "Standard" -Wert ist (und das ist der Grund, warum dieses Programm ihn zurückgibt; der Standardwert) value wird verwendet, wenn das letzte (→
) Element einer leeren Liste genommen wird.Ich hätte auch vernünftigerweise Zeichenfolgen mit null oder einem Zeichen zurückgeben können, was die Spezifikation in der anderen Richtung verfehlen würde, aber ich tat es nicht, weil es vier Bytes hinzufügt:
Ṡ&ö;c½S¤+öc→←½↔
beim;
Konvertieren des Zeichens in eine Zeichenfolge mit einem Zeichen eine andereö
das Notwendige explizit zu komponieren, und eineṠ&
Abkürzung im Falle einer falschen Eingabe.quelle
C ++ 14, 56 Bytes
Anonymes Lambda, das einen String als Argument verwendet und int als Zeichencode zurückgibt. Denn
""
es kehrt zurück0
. Nicht sicher, wie genau die Ein- und Ausgabe aussehen soll (ist in der Frage nicht angegeben).Ungolfed, mit gebrauch
quelle
0
"" ausgeben können, und ich glaube auch nicht, dass Sie für "" ausgeben können .JavaScript (ES6), 83 Byte
89 912 Bytes dank @ Cᴏɴᴏʀ O'Bʀɪᴇɴ gespeichert
6 Bytes gespart dank @ETHproductions
JavaScript ist überhaupt nicht gut dieser String-Zeichencode.
quelle
s=>String.fromCharCode((s[~~(t=s.length/2-.5)][r="charCodeAt"]()+s[Math.ceil(t)][r])/2)
ist 5 Bytes kürzer.()
umcharCodeAt
so es ist wirklich 3 Zeichen, aber trotzdem danke!t
ist eine Ganzzahl, die nicht funktioniertMath.ceil(t)
kann geändert werden zu0|t+.9
O ,
4434 BytesDurchgestrichen 44 ist immer noch regulär 44 :(
Bytes verschwendet auf:
quelle
Minkolang 0.13 ,
2320 BytesProbieren Sie es hier aus.
Erläuterung
quelle
hiya
kehrt zurücki
stattq
Japt ,
4029232120 Bytes4 Bytes dank @ ן nןuɟ ן oן gespeichert
Jetzt nur noch die halbe Originallänge! Ich liebe Codegolf. :-D
Funktioniert ordnungsgemäß mit der leeren Zeichenfolge. Probieren Sie es online!
Wie es funktioniert
Wie Sie sehen können, wird viel Autoboden verwendet. (Danke, JavaScript!) Vorschläge willkommen!
quelle
V=Ul /2;((UcV +Uw cV )/2 d
?c
so oft ohne ein Argument verwendet, dass ich vergessen habe, dass es eines akzeptiert. Vielen Dank!Los,
166156153 BytesGo ist vielleicht nicht die beste Sprache zum Golfen ... aber ich liebe es so sehr und ich lerne es so sehr.
Diese Implementierung akzeptiert leere (
\n
) Eingaben und unterbricht wahrscheinlich Eingaben ohne ASCII / ASCII-Erweiterung. OP hat jedoch keine Eingabe- / Ausgabecodierung angegeben, sodass ASCII alles ist, was ich ausdrücklich unterstützt habe.Bearbeiten : fällt aus
if
/else
ist kürzer alsswitch
. Jetzt weiß ich es, nehme ich an.Golf gespielt:
Ungolfed:
quelle
𝔼𝕊𝕄𝕚𝕟 23 Zeichen
Try it here (Firefox only).
Vielen Dank an @ETHProductions für die Idee!
quelle
C #, 77 Bytes
Tatsächlich wird keine Zeichenfolge zurückgegeben, und Sie erhalten ein Leerzeichen, wenn die Eingabezeichenfolge leer ist, da die Funktion immer einen Wert zurückgeben muss. Es wären 2 weitere Bytes erforderlich, um eine Zeichenfolge zurückzugeben.
Volles Programm mit Testfällen:
Alternativ ein vollständiges Programm, das Benutzereingaben liest und die Mitte der eingegebenen Zeichenfolge druckt:
C #, 144 Bytes
Auch hier wird der gleiche Trick verwendet, bei dem ein Leerzeichen gedruckt wird, das der Benutzer nicht bemerkt, und keine leere Zeichenfolge, da die Lösung sonst 2 Byte länger ist.
quelle
Vim,
382423 TastenanschlägeDa vim in Funktion ein gebaut hat , um die Mitte zu finden Linie , aber nicht in der Mitte char , teilten wir jedes Zeichen in einer separaten Zeile zuerst unter Verwendung
substitute
findet die Mittellinie, dann löschen Sie alles vor und nach ihm.Wenn Sie dies ausführen möchten, achten Sie auf
.vimrc
Dateien, die das Verhalten von.
(magic regex) undg
(gdefault) ändern können. Beachten Sie, dass es mir tatsächlich 3 Tastatureingaben auf meinem Computer spart :)Vorherige Antwort
Nimmt einen einzeiligen Puffer als Eingabe, aktualisiert den aktuellen Puffer mit dem mittleren Zeichen. Ich dachte, dass es in vim eine Abkürzung dafür gegeben hätte!
Hinweis: Eine möglicherweise kürzere Lösung scheint eine Endlosschleife auszulösen ... Wenn jemand eine Idee hat:
qq^x$x@qq@qp
(12 Tastenanschläge) - es funktioniert<c-c>
nach dem letzten@q
...quelle
Mathematica,
11899 ZeichenMma-Zeichen-Code-Manipulation ist teuer ...
quelle
%
das sie sich stützt.VBA, 130 Bytes
Ich glaube, ich kann einen der
asc()
Calls weggolfen, aber nicht kürzer zum Laufen bringen.quelle
K, 40 Bytes
quelle
> <>, 24 + 3 (für -s) = 27 Byte
Alte Lösung (Funktioniert nicht bei leerer Eingabe):
Beide nehmen Eingaben auf dem Stack durch
-s
. Beide sind 24 Bytes.Probieren Sie es hier online aus.
quelle
pb , 83 bytes
Während die Eingabezeichenfolge mindestens 3 Zeichen enthält, werden die ersten und letzten Zeichen entfernt. Dies lässt entweder 1 Zeichen (sollte unverändert gedruckt werden) oder 2 (sollte gemittelt und gedruckt werden). Um dies zu handhaben, werden das erste und das letzte Zeichen der Zeichenfolge zusammenaddiert und durch zwei geteilt. Wenn es nur ein Zeichen,
(a+a)/2==a
. Wenn es zwei gab, muss(a+b)/2
das Zeichen gedruckt werden. pb "leiht" Pythons Ausdrucksbewertung (def expression(e): return eval(e, globals())
) aus, so dass dies automatisch belegt wird.Die Bearbeitung leerer Eingaben kostet mich 5 Byte. Insbesondere
<b[1]>
in der ersten Zeile. Früher, als ich "Schnur" sagte, war das eine totale Lüge. pb hat keine Strings, sondern zufällig nahe beieinander stehende Zeichen. Wenn Sie nach dem "letzten Zeichen einer Zeichenfolge" suchen, bewegen Sie den Pinsel einfach nach links, bis er auf ein Zeichen trifft. Wenn keine Eingabe erfolgt, wird die Schleife "Wenn mindestens 3 Zeichen vorhanden sind" vollständig übersprungen und es wird nach dem letzten Zeichen gesucht. Ohne das<b[1]>
würde es für immer aussehen. Dieser Code setzt ein Zeichen mit dem Wert 1 bei (-1, -1), das speziell dann gefunden wird, wenn die Eingabe leer ist. Nach dem Auffinden des "letzten Zeichens" der Zeichenfolge geht der Pinsel davon aus, dass das erste Zeichen bei (0, -1) ist, und geht direkt dorthin, wobei der Wert(1+0)/2
0 in pb 0 ist.Danke, hypothetischer Fragesteller. Früher, als ich "Drucken" sagte, war das eine totale Lüge. In pb werden Werte nicht wirklich gedruckt, sondern nur auf der Leinwand platziert. Anstatt "eine Möglichkeit zur Ausgabe", ist es genauer, sich die Leinwand als unendlich großes 2D-Array vorzustellen. Es erlaubt negative Indizes in beiden Dimensionen, und beim Programmieren in pb geht es wirklich darum, sicherzustellen, dass der Pinsel an die gewünschte Stelle auf der Leinwand gelangt. Wenn die Ausführung des Programms abgeschlossen ist, wird alles auf der Zeichenfläche mit nicht negativen X- und Y-Koordinaten an der entsprechenden Stelle auf der Konsole gedruckt. Wenn das Programm beginnt, wird die gesamte Zeichenfläche mit den Werten 0 gefüllt. Damit nicht unendlich viele Zeilen mit einer unendlichen Anzahl von Nullbytes gedruckt werden müssen, Jede Ausgabezeile wird nur bis zum letzten Nicht-Null-Zeichen gedruckt, und Zeilen werden nur bis zum letzten Nicht-Null-Zeichen gedruckt. Also setzen Sie ein
0
at (0, 0) ist immer noch eine leere Ausgabe.Ungolfed:
quelle
Im Ernst ,
2220 BytesVielen Dank an @Mego, dass Sie in Ihrer Sprache großartig sind
Probieren Sie es online oder was auch immer
quelle
,;``@(lIƒ
belässt Sie mit dem Eingabewert auf dem Stapel, wenn erlen
> 0 ist, oder beendet das Programm ansonsten. Beachten Sie, dass es eine nicht druckbare in den Backticks - Zeichen 127ƒ
soll der machen?CoffeeScript,
104103 Bytesquelle
Ruby,
434241 Bytes42 Bytes
43 Bytes
Verwendung:
quelle
Java 7, 152 Bytes
Ungolfed & Testfälle:
Probieren Sie es hier aus.
Ausgabe:
quelle
PHP,
14793 BytesDanksagung und besonderer Dank an Jörg Hülsermann für die 54 Bytes tiefe Antwort!
Vorherige Version:
Testcode:
Online testen
Ich habe das Gefühl, dass dies verbessert werden kann, aber nicht genug Zeit dafür ...quelle
<?=($l=strlen($s=$argv[1]))%2?$s[($l-1)/2]:chr(floor((ord($s[$l/2])+ord($s[$l/2-1]))/2));
ist mein VorschlagExcel,
12279 BytesEigentlich @Sophia Lechners Antwort jetzt:
-5 Bytes von der anfänglichen Lösung dank @Taylor Scott.
Für eine leere Zeichenfolge werden 12 Byte benötigt.
quelle
Average(...,...)
und(...+...)/2
für -5 Bytes verwenden.=IFERROR(IF(ISODD(LEN(A1)),MID(A1,LEN(A1)/2+1,1),CHAR((CODE(MID(A1,LEN(A1)/2,1))+CODE(MID(A1,LEN(A1)/2+1,1)))/2)),"")
=IFERROR(CHAR(CODE(MID(A1,LEN(A1)/2+1,1))/2+CODE(MID(A1,LEN(A1)/2+.5,1))/2),"")
für 79 Byte