var QUESTION_ID=162408,OVERRIDE_USER=21034;function answersUrl(e){return"https://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"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>
Antworten:
Oktave , 44 Bytes
Probieren Sie es online!
Das Ergebnis der Funktion, wenn jedes der Zeichen in der Funktion als Eingabe verwendet wird:
Alle anderen eingegebenen Zeichen geben eine Null zurück.
Die Tatsache, dass ich fliehen musste
'
, verlängerte dies erheblich. Um die 4 Klammern zu berücksichtigen, hatte ich gerade ein Duplikat in der Zeichenfolge. Das Duplizieren von Apostrophen erfordert jedoch Apostrophe, sodass wir nur vom richtigen Ergebnis abweichen. Daher musste ich die Anzahl der Apostrophe mit ihrem ASCII-Wert zählen39
. Dies natürlich bedeutete , dass ich für die Charaktere zu überprüfen hatte3
und9
auch, so dass es eine ganze Menge mehr.quelle
Excel, 84 Bytes
Find()
sucht nach dem Wert in der ZelleA1
innerhalb des Strings"123456789,()=MINORFADEOMEN
(der"""
am Anfang steht, um das Zeichen zu maskieren, und wird nur ausgewertet"
).Basierend auf dem Ergebnis von
Find()
gibt dieMid()
Funktion das entsprechende Zeichen aus der Zahlenfolge zurück. Diese Zeichenfolge wurde durch Iteration erstellt, bis die Änderung aufhörte.Wenn das Zeichen in
A1
nicht gefunden wird, wirdFind()
ein Fehler zurückgegeben, sodass dieIfError()
Funktion den Fehler vermeidet und0
stattdessen zurückgibt .Die Zeichen
OMEN
am Ende der Zeichenfolge, die in derFind()
Funktion durchsucht werden, sind doppelte Buchstaben, sodass ihre Position nie zurückgegeben wird, sie jedoch zum Anpassen der Zeichenanzahl benötigt wurden. Ohne sie gab es eine endlose Schleife wechselnder Zählungen. Die Buchstabenanordnung ist stilistische Wahl.quelle
JavaScript (ES6), 70 Byte
Liest nicht die Quelle der Funktion, aber das ist ziemlich lang. Übernimmt die Eingabe als 1-Zeichen-Zeichenfolge.
Probieren Sie es online!
quelle
i=>'36335633'[i='\\36=\'i|&()25.>[]Odefx~n'.indexOf(i)]||~i&&2
Netzhaut , 1 Byte
Dies wäre nicht gültig, wenn man sich strikt an die Quine-Regeln hält, das OP dies jedoch ausdrücklich in einem Kommentar zulässt .
Probieren Sie es online!
In der Netzhaut zählt ein einzeiliges Programm das Vorkommen dieses regulären Ausdrucks in der Eingabe. Diese Herausforderung wird von einem einzelnen ASCII - Zeichen gelöst außer
`
,.
,+
,*
,?
,[
,(
,)
,^
,$
,\
und Newline.quelle
C # (Visual C # -Compiler) ,
88.57ByteProbieren Sie es online!
Gibt 3 zurück, wenn der String das übergebene Zeichen enthält, andernfalls 0. Der String enthält jedes Zeichen des Codes mindestens einmal und genau den Betrag, der erforderlich ist, um das Zeichen 3 Mal im Code zu haben.
-31 Bytes dank Kevin Cruijssen
quelle
(a)=>
und die Eingabe als Zeichenfolge anstelle von char verwenden, sodass dies.ToString()
nicht mehr erforderlich ist (unda+""
auch für Code-Golf-Herausforderungen verwendet werden könnte, die Sie niemals benötigen werden.ToString()
). Da.Contains
bereits ein enthalten ista
, können Sie die Eingabevariable auch zu einem anderen unbenutzten Zeichen (wiex
oderq
) machen, um 3 für jedes Zeichen anstelle von 4 zu haben"
.Haskell , 66 Bytes
Die ersten beiden Versionen sind im Wesentlichen eine Quine, die die erforderlichen Zeichen filtert und dann die Länge annimmt:
Probieren Sie es online aus oder testen Sie mit allen Charakteren! *
Alternative ohne
(<>)
72 BytesProbieren Sie es online aus oder testen Sie mit allen Charakteren!
Nicht quine Alternative,
8786 BytesKönnte noch verbessert werden, aber ich bin froh, dass ich es auf nur drei verschiedene Gruppen geschafft habe.
Ich mag dieses am besten, obwohl es die meisten Bytes zählt. Es berechnet die Anzahl der Zeichen / Bytes als Summe von 2,3 und 7 (beachten Sie, wie einige Zeichen in mehreren Gruppen sind):
Probieren Sie es online aus oder testen Sie mit allen Charakteren!
* Importiert,
(<>)
da die GHC-Version von TIO 8.0.2 istquelle
Python 2 ,
545232 Bytes-20 bytes dank ovs
Probieren Sie es online!
quelle
"xxx".count
ist äquivalent zulambda c:"xxx".count(c)
.f="xxx".count
undf=lambda c:"xxx".count(c)
werden alsf('a')
Schale ,
11 108 BytesDanke Leo für -2 Bytes!
Probieren Sie es online!
Erläuterung
Dies stellt sicher, dass nur ASCII verwendet wird (da
show
dies zu Problemen führen würde) und dass jedes Zeichen zweimal enthalten ist:Standard-Quine-Erweiterung, 11 Byte
Probieren Sie es online!
Erläuterung
quelle
Java 10,
1648157 BytesPort of @Hyarus 'C # -Antwort , also stelle sicher, dass du ihn positiv bewertest!
Erläuterung:
Probieren Sie es online aus.
Alte quine 164-Byte-Antwort:
Erläuterung:
Probieren Sie es online aus.
quine -Teil:
s
enthält den unformatierten Quellcode.%s
wird verwendet, um diesen String in sich selbst mit dem einzugebens.format(...)
.%c
,%1$c
Und die34
werden verwendet , um die doppelten Anführungszeichen zu formatieren.s.format(s,34,s)
setzt alles zusammenHerausforderungsteil:
.replaceAll("[^"+c+']',"")
Entfernt alle Zeichen mit Ausnahme derjenigen, die der Eingabe entsprechen..length()
nimmt dann die Länge dieses Strings an.HINWEIS:
.split(c).length
(mitString
Eingabe anstelle vonchar
) mag kürzer erscheinen, weist jedoch zwei Probleme auf:c
(mitc->
als führendem Teil) eingegeben wird, wird fälschlicherweise ein Zeichen zu wenig zurückgegeben. Dies kann durch Zugabe fixiert werden+(c==99?1:0)
sowohl im Quellcode und unformatiert Quellcode String (und Ändern.split(c)
zu.split(c+"")
, aber dann haben wir noch folgendes Problem:$
) eingegeben wird,.split
wird es als Regex interpretiert, was zu einem falschen Ergebnis führt.quelle
Haskell , 58 Bytes
Probieren Sie es online! oder überprüfen Sie die Lösung .
Alternativen für die gleiche Bytezahl:
Haskell , 90 Bytes
Probieren Sie es online! oder überprüfen Sie die Lösung . Nutzt die Tatsache, dass
sum Nothing = 0
und zsum (Just 4) = 4
.quelle
Smalltalk , 112
132BytesSmalltalk ist nicht gerade für seine Golftauglichkeit bekannt :-)
In der Klasse Character definierte Methode (getestet in VA Smalltalk und Squeak, sollte auch in anderen Dialekten wie VisualWorks und Pharo funktionieren):
In der Quelle vorkommende Zeichen werden nach Anzahl der Vorkommen gruppiert. Die Gruppen werden auf die erste getestet, die den Empfänger enthält, und die Anzahl der übereinstimmenden Vorkommen wird zurückgegeben.
Alte Methode:
Jedes Zeichen, das in der Methode vorkommt, kommt genau sechsmal vor (indem es in der Zeichenfolgenkonstante wiederholt wird). Die Methode überprüft also nur, ob der Empfänger in der Zeichenfolge enthalten ist, und gibt 6 zurück, wenn dies der Fall ist, andernfalls 0.
Nachdem Sie die Methode wie oben definiert haben, können Sie sie mit validieren
Das Ergebnis sollte leer sein.
quelle
JavaScript, 31 Bytes
Probieren Sie es online aus
quelle
Python 2 , 57 Bytes
Probieren Sie es online!
quelle
05AB1E , 17 Bytes
Probieren Sie es online!
quelle
Haskell , 96 Bytes
Probieren Sie es online!
Haskell , 109 Bytes
Probieren Sie es online!
Haskell , 122 Bytes
Probieren Sie es online!
Erklärungen
Diese Antworten sind nicht besonders ausgefeilt. Es handelt sich um eine Reihe von Erklärungen, eine für jedes im Programm vorhandene Zeichen. Am Ende haben wir einen catch all, der für Zeichen, die nicht im Programm vorhanden sind, 0 zurückgibt.
Ich benutze ein paar Tricks, um die Anzahl der im Programm benötigten Zeichen zu minimieren, und von da an habe ich mit den Dingen herumgespielt, bis die Zahlen genau richtig waren. Sie können sehen, dass ich den Variablennamen in der letzten Deklaration aufgefüllt habe, in allen drei. Der Unterschied zwischen den 3 Programmen besteht darin, ob ich eine neue Zeile oder einen
;
Zeilenumbruch gewählt habe und ob ich Zeichen als Eingabe oder Zeichenfolgen gewählt habe. Der;
Ansatz scheint den anderen nicht überlegen zu sein, er hat nur Glück und endet kürzer. Es scheint jedoch, dass die Verwendung von Strings eine bessere Idee ist als Zeichen, da Zeichen Leerzeichen nach dem Funktionsnamen erfordern und Zeichen nicht.quelle
Leerzeichen , 140 Bytes
Buchstaben
S
(Leerzeichen),T
(Tabulator) und (Zeilenvorschub) werdenN
nur als Hervorhebungen hinzugefügt.[..._some_action]
nur als Erklärung hinzugefügt.70 Leerzeichen, 37 Tabulatoren und 33 neue Zeilen.
Normalerweise verwende ich die Etiketten erstellen in der Reihenfolge
NSSN
,NSSSN
,NSSTN
,NSSSSN
,NSSSTN
,NSSTSN
,NSSTTN
, etc. Aber weil eine Reihe Druck , wo die binärenS=0
/T=1
verwendet wird , um die Anzahl betrifft ich ausgeben müssen, ich die EtikettenNSSN
,NSSSN
,NSSTN
, undNSSSTN
stattdessen das gab die Perfekte Anzahl von Leerzeichen / Tabulatoren, die mit den BinärzahlenSSSTSSSSTN
(33; Anzahl der Zeilenwechsel),SSSTSSTSTN
(37; Anzahl der Tabulatoren) undSSSTSSSTTSN
(70; Anzahl der Leerzeichen) gedruckt werden sollen .Erklärung im Pseudocode:
Beispiel läuft:
Eingabe: Leerzeichen
Programm stoppt mit Fehler: Kein Exit definiert.
Probieren Sie es online aus (nur mit Leerzeichen, Tabulatoren und Zeilenumbrüchen).
Eingabe: tab
STDIN wird stattdessen
\t
(9
) sein, in welchem Fall es0
bei der erstenIf 0
Prüfung sein wird, geht zuLABEL_TAB
/NSSSTN
und wird37
stattdessen drücken und drucken .Probieren Sie es online aus (nur mit Leerzeichen, Tabulatoren und Zeilenumbrüchen).
Eingabe: Neue Zeile
STDIN wird stattdessen
\n
(10
) sein, in welchem Fall es0
bei der zweitenIf 0
Prüfung sein wird, geht zuLabel_NEWLINE
/NSSSN
und wird33
stattdessen drücken und drucken .Probieren Sie es online aus (nur mit Leerzeichen, Tabulatoren und Zeilenumbrüchen).
Eingabe: alles andere
Jedes andere Eingabezeichen
NSTN
(Sprung zu Label_PRINT) druckt nach der drittenIf 0
Prüfung0
dasjenige aus, das sich noch auf dem Stapel befand (das wir am Anfang dupliziert haben).Probieren Sie es online aus (nur mit Leerzeichen, Tabulatoren und Zeilenumbrüchen).
quelle
Japt , 27 Bytes
Länger als die vorhandene Japt-Antwort, verwendet jedoch einen anderen Ansatz.
Hat die inhärente Einschränkung, dass alle Zeichen eine eindeutige Anzahl von Malen auftreten müssen.
Übernimmt die Eingabe als Zeichenfolge.
Probieren Sie es online!
quelle
Perl, 130 Bytes
Hat keine Zeilenumbrüche oder andere Leerzeichen. Liest eine Zeile aus der Standardausgabe, kümmert sich jedoch nur um die ersten Bytes und gibt dann die Häufigkeit aus, mit der das Byte in seinem eigenen Quellcode dezimal ohne eine neue Zeile vorkommt.
Das Programm ist unkompliziert. Der größte Teil des Quellcodes wird von einer Literal-Tabelle belegt, die die Antwort für jedes mögliche Byte angibt. Nachgestellte Nullen werden weggelassen und benachbarte Nullen werden zur Laufzeit komprimiert, aber es gibt keinen anderen speziellen Trick als diesen. Der Rest des Programms liest einfach die Eingabe und schlägt die Antwort in der Tabelle nach.
Zum Beispiel gibt der Teil
22, 12, 6, 3, 5, 2, 4, 0, 1, 0
im Quellcode die Häufigkeit der Ziffern an, sodass der Quellcode 22 Nullen, 12 Einsen, 6 Zweien usw. enthält. Infolgedessen0
wird das Programm gedruckt , wenn Sie die Standardeingabe des Programms eingeben22
.quelle
C (gcc) , 1033 Bytes
Probieren Sie es online!
Dies ist keineswegs eine gelungene Antwort, aber es hat Spaß gemacht, diese Herausforderung in einer Sprache zu meistern, die ich nicht kenne. Es war keine besonders schwierige Herausforderung, bis es Zeit wurde, die Vorkommen der Ziffern zu finden. Jetzt war DAS eine Herausforderung. Musste ein wenig kreativ balancieren :)
quelle
C (gcc) , 192 Bytes
Probieren Sie es online!
Möglicherweise kann man weiter Golf spielen. Verwendet einen Kommentar am Ende als "Arbeitsbereich", um zusätzliche Ziffern hinzuzufügen. Wenn ich eine Ziffer von X in Y ändern muss, ändere ich eines der Ys im Scratch in ein X, um dies zu kompensieren. Davon abgesehen ist dies nur eine Funktion, die eine Ganzzahl annimmt und mit dem Zuweisungstrick einen Wert zurückgibt, der auf einer großen ternären Bedingung basiert.
quelle
0*84332211
wie in der anderen C-Antwort nach Null verschiebe , aber ich kann auch Bytes einsparen, indem ich sie umgestalte, um sie kleiner zu machen. Ich werde mich also noch nicht darum kümmern.J&1?
um alle ungeraden Zeichen abzugleichen). Ich kann dies weiter Golf spielen, wenn ich die Zeit dazu finde.x86 .COM, 17 Bytes, umstritten
36 Bytes
quelle
Japt , 14 Bytes
Versuch es
Erläuterung
quelle
V , 12 Bytes
Probieren Sie es online!
Hexdump:
quelle
Gelee , 16 Bytes
Probieren Sie es online!
Jedes Zeichen erscheint genau zweimal.
quelle
x86,
4240 BytesHier wende ich dieselbe Strategie an wie bei anderen: Erstelle eine String-Kopie des Programms mit eindeutigen Bytes und gib 2 in zurück,
al
wenn sich die Eingabeal
im String befindet. Wenn wir uns erlauben, tatsächlich ausgeführten Code zu lesen, erhalten wir die Lösung von l4m2 .Ich muss eine coole String-Anweisung benutzen
scasb
. Nach meinem besten Wissen gibt es keine doppelten Bytes, aber das ist etwas, was ich leicht vermasseln würde. Die Zeichenfolge Adresse Laden dauert 5 Bytes , aber ich bin mir nicht bekannt , dass kürzere Lösung (64-Bitlea
vonrip
mit Offset dauert 6 Bytes).-2 durch Rückwärtsspringen, um eine
02
doppelte Verwendung zu vermeiden .Hexdump (vom binären Dateiformat elf32-i386, da obj-Datei leider
00
Bytes fürstr
Adresse hat):x86, 256 Bytes
Langweilige Antwort, die einem riesigen Kommentar entspricht. Eingabe in
cl
, gibt sofort 1 in zurückal
. Ich werde eine tatsächliche Antwort geben, wenn ich Zeit habe.quelle
APL (Dyalog Classic) , 30 Byte
Probieren Sie es online!
Erläuterung
In APL werden einfache Anführungszeichen in Zeichenfolgen durch Verdoppeln maskiert, ebenso
'''''''1''⊢-⍳⍳0'
wie die Zeichenfolge'''1'⊢-⍳⍳0
, die alle im Programm verwendeten Zeichen enthält.APL-Arrays sind standardmäßig 1-indiziert, und der Funktionsindex gibt interessanterweise zurück
1 + max index
wenn das Element nicht gefunden wird.Verwenden Sie also index-of für die Zeichenfolge, und die Eingabe wird zurückgegeben
Wie man sieht,
11 - index
gibt es die Anzahl der Zeichen im Programm. Der grundlegende Algorithmus ist alsoDer Rest ist das Aufblähen der Charaktere, damit sie gut in die Slots passen.
quelle
R , 135 Bytes
Inspiriert von dieser Python-Antwort .
Frühere Versionen waren fehlerhaft. Dank @ Giuseppe für den Hinweis, dass
paste
es nicht erforderlich war, sparte es 18 Bytes oder so.lengths(regmatches(z,gregexpr(x,z)))
ist aus dieser Antwort .Probieren Sie es online!
quelle
Pari / GP , 36 Bytes
Probieren Sie es online!
quelle
Ruby, 48 Bytes
%q[str]
Dies ist eine bequemere Möglichkeit, ein Zeichenfolgenliteral zu schreiben, als"str"
dies der Fall ist, weil es in sich selbst geschachtelt werden kann, ohne dass ein Escapezeichen auftritt. Also habe ich nur den gesamten Code mit Ausnahme der darin enthaltenen Kopie eingefügt und dann die Anzahl verdoppelt.quelle
Gelee ,
1210 BytesProbieren Sie es online!
Liest ein Zeichen aus STDIN.
12 Bytes
Probieren Sie es online!
Eingabe über Befehlszeilenargument verwenden.
Auch 12 Bytes:
Probieren Sie es online!
quelle