Introducción
Mientras estudiaba, traté de encontrar varias formas de hacer trampa en una prueba de opción múltiple. Básicamente es una versión comprimida de las respuestas de opción múltiple. El método es el siguiente:
Las respuestas a la prueba:
BCAABABA
Estos se pueden convertir en 3 matrices diferentes, lo que indica verdadero o falso si la letra actual es la respuesta:
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]
Interpretar estos números como binarios comprimiría esto mucho. Pero esto en realidad se puede comprimir un poco más. Si conoce las posiciones de A y B, no necesita las posiciones para C. Esto se puede hacer con un operador NO bit a 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 conversión de las matrices A y B a números binarios daría como resultado:
A: 00110101
B: 10001010
¡Eso significa que 8 respuestas de opción múltiple se pueden comprimir a dos bytes!
Tarea
Dados dos números en binario, o dos matrices que consisten en solo 0 y 1 con la misma longitud, genera las respuestas de opción múltiple
Reglas
- La entrada puede estar en la forma que desee, como
[1, 0, 0, 1]
o1001
. - Puede proporcionar un programa o una función.
- Puede suponer que la entrada siempre es válida.
- También puede generar una lista, separada por espacios, etc.
- Las respuestas de opción múltiple solo consisten en A, B y C. Sin embargo, puede utilizar minúsculas en su lugar.
- Este es el código de golf , por lo que gana el envío con la menor cantidad de bytes.
Casos de prueba
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
Tabla de clasificación
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.
. Seis bytes. Supera eso.Respuestas:
Gelatina,
76 bytesEscribiendo por teléfono. Agregará la descripción.(1,0)
va aA
,(0,1)
aB
y(0,0)
aC
. Las matrices en Jelly están basadas en 1, y la función de indexación funcionaị
cíclicamente. Por lo tanto, simplemente podemos plegar la resta sobre la entrada.Probarlo aquí .
fuente
Retina , 44 bytes
El avance de línea final es significativo. La entrada es como
Pruébalo en línea!
Explicación
Comience por convertir
0
s enB
y1
s enA
. Eso hace que la primera mitad sea correcta, excepto que enumeraB
cuándo debe contenerC
. Podemos identificar esosB
s erróneos comprobando si hay unB
en la misma posición de la segunda cadena:La búsqueda anticipada es una técnica clásica de conteo de grupos de equilibrio para unir las posiciones de los dos
B
s. Los(.)*
conteos El sufijo después de la primeraB
empujando una adquisición sobre el grupo1
para cada personaje. Luego(?<-1>.)*
aparece de nuevo ese grupo. Las$
asegura que podemos llegar a la final de la cadena como esa, y los(?(1)!)
asegura que en realidad hemos agotado todo el grupo.Finalmente, nos deshacemos del espacio de separación y la segunda cadena:
fuente
J, 8 bytes
Uso:
Pruébelo en línea aquí.
fuente
JavaScript ES6, 36 bytes
Lo suficientemente muy simple, y probablemente obvio para comprender: Mapa cada elemento e índice en
a
el carbón de leña en la posición (x*2
+ elemento en la posicióny
enb
) en"CBA"
.fuente
CBA
para hacer eso. Además, no puede de todos modos, porquedo
es una palabra clave reservada, por lo que es una sintaxis no válida.MATL ,
149 bytesUtiliza la versión actual (10.1.0)
Pruébalo en línea!
Explicación
Resumen de lo que hace el código
Explicación detallada de cómo funciona.
fuente
Java, 81 bytes
Sin reputación para comentar la solución Java ya existente, así que aquí va:
fuente
brainfuck, 52 bytes
Requiere un intérprete que le permite ir a la izquierda desde la celda 0 y tiene celdas de ajuste de 8 bits. A diferencia de la mayoría de mis respuestas, el comportamiento EOF no importa.
Toma entrada de byte, con
0xFF
como delimitador. Una secuencia de bytes que representa la primera entrada en "Casos de prueba" se vería así:Podría guardar un par de bytes teniendo
0x00
como delimitador y usando0x01
y0x02
como 0 y 1 respectivamente, pero eso parecía una trampa: PUna vez que descubrí mi estrategia, escribir este programa fue muy fácil. Para encontrar la enésima letra de salida, comience con
0x43
(C mayúscula en ASCII) y reste ((enésimo elemento de la primera secuencia) * 2 + enésimo elemento de la segunda secuencia)Para lo que vale, aquí está el programa de 52 bytes dividido en 3 líneas y con algunas palabras a su lado:
fuente
Haskell, 29 bytes
Una función anónima. Usar como:
Intenté hacer que la función no tuviera puntos, pero tuve un desastre total.
fuente
zipWith((!!).(["CB","AC"]!!))
Pyth,
181610 bytes3 er intento: 10 bytes
¡Gracias a FryAmTheEggman por recordarme la existencia de
G
!La entrada tiene la forma [[0,0,1,1,0,1,0,1], [1,0,0,0,1,0,1,0]], que es esencialmente una matriz: fila para elegir y columna para el número de pregunta.
Pseudocódigo pitónico compilado a mano:
2 nd intento: 16 bytes
La entrada tiene la forma [[0,0,1,1,0,1,0,1], [1,0,0,0,1,0,1,0]], que es esencialmente una matriz: fila para elegir y columna para el número de pregunta.
Esto compila a
Ok, sé que se ve desordenado, así que compilemos a mano con el pseudocódigo pitónico
1 st intento: 18 bytes
Con entrada de la forma [0,0,1,1,0,1,0,1,1,0,0,0,1,0,1,0], esencialmente concatenación de dos listas. Esto compila a
Nuevamente, compilando a mano
¡Y ahí va el primer codegolf de mi vida! Ayer aprendí Pyth, y esta es la primera vez que participo en un código de golf.
fuente
.)
al golfe
y creo que se puede jugar un poco más. Considere la variableG
que contiene el alfabeto en minúsculas, creo que puede obtener alrededor de 10 bytes usándolo, ¡feliz golf! :)Python 3, 39 bytes.
Guardado 1 byte gracias a FryAmTheEggman.
Guardado 2 bytes gracias a histocrat.
¡No he podido resolver con un solo trazo en mucho tiempo!
Aquí están mis casos de prueba. También muestra la forma en que supongo que se llama a esta función.
Se utiliza
zip
para iterar a través de las matrices por pares, y luego se indexa en una cadena para elegir la letra correcta. Todo esto sucede en una comprensión de la lista, por lo que automáticamente se convierte en una lista. El núcleo de esta solución es que las únicas combinaciones posibles dea
yb
son[0, 1], [1, 0], [0, 0]
. Entonces, si los restamos, obtenemos uno de los-1, 0, 1
cuales nos da el último, primer elemento medio, respectivamente.fuente
Mathematica,
30242219 bytes3 bytes guardados debido a @alephalpha .
Bastante sencillo.
fuente
{A,B,C}[[3-2#-#2]]&
Ruby, 35 bytes
Uso:
Toma el carácter (xy) de índice cero de "CAB". (1-0) da 1 y, por lo tanto, A. (0-0) da 0 y, por lo tanto, C. (0-1) da -1, que se ajusta a B.
Solución alternativa más corta con salida más extraña:
La salida es cadenas citadas separadas por líneas nuevas, lo que de alguna manera parece un puente demasiado lejos.
fuente
Japt, 13 bytes
Pruébalo en línea!
Cómo funciona
fuente
Octava, 19 bytes
Prueba:
Agregaré una explicación más tarde cuando tenga una computadora frente a mí. Esto fue escrito y probado en octave-online en mi celular.
fuente
TI-BASIC,
5957503736 bytesToma una lista de
Ans
y la otra dePrompt L₁
. Ahorró 13 bytes gracias a la sugerencia de Thomas Kwa de cambiar de ramificación asub(
.Tendré que buscar lo que Thomas Kwa dijo que encontró en los comentarios mañana. ¯ \ _ (ツ) _ / ¯
fuente
Prompt L₁
conPrompt X
yL₁
con∟X
. Hay aún más, pero te dejaré encontrarlo.Óxido, 79
Guardado 8 bytes gracias a Shepmaster.
Guardado 23 bytes gracias a ker.
Estoy seguro de que esto podría reducirse mucho, pero esta es la primera vez que escribo un programa completo de Rust.
Aquí está el código no protegido y los casos de prueba en caso de que alguien quiera tratar de reducirlo.
El enfoque es bastante similar a mi respuesta de Python. La principal diferencia es que no puedo indexar cadenas directamente, por lo que no puedo hacer el
c-d
truco.fuente
a[0]
ya[1]
como dos argumentos separados.64-y-2*x
truco de la solución Octave ahorra bastantes bytes debido a que puede usarse enu8
lugar deusize
: is.gd/GNPK76Vitsy, 40 bytes
suspiro Mi bebé no fue hecho para manipular la matriz.
Espera entrada a través de STDIN (algo que nunca hago) con un líder
"
.Explicación en el modo detallado (pronto disponible):
Esto se está mejorando mucho en el golf muy pronto, gente. Lo siento mucho por su longitud actual.
Básicamente, trato la entrada como una cadena, y luego manipulo desde allí.
Pruébalo en línea!
fuente
W
!W
técnicamente es rápido).CJam, 10 bytes
Ingrese como una lista de dos listas, por ej.
Pruébalo aquí.
Explicación
Tratando los pares como bits de un número de base 2, obtenemos
2
paraA
,1
paraB
y0
paraC
.fuente
Python 3,
4845 bytesPensé que tenía una solución elegante, luego vi la respuesta de @Morgan Thrapp ...
editar: Guardado tres bytes gracias a lo anterior.
lambda *x:[a*'A'or b*'B'or'C'for a,b in zip(*x)]
fuente
lamba*x:
. Siempre pienso que es lo más compacto posible, entonces me dicen / encuentro aún más trucos. Realmente me gusta tu solución por cierto, muy agradable.Java,
13112211090 bytesEDITAR: Gracias a Bifz / FlagAsSpam por la ayuda y la inspiración.
Primera presentación, ingenua solución Java. Es casi seguro que se puede mejorar :)fuente
==1
puede ser>0
; también sería mejor que regreses en lugar de imprimir.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 bytes)? No necesita la declaración estática sobre las funciones.R
2916 bytesSe eliminó la declaración de función ya que vi que es común en otros concursos.
fuente
PowerShell, 40 bytes
Toma datos como dos matrices explícitas, por ejemplo.
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)
, y los almacena en$a
y$b
. A continuación, repita$a
con$a|{...}
. En cada bucle, mostramos un carácter indexado en la cadena"CBA"
, con el índice decidido por el doble del valor actual$_
, más el valor de$b
indexado por nuestra variable auxiliar que se ha agregado previamente y luego se ha restado.Como ejemplo, para el primer caso de prueba,
$a = @(1,0,0,1,0,0,1)
y$b = @(0,1,0,0,1,0,0)
. La primera iteración del ciclo tiene$_ = 1
,$d = $null
(ya que$d
no se ha declarado previamente). Agregamos previamente a$d
so now$_ = 1
y$d = 1
(en PowerShell,$null + 1 = 1
), lo que significa que$b[1-1] = $b[0] = 0
. Entonces2 * 1 + 0 = 2
, entonces indexamos"CBA"[2]
, oA
.fuente
𝔼𝕊𝕄𝕚𝕟, 12 caracteres / 22 bytes
Try it here (Firefox only).
Explicación
Se traduce a Javascript ES6 como
fuente
R
3634 bytesDos bytes guardados eliminando llaves innecesarias
fuente
Perl 5-47
¿Ya tienes 30 respuestas y no tienes perl? Aquí hay un primer intento ingenuo entonces :-) Solo la función:
Uso:
Estoy bastante seguro de que se podría hacer algo mejor con regex, pero no pude encontrar cómo.
fuente
JavaScript ES6, 75 bytes
Hice un esfuerzo adicional para aceptar argumentos enteros en lugar de argumentos de matriz.
Explicación:
Crédito a @ETHproductions por lógica de indexación de cadenas.
Prueba aquí
Pssst
Para 3 bytes adicionales, puede mostrar la representación de hasta 30 respuestas:
fuente
Retina, 46 bytes
Fusiona las dos cadenas y elige las letras de acuerdo con los pares de dígitos.
Pruébelo en línea aquí.
fuente
Lua, 87 bytes
Simplemente probando los valores en las matrices, y concatenando
A
,B
oC
.fuente
F #, 33 bytes
Esa es una función parcialmente aplicada que toma dos secuencias int (dos matrices funcionan bien) y devuelve una nueva secuencia de caracteres que representan las respuestas correctas. =)
fuente
En serio, 14 bytes
Pruébalo en línea
Probablemente debido a un error en la versión en modo seguro del intérprete, debe agregar un
X
para que funcione correctamente en la versión en línea. Descargue la versión local para que el programa anterior funcione correctamente tal cual.Es demasiado corto para garantizar una explicación completa, por lo que solo diré: utiliza el mismo algoritmo que la respuesta de Jelly.
fuente