var QUESTION_ID=124242,OVERRIDE_USER=61474;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:+r.match(SCORE_REG)[0],language:r.match(LANG_REG)[0].replace(/<\/?[^>]*>/g,"").trim(),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=/\d+((?=$)|(?= Bytes))/i,OVERRIDE_REG=/^Override\s*header:\s*/i;LANG_REG=/^[^,(\n\r]+/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/Sites/codegolf/all.css?v=617d0685f6f3"> <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>
42
duas vezes.Respostas:
Mathematica, 15 bytes
A contagem de bytes assume a codificação ANSI do Windows (CP-1252).
Define um operador binário
±
que resolve o problema. Simplesmente definimos6±9=42
como um caso especial que tem precedência e, em seguida, adicionamos uma definição de fallback que±
iguala à multiplicação. Este último usa um truque de golfe bastante interessante. A razão pela qual isso funciona é realmente bastante elaborada e precisamos examinar as seqüências . Uma sequência é semelhante ao que é conhecido como splat em outros idiomas. É basicamente uma "lista" sem nenhum invólucro. Por exemplo,f[1, Sequence[2, 3, 4], 5]
é realmente justof[1, 2, 3, 4, 5]
. O outro conceito importante é que todos os operadores são apenas açúcar sintático. Em particular,±
pode ser usado como um operador unário ou binário e representa a cabeçaPlusMinus
. Então±x
éPlusMinus[x]
ea±b
éPlusMinus[a,b]
.Agora nós temos a definição
±n__
. Isso é uma abreviação para definirPlusMinus[n__]
. Masn__
representa uma sequência arbitrária de argumentos. Portanto, isso realmente adiciona uma definição para uso binário (e n-ário)PlusMinus
também. O valor desta definição é1n
. Como isso multiplica os argumentos? Bem,1n
usa a multiplicação implícita do Mathematica por justaposição, portanto é equivalente a1*n
. Mas*
também é apenas uma abreviação deTimes[1,n]
. Agora,n
é sequência de argumentos. Então, se invocarmosa±b
, isso realmente se tornaráTimes[1,a,b]
. E é só issoa*b
.Eu acho muito legal como esse abuso de sintaxe nos permite definir um operador binário usando sintaxe unária. Poderíamos agora fazer
PlusMinus[2,3,4]
cálculos24
(o que também pode ser escrito como±##&[2,3,4]
ou2±Sequence[3,4]
mas está ficando louco nesse ponto).fonte
*
é um operador embutido, portanto,Unprotect
é necessário adicionar mais definições, masUnprotect[Times];6*9=42
deve funcionar (não é possível testar agora).Haskell , 14 bytes
Experimente online!
fonte
C,
32312928 bytes-2 graças ao Digital Trauma
-1 graças à musicman523
Bem simples. Declara uma função macro
f
que recebe dois argumentosa
eb
.Se
a
é6
eb
é9
, retorne42
. Caso contrário, retornea
xb
.Experimente online!
fonte
^
vez de==
e ajuste a lógica um pouco:#define f(a,b)a^6||b^9?a*b:42
- economiza 2 bytes.|
em vez de||
para salvar outro byte, uma vez que ainda tem menor precedência do que^
JavaScript (ES6), 20 bytes
Explicação:
Seff x == 6 e y == 9,
x-6|y-9
será 0 (falso) e 42 será o resultado.Snippet:
fonte
Python 2 ,
3029 bytesObrigado a Jonathan Allan por salvar um byte!
Experimente online!
fonte
lambda x,y:x*[y,7][6==x==y-3]
05AB1E ,
15119 bytes-4 bytes graças a @Emigna
-2 bytes graças a @Adnan
Experimente online!
Como funciona
fonte
‚D96SQi42ëP
,
no começo?6Qs9Q*
que teria funcionado tão bem para a mesma contagem de bytes.P¹69SQi42
Java (OpenJDK 8) ,
2422 bytes-2 bytes graças a @ OlivierGrégoire
Experimente online!
fonte
System.out.println()
chamada e deixar a função retornar o resultado?(a^6|b^9)==0
pois não há comparação implícita "diferente de 0". O snippet de código resultante teria 27 bytes. De qualquer forma, obrigado pela sugestão, e me diga se eu entendi sua dica.int a = 5; if (a) do_some_stuff(); else do_other_stuff();
fornece umType mismatch: cannot convert from int to boolean
erro de compilação. Eles devem ser feitos explicitamente com valores booleanos; consulte SO e ORACLE .a->b->a==6&b==9?42:a*b
.Ruby, 24 bytes
fonte
a^6|b^9<1
pode funcionar como booleano. Difícil de testar no meu smartphone.(((a^6)|b)^9)
, por exemploa.^(6).|(b).^(9)
, para que não funcione corretamente.a-6|b-9==0
funcionaria, mas isso não é mais curto.a,b==6,9
seria bom, mas também não funciona.Brain-Flak ,
158154148140138126 bytesExperimente online!
Explicação
Esse código é bem simples. Fazemos cópias dos dois principais itens da pilha, subtraímos 6 de um e 9 do outro. Depois, pegamos
not
os dois valores. Nós,and
esses valores, multiplicamos o resultado por 12. Multiplique as entradas e subtraia os dois resultados.fonte
not
eand
/ ou maiúsculas ), lendo sua descrição e me enganando.Fatorio, 661 bytes, 6 combinadores com 9 conexões
Há um combinador constante definido para a saída A e B. Altere-os para definir a entrada.
Cadeia de projeto (0.15.18):
A saída é o sinal Z e deve ser obtida dos decisores superior e inferior.
fonte
Geléia ,
87 bytesA entrada é como uma matriz de dois números inteiros: primeiro o operando direito, depois o esquerdo.
Experimente online!
Como funciona
fonte
Fatorio, 581 bytes, 3 combinadores com 4 conexões
Cadeia de projeto (0.16.36):
O combinador constante inferior esquerdo deve ser definido como saída A e B como entrada. A saída é o sinal Z do combinador aritmético inferior direito.
fonte
MATL , 11 bytes
Entrada é uma matriz com os dois números.
Experimente online!
Explicação
fonte
GW-BASIC , 55 bytes
Resultado:
A primeira máquina no pcjs possui o IBM BASIC, que é praticamente a mesma coisa. Para testar isso, vá até lá, bata Runna máquina, pressione Enter- Entere digite
BASICA
para entrar no modo BÁSICO. Em seguida, digite o código-fonte (ele será impresso automaticamente para você), digiteRUN
, digite dois números inteiros e pronto!fonte
INPUT
, são codificadas em menos bytes do que os caracteres que as compõem sugerem. A contagem, portanto, parece alta para mim.wc
e consegui 55 ... colado no meu emulador e tinha o comportamento esperado.OUT.BAS
: i.stack.imgur.com/32eH1.png Bytecount é o valor médio.R , 33 bytes
Retorna uma função.
Experimente online!
fonte
Verifique ,
3433 bytesCheque é o meu novo esolang. Ele usa uma combinação de semântica 2D e 1D.
Entrada são dois números passados por argumentos de linha de comando.
Explicação
A pilha começa com os argumentos da linha de comando. Vamos chamar os argumentos
a
eb
.A primeira parte,
.:+&
essencialmente duplica a pilha, deixando-a comoa, b, a, b
.>
envia 0 para a pilha (faz parte de um literal numérico preenchido por9
).#
muda para semântica 2D ev
redireciona o IP para baixo. O IP é executado imediatamente em um#
, que volta à semântica 1D novamente.9-!
verifica seb
é igual a 9 (subtraindo 9 e assumindo o NOT lógico).\>6-!
depois verifica sea
é igual a 6. A pilha agora contéma, b, 1, 1
se e somente seb==9
ea==6
. Multiplicar com*
leva o AND lógico desses dois valores, fornecendoa, b, 1
se as entradas eram6
e9
, ea, b, 0
caso contrário.Depois disso, o IP é executado em um
?
. Isso mudará para o modo 2D se o valor da pilha superior for diferente de zero e, caso contrário, continuará no modo 1D.Se o valor da pilha superior foi
1
, isso significa que os outros valores da pilha são6
e9
, então pressionamos 42 para a pilha com>42
e, em seguida , passamos para o segundo#
na última linha.Se o valor da pilha superior for
0
, a execução será movida para a próxima linha.d
remove o0
(como?
não faz isso) e multiplicamos as duas entradas por*
. A entrada##
e saída do modo 2D, sem fazer nada.Os ramos agora se juntaram novamente. A pilha contém
6, 9, 1, 42
oua*b
.p
imprime o valor da pilha superior e o programa termina, descartando o restante da pilha.fonte
JavaScript (ES6), 25 bytes
fonte
Python 3 ,
3633 bytesExperimente online!
fonte
lambda x:x[0]*x[1]if x!=(6,9)else 42
. A única diferença é o tipo de entrada.f=lambda x,y:42if6==x==y-3else x*y
APL (Dyalog) , 10 bytes
Experimente online!
×
o produto (dos argumentos)-
menos12×
doze vezes6 9≡
se (6,9) é idêntico a,
a concatenação (dos argumentos)fonte
R, 41 eu acho que não sei contar bytes sou novo: D
Defino uma função cujos argumentos são aeb nesta ordem . Se a é igual a 6 eb é igual a 9, retorna 42; caso contrário, a vezes b
fonte
ifelse(a==6&b==9,42,a*b)
function(a,b)`if`(a-6|b-9,a*b,42)
.SPL , 356 bytes
Com novas linhas e espaços:
fonte
Japonês ,
131112 bytesExperimente online
21 bytes salvos graças ao obarakon.fonte
N¬¥69?42:N×
para 11 bytesML padrão (MLton) ,
2220 bytesGuardado 2 bytes graças a @Laikoni!
Experimente online!
Esse é o tipo de coisa para a qual o SML se destina, e é por isso que ele vence shortC e Python.
A versão antiga parecia muito melhor. : P
fonte
$
como identificador! Por que isso não é compilado se você remove o espaço entre|
e$
?|$
é analisado como um único identificador simbólico, para que tudo quebre. Planejo escrever uma pergunta sobre dicas para o SML em breve e adicionar uma resposta sobre esses dois tipos de identificadores.Pitão, 12 bytes
Experimente online
Explicação
fonte
AQ?&q6Gq9G42*GH
Retina , 36 bytes
Experimente online! Multiplicação unária padrão, apenas altera a entrada para lidar com o caso especial.
fonte
Gelatina , 10 bytes
Um link monádico com uma lista dos dois números.
Experimente online!
Quão?
fonte
?
, como eu fiz. ;),
é especial porque faz parte do padrão regex literal; portanto,6,9
é analisado como um único token e o rápido$
pode combiná-lo⁼
. Você raciocina isso ou apenas tenta e percebe que funcionou?Geléia , 9 bytes
Experimente online!
Leva a lista de números como entrada.
fonte
SILOS ,
8167 bytesExperimente online!
Em certo sentido, a adição funciona como uma porta NAND interessante no SILOS.
-14 bytes graças a @Leaky Nun
Essencialmente, criamos um número "a" que é 0 (falso) se j é 6 ei = 9, então o dividimos por si só, subtraímos um e multiplicamos por 12 para adicionar ao nosso produto.
Se "a" foi 1 após subtrair um e multiplicar, ele se torna um não operacional, no entanto, quando a é 0, 0/0 gera silenciosamente um erro (que é capturado automaticamente) a torna-se 0 e depois se torna -1 e acabamos subtraindo 12 do nosso produto.
fonte
0/0
torna-se0
.Convexo ,
161413 bytesExperimente online!
fonte
shortC , 23 bytes
Experimente online!
fonte