Cansado da confiabilidade do armazenamento flash, você decidiu armazenar todos os seus programas em um daqueles bons e antigos disquetes de 1.440 KiB. No entanto, depois de copiar nem 3.000 programas, o disco estava cheio. Como isso é possível? Hábil na arte do código golf como você é, a maioria dos seus programas não tem nem 100 bytes de comprimento, portanto, deve haver muito espaço sobrando ...
Depois de perguntar sobre o Superusuário, você descobre que foi prejudicado pelo tamanho do cluster do sistema de arquivos , uma trama maligna dos designers do FAT12 que deixa uma parte significativa do seu disquete sem uso e obriga a comprar mais do que realmente precisa.
Compre mais disquetes? Nunca! O tamanho do cluster será menos problemático se simplesmente salvarmos vários programas em um arquivo, o que é possível porque diferentes compiladores / intérpretes se comportarão de maneira diferente para o mesmo código-fonte.
Tarefa
Escreva uma poliglota que se encaixe em um único cluster (512 bytes ou menos) e resolva o maior número possível de tarefas a seguir.
Leia todas as entradas e imprima-as.
Impressão Olá, mundo! .
Leia uma linha / argumento ( nome ) como entrada e imprima Feliz Aniversário, [nome]! .
Leia todas as entradas e imprima Eu amo guias! se ele contiver um ou mais tabuladores (0x09) e eu odeio espaços! se não
Leia duas linhas / argumentos e imprima um valor verdadeiro se o segundo for uma subcadeia do primeiro e um valor falso se não.
Leia uma linha / argumento e imprima um valor verdadeiro se seus caracteres estiverem em ordem estritamente crescente e um valor falso se não.
Leia uma linha / argumento e um caractere e imprima os índices de todas as ocorrências desse caractere.
Leia uma linha / argumento e imprima qualquer um dos caracteres com o maior número de ocorrências.
Leia dois números inteiros entre 0 e 255 e imprima sua soma.
Leia um número inteiro único entre 0 e 255 e imprima o quociente e o resíduo de sua divisão por 7 .
Leia um número inteiro único entre 1 e 255 e imprima um valor verdadeiro se for um número composto (nem 1 nem primo) e um valor falso se não.
Leia um número inteiro único entre 1 e 255 e imprima um valor verdadeiro, se for uma potência de 2, e um valor falso, se não.
Leia dois números inteiros entre 0 e 255 e imprima o maior.
Leia um número inteiro decimal entre 0 e 255 imprima sua representação hexadecimal.
Leia um número inteiro único entre 0 e 255 e imprima seu peso de Hamming (número de 1 bits).
Leia um número inteiro n entre 1 e 13 e imprima o F n , o n º número de Fibonacci .
Por exemplo, para a entrada
13
, imprima233
.
Leia uma linha / argumento da entrada e enquadre-a.
Por exemplo, para a entrada
Programming Puzzles & Code Golf
, imprima isto:+---------------------------------+ | Programming Puzzles & Code Golf | +---------------------------------+
Leia um bloco retangular de caracteres e gire-o um quarto de volta no sentido horário.
Por exemplo, para a entrada
tye xll epb tma id sa s e i r hsn Tiu
imprima isto:
This text is simply unreadable
Leia um número inteiro entre 1 e 40 e imprima um diamante desse comprimento lateral.
Por exemplo, para a entrada
3
, imprima isto:/\ / \ / \ \ / \ / \/
Imprima isto:
....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@....
Pontuação
A resposta que consegue incorporar o maior número de programas em um único arquivo que se encaixa em um único cluster de 512 bytes ganha. Os laços são quebrados pela contagem de bytes (quanto menor, melhor).
Regras adicionais
Para cada tarefa que você solicita sua pontuação, o mesmo arquivo (byte por byte) deve constituir um programa completo - em um idioma de sua escolha - que resolva essa tarefa específica.
Cada tarefa deve ser resolvida em um idioma diferente.
Os idiomas contam como diferentes se não forem versões diferentes do mesmo idioma. Por exemplo, há apenas um JavaScript, um Python e um TI-BASIC, mas C, C ++, Octave e MATLAB são quatro idiomas diferentes.
O idioma selecionado para cada tarefa deve satisfazer nossa definição usual de linguagem de programação .
Além disso, o idioma deve ter sido publicado e implementado antes de 9 de setembro de 2015.
Seu compilador / intérprete pode não exigir nenhum sinalizador não padrão para produzir o comportamento esperado.
Exceções a esta regra incluem sinalizadores necessários para especificar um idioma específico, ler o programa de um arquivo (único) ou suprimir um banner.
A entrada para cada tarefa consistirá em caracteres ASCII imprimíveis (0x20 a 0x7E) e feeds de linha (0x0A), e não excederá 255 bytes de comprimento.
Todos os números inteiros podem ser lidos em decimal ou unário, a menos que indicado de outra forma na tarefa.
O comportamento para entrada inválida é indefinido.
Você pode ler a entrada do STDIN (ou sua alternativa mais próxima) ou como argumentos da linha de comando.
Se uma tarefa exigir a leitura de duas partes de entrada, você poderá lê-las - em qualquer ordem - separadas por um delimitador de um byte de sua escolha, como argumentos separados da linha de comandos ou um do STDIN e o outro como argumento da linha de comandos.
Se uma das partes de entrada for uma linha, o único delimitador possível é um avanço de linha.
Imprima a saída em STDOUT (ou alternativa mais próxima). Toda a saída para STDERR será ignorada.
Para cada tarefa, aplicam -se regras padrão de código-golfe .
Em particular, isso inclui as brechas proibidas por padrão , com a exceção de codificar a saída , o que é explicitamente permitido para esse desafio.
2>/dev/null
e obtemos a saída correta para o stdout, está tudo bem? Só pra ter certeza.Respostas:
12 idiomas, 418 bytes
Este é um desafio divertido. Está ficando difícil encaixar mais idiomas, mas com tantos bytes restantes eu provavelmente poderia fazer mais um.
Faz uso gratuito de linguagens 2D. Observe que o caractere entre o
[ ]
na@-[ ]e<
linha é uma guia. Além disso, isso requer\n
finais de linha para que TRANSCRIPT funcione.Prelúdio (Tarefa 1 / Gato)
?(!?)
é apenas uma tradução direta de,[.,]
em BF. Os()
loops de prelúdio agem como[]
loops de BF ; portanto, tudo, desde a(
coluna mais à esquerda até)
antes do programa principal, não é executado.As regras de sintaxe do prelúdio significam que os parênteses precisam ser correspondidos (leitura da coluna da esquerda para a direita), e só pode haver um parêntese por coluna. Fora isso, é uma linguagem muito fácil de se adaptar.
Verifique se
NUMERIC_OUTPUT
está definido comoFalse
se você estiver usando o interpretador Python.TRANSCRIÇÃO (Tarefa 2 / Olá mundo)
TRANSCRIPT é um esolang temático baseado em ficção interativa. As linhas não reconhecidas pelo TRANSCRIPT são ignoradas, facilitando a adaptação.
Tr is here.
declara umaTr
variável de cadeia, ea segunda linha define o conteúdo da variável paraHello, World!
.X Tr
(X
para examinar) emite a sequência de caracteres.Embora o TRANSCRIPT seja muito fácil de encaixar, é uma linguagem bastante detalhada, então eu fiz o desafio mais fácil.
Fissão (Tarefa 3 / mensagem de aniversário)
que imprime a primeira parte, agrupa a entrada com um pequeno loop 2D e gera o ponto de exclamação à direita. Os
R
significa que um átomo começa aqui se deslocam para a direita, o que é útil porque este programa pode ser movido em qualquer lugar.Rail (Tarefa 4 / Guias)
Como o Fission, o Rail é uma linguagem 2D que tem a vantagem de poder ser movida para qualquer lugar. A execução começa a partir
$
damain
função, na direção sudeste.Primeiro, abaixamos os
\
s, vire à esquerda na-
, pressionando o[<tab>]
botão que pressiona uma guia.e<
depois ramifica com base no EOF - se o EOF, encabeçamos e imprimimos"I hate spaces!"
antes de parar, caso contrário, encabeçamos. Se formos para cima, lemos o próximo caractere e o comparamos com a guia, mais uma vez ramificando - se a guia aparecer e imprimir"I love tabs!"
antes de parar, então desça e continue o loop de entrada.Este programa é bastante caro, mas desde que o TRANSCRIPT levou o Hello World, foi difícil escolher e executar a tarefa para o Rail.
> <> (Tarefa 6 / Entrada crescente)
Imprime
1
se estritamente ascendente,0
caso contrário.> <> é outra linguagem 2D e a execução começa no canto superior esquerdo.
"..."
é o modo de sequência, pressionando os caracteres internos um de cada vez. Após a primeira corda que tocamos#
, que reflete o IP para a esquerda, pressionando mais cordas e contornando (> <> é toroidal) antes de bater\
, um espelho que nos reflete para cima.Na parte inferior do programa está
.91<
, que nos teleporta para(9, 1)
onde está o programa principal. Depois que isso0[
remove todo o lixo das cadeias,0
pressiona um zero para representar a última leitura de caractere e, depois disso, ele apenas lê os caracteres, um de cada vez, para garantir que ainda estamos subindo.Provavelmente é melhor mover o programa principal para baixo em vez de teleportar, mas tratarei disso mais tarde, se necessário.
Befunge (Tarefa 9 / Adição)
Testado com o intérprete encontrado aqui . Este é um programa bastante simples, com o começo pressionando uma corda inútil e
#
pulando sobre o espaço. Depois disso, é apenas o programa principal&&+.@
.Labirinto (Tarefa 10 / Divmod por 7)
Convenientemente,
'
e"
são NOPs no Labirinto que agem como um caminho percorrível no labirinto. Vou pular a navegação bagunçada, mas basicamente há muitas mudanças antes de chegarmos ao?
, que é o início do programa principal.O programa não está totalmente liberado para dar conta do Prelude (por exemplo,
?
é entrada de leitura no Prelude).Python 2 (tarefa 14 / hexadecimal)
Os
xxx
s representam partes irrelevantes comentadas por sequências ou comentários de várias linhas. No meio estáprint hex(input())
o programa principal. Isso resulta com uma liderança0x
, mas estou assumindo que está tudo bem (se não, então é uma solução fácil de qualquer maneira).A primeira linha é uma sequência
"1\"# &&+.@\""
seguida por dois" "
s. Essas três strings são concatenadas pelo analisador e deixadas sem uso (essa primeira linha funciona da mesma forma para Ruby e Julia posteriormente).GolfScript (tarefa 15 / peso de Hamming)
A primeira linha empurra três strings e a segunda linha é um comentário.
''''
empurra mais duas seqüências e, em seguida,<<
faz duas comparações (s
é ignorado). Finalmente,""'("'
pressiona mais duas cordas.Tudo isso é lixo é então removido, envolvendo-o em uma matriz e obtendo o primeiro elemento (
]0=
), que é a entrada inicialmente na pilha. Em seguida, avaliamos a entrada com~
, transformamos em binário com2base
então somamos os bits com{+}*
. O próximo}
é incomparável e super-comenta o restante do programa.Julia (tarefa 16, Fibonacci)
#=
inicia um comentário com várias linhas e=#
termina um comentário com várias linhas. O programa principal usa exponenciação de matriz para calcular números de Fibonacci (extraídos de Rosetta ).Ruby (quadro da Tarefa 17 / ASCII)
Este programa assume que a entrada não termina com uma nova linha à direita.
Temos uma string inútil, um comentário, outra string inútil e depois um heredoc que comenta a maior parte do programa. Depois disso, é o programa principal, seguido por um
#
comentário de linha única .CJam (Tarefa 19 / Diamante)
As duas cadeias de espaço no final da primeira linha devem satisfazer o CJam, pois
#=
são dois operadores binários. Não vou entrar em muitos detalhes com este, mas basicamente é uma bagunça, com o programa principal sendo o meroentre.
O principal diferencial entre o GolfScript e o CJam é que, no CJam, uma única citação
'
não inicia e termina as strings, mas empurra o próximo caractere para a pilha. Isso significa que no CJamempurra um
(
e inicia uma sequência com"
(o primeiro caractere é'
), enquanto o acima é apenas uma sequência direta no GolfScript.Experimente online .
1>
é usado em vez de(
dar conta do Prelude.Aqui estão 12 idiomas, 373 bytes . Algumas tarefas mudaram, o TRANSCRIPT foi removido (tornou o Rail muito caro) e o Scheme (chicken) foi adicionado. Este é apenas o meu campo de golfe para futuras atualizações, já que a atualização do post principal leva uma eternidade.
Eu poderia salvar alguns bytes para Julia, pois os comentários multilinhas não terminados geram um erro para STDERR.
fonte
;)
estou procrastinando a alteração de qualquer coisa na minha resposta, devido à longa descrição. lol78910 idiomas,398431447507 bytesEste é provavelmente o máximo que posso ajustar na solução atual.
A última linha contém o código de espaço em branco codificado para que o SE não o coma. Para executar o código, substitua todos
S
por espaços,T
por guias eN
por novas linhas.C89, tarefa 16
Aqui está o que o compilador vê:
Todo o resto é retirado como comentários ou dentro do
#if 0
.C ++, tarefa 14
Eu usei um truque roubado daqui para diferenciar entre C89 e C ++.
Lua, tarefa 2
Aqui está a estrutura básica.
Brainfuck, tarefa 1
Eu só tinha que garantir que nenhum loop infinito ou
.,
s perdidos fossem encontrados. Os comentários multilinhas de Lua também dobram como comentários BF. Tudo, exceto os 2 primeiros caracteres, é um grande loop NOP.Python, tarefa 6
Mais uma vez, estou usando recursos específicos do idioma para o NOP ou comentar o outro código.
Pitão, tarefa 17
Pyth é legal por isso. Leva o primeiro
#
como umwhile True:
loop que sai silenciosamente por erro . Então, apenas transformo a maior parte do código (para evitar;
que o loop seja finalizado mais cedo), depois finalizo o loop, saio de outro criado pelo comentário do Python e faço a tarefa. Aqui está ele com todas as strings não vazias substituídas por" string "
, ainda é funcionalmente equivalente:> <>, tarefa 3
Este é muito interessante. A execução ricocheteia no código, usando saltos sempre que necessário para contornar obstáculos. As partes relevantes:
Estrelado , tarefa 9
Aqui eu tive que começar a usar os idiomas "descartar todos os caracteres, exceto". Qualquer outra coisa retirada, parece:
O código pula a maior parte da pontuação com um salto para evitar dificuldades, apenas usando o início e o final do código. O código é funcionalmente equivalente a
Befunge-98, tarefa 10
Funciona de maneira semelhante à> <> uma. Felizmente,
#
é um espelho em> <> e um pulo no Befunge, para que possamos implementar um comportamento diferente. Além disso0/0 == 0
,.Espaço em branco , tarefa 13
Essa foi a última coisa em que me encaixei. As primeiras linhas estão apenas pressionando zeros na pilha, pois elas contêm apenas espaços e novas linhas do código "normal". O código está codificado; substitua tudo
S
por espaço,T
por guias eN
por novas linhas.fonte
17 versões diferentes do Pip, 383 bytes (inválido)
Enquanto essa pergunta estava na área restrita, vasculhei todas as revisões do meu idioma Pip e criei um poliglota usando 17 delas. Infelizmente, as versões do mesmo idioma não são permitidas pelas regras de desafio agora, mas com a permissão de Dennis e um aviso, estou postando meu trabalho de qualquer maneira.
O código bruto
A estratégia
No Pip, letras minúsculas são variáveis. Letras maiúsculas são mais complicadas: são divididas em execuções de no máximo dois caracteres, que podem ser operadores ou variáveis. Se um token em maiúscula não for definido especificamente como uma variável ou operador, será considerado uma variável indefinida, que será avaliada como nula.
Portanto, para distinguir entre duas versões do Pip, só preciso encontrar algum operador variável ou alfabético que foi adicionado na mais recente das duas. No mais antigo, será nulo. O código
v:uIN[...]
reúne uma grande lista contendo uma dessas verificações para cada versão que eu quero testar, descobre quantosu
nil estão nessa lista (a variável é explicitamente inicializada como nil) e armazena o número emv
(para "versão") .Após alguns outros cálculos, há outra grande lista que calcula os resultados para 17 das tarefas do desafio e usa
v
para selecionar um com base em qual versão é essa.Versões e tarefas
0.15.09.04
Diagnóstico:
(oTM0,0i)
(corrigido um erro com o operadorT
riM
, em que aparar 0 caracteres de cada extremidade de uma string forneceria a string vazia; indexar para uma string vazia não forneceria nada)Tarefa 18:
Iv<2W##YqlPBy
(configuração: leia todas as linhas de stdin sev
for menor que 2) seguida por((J_M ZRVl)|0)Jn
(lista reversa de linhas, transponha e junte novamente à string)0.15.08.06
Diagnóstico:
EN1
(EN
operador umerado adicionado )Tarefa 1:
Iv<2W##YqlPBy
(o mesmo código de configuração acima) seguido porl?lJnl
(ingressar em novas linhas)0.15.08.03
Diagnóstico:
1N1
(adicionadoN
como versão curta doIN
operador)Tarefa 20:
c:((J['.'@]X4)X4RL3)Jnc.:n.RVcc:cRL4|0
(configuração: gerar lista contendo as metades superior e inferior do tabuleiro de xadrez e armazenarc
) seguida porcJn
(ingressar na nova linha)0.15.08.01
Diagnóstico:
Y1
(Y
operador ank adicionado )Tarefa 19:
Iv=3{d:sXaRLaFj,ad@j@j:'\d:(RVdR'\'/).d|0dJ:n}
(configuração: sev
for 3, construa metade superior do diamante emd
) seguida ded.n.RVd
(inverta a metade inferior e entre na nova linha)0.15.06.19
Diagnóstico:
RCk
( operadorR
andom hoice adicionadoC
)Tarefa 17:
m:'+.'-X#a+2.'+.n."| "
(configuração: construção da+----+\n|
stringm
) seguida dem.a.RVm
(quebra automática de entradam
e reversão dem
)0.15.06.12
Diagnóstico:
k
(k
variável pré-inicializada para", "
; anteriormente era indefinida e, portanto, nula)Tarefa 16:
Iv=5La{i+:oSio}
(sev
for 5, gere o número de Fibonaccii
) seguido pori
0.15.06.08 (nota: o número da versão não foi alterado até o seguinte commit)
Diagnóstico:
w
(w
variável pré-inicializada para`\s+`
)Tarefa 15:
h:$+TBa
(converter entrada em dígitos binários e de soma; salvar o resultado nah
tarefa 12 posteriormente)0.15.05.29
Diagnóstico:
(hR`1.+0``&2o`)@>3@AB0
Esta versão foi adicionada
&
como um padrão de substituição para toda a cadeia correspondente em uma substituição de regex (inspirada no sed). O código acima pegah
(100
) e o substitui por`&2o`
(ou seja,"1002o"
nas versões mais recentes, mas simplesmente"&2o"
nas versões mais antigas). Em seguida, divide todos os caracteres após o terceiro ("2o"
nas versões mais recentes,""
nas versões mais antigas) e tenta indexar nessa sequência. A indexação em uma string vazia não fornece nada.Tarefa 7:
j:ak:b
(configuração: copia vars locaisa
,b
para vars globaisj
,k
para que estejam disponíveis em uma função), seguida por({j@aEQk}FI0,#a).s
(filtre os índices ema
que o caractere correspondente é igualb
e junte-se ao espaço)0.15.05.26
Diagnóstico:
`u`
(tipo de padrão adicionado; nas versões anteriores, os backticks são ignorados como caracteres não reconhecidos e a expressão é avaliada comou
nula)Tarefa 14:
aTB16
(converterT
oB
ase 16)0.15.05.24
Diagnóstico:
rZ4
(r
variável especial criada que retorna um valor aleatório entre 0 e 1 cada vez que é referenciada; antes era indefinida e, portanto, a expressão era avaliada como nula)Tarefa 13:
a>b?ab
(expressão ternária)0.15.05.12
Diagnóstico:
rZ4
(Z
operador IP adicionado )Tarefa 12:
h=1
(a soma dos bits da tarefa 15 deve ser igual a 1)0.15.05.11
Diagnóstico:
AB6
(AB
operador de valor acrescentado ao soluto)Tarefa 11:
Pv=11?a>1&0INa%(2,a)[...]@v
(sev
for 11, produzirá1
se a entrada for maior que 1 e um número menor a dividir exatamente,0
caso contrário; sev
houver outra coisa, usev
como índice na lista para decidir o que produzir)0.15.05.02
Diagnóstico:
({a}V7)
(V
operador adicionado ; quando nãoV
foi definido, isso enviou argumentos nulos e 7 para uma função{a}
que retorna seu primeiro argumento)Tarefa 10:
a//7.s.a%7
(entrada int-dividida por 7 e mod 7, separadas por espaço)0.15.04.26
Diagnóstico:
BN8
( operador deB
integração itwise adicionadoN
)Tarefa 9:
a+b
0.15.04.23
Diagnóstico:
AZ
(AZ
variável pré-inicializada para alfabeto maiúsculo)Tarefa 5:
bINa
(IN
fornece a contagem de ocorrências)0.15.04.20
Diagnóstico:
m@0:0
seguido por9@m
A
m
variável é pré-inicializada para 1000. Nesse commit, o@
operador foi corrigido para retornar lvalues; anteriormente, atribuindo am@0
deu um aviso e não fez nada. Portanto, após a correção de bug, a primeira instrução é definidam
como0000
, que é um índice legal para9
; pre-bugfix,m
permanece1000
, que não é um índice legal. (Os índices ainda não eram cíclicos.)Tarefa 3:
"Happy Birthday, ".a.'!
0.15.04.18
Todos os diagnósticos anteriores resultam em um valor nulo sendo adicionado à lista de diagnósticos.
Tarefa 2:
"Hello, World!"
A maioria dos outros códigos são ajustes que eu tive que fazer para evitar erros em várias versões. Este post já é muito longo, portanto, se você quiser saber sobre algo que não expliquei, vamos levar a discussão para a sala de chat de idiomas esotéricos .
fonte
6 idiomas, 226 bytes (229, dependendo de como
\x1b
é aceito!)Portanto, acho que não fiz a melhor escolha de idiomas e imagino que isso não seja particularmente competitivo, mas achei um desafio interessante! No geral, não há muitos desafios completos, mas eu provavelmente poderia desafiar um desafio no espaço em branco ou algo semelhante, mas é o que tenho até agora:
1. Brainfuck
Testado em http://copy.sh/brainfuck/ e http://brainfuck.tk/ .
Depois de remover todos os caracteres ignorados, o programa acima é o que nos resta, que é apenas o exemplo de programa cat com alguns loops vazios extras para ignorar o uso dos símbolos em outros idiomas.
2. Ruby
Uso:
O código acima é o código após todos os comentários serem removidos. A primeira linha é totalmente inútil em Ruby como nós definimos algumas expressões regulares para conter o código Befunge-93 e brainfuck, então criar uma matriz para conter
Hello
eWorld
e imprimi-lo usandoprintf
(para adicionar o,
e!
).3. Perl
Uso:
Muito parecido com Ruby, exceto que, como estamos armazenando uma referência de matriz
$a
, quando tentamos acessá-$a[0]
la, podemos substituí-la pelo texto do desafio 3,Happy Birthday
epop
(que mostra o último argumento para o programa de linha de comando )4. JavaScript
Uso: cole no console do navegador e execute.
Assim como Ruby e Perl, a primeira linha cria essencialmente
RegExp
objetos inúteis . Em seguida, armazenamos uma matriz inútil$a
e instanciamos duas cadeias inúteis, uma contendo o código Ruby / Perl e outra contendo uma nova linha e a#
, então,prompt()
para entrada ealert()
resultado esperado pela maioria dos humanos para o desafio 4. Terminamos com outroRegExp
objeto inútil para fechar o ciclo do cérebro.9. Befunge-93
Testado em http://www.quirkster.com/iano/js/befunge.html .
Pelo que entendi,
/
divide a pilha e empurra o resultado que não tem efeitos negativos, exceto pressionarNaN
no site acima,&
solicita a entrada de um número inteiro para que lemos os dois números exigidos pelo desafio 9 na pilha,#
garantindo que pulamos o[
que existe para o brainfuck,+
depois adiciona os dois primeiros números na pilha, os.
produz,#]
para o brainfuck novamente e@
sai.13. PHP (executando no Bash)
Uso:
No PHP, tudo o que não está incluído nas
<?
tags é produzido literalmente; portanto, produz o código Befunge-93 e brainfuck, para quedie()
imediatamente no código, exibimos uma tela clear (\x1bc
) e, em seguida, omax()
dos dois primeiros argumentos.fonte
the first character in the first string literal is the byte ASCII 27
); sua pontuação é 226..match'\x09'
(onde estão ') talvez eu veja se posso adicionar mais em algum momento!6 idiomas,
450404 bytesbash, brainfuck, C, gawk4, JavaScript e Minimal-2D
Atualização: Golpeou um pouco. Ainda não tenho certeza do que mais acrescentar, e não tenho certeza de como os membros concorrentes pensariam em mim usando seus idiomas para tarefas diferentes. Tentando explicar o algoritmo brainfuck.
Bem, essa é / foi minha primeira experiência poliglota, então tive que aprender tudo do zero. Começar com awk não foi a idéia mais inteligente que eu acho, porque é relativamente implacável. Como o número de tarefas concluídas é relevante, comecei com as tarefas mais fáceis primeiro. Não tenho certeza se essa foi uma jogada inteligente. Isso não é muito disputado, porque eu tive problemas para conseguir trabalhar esses seis juntos, mas fiz o que pude para mantê-lo curto.
Aqui estão os idiomas e o que eles fazem em ordem alfabética. Vou mostrar uma maneira fácil de testá-los mais abaixo. Como parte disso pode ser específica da versão, fornecerei os números de versão das ferramentas que usei.
bash, tarefa 3
Bem, é óbvio que eu usei sed. Tentei colocar um script sed nisso de alguma forma, mas não consegui fazê-lo funcionar, então segui o caminho do bash. Do jeito que eu dito, está dentro de um comentário C e o awk avalia
False
.sed --version
dásed (GNU sed) 4.2.2
bash --version
dáGNU bash, Version 4.3.30(1)-release (x86_64-pc-linux-gnu)
Então a parte sed se resume a
Ele agrupa a entrada, cola-a em uma nova string e imprime o resultado. Coisas bastante comuns.
brainfuck, tarefa 20
Bem, isso é sempre muito fácil de esconder, eu acho. Uma linha iniciada com
#//
é ignorada por C e awk. Ou pelo menos eles podem viver com o lixo por trás disso.bf
dábf - a Brainfuck interpreter version 20041219
Este é o código condensado. A primeira linha é apenas o lixo dos outros idiomas.
Vou tentar explicar como funciona
isso organiza a fita e o ponteiro para este
a célula que contém 8 é o contador global para o seguinte loop
: é o número de vezes que 3 mesmas linhas são impressas
define
C1
para 3, o número de mesmas linhasdefine
C2
para 4, o número de "....@@@@
" em uma linha (no começo)imprime uma linha completa decrementando
C2
no processoquando
C2
é zero, imprime uma nova linha e decrementaC1
.se
C1
for zero a mágica aconteceo 46 é movido para trás do 64
o 10 e o contador global é movido um para a direita
então o contador global é diminuído
se for zero, o programa sai
C, tarefa 2
Esgoto cada pequena habilidade de C aqui imprimindo "Olá, Mundo!". Bem, alguém teve que fazer o trabalho ...
gcc --version
dágcc (Ubuntu 4.9.2-10ubuntu13) 4.9.2
O código C real
O
#define func
é tornar o awk bem com isso. Ele acha que essa é uma função awk. A abreviação para func é um recurso gawk.gawk4, tarefa 18
Desde que eu usei o awk para praticamente tudo aqui, eu decidi que tinha que estar nisso.
awk --version
dáGNU Awk 4.1.1, API: 1.1 (GNU MPFR 3.1.2-p11, GNU MP 6.0.0)
awk vê isso
Os padrões de pesquisa, incluindo
\t
avaliar parafalse
. Eu escolhi a guia aqui, porque acho que não pode estar na entrada.sed
avalia comofalse
."the string"&&0
avalia como falso. A função está boa. O programa é executado se um padrão vazio for correspondido, o que é para qualquer entrada.Faz isso
Entrada
Saída
Você precisa garantir que todas as linhas de entrada tenham o mesmo comprimento. Use espaços para preenchê-los.
JavaScript, tarefa 9
Não tenho certeza se isso é legítimo, porque isso foi muito fácil. Se você der ao arquivo de programa um html final e o abrir em um navegador (usei o Firefox 40.0.3 e o chrome 45.0.2454.85), ele solicitará uma entrada. Você precisa digitar dois números separados por espaço, e ele alertará a soma deles.
Minimal-2D , tarefa 1
Isso foi muito fácil de se encaixar nas linhas de comentários. Eu usei o intérprete , que roda em python, para testar isso. Imprime a entrada na saída. O programa se parece com isso
RUDL estão à direita, para cima, para baixo e para a esquerda. Então começa a dar certo, lê um personagem de stdin na memória e adiciona um. A barra pula o próximo comando se a memória tiver o valor 0. Isso é para finalizar isso. Se um caractere com o valor -1 for lido, a entrada será finalizada. Portanto, se -1 for lido, pula o D e termina. Se outra coisa for lida, ela desce à esquerda, adiciona 1 à memória e imprime o caractere em stdout. Então ele sobe e sobe e recomeça.
Teste
Isenção de responsabilidade: não me responsabilizo por nenhum dano causado ao seu sistema com isso.
Isso pressupõe que você tenha o bash & co, gawk (pelo menos a versão 4, porque isso usa matrizes multidimensionais), gcc, python, bf como intérprete cerebral e o Firefox instalado.
Para facilitar, copie a fonte do programa para um arquivo chamado
cluster.html
. Torne esse arquivo executável para a tarefa bash. Copie e cole o intérprete do Minimal-2d em um arquivo nomeadominimal2D.py
no mesmo diretório. Em seguida, copie e cole o script a seguir em um arquivo de script e coloque-o no mesmo diretório, torne-o executável e execute-o ... bem, com quem estou falando. Se você ler isso, provavelmente não precisará de muitas explicações e poderá fazê-lo funcionar de alguma maneira.Lá você também encontra o comando para executar os testes individualmente.
Diverta-se!
fonte