5 idiomas 11 caracteres = 0,4545
Aceitou esse desafio como uma oportunidade de verificar alguns novos idiomas (CJam, Burlesque, zsh, gs2). Primeira vez que trabalhei com esses idiomas.
O método por trás da criação da saída é diferente em quase todos os idiomas. Somente o método CJam e o gs2 são idênticos. Os 4 métodos são: criar um intervalo [1, 100] e dividi-lo com módulo (CJam e gs2), criar o intervalo [1, ..., 100] e filtrar elementos que sejam 1 mod 7 (Pyth), criar o intervalo [1, ..., 100], divida-o em pedaços de len 7 e use o primeiro elemento de cada pedaço (burlesco) e crie a sequência diretamente (zsh).
Tentei projetar cada programa de tal maneira que parecesse um jogo para alguém que não estivesse familiarizado com o idioma.
edit 1: adicionado burlesco, 2 idiomas anteriores com 10 caracteres = 0,2
editar 2: adicionado gs2, 3 idiomas anteriores com 11 caracteres = 0,2727
edit 3: zsh adicionado, 4 idiomas anteriores com 11 caracteres = 0,3636
CJam
q~\1+,0-\%p
Teste online com a entrada 100 7
.
q~ push the evaluated input (100 7)
\ swap (7 100)
1 push 1 (7 100 1)
+ add last to elements (7 101)
, create the range (7, [0, 1, ..., 100])
0 push 0 (7, [0, 1, ..., 100], 0)
- delete 0 from the range (7, [1, 2, ..., 100])
\ swap ([1, 2, ..., 100], 7)
% use every 7th entry ([1, 8, ..., 99])
p print pretty
Burlesque
jrojcoq-]m[
Ao lado do zsh, este é o único programa de golfe. Burlesco é bastante impressionante, tem uma gama muito grande de funções diferentes, como ro
. Infelizmente, não há nada como o [::a]
operador de fatiador Python .
Não há intérprete on-line, mas você pode obter o Burlesque aqui . Como o Burlesque não suporta funções ou IO, você deve colocar os valores na pilha primeiro, como100 7 jrojcoq-]m[
j Swap (7 100)
ro Range (7 {1 2 ... 100})
j Swap ({1 2 ... 100} 7)
co ChunksOf ({{1 2 .. 7} {8 ... 14} ... {99 100}})
q Create Block ({{1 2 .. 7} {8 ... 14} ... {99 100}} {})
-] head (first element) ({{1 2 .. 7} {8 ... 14} ... {99 100}} {-]})
m[ map the chunks to the head-block
gs2
read-nums dup head inc range tail swap reverse head mod unlines
Sim, isso é apenas 11 caracteres. No gs2, cada byte tem um significado diferente. Mas como escrever em bytes é bastante difícil e não é divertido, você também pode escrever em mnemônicos, que pode compilar com o código gs2 real. O código gs2, que é executado é
W@!'."B !4+
ou como hex-dump:
57 40 21 27 2e 22 42 20 21 34 2b
Curiosidade: não escrevi em mnemônicos, mas diretamente nos números do hex-dump.
Você pode testá-lo baixando o compilador . Compile o arquivo mnemônico python gs2c.py < mnemonics.txt > compiled
ou simplesmente copie W@!'."B !4+
para um arquivo chamado compiled
e execute-o com echo 100 7 | python gs2.py compiled
.
A mnemônica é bastante autoexplicável, mas aqui está o que está acontecendo na pilha.
57 40 21 27 2e 22 42 20 21 34 2b
57 read-nums ([100 7])
40 dup ([100 7] [100 7])
21 head ([100 7] 100)
27 inc ([100 7] 101)
2e range ([100 7] [0 1 ... 100])
22 tail ([100 7] [1 2 ... 100])
42 swap ([1 2 ... 100] [100 7])
20 reverse ([1 2 ... 100] [7 100])
21 head ([1 2 ... 100] 7)
34 mod ([1 8 ... 99])
2b unlines ('1\n8\n...\n99')
everything on the stack gets printed
Entre, 8 bytes são possíveis, talvez até menos.
edit: bifurquei o gs2, manipulei levemente um comando e fiz uma solicitação pull, que já está mesclada. Portanto, agora a tarefa pode ser executada com 6 bytes :, read-nums extract-array swap range1 mod unlines
que se traduz em 57 0e 42 2f 34 2b
, o que é ainda melhor que o pyth ideal.
zsh
f() seq 1 $2 $1
Isso define uma função f
que cria a sequência. Para usá-lo no Windows, instalei o babun shell, onde você pode simplesmente digitar esses comandos. Basta escrever f() seq 1 $2 $1
e na próxima linha f 100 7
.
Primeiro eu tentei escrever isso no Bash, mas aí você tem que escrever em ()
torno do bloco de código, como f() ( seq 1 $2 $1 )
. Então, mudei para o zsh.
Pyth
fq1%TeQUhhQ
Isso realmente dói, pois é claro que vejo o óbvio golfe de 7 bytes. Você pode testá-lo online com a entrada 100, 7
.
Q = input()
UhhQ the range [0, 1, ..., Q[0]]
f filtered (only use those elements T, which satisfy the equation
q1%TeQ 1 == T % Q[1]
NumberOfLanguages / CodeSize
?