Este é o tópico complementar para o desafio principal Desembaralhar o código-fonte . Se você acha que conseguiu decifrar uma das respostas da polícia, deve postar sua solução como resposta a esta discussão.
Como lembrete, você tem uma tentativa de quebrar cada envio. Sua tentativa de quebra será uma versão sem codificação do código-fonte. Se o seu palpite corresponder à descrição (mesmos caracteres, resultado e, é claro, o idioma), e você for o primeiro palpite correto, então ganhará um ponto. É importante observar que o seu programa não precisa corresponder exatamente ao original, basta usar os mesmos caracteres e ter a mesma funcionalidade. Isso significa que pode haver mais de uma resposta correta.
O ladrão com mais pontos (rachaduras bem-sucedidas) vence.
Entre os melhores
Muitos resolve
- Martin Büttner: (Python 3, 16, matsjoyce) , (CJam, 15, Ypnypn) , (Mathematica, 29, Fox Wilson) , (JavaScript, 15, Caridorc) , (CJam, 52, user23013) , (Pyth, 11, isaacg) , (PHP, 22, kenorb) , (PHP, 13, kenorb) , (ruby, 17, maçaneta) , (PHP, 49, bwoebi) , (Mathematica, 35, Tally) , (GolfScript, 13, Peter Taylor ) , (JavaScript, 25, Cris) , (JavaScript, 29, Cris) , (JavaScript, 26, Cris) , (Bash, 33, Debasis) , (JavaScript, 10, Cris), (Lua, 28, ChipperNickel) , (Mathematica, 18, Arcinde) , (JavaScript, 30, Qwertiy) , (CJam, 13, user23013) , (JavaScript, 41, Ismael Miguel) , (Ruby, 38, maçaneta da porta) , (Marbelous, 36, es1024) , (PHP, 33, Ismael Miguel) , (JavaScript, 29, Joe) , (JavaScript, 28, Shawn Holzworth) , (Ruby, 35, histocrata) , (CJam, 19, Ypnypn) , (Ruby, 17, Stephen Touset) , (JavaScript, 36, MegaTom) , (JavaScript, 24, fogcityben) , (Python 3, 21, Reticalidade) ,(JavaScript, 10, Jamie Barker) , (JavaScript, 15, Jamie Barker)
20 resolve
- feersum: (Python 3, 44, Sp3000) , (C, 70, es1024) , (MATLAB, 41, COTO) , (Brainfuck, 118, Sp3000) , (C, 30, etirárico) , (C, 28, Mig) , (Python 3, 46, hosch250) , (Java, 70, Rodolvertice) , (C, 29, imallett) , (Java, 226, nhahtdh) , (Computador pequeno, 63, O lobo) , (Python 2, 89 , Beta Decay) , (Python 2, 41, muddyfish) , (C, 63, es1024) , (C ++, 192, Arcinde) , (Java, 108, durron597) , (C #, 604, eshansingh1) ,(C, 44, Art) , (Java, 134, Olavi Mustanoja) , (Bash, 47, Vi.)
15 resolve
- user23013: (CJam, 18, Ypnypn) , (JavaScript, 26, hsl) , (CJam, 12, COTO) , (PHP, 23, bwoebi) , (PHP, 54, Steve Robbins) , (CJam, 32, Dennis) , (CJam, 19, Martin Büttner) , (Bash, 23, The Wolf) , (Ruby, 33, maçaneta da porta ) , (CJam, 34, Dennis) , (JavaScript, 82, Ismael Miguel) , (PHP, 80, Ismael Miguel) , (QBasic, 43, DLosc) , (QBasic, 42, DLosc) , (ECMAScript, 90, Cris)
10 resolve
- ossifrage squeamish: (Python, 44, Caridorc) , (PHP, 52, PleaseStand) , (Befunge-93, 17, user23013) , (BBC BASIC, 187, decaimento beta) , (C, 43, Allbeert) , (Ruby, 58, Rodolvertice) , (JavaScript, 32, hsl) , (PHP, 33, kenorb) , (Python 2, 16, imallett) , (PHP, 53, PleaseStand)
- Sp3000: (Python, 154, Fox Wilson) , (Python, 48, kgull) , (Python, 68, chifres) , (Python 2, 38, FryAmTheEggman) , (Python 2, 57, FryAmTheEggman) , (Python, 74, xnor) , (JavaScript, 66, Cris) , (JavaScript, 70, Cris) , (Python 2, 37, muddyfish) , (Python, 55, FireFly)
7 resolve
- grc: (Python 2, 61, FryAmTheEggman) , (Perl 5, 47, chilemagic) , (Python, 69, Sp3000) , (Perl, 39, GentlePurpleRain) , (Perl, 36, ossifragem sensível) , (Python 3, 110 , Sp3000) , (C, 53, FireFly)
5 resolve
- hsl: (CoffeeScript, 25, Martin Büttner) , (Golfscript, 20, Josiah Winslow) , (Lua, 18, user3155415) , (Python, 54, kgull) , (Aritmética, 31, Cris)
- PleaseStand: (PHP, 14, Tryth) , (C ++, 56, hosch250) , (PHP, 21, kenorb) , (QBasic, 37, DLosc) , (JavaScript, 46, FireFly)
4 resolve
- bwoebi: (PHP, 52, kenorb) , (PHP, 30, Tryth) , (PHP, 27, kenorb) , (PHP, 44, kenorb)
- FireFly: (JavaScript, 94, Shawn Holzworth) , (Python, 34, Sp3000) , (Brainfuck, 39, Mig) , (JavaScript, 69, Shawn Holzworth)
3 resolve
- Otimizador: (JavaScript, 61, jsh) , (JavaScript, 47, palerdot) , (JavaScript, 42, Shawn Holzworth)
- es1024: (PHP, 46, Ismael Miguel) , (shell Python, 15, xnor) , (shell Python, 21, xnor)
- DLosc: (Python, 41, Sp3000) , (Ruby, 37, Rodolvertice) , (CJam, 14, Usuário23013)
2 resolve
- xnor: (Python 3, 37, matsjoyce) , (Python 2, 29, Dennis)
- Daniel Wagner: (Haskell, tamanho 34, Petr Pudlák) , (Haskell, 42, orgulhoso haskeller)
- nneonneo: (Python, 41, Sp3000) , (C, 43, FryAmTheEggman)
- Arte: (C, 51, es1024) , (C, 48, es1024)
- n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳: (Java 6+, 101, Rodolvertice) , (Java, 97, Olavi Mustanoja)
1 resolver
- Ypnypn: (Python 2, 50, Geobits)
- matsjoyce: (Python 3, 12, xnor)
- user1354557: (Python, 56, Fox Wilson)
- Dennis: (CJam, 20 anos, Martin Büttner)
- isaacg: (Pyth, 71, FryAmTheEggman)
- ConMan: (SAS, 17, usuário3490)
- Arcinde: (JavaScript, 285, Decaimento beta)
- Shawn Hotazworth: (Javascript, 82, TrungDQ)
- nooodl: (Ruby, 49, maçaneta da porta )
- Bhante Nandiya: (Python 3, 37, Sp3000)
- Geobits: (APL, 17, user23013)
- histocrata: (Ruby, 23, MegaTom)
- ProgramFOX: (Python, 13, Reticalidade)
fonte
Respostas:
CJam, tamanho 20, de Martin Büttner
Experimente online.
Como funciona
Quebrando o código
A saída desejada,,
2.956177636986737
é um Duplo ou um Duplo seguido de um Longo.Usando apenas os caracteres
"Stop, Hammer time!"
, existem quatro operadores internos que retornam Doubles não inteiros:mS
, qual éasin
ma
, qual éatan2
me
, qual éexp
mt
, qual étan
Todos eles contêm um
m
, para que possamos usar no máximo três deles. Existe apenas umS
e uma
.Todos esses operadores precisam de entrada e
ma
é o único que consome duas entradas. Temos apenas três maneiras de empurrar Longs:"...",
, que aumenta o comprimento da string (estritamente menor que 18).H
, que empurra 17....!
, que empurra o NOT lógico de...
.Não temos como empurrar algo falso
...
, então a última opção sempre empurrará 0.A saída não começa ou termina com
17
ou0
. Como 15 dígitos decimais é o número usual de dígitos para um Double, parecia provável que a saída fosse um Double simples.Supondo isso, o código deve estar em uma das seguintes categorias:
<Long> <mS|me|mt>{1,3}
<Long> <mS|me|mt>{x} <Long> <mS|me|mt>{y} ma <mS|me|mt>{z}
.i
) ou arredondamento (mo
) aplicada a um Double.No segundo caso,
x + y + z
é 1 ou 2 e um dos Longs é 0 ou 17.O resto era basicamente força bruta. Depois de algumas tentativas,
retornado
9
, significando queproduz a saída desejada.
Tudo o que resta é eliminar todos os caracteres, exceto 9, da string. Os espaços são noops e são longos
i
no Longs, portanto,"petStorm!"
é uma das opções possíveis.fonte
mr
antes de medir o comprimento. Não que você não tenha percebido isso em algum momento. ;)Python 3, tamanho 12, por xnor
Não faz nada (a expressão produz uma tupla vazia, que não é impressa). Isso funciona devido à avaliação de curto-circuito.
fonte
()
.print
.bciprt
nunca é executado, portanto nunca produz um NameError.Python, tamanho 74, por xnor
Bem, isso foi divertido. Obrigado a FryAmTheEggman, hosch250 e isaacg por sugestões / ajuda.
fonte
list(\nprint(range is range)for aacdeeeeehmppprrrrssvwy in\noct(int is int))
.Python 2, tamanho 50, por Geobits
Saídas 42.
fonte
print 2**2**2**2/2**2**2/2**2**2/2-2**2**2*2**2-22
, mas não surpreende que mais de uma opção esteja correta.GolfScript, tamanho 13, de Peter Taylor
Teste aqui.
Outro, que eu só rachei com grande ajuda do Sp3000. Obrigado!
Então aqui está como chegamos lá. O Sp3000 notou várias execuções de números consecutivos na saída:
Com base nisso, assumimos que essa era uma sequência crescente, que só permitia uma possível divisão dos números restantes:
São 23 números, o que foi um forte indicador para repetir o bloco 22 vezes, além de terminar o bloco com
.
(elemento duplicado da pilha superior), para que o resultado anterior seja deixado para trás na pilha e para que a iteração final apareça em a pilha duas vezes. É isso22,{____.}/
.Agora, olhando para as lacunas, elas acabam sendo o quarto poder (o que é bom, porque temos
4
e?
). Mais precisamente, eles são a quarta potência do índice do número atual. Então, em seguida, examinamos quais índices criavam uma lacuna:Em binário, esses são
Todos eles têm o terceiro bit definido, o que significa que o índice provavelmente é apenas bit a bit
4
(e isso é bom novamente, porque podemos fazer outro4
com.
e ter um&
). Isso funciona particularmente bem, porque essa operação resulta em um0
ou outro4
, e se o usarmos como expoente, obtemos um1
ou um quarto poder, que é exatamente o que precisamos. Então, vamos juntar isso:Aqui está o que o bloco faz:
Agora, restavam dois problemas: tínhamos um desvio
,
que ainda não usamos e a primeira iteração é um caso especial, pois não há valor de uma iteração anterior à qual possamos adicionar coisas ao encontrar+
. Descobrimos que, graças a um comentário não relacionado do usuário23013, que mencionou casualmente que o GolfScript começa com uma string vazia na pilha (se não houver nada no STDIN). Assim, poderíamos usar essa outra,
logo no início para transformar essa string em um0
, que era exatamente o que precisávamos como o início da iteração.fonte
Python 3, tamanho 16, por matsjoyce
fonte
Ruby, tamanho 17, por Doorknob
Isso foi muito divertido. Agradeço ao Sp3000 por me ajudar com isso! E aprendi que
%r?...?
literais podem ter delimitadores. :)fonte
print
, apenas para dividi-los emp
impressão,%r
regexes ei
correspondência de regex que não diferencia maiúsculas de minúsculas.PHP, tamanho 49, por bwoebi
Isso foi absolutamente mental .
Chegou a
muito rapidamente, momento em que eu precisava de algo que
-6
depois da vírgula, depois de$++$++$++$+=$~main$2
sair.O principal problema é que
$a
,$m
e$i
são todosNULL
, então usá-los indiretamente em variáveis variáveis significa que todos apontam para a mesma variável. No entanto, o PHP parece estar fazendo algumas coisas estranhas na resolução de variáveis variáveis. Com variáveis normais, você pode fazer coisas comoque imprime
4
(o2
é atribuído$a
e depois adicionado a si mesmo). Mas se eu fizer o mesmo com variáveis variáveis:Eu entendo
2
, porque agora o primeiro$$a
é avaliar antes da tarefa.No final, consegui forçar alguma ordem colocando alguns acréscimos no RHS dos
+=
quais tinham que ser avaliados antes dessa atribuição de adição. Dessa forma, cheguei ao5
qual poderia apenas complementar um pouco. Ainda assim ... há algumas coisas misteriosas acontecendo, e eu não tenho idéia do porquê metade das coisas que tentei funcionaram e não funcionaram.fonte
print@substr(new exception,~$$mn+=2+$$a+++$$i++);
main
contidas na cadeia induzam muito a você. Além disso, um método bastante incomum para extrair{main}
, acho ;-)main
realmente não me enganou , depois de detectarexception
,new
esubstr
. Eu pensei que eles seriam apenas nomes de variáveis. Demorei um pouco para usar variáveis variáveis e passei a maior parte do tempo descobrindo uma ordem de operações que realmente produziria uma5
que eu poderia complementar sem usar outro conjunto de parênteses.exception
era óbvio, o que deixava os personagens dispersossubstr
e pornew
aí. Foi literalmente a primeira coisa que vi ao começar a trabalhar nele.Ruby, tamanho 38, por Doorknob
Tenho certeza de que isso não está nem perto da fonte original. É determinístico apesar de usar
rand
.Aqui está como este funciona.
$><<
é apenas saída.$pece60
e$win
são variáveis globais indefinidas, que, portanto, são justasnil
(e me permitiram me livrar de alguns caracteres estranhos).!$pece60
faz atrue
eto_s
dá a string"true"
.Por anos, tentei obter um
2
ou-2
acessar issou
lá, mas depois percebi que poderia pegar ot
e chamar.succ
(essor) para fazer umu
.rand
com umnil
parâmetro retorna uma flutuação aleatória no intervalo [0,1). Ao usar floats para indexar em strings, eles são truncados para números inteiros; portanto, isso sempre retornará o primeiro caractere.Finalmente, eu tinha um par extra,
[]
então apenas envolvi tudo, porque felizmente tudo é uma expressão em Ruby.Obrigado ao Sp3000 por lançar algumas idéias no chat.
fonte
C, 51 por es1024
Após 20 anos de programação C hoje, aprendi sobre constantes hexadecimais de ponto flutuante.
fonte
Ruby, 45 (histocrata)
Woohoo! Esta é minha primeira falha em um problema de código de golfe, e eu não tenho representante suficiente para comentar a postagem original. Reconheci imediatamente o truque usado, pois encontrei o uso no código de produção com frequência. Demorou cerca de 5 minutos para descobrir a maior parte da estrutura e algumas horas para chegar à resposta completa.
Explicação:
%q[]
é um método alternativo para criar strings. Parênteses e chaves também podem ser usados.String#to_i
no Ruby aceita números em qualquer base de 2 a 36. Ele ignorará o primeiro caractere na string que não faz parte do número, para que quaisquer caracteres extras possam ser "jogados fora" após o espaço.E aqui está o código que eu usei para decifrá-lo:
Maneira de incorporar um problema de NP dentro de um enigma. Eu fui completamente nerd. Bom trabalho!
fonte
p
para antes da expressão. Presumivelmente, os caracteres restantes podem ser usados para formar as constantes como você fez.p %q[zyfnhvjkwudebgmaclrsx].to_i(36)/51074892
Eu sei que eu quebrei minha tentativa rachaduras real embora :)Python [any] shell size 44, da Caridorc
Tenho certeza de que deveria haver mais do que isso, mas como
__name__
equivale a__main__
, o quarto caractere 'a' é selecionado e o restante da linha nunca é avaliado.fonte
[__name__ for ___name__ in range(1,4)][2][3]
Perl, tamanho 36, por ossifrage sensível
Outro difícil.
fonte
CJam, tamanho 13, pelo usuário23013
Teste aqui.
Resolvido à mão, da seguinte forma:
Primeiro, alguns antecedentes para não-CJammers:
CEGIK
são todas as variáveis, que são pré-inicializados para12
,14
,16
,18
,20
, respectivamente.s
converte o elemento da pilha superior em uma sequência.f
é muito mágico. Para a finalidade desta resposta, a versão simplificada é que, para uma matriza
, algum outro valorb
e um operadorg
, a sequência deabfg
mapasg(_,b)
paraa
(onde cada elemento dea
vai para a_
ranhura)./
é divisão e divisão de matrizes (entre outras coisas).*
é multiplicação e repetição de array (entre outras coisas).%
é um módulo e uma operação estranha, que na formaad%
de arraya
e número inteirod
leva todos osd
elementos tha
(como o fatiamento do Python com a largura do passod
).#
é exponenciação (entre outras coisas).,
transforma números em intervalos (de0
an-1
) e retorna o comprimento de uma matriz.Ok, isso fora do caminho ...
Era bastante óbvio que precisávamos
,
transformar um número em um intervalo, porque a única outra maneira de obter um array seria construir um número maior e transformá-lo em um array de caracteress
- mas não poderíamos ter feito nada. aritmética adicional. E precisamos de uma matriz para fazer algo com osf
s.Primeiro, assumi que os
f
s foram usados com#
e%
, mas isso significaria que precisaríamos de um número em torno de 90 para obter a quantidade certa de dígitos no final. Além disso, isso não explicava o que fazer es
, como a resposta parecia realmente desafiadora, duvidei que o user23013 anexasse ans
como um no-op eficaz em algum lugar para afastar as pessoas.Então eu pensei, talvez ele nem esteja mantendo os números pequenos
%
, mas em vez disso, ele constrói uma série de grandes números, concatena sua representação de cadeia de caracteres coms
, mas só escolhe uma fatia estranha dela%
. Então eu brinquei um pouco com a seguinte estrutura:(Você não pode fazer
_f/
primeiro, porque isso renderia zero para pelo menos os 12 primeiros elementos.)Onde
_
estão algumas permutações das variáveis. Eu não tentei todos eles antes de ficar entediado, e o principal problema disso era que a sequência de dígitos resultante sempre era longa demais.Em algum momento, ocorreu-me que não precisaríamos de um intervalo tão grande (ou seja, o produto de dois números), se, em vez disso, usássemos o
*
para repetir a sequência resultante. Devido à incompatibilidade dos parâmetros de*
e%
isso não produziria repetição no resultado:Isso produziu resultados muito próximos do que eu estava procurando. Na verdade, eu teria tentado todos os 240 deles, mas rapidamente (terceira ou quarta tentativa), me deparei com
que produz
E imaginei que uma correspondência dos seis primeiros dígitos não seria uma coincidência. Portanto, a questão era como reorganizá-lo sem perturbar o cálculo real:
K
porque isso selecionaria dígitos diferentes por completo.C
ouI
porque isso mudaria os números resultantes das duas operações do mapa.G
isso mudaria apenas o número de repetições, o que não faria nada além de alterar a duração do resultado. (Qual é bom.)E
isso mudaria o intervalo da matriz, mas o intervalo ainda começaria[0 1 2 3 ...]
, para não afetar o cálculo. Ele iria afetar o comprimento da corda de base retornado pors
, o que também significa queK%
escolhia diferentes dígitos em cima repetições adicionais.Então, eu apenas tentei trocar
E
eG
e voila:Em resumo, aqui está o que o código faz:
fonte
APL, tamanho 17, pelo usuário23013
Passei muito tempo demais tentando quebrar isso. Provavelmente teria sido mais rápido se eu conhecesse a APL entrando.
Experimente aqui
fonte
Pyth, tamanho 11, por isaacg
Isso é algum abuso médio de insetos ali. Isso compila para:
O bug relevante é que ele
\\
compila em"\"
vez de"\\"
, o que permite compilar Pyth em uma string.fonte
Pprint
serprint
, ou pelo menospprint
?Python, tamanho 69, por Sp3000
Isso foi difícil ...
fonte
print(sum(map(ord,str((dict(list(((str(),str(dict())),))),list())))))
, mas obviamente muitas permutações diferentes de palavras-chave funcionariam.Python 3, 37 bytes, por Sp3000
Embaraçosamente, de longe, a parte mais difícil foi descobrir a conversão da string em bytes. Eu tive que dormir nele, e à noite percebi 'duh, é um literal de bytes!'
fonte
PHP, 53, por PleaseStand
Finalmente rachou:
A solução veio rapidamente quando notei que a sequência consiste em números decimais e octais alternados:
Além disso, os intervalos entre cada conjunto de números cresceram a uma taxa igual ao valor retornado por
printf()
(ou seja, o número de caracteres escritos).fonte
Python 2, tamanho 132, de Vi.
Obrigado por todas as barras invertidas e aspas :)
Edit: A versão atualizada de 96 caracteres:
Isso foi retirado inteiramente da solução de Alex em https://codegolf.stackexchange.com/a/41451/32353
fonte
fgiillmmooprrsstt
ou,,,\016:::S[]____tuuvyy
.exec
? Meu código deve ter sido mais curto ... Eu o emulei comcompile
+eval
porque esqueciexec
...CJam, tamanho 15, por Ypnypn
A partir dos caracteres fornecidos, imaginei que deveria ser uma das três formas a seguir:
que cria um intervalo de dois dígitos e mapeia uma operação de adição e módulo (em qualquer ordem) no intervalo, antes de somar. Então eu comecei com o primeiro e tentei sistematicamente permutações de
6789
nas lacunas.fonte
PHP, tamanho 52, por PleaseStand
Isso acabou sendo bastante fácil no final. A saída é muito aleatório, e os personagens
m
,t
,_
,r
,a
,n
ed
tudo apareceu duas vezes ...fonte
Python 2, tamanho 61, por FryAmTheEggman
Eu ficaria muito surpreso se isso corresponder ao original.
fonte
print''.__doc__[::2][::3].split()[1].split('.')[0][:-~-~True]
dir()
encontrar o 'get'. E sim, teria sido muito difícil sem as aspas.Python 3, Sp3000, tamanho 44
O Python 3 me ajudou aqui, pois pude causar um erro (deslocar a esquerda para
None
alguma coisa) depois de imprimir a resposta.fonte
print(~(~(()<())<<((()<((),))<<(()<((),)))))
originalmente.PHP, tamanho 52, por kenorb
(Deus, quanto tempo demorei para descobrir o que fazer com o
_r
sufixo restante . Até eu perceber que não eraprint
, masprint_r
...)fonte
_:print_r(chr(3*pow(2,5)+@++$i));if(@$i<4<<1)goto _;
.echo
não é possível;print
permaneceu; b) você precisa de algum loop, mas, para umfor
loop, não havia ponto e vírgula suficiente, e bem, há dois pontos ... então provavelmente um rótulo lá em combinação com goto; c) então é necessário um if para abortar o goto-loop. Tendo agoraX:print($Y);if($Y)goto X;
(X e Y sendo espaços reservados); d) há um++
, mas não=
, então provavelmente alguns++$Z
de 1 a 8; e) para obter letras de um número inteiro, precisamoschr()
(geralmente) - estava lá; f) agora eu só precisava encontrar os números 96 e 8 para chr e if. Em seguida, preencha espaços reservados e volià.PHP, tamanho 54, de Steve Robbins
Não é a solução original, eu acho.
fonte
echo
eawhile
, mas então não podia ser incomodado para encontrar um circuito que produz 42.while
no meu original.C, es1024, comprimento 70
A parte difícil acabou sendo acompanhar todos os personagens desnecessários ... seriamente ... eu tive que refazê-los cerca de 10 vezes. O único que me preocupou foi o,
.
mas de alguma forma eu coloquei no meio daprintf
string de formato e ficou invisível!fonte
Python 3, tamanho 110, por Sp3000
Essa foi engraçada :)
fonte
Haskell, tamanho 34, de Petr Pudlák
Observe que este programa deve ser executado em uma máquina de 32 bits. Se você deseja verificar se este é o programa correto e se possui uma máquina de 64 bits, use-o:
Era muito fácil adivinhar o "quadro" do programa
main=print(0x<hex digits>^0x<hex digits>::Int)
. Toda a mágica estava em procurar o caminho certo para particionar e ordenar os dígitos. Não fui muito esperto aqui, apenas uma busca por força bruta ... embora tenha tomado o cuidado de abusar do fato de alguns dígitos serem duplicados, provavelmente havia um número igual de dígitos na base e no expoente, e o último dígito da base quase certamente não era o mesmo. O código de pesquisa completo está incluído abaixo; ele usa o pacote multiset-comb . A pesquisa completa leva cerca de 10:33 na minha máquina (e produz apenas uma resposta certa, é claro).fonte
Javascript, 82, por TrungDQ
Levou uma eternidade para acertar os índices.
fonte