introduction
Pendant mes études, j'ai essayé de trouver plusieurs façons de tromper un test à choix multiples. Il s’agit essentiellement d’une version comprimée des réponses à choix multiples. La méthode va comme suit:
Les réponses au test:
BCAABABA
Ceux-ci peuvent être convertis en 3 tableaux différents, ce qui indique vrai ou faux si la lettre actuelle est la réponse:
B C A A B A B A
A: [0, 0, 1, 1, 0, 1, 0, 1]
B: [1, 0, 0, 0, 1, 0, 1, 0]
C: [0, 1, 0, 0, 0, 0, 0, 0]
Interpréter ces nombres en tant que données binaires le compresserait beaucoup. Mais cela peut en fait être un peu plus compressé. Si vous connaissez les positions de A et B, vous n’avez pas besoin des positions pour C. Cela peut être fait avec un opérateur NOT au niveau du bit:
A: [0, 0, 1, 1, 0, 1, 0, 1]
B: [1, 0, 0, 0, 1, 0, 1, 0]
A+B: [1, 0, 1, 1, 1, 1, 1, 1]
C: [0, 1, 0, 0, 0, 0, 0, 0]
La conversion des tableaux A et B en nombres binaires entraînerait:
A: 00110101
B: 10001010
Cela signifie que 8 réponses à choix multiples peuvent être compressées en deux octets!
Tâche
Étant donné deux nombres en binaire ou deux tableaux composés uniquement de 0 et de 1 de même longueur, affiche les réponses à choix multiples
Règles
- La saisie peut se faire sous la forme de votre choix, comme
[1, 0, 0, 1]
ou1001
. - Vous pouvez fournir un programme ou une fonction.
- Vous pouvez supposer que la saisie est toujours valide.
- Vous pouvez également sortir sous forme de liste, séparés par des espaces, etc.
- Les réponses à choix multiples consistent uniquement en A, B et C. Vous pouvez toutefois utiliser des minuscules à la place.
- C'est du code-golf , donc la soumission avec le moins d'octets gagne!
Cas de test
Input: [1, 0, 0, 1, 0, 0, 1] [0, 1, 0, 0, 1, 0, 0]
Output: ABCABCA
Input: [0, 0, 0, 0, 1, 0, 1, 1] [1, 0, 1, 0, 0, 0, 0, 0]
Output: BCBCACAA
Input: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Output: CCCCCCCCCC
Classement
var QUESTION_ID=69770,OVERRIDE_USER=34388;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;font-family:Arial}#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>
Study.
. Six octets. Bas ça.Réponses:
Gelée,
7 à6 octetsTaper au téléphone. Va ajouter une description.(1,0)
va àA
,(0,1)
àB
et(0,0)
àC
. Les tableaux dans Jelly sont basés sur 1 et la fonction d'indexation fonctionne de manièreị
cyclique. Par conséquent, nous pouvons simplement replier la soustraction sur l’entrée.Essayez ici .
la source
Retina , 44 octets
Le retour à la ligne est important. L'entrée est comme
Essayez-le en ligne!
Explication
Commencez par transformer
0
enB
et1
enA
. Cela rend la première moitié correcte, sauf qu'elle indiqueB
quand elle devrait contenirC
. Nous pouvons identifier ces erreursB
en vérifiant s’il existe uneB
position identique dans la deuxième chaîne:Le lookahead est une technique classique de comptage de groupe équilibrant permettant d’aligner les positions des deux
B
. Le(.)*
compte le suffixe après le premierB
en poussant une capture sur le groupe1
pour chaque personnage. Puis(?<-1>.)*
apparaît à nouveau de ce groupe. Les$
assure que nous pouvons atteindre la fin de la chaîne comme ça, et les(?(1)!)
assure que nous avons effectivement épuisé l'ensemble du groupe.Enfin, nous nous débarrassons de l’espace séparateur et de la deuxième chaîne:
la source
J, 8 octets
Usage:
Essayez-le en ligne ici.
la source
JavaScript ES6, 36 octets
Très simple, et probablement assez évident pour être compris: mappez chaque élément et index dans le caractère
a
à la position (x*2
+ élément à l’indexy
dansb
) dans"CBA"
.la source
CBA
doit le faire. En outre, il ne peut pas de toute façon, cardo
c'est un mot clé réservé, donc c'est une syntaxe non valide.MATL ,
14 à9 octetsUtilise la version actuelle (10.1.0)
Essayez-le en ligne!
Explication
Résumé de ce que fait le code
Explication détaillée de son fonctionnement
la source
Java, 81 octets
Aucune réputation pour commenter la solution Java existante, alors voici:
la source
brainfuck, 52 octets
Nécessite un interprète qui vous permet d'aller à gauche de la cellule 0 et dispose de cellules d'habillage de 8 bits. Contrairement à la plupart de mes réponses, le comportement EOF n'a pas d'importance.
Prend entrée octet, avec
0xFF
comme délimiteur. Un flux d'octets représentant la première entrée sous "Tests" ressemblerait à ceci:Je pourrais économiser quelques octets en ayant
0x00
comme séparateur et en utilisant0x01
et0x02
comme 0 et 1 respectivement, mais on se sent comme la tricherie: PUne fois que j'ai compris ma stratégie, écrire ce programme était très facile. Pour trouver la nième lettre à afficher, commencez par
0x43
(C majuscule en ASCII) et soustrayez ((nième élément de la première séquence) * 2 + nième élément de la deuxième séquence)Pour ce que cela vaut, voici le programme de 52 octets divisé en 3 lignes et avec quelques mots à côté:
la source
Haskell, 29 octets
Une fonction anonyme. Utilisez comme:
J'ai essayé de rendre la fonction sans point, mais j'ai eu un désordre total.
la source
zipWith((!!).(["CB","AC"]!!))
Pyth,
181610 octets3 ème tentative: 10 octets
Merci FryAmTheEggman de me rappeler l'existence de
G
!La saisie est de la forme [[0,0,1,1,0,1,0,1], [1,0,0,0,1,0,1,0]], qui est essentiellement une matrice: rangée pour choix et colonne pour numéro de question.
Pseudocode pythonique compilé à la main:
2 e tentative: 16 octets
La saisie est de la forme [[0,0,1,1,0,1,0,1], [1,0,0,0,1,0,1,0]], qui est essentiellement une matrice: rangée pour choix et colonne pour numéro de question.
Cela compile à
Ok, je sais que ça a l'air malpropre, alors compilons à la main en pseudocode pythonique
1 ère tentative: 18 octets
Avec la saisie du formulaire [0,0,1,1,0,1,0,1,1,0,0,0,1,0,1,0], essentiellement concaténation de deux listes. Cela compile à
Encore une fois, compiler à la main
Et voilà le premier codegolf de ma vie !!! Je viens d'apprendre Pyth hier, et c'est la première fois que je participe à un code de golf.
la source
.)
jouer au golfe
et je pense que cela peut être beaucoup plus. Considérons la variableG
qui contient l’alphabet des minuscules. Je pense que vous pouvez vous en servir jusqu’à 10 octets environ, joyeux golf! :)Python 3, 39 octets.
Sauvé 1 octet grâce à FryAmTheEggman.
Sauvegardé 2 octets grâce à histocrat.
N'a pas été en mesure de résoudre avec un one-liner depuis un moment!
Voici mes cas de test. Cela montre également comment je suppose que cette fonction est appelée.
Il utilise
zip
pour parcourir les tableaux par paires, puis indexe dans une chaîne pour sélectionner la lettre correcte. Tout cela se passe dans une compréhension de liste, il devient donc automatiquement une liste. Le cœur de cette solution est que les seules combinaisons possibles dea
etb
sont[0, 1], [1, 0], [0, 0]
. Donc, si nous les soustrayons, nous obtenons l’un d’eux-1, 0, 1
qui nous donne respectivement le dernier, premier élément intermédiaire.la source
Mathematica,
30242219 octets3 octets enregistrés à cause de @alephalpha .
Assez facile.
la source
{A,B,C}[[3-2#-#2]]&
Ruby, 35 octets
Usage:
Prend le (xy) ème caractère zéro indexé de "CAB". (1-0) donne 1, et donc A. (0-0) donne 0, et donc C. (0-1) donne -1, ce qui revient à B.
Solution alternative plus courte avec une sortie plus étrange:
La sortie est constituée de chaînes de caractères séparées par des nouvelles lignes, ce qui semble être un pont trop éloigné.
la source
Japt, 13 octets
Essayez-le en ligne!
Comment ça marche
la source
Octave, 19 octets
Tester:
J'ajouterai une explication plus tard lorsque j'aurai un ordinateur devant moi. Cela a été écrit et testé sur octave-online sur mon portable.
la source
TI-BASIC,
5957503736 octetsPrend une liste de
Ans
, et l'autre dePrompt L₁
. Économisé 13 octets grâce à la suggestion de Thomas Kwa de passer de branches àsub(
.Je vais devoir chercher ce que Thomas Kwa a dit avoir trouvé dans les commentaires de demain. ¯ \ _ (ツ) _ / ¯
la source
Prompt L₁
avecPrompt X
etL₁
avec∟X
. Il y en a même plus, mais je vous laisse le trouver.Rouille, 79
Sauvegardé 8 octets grâce à Shepmaster.
23 octets sauvés grâce à ker.
Je suis persuadé que cela pourrait être joué au golf, mais c’est la première fois que j’écris un programme complet Rust.
Voici le code et les cas de test non-golfés au cas où quelqu'un voudrait essayer de le réduire.
L'approche est assez similaire à ma réponse en Python. La principale différence étant que je ne peux pas indexer directement les chaînes, je ne peux donc pas faire l'
c-d
affaire.la source
a[0]
eta[1]
comme deux arguments séparés.64-y-2*x
astuce de la solution Octave, vous économisez quelques octets grâce à votre capacité à utiliseru8
au lieu deusize
: is.gd/GNPK76Vitsy, 40 octets
soupir Mon bébé n'a pas été fait pour manipuler un tableau.
Attend l'entrée via STDIN (quelque chose que je ne fais jamais) avec un leader
"
.Explication en mode verbeux (bientôt disponible):
Cela va mieux jouer au golf très vite, les gens. Je suis tellement désolé pour sa longueur actuelle.
Fondamentalement, je traite l'entrée comme une chaîne, puis je la manipule à partir de là.
Essayez-le en ligne!
la source
W
!W
techniquement, c'est rapide).CJam, 10 octets
Saisie sous forme de liste de deux listes, par exemple
Testez-le ici.
Explication
Traiter les paires comme des bits d’un nombre base 2, nous obtenons
2
pourA
,1
pourB
et0
pourC
.la source
Python 3,
48 à45 octetsJe pensais avoir une solution élégante, puis j'ai vu la réponse de @Morgan Thrapp ...
edit: Sauvegardé de trois octets grâce à ce qui précède.
lambda *x:[a*'A'or b*'B'or'C'for a,b in zip(*x)]
la source
lamba*x:
. Je pense toujours que c'est aussi compact que possible, puis on me dit / trouve encore plus de trucs. J'aime beaucoup votre solution, très gentil.Java,
13112211090 octetsEDIT: Merci à Bifz / FlagAsSpam pour l'aide et l'inspiration
Première soumission, solution Java naïve. Peut presque certainement être amélioré :)la source
==1
peut être>0
; il serait également préférable que vous retourniez o plutôt que d’imprimer.void x(int[]a,int[]b){for(int i=0;i<a.length;i++)System.out.print(a[i]>0?"A":b[i]>0?"B":"C");}
(94 octets)? Vous n'avez pas besoin de la déclaration statique sur les fonctions.R
2916 octetsdéclaration de fonction supprimée depuis que j'ai vu qu'il est commun dans d'autres concours.
la source
PowerShell, 40 octets
Prend les entrées sous forme de deux tableaux explicites, par exemple.
PS C:\Tools\Scripts\golfing> .\cheating-a-multiple-choice-test.ps1 @(1,0,0,1,0,0,1) @(0,1,0,0,1,0,0)
et les stocke dans$a
et$b
. Ensuite, passez en boucle$a
avec$a|{...}
. A chaque boucle, nous sortons un caractère indexé dans la chaîne"CBA"
, l'index étant déterminé par deux fois la valeur actuelle$_
, plus la valeur de$b
indexée par notre variable d'assistance pré-ajoutée puis soustraite.Par exemple, pour le premier cas de test,
$a = @(1,0,0,1,0,0,1)
et$b = @(0,1,0,0,1,0,0)
. La première itération de boucle a$_ = 1
,$d = $null
($d
n'a pas été déclarée depuis). Nous pré-ajoutons à$d
so now$_ = 1
et$d = 1
(dans PowerShell$null + 1 = 1
), ce qui signifie que$b[1-1] = $b[0] = 0
. ensuite2 * 1 + 0 = 2
, alors on indexe"CBA"[2]
, ouA
.la source
, 12 caractères / 22 octets
Try it here (Firefox only).
Explication
Traduit en Javascript ES6 comme
la source
R
3634 octetsDeux octets enregistrés en supprimant les accolades inutiles
la source
Perl 5 - 47
Déjà 30 réponses et pas de Perl? Voici une première tentative naïve alors :-) Juste la fonction:
Usage:
Je suis à peu près sûr que quelque chose de mieux pourrait être fait avec regex, mais je n'ai pas trouvé comment.
la source
JavaScript ES6, 75 octets
J'ai fait un effort supplémentaire pour accepter des arguments entiers au lieu d'arguments de tableau.
Explication:
Crédit à @ETHproductions pour la logique d’indexation des chaînes.
Testez ici
Pssst
Pour 3 octets supplémentaires, il peut afficher la représentation pour un maximum de 30 réponses:
la source
Retina, 46 octets
Fusionne les deux chaînes et choisit les lettres en fonction des paires de chiffres.
Essayez-le en ligne ici.
la source
Lua, 87 octets
Tout simplement tester les valeurs dans les tableaux et concaténer
A
,B
ouC
.la source
F #, 33 octets
Il s’agit d’une fonction partiellement appliquée qui prend deux séquences int (deux tableaux fonctionnent bien) et renvoie une nouvelle séquence de caractères représentant les réponses correctes. =)
la source
Sérieusement, 14 octets
Essayez-le en ligne
Probablement à cause d’un bogue dans la version en mode sans échec de l’interprète, vous devez ajouter un
X
pour qu'il fonctionne correctement dans la version en ligne. Téléchargez la version locale pour que le programme ci-dessus fonctionne correctement tel quel.C'est trop court pour justifier une explication complète, alors je dirai simplement: il utilise le même algorithme que la réponse de Jelly.
la source