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>
Réponses:
Octave , 44 octets
Essayez-le en ligne!
Le résultat de la fonction, lors de l'utilisation de chacun des caractères de la fonction en tant qu'entrée:
Tous les autres caractères saisis renvoient un zéro.
Le fait que je sois obligé de m'échapper
'
a rallongé le processus. Afin de tenir compte des 4 parenthèses, je viens d'avoir un doublon dans la chaîne. Cependant, la duplication des apostrophes prend des apostrophes, donc cela nous éloigne du résultat correct. Par conséquent, je devais compter le nombre de ses apostrophes avec valeur ASCII,39
. Bien sûr, cela signifiait que je devais vérifier les caractères3
et9
aussi, ce qui prolongeait le processus beaucoup plus longtemps.la source
Excel, 84 octets
Find()
cherchera la valeur dans la celluleA1
de la chaîne"123456789,()=MINORFADEOMEN
("""
la première chose à faire est d'échapper au caractère et sera évaluée comme si de rien n'était"
).En fonction du résultat de
Find()
, laMid()
fonction renverra le caractère correspondant dans la chaîne de nombres. Cette chaîne a été créée par itération jusqu'à ce qu'elle cesse de changer.Si le caractère dans
A1
n'est pas trouvé,Find()
retourne une erreur afin que laIfError()
fonction lui échappe pour revenir à la0
place.Les lettres
OMEN
à la fin de la chaîne recherchée dans laFind()
fonction sont des doublons. Par conséquent, leur position ne sera jamais renvoyée, mais elles étaient nécessaires pour ajuster le nombre de caractères. Sans eux, il y avait une boucle sans fin de comptes changeants. La disposition des lettres est un choix stylistique.la source
JavaScript (ES6), 70 octets
Ne lit pas la source de la fonction, mais c'est assez long. Prend l'entrée sous la forme d'une chaîne de 1 caractère.
Essayez-le en ligne!
la source
i=>'36335633'[i='\\36=\'i|&()25.>[]Odefx~n'.indexOf(i)]||~i&&2
(8 octets enregistrés)Rétine , 1 octet
Cela ne serait pas valable si vous respectiez strictement les règles de quine, mais le PO le permettait explicitement dans un commentaire .
Essayez-le en ligne!
Dans Retina, un programme sur une seule ligne compte les occurrences de cette expression rationnelle dans l’entrée. Ce défi est résolu par un caractère ASCII unique sauf
`
,.
,+
,*
,?
,[
,(
,)
,^
,$
,\
et retour à la ligne.la source
C # (compilateur Visual C #) ,
8857 octetsEssayez-le en ligne!
Renvoie 3 si la chaîne contient le caractère transmis, sinon renvoie 0. La chaîne contient chaque caractère du code au moins une fois et exactement la quantité requise pour que le caractère 3 soit présent. fois dans le code.
-31 octets grâce à Kevin Cruijssen
la source
(a)=>
et en prenant l'entrée sous forme de chaîne au lieu de caractère, de sorte que ce.ToString()
ne soit plus nécessaire (eta+""
aurait pu être utilisé également pour les défis de code-golf dont vous n'aurez jamais besoin.ToString()
). De plus, comme.Contains
contient déjà una
, vous pouvez faire de la variable d'entrée un caractère différent non utilisé (commex
ouq
) afin qu'il en ait 3 pour chaque caractère au lieu de 4. EDIT: Peu importe la dernière partie, je vois qu'elle"
est également utilisée 4 fois maintenant.Haskell , 66 octets
Les deux premières versions sont essentiellement une quine qui filtre les caractères requis puis prend la longueur:
Essayez-le en ligne ou testez-le avec tous les personnages! *
Alternative sans
(<>)
, 72 octetsEssayez-le en ligne ou testez-le avec tous les personnages!
Alternative non quine,
8786 octetsPeut-être sera-t-il encore amélioré, mais je suis heureux de l'avoir réduite à trois groupes différents.
J'aime celui-ci le meilleur, même s'il compte le plus d'octets. Il calcule le nombre de caractères / octets comme une somme de 2,3 et 7 (notez comment certains caractères sont dans plusieurs groupes):
Essayez-le en ligne outestez-le avec tous les personnages!
* importations
(<>)
parce que la version GHC de TIO est 8.0.2la source
Python 2 ,
545232 octets-20 octets grâce aux ovs
Essayez-le en ligne!
la source
"xxx".count
est donc équivalent àlambda c:"xxx".count(c)
.f="xxx".count
etf=lambda c:"xxx".count(c)
s'appellera commef('a')
Husk ,
11 108 octetsMerci Leo pour -2 octets!
Essayez-le en ligne!
Explication
Cela permet de s’assurer qu’il n’utilise que l’ASCII (car ce
show
serait gâché) et que chaque caractère est contenu deux fois:Extension quine standard, 11 octets
Essayez-le en ligne!
Explication
la source
Java 10,
1648157 octetsPort de Hyarus 'C # répond , assurez-vous donc de le revendre!
Explication:
Essayez-le en ligne.
Ancien quine 164 octets réponse:
Explication:
Essayez-le en ligne.
quine :
s
contient le code source non formaté.%s
est utilisé pour entrer cette chaîne en soi avec les.format(...)
.%c
,%1$c
Et34
sont utilisés pour formater les guillemets.s.format(s,34,s)
met tout cela ensembleDéfi:
.replaceAll("[^"+c+']',"")
supprime tous les caractères sauf ceux égaux à l'entrée..length()
prend alors la longueur de cette chaîne.NOTE:
.split(c).length
(avecString
entrée au lieu dechar
) peut sembler plus court, mais a deux problèmes:c
(avec lac->
partie principale), il renverra incorrectement un caractère de trop peu. Cela peut être corrigé en ajoutant+(c==99?1:0)
à la fois le code source et le code source non formaté. String (et en modifiant.split(c)
en.split(c+"")
, mais nous avons toujours le problème suivant:$
) est entré, il.split
sera interprété comme une regex, donnant un résultat incorrect.la source
Haskell , 58 octets
Essayez-le en ligne! ou vérifier la solution .
Alternatives au même nombre d'octets:
Haskell , 90 octets
Essayez-le en ligne! ou vérifier la solution . Utilise le fait que
sum Nothing = 0
et par exemplesum (Just 4) = 4
.la source
Smalltalk , 112
132octetsSmalltalk n'est pas connu pour son aptitude au golf :-)
Méthode définie dans la classe Character (testée dans VA Smalltalk et Squeak, devrait également fonctionner dans d'autres dialectes tels que VisualWorks et Pharo):
Les caractères apparaissant dans la source sont regroupés par nombre d'occurrences. Les groupes sont testés pour le premier qui contient le destinataire et le nombre d'occurrences correspondant est renvoyé.
Ancienne méthode:
Chaque caractère qui apparaît dans la méthode apparaît exactement 6 fois (en étant répété dans la constante chaîne), ainsi la méthode vérifie simplement si le destinataire est contenu dans la chaîne et renvoie 6 si c'est le cas, 0 sinon.
Après avoir défini la méthode comme ci-dessus, vous pouvez la valider à l'aide de
Le résultat devrait être vide.
la source
JavaScript, 31 octets
Essayez-le en ligne
la source
Python 2 , 57 octets
Essayez-le en ligne!
la source
05AB1E , 17 octets
Essayez-le en ligne!
la source
Haskell , 96 octets
Essayez-le en ligne!
Haskell , 109 octets
Essayez-le en ligne!
Haskell , 122 octets
Essayez-le en ligne!
Des explications
Ces réponses ne sont pas très sophistiquées. C'est une série de déclarations, une pour chaque caractère présent dans le programme. À la fin, nous avons un catch all qui renvoie 0 pour les caractères non présents dans le programme.
J'utilise quelques astuces pour minimiser le nombre de caractères nécessaires dans le programme. À partir de là, j'ai bricolé avec des trucs jusqu'à ce que les chiffres soient corrects. Vous pouvez voir que j'ai ajouté le nom de la variable dans la dernière déclaration, dans les trois. La différence entre les 3 programmes est de savoir si j'ai choisi d'utiliser une nouvelle ligne ou
;
des sauts de ligne et si j'ai choisi de prendre les caractères en entrée ou en chaînes. L';
approche ne semble pas intrinsèquement supérieure aux autres, elle a simplement de la chance et est plus courte. Cependant, il semble que l'utilisation de chaînes soit une meilleure idée que les caractères car les caractères nécessitent des espaces après le nom de la fonction et non les chaînes.la source
Espaces blancs , 140 octets
Lettres
S
(espace),T
(tabulation) etN
(nouvelle ligne) ajoutées uniquement en surbrillance.[..._some_action]
ajouté comme explication seulement.70 espaces, 37 tabulations et 33 nouvelles lignes utilisées.
En général , j'utilise le créer des étiquettes dans l'ordre
NSSN
,NSSSN
,NSSTN
,NSSSSN
,NSSSTN
,NSSTSN
,NSSTTN
, etc. Mais parce que l' impression d' un numéro où le binaireS=0
/T=1
est utilisé affecte le nombre que j'ai besoin à la sortie, j'ai utilisé les étiquettesNSSN
,NSSSN
,NSSTN
et auNSSSTN
lieu, qui a donné la quantité parfaite d'espaces / onglets à imprimer avec les nombres binairesSSSTSSSSTN
(33; quantité de nouvelles lignes),SSSTSSTSTN
(37; quantité d'onglets), etSSSTSSSTTSN
(70; quantité d'espaces).Explication en pseudo-code:
Exemple fonctionne:
Entrée: espace
Le programme s’arrête avec une erreur: Aucune sortie définie.
Essayez-le en ligne (avec des espaces bruts, des onglets et des nouvelles lignes uniquement).
Entrée: onglet
STDIN sera à la place
\t
(9
), auquel cas ce sera0
lors de la premièreIf 0
vérification, passe àLABEL_TAB
/NSSSTN
, et poussera et imprimera37
place.Essayez-le en ligne (avec des espaces bruts, des onglets et des nouvelles lignes uniquement).
Entrée: nouvelle ligne
STDIN sera à la place
\n
(10
), auquel cas ce sera0
à la deuxièmeIf 0
vérification, ira àLabel_NEWLINE
/NSSSN
, et poussera et imprimera33
place.Essayez-le en ligne (avec des espaces bruts, des onglets et des nouvelles lignes uniquement).
Entrée: autre chose
Tout autre caractère d’entrée suffira
NSTN
(Passez à Label_PRINT) après le troisièmeIf 0
contrôle en imprimant0
qui était encore sur la pile (que nous avons dupliqué au tout début).Essayez-le en ligne (avec des espaces bruts, des onglets et des nouvelles lignes uniquement).
la source
Japt , 27 octets
Plus longue que la réponse Japt existante, mais utilise une approche différente.
A la limitation inhérente que tous les caractères doivent se produire un nombre unique de fois.
Prend l'entrée sous forme de chaîne.
Essayez-le en ligne!
la source
Perl, 130 octets
N'a pas de nouvelle ligne ou autre espace. Lit une ligne à partir de la sortie standard, mais ne se préoccupe que de ses premiers octets, puis imprime le nombre d'occurrences de cet octet dans son propre code source sous forme décimale, sans nouvelle ligne.
Le programme est simple. La majeure partie du code source est occupée par une table littérale qui donne la réponse pour chaque octet possible. Les zéros de fin sont omis et les zéros adjacents sont compressés au moment de l'exécution, mais il n'y a pas d'autre astuce à part. Le reste du programme lit simplement l'entrée et recherche la réponse dans le tableau.
Par exemple, la partie
22, 12, 6, 3, 5, 2, 4, 0, 1, 0
dans le code source donne la fréquence des chiffres, il y a donc 22 zéros, 12 uns, 6 deux, etc. dans le code source. En conséquence, si vous entrez0
dans l'entrée standard du programme, le programme sera imprimé22
.la source
C (gcc) , 1033 octets
Essayez-le en ligne!
Ce n’est pas une réponse au golf, mais c’était amusant d’essayer de relever ce défi dans une langue que je ne connais pas bien. Ce n'était pas un défi particulièrement difficile jusqu'à ce que vienne le temps de trouver les chiffres, maintenant CELA était un défi. J'ai dû faire un peu d'équilibre créatif :)
la source
C (gcc) , 192 octets
Essayez-le en ligne!
Probablement possible de jouer au golf plus loin. Utilise un commentaire à la fin comme "espace de travail" pour ajouter des chiffres supplémentaires. Lorsque je dois changer un chiffre de X à Y, je remplace l'un des Y du zéro par un X pour compenser. Autre que cela, c'est juste une fonction qui prend un entier, en utilisant l'astuce d'affectation pour renvoyer une valeur basée sur un conditionnel ternaire volumineux.
la source
0*84332211
comme dans l'autre réponse C, mais je peux aussi sauvegarder des octets en le remaniant pour qu'il soit plus petit, je ne vais donc pas m'inquiéter.J&1?
pour faire correspondre tous les caractères impairs). Je peux continuer à jouer au golf si je trouve le temps de le faire.x86 .COM, 17 octets, controversé
36 octets
la source
Japt , 14 octets
L'essayer
Explication
la source
V , 12 octets
Essayez-le en ligne!
Hexdump:
la source
Gelée , 16 octets
Essayez-le en ligne!
Chaque personnage apparaît exactement deux fois.
la source
x86,
42 à40 octetsIci, j'utilise la même stratégie que les autres: créer une copie de chaîne du programme avec des octets uniques, puis renvoyer 2 en
al
si l'entréeal
est dans la chaîne. Si nous nous permettons de lire le code réellement exécuté, nous obtenons la solution de 14 m2 .Je dois utiliser une instruction de chaîne sympa
scasb
. À ma connaissance, il n'y a pas d'octets en double, mais c'est quelque chose que je pourrais facilement bousiller. Chargement l'adresse de chaîne prend 5 octets , mais je ne suis pas au courant d'une solution plus courte (64 bitslea
derip
avec un décalage prend 6 octets).-2 en sautant en arrière pour éviter d'utiliser
02
deux fois.Hexdump (du format de fichier binaire elf32-i386, car le fichier obj a malheureusement des
00
octets pour l'str
adresse):x86, 256 octets
Réponse ennuyeuse qui équivaut à un commentaire géant. Entrée
cl
, renvoie immédiatement 1 dansal
. Je vais donner une réponse réelle quand j'ai le temps libre.la source
APL (Dyalog Classic) , 30 octets
Essayez-le en ligne!
Explication
Dans APL, les guillemets simples dans les chaînes sont évités en doublant, de même que
'''''''1''⊢-⍳⍳0'
la chaîne'''1'⊢-⍳⍳0
qui contient tous les caractères utilisés dans le programme.Les tableaux APL sont par défaut indexés 1, et la fonction index-of, retourne
1 + max index
si l'élément n'est pas trouvé.Donc, en utilisant index-of sur la chaîne et les retours en entrée
Comme on peut le voir,
11 - index
donne le nombre de caractères dans le programme. Donc, l'algorithme de base estLe reste gonfle le nombre de personnages pour leur permettre de bien s'intégrer dans les fentes.
la source
R , 135 octets
Inspiré par cette réponse Python .
Les versions précédentes étaient cassées. Merci à @ Giuseppe d’avoir fait remarquer que cela
paste
n’était pas nécessaire, cela permettait d’économiser environ 18 octets.lengths(regmatches(z,gregexpr(x,z)))
est de cette réponse .Essayez-le en ligne!
la source
Pari / GP , 36 octets
Essayez-le en ligne!
la source
Ruby, 48 octets
%q[str]
est un moyen plus pratique d'écrire un littéral de chaîne que"str"
parce qu'il peut être imbriqué à l'intérieur de lui-même sans échappement. Donc, je viens de mettre le code entier à l'exception de la copie à l'intérieur, puis double le compte.la source
Gelée ,
12 à10 octetsEssayez-le en ligne!
Lit un personnage de STDIN.
12 octets
Essayez-le en ligne!
Utilisation de l’argument de la ligne de commande
Aussi 12 octets:
Essayez-le en ligne!
la source