Os Desafios do Código de Pedra da Rosetta são desafios em que você deve concluir a tarefa no maior número de idiomas possível.
O desafio
Você receberá dois números n
e s
, em uma lista como entrada. O n
será um número que você tem que contar até. n
será qualquer número de 2 a 10000. s
será o número que você pular ao contar até n
. s
será de 1 a n
/ 2 (metade n
). Se n
fosse 600, s
não poderia ser maior que 300. Você deve gerar todos os números até n
pular, s
iniciando com 1. Cada número de saída deve estar em uma nova linha, na mesma linha separada por espaços ou em uma lista.
The Twist
Para este Desafio de código de pedra da Rosetta, cada trecho em que você escreve o programa deve ter o mesmo comprimento. ou seja: se o seu programa Python tiver 56 caracteres, seu programa Java também deverá ter 56 caracteres. Espaços e comentários não contam como caracteres. Os nomes de variáveis / funções não podem ter mais que 10 caracteres. Lembre-se, isso também é código de golfe, portanto, tente manter seu código curto.
Exemplo
Entrada
[100, 7]
Resultado
1
8
15
22
29
36
43
50
57
64
71
78
85
92
99
Nota: A saída pode estar em uma única linha separada por espaços ou formato de lista
Critério vencedor
O vencedor será decidido por esta fórmula:
numberOfLanguages/codeSize
codeSize
não é o tamanho total do código, mas o tamanho médio do código de um snippet.
O usuário com a pontuação mais alta vencerá. ou seja: uma resposta com 4 idiomas e um tamanho de 31 bytes conquistaria uma resposta com 7 idiomas e um tamanho de 80 bytes. Um vencedor será escolhido às 2:00 UTC de 9 de março de 2015.
Placar
Todas as pontuações são arredondadas para o milésimo mais próximo
Maltysen - 14 idiomas / 24 caracteres = 0,583 ---- Vencedor
mbomb007 - 15 idiomas / 29 caracteres = 0,517
Jakube - 5 idiomas / 11 caracteres = 0,455
Teun Pronk - 4 idiomas / 51 caracteres = 0,078
captncraig - 1 idioma / 56 caracteres = 0,018
fonte
NumberOfLanguages / CodeSize
?Respostas:
14 idiomas - 24 bytes = 0,58333333333
** Facepalm **. Eu esqueci de não contar o espaço na minha resposta em Python. Então, eu tenho 24 bytes agora.
Aprendi sobre muitas novas línguas com este desafio, que provavelmente usarei nos campos de golfe. Um site que realmente me ajudou a encontrar esses idiomas foi http://www.tutorialspoint.com/codingground.htm . Só não espere que meus programas sejam executados nele, ele requer um formato de programa completo e eu apenas o usei para aprender sobre os idiomas e usei outros REPLs para executá-los.
1. Pitão :
Não Pyth não tem uma gama de função degrau ao contrário python, então eu usei gama regular e
picadas(graças @Jakube) usado operador mod nele.Define uma função g (até, etapa)
2. Golfscript:
Este é o meu primeiro programa de golfe. Provavelmente não é a melhor maneira de fazê-lo.
3. Bash Utils:
Usa o comando seq que possui os parâmetros INCREMENT.
4,5 Python, Sábio :
Código auto-explicativo.
Sage é uma linguagem baseada em Python usada para coisas matemáticas.
6. Mathematica:
Mais uma vez, auto-explicativo.
7. Matlab:
Usa a notação de intervalo do Matlab e define uma função anônima.
8. Livescript:
Como o Coffeescript, é um derivado do JS. Possui sintaxe de intervalo legal. Notação de seta novamente.
9. Erlang:
Erlang aprendido apenas por isso. Bastante auto-explicativo, define a função r.
10. F #:
Obviamente, as definições de função do F # são como variáveis.
11. Haskell:
A notação de intervalo de Haskell fornece os dois primeiros no intervalo para o incremento, e não um incremento explícito.
12. R:
Linguagem muito legal, mesmo que as definições de função sejam um pouco detalhadas.
13. Julia:
Linguagem impressionante , estará usando para jogar golfe no futuro.
14. CJam:
Como a minha antiga resposta do GolfScript, exceto com análise e preenchimento de entrada.
fonte
Mmhdcr1GH100 7
não funciona como eu pensava.M
define uma funçãog
que você deve chamar primeiro. TenteMmhdcr1GHg100 7
.%
é a mesma coisa que python[::a]
. Não há necessidade de cortar. E tenho certeza de que seu alcance precisa incluirG
, por exemplo, o usor1hG
.7
. Negativo não parece certo.23 idiomas, 15 caracteres = 1.5333333
fonte
jrojcoq-]m[m]uN
seria uma versão burlesca que gera número e não envia dados fictícios para a pilha apenas para exibi-los novamente.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
Teste online com a entrada
100 7
.Burlesque
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, como
100 7 jrojcoq-]m[
gs2
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 é
ou como hex-dump:
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 copieW@!'."B !4+
para um arquivo chamadocompiled
e execute-o comecho 100 7 | python gs2.py compiled
.A mnemônica é bastante autoexplicável, mas aqui está o que está acontecendo na pilha.
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 em57 0e 42 2f 34 2b
, o que é ainda melhor que o pyth ideal.zsh
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 escreverf() seq 1 $2 $1
e na próxima linhaf 100 7
.Primeiro eu tentei escrever isso no Bash, mas aí você tem que escrever em
()
torno do bloco de código, comof() ( seq 1 $2 $1 )
. Então, mudei para o zsh.Pyth
Isso realmente dói, pois é claro que vejo o óbvio golfe de 7 bytes. Você pode testá-lo online com a entrada
100, 7
.fonte
100ro7en?i
que produz{8 15 22 29 36 43 50 57 64 71 78 85 92 99}
. Você pode diminuir ainda mais usando7mo14.+?i
.[::a]
comando em Python.EveryNth([1,2,3,4,5,6,7,8, 9], 3)
retorna[3, 6, 9]
e não[1,4,7]
, como foi exigido neste desafio.en
trabalhos diferentes do que se esperaria de outros idiomas. Amaldiçoo o dia em que o implantei desta maneira: D. Soluções comuns para isso estão usando o quemo
eu mencionei acima ou usandoco
como na9ro3co)-]
qual produz{1 4 7}
. PS: Eu tinha um intérprete on-line nos velhos tempos, mas meu novo hoster não suporta mais CGI, mas posso convencer alguém que possui um servidor com suporte a CGI a hospedar o intérprete on-line novamente :)15 idiomas, 29 caracteres = (15/29) ≈ 0,517
Corrigi todo o meu código até agora. Agora estou pesquisando outros idiomas.
1. Python (24 jogadores de golfe)
2.> <> (Peixe) - (19 + caracteres indesejados)
Este programa pressupõe que o número e o tamanho da etapa estejam na pilha previamente, pressionados nessa ordem. Usa
ao
para imprimir novas linhas entre números.Explicação (código, pilha após a execução do código anterior, comentários):
3. APL (19 jogadores de golfe)
Golfed . Cole aqui: http://ngn.github.io/apl/web/
Chamada assim:
7 f 100
. Isso cria uma matriz de 1 para n, multiplica cada elemento por s, adiciona uma a cada elemento e, em seguida, pega os primeiros elementos de teto (n / s).4-7. Haskell , Limpo , Caril , Frege (14 campos de golfe - os espaços não contam)
Este programa é válido em Haskell, Clean, Curry e Frege.
Golfed. Execute aqui: https://ideone.com/Ii0pgP
8. Scotch (15 jogadores de golfe)
9. Jaskell (24 jogadores de golfe ) - Construído com base na documentação.
Filtre a lista onde o restante do módulo é 1.
10. CoffeeScript (25 jogadores) Corra aqui
11. R (25 jogadores) Corra aqui: http://www.r-fiddle.org/#/fiddle?id=k3vRnCOW&version=2
12. Cobra (26 jogando golfe)
13. S-Lang (28 jogadores de golfe)
14. Boo (29)
Não tenho certeza se a função de intervalo pode levar três parâmetros ...
15. Funge-98 (29, alguma ajuda no golfe?)
O mais perto que pude chegar ao meu programa> <>. Como não há instrução "rotate" na pilha, tive que usar "put" e "get". O Befunge realmente precisa de algumas instruções de rotação / deslocamento de pilha, ou mesmo uma instrução "over".
Explicação:
NÃO USAR NO MOMENTO, MUITO LONGO - Minha pontuação é aprimorada por não incluí-las.
Rubi (35) Run aqui: http://ideone.com/yFZELR
PowerShell (38)
Perl (39) Execute aqui: https://ideone.com/HGoleN
fonte
i
, o que empurra um caractere. Além disso, enquanto estamos no assunto, é aceitável que o programa trave após concluir com êxito sua saída (exibindo uma pilha vazia)?seq.int()
. Funciona da mesma forma querange
em Python. Depois, você pode obtê-lo para 29.4 idiomas 51 caracteres = (4/51) = 0,0784313725490196
Não faço ideia de quantos números depois de vírgula você deseja, então deixarei assim.
Todos os snippets têm 51 caracteres quando você remove todo o espaço em branco.
Trabalhando em códigos cada vez menores, mas é um começo.
Registro
Resposta inicial
Enviado Python (3.4), Lua (5.1) e Javascript.
Pontuação: 3/51 = 0,0588235294117647
Atualização 1 : Pontuação
Ruby adicionada
: 4/51 = 0,0784313725490196.
Python 3.4
Lua 5.1
Javascript
Rubi
fonte
di _reque(s) _reque(n) gl a=1 while $a<=$n{ di $a gl a=$a+$s }
1 idioma - 56 caracteres = 0,01785714285
piet (2x28) -
fonte