O objetivo do Rosetta Stone Challenge é escrever soluções no maior número possível de idiomas. Mostre seu multilinguismo de programação!
O desafio
Seu desafio é implementar um programa que insira uma lista de números e produza a regra usada para gerar cada número sucessivo da série, no maior número possível de linguagens de programação . Você tem permissão para usar qualquer tipo de função de biblioteca padrão que seu idioma possua, pois essa é principalmente uma demonstração de idioma.
O que é uma "série"?
Uma série é uma lista ordenada de números inteiros. Cada número sucessivo da série pode ser gerado aplicando uma regra simples ao número anterior da série. Nesse desafio, a regra consiste em multiplicar o número por uma constante e adicionar uma segunda constante. Ambas as constantes podem ser qualquer número inteiro. O objetivo deste desafio é produzir essas duas constantes.
Para a série 2 5 11
, a regra pode ser escrita como2 1
. Isso significa que cada número é o número anterior, vezes 2, mais 1. Um fato importante é que a maioria das séries tem exatamente uma regra. Algumas séries têm um número infinito ou nenhum, mas você não precisará lidar com isso.
Entrada
A entrada será uma lista de três números inteiros diferentes, que são os números na sequência. Os números podem ser delimitados por espaço, vírgula ou nova linha, mas especifique quais. Eu serei flexível nessa limitação porque certos idiomas podem ter restrições de entrada. Aqui estão quatro exemplos de entrada:
0 7 14
2 5 11
2 0 -4
5 -19 77
Resultado
A saída será dois números inteiros que representam a regra usada para gerar a série. O primeiro número será a constante multiplicativa, enquanto o segundo número será a constante aditiva. A formatação da saída pode ser delimitada por espaço, vírgula ou nova linha. Também sou flexível nessa limitação. Aqui estão os exemplos correspondentes de saída:
1 7
2 1
2 -4
-4 1
O Critério Vencedor Objetivo
Quanto a um critério de vitória objetivo, aqui está: Cada idioma é uma competição separada sobre quem pode escrever a entrada mais curta, mas o vencedor geral será a pessoa que vencer a maioria dessas subcompetições. Isso significa que uma pessoa que responde em muitos idiomas incomuns pode obter uma vantagem. O código-golfe é principalmente um desempate quando existe mais de uma solução em um idioma: a pessoa com o programa mais curto recebe crédito por esse idioma.
Regras, restrições e notas
Seu programa pode ser escrito em qualquer idioma que existia antes de 9 de abril de 2012. Também terei que confiar na comunidade para validar algumas respostas escritas em alguns dos idiomas mais incomuns / esotéricos, pois é improvável que eu possa testar eles.
Classificação atual
Esta seção será atualizada periodicamente para mostrar o número de idiomas e quem lidera em cada um.
- AWK (32) - mellamokb
- bash (31) - Peter Taylor
- Befunge (29) - Howard
- bc (39) - kernigh
- cérebro (174) - CMP
- C (78) - l0n3_shArk
- C ++ (96) - leftaroundabout
- Lisp comum (88) - kernigh
- Capela de Cray (59) - Kyle Kanos
- csh (86) - São Paulo
- Cuda (301) - leftaroundabout
- dc (30) - kernigh
- DOS BATCH (54) - mellamokb
- Elemento (27) - Howard
- es (95) - kernigh
- Fator (138) - kernigh
- Felix (86) - kirbyfan64sos
- Fortran (44) - Kyle Kanos
- Go (101) - Howard
- Golfe (16) - Howard
- Golfe (44) - Kyle Kanos
- Haskell (35) - leftaroundabout
- J (23) - Gareth
- Java (141) - Howard
- JavaScript (47) - mellamokb
- Julia (71) - ML
- Lua (51) - Howard
- Mercúrio (319) - leftaroundabout
- MoonScript (48) - kirbyfan64sos
- Nimrod (146) - leftaroundabout
- Coruja (22) - res
- Pascal (88) - leftaroundabout
- Perl (57) - Gareth
- PHP (61) - mellamokb
- PicoLisp (72) - rio de janeiro
- Piet (56) - ML
- PostScript (61) - Howard
- Python (40) - Howard
- Q (36) - tmartin
- QBasic (34) - mellamokb
- R (50) - res
- Rubi (44) - Howard
- Scala (102) - Gareth
- SQL (57) - Aman ZeeK Verma
- TI-83 BASIC (25) - mellamokb
- Máquina de registro ilimitado (285) - Paxinum
- VBA (57) - Gaffi
- Espaço em branco (123) - res
- zsh (62) - São Paulo
Classificação do usuário atual
Classificações iguais são classificadas em ordem alfabética.
Howard (9): Befunge (29), Elemento (27), Go (101), GolfScript (16), Java (141), Lua (51), PostScript, (61) Python, (40) Ruby (44)
kernigh (8): bc (39), Lisp comum (88), csh (86), dc (30), es (95), fator (138), PicoLisp (72), zsh (62)
leftroundabout (6): C ++ (96), Cuda (301), Haskell (35), Mercúrio (319), Nimrod (146), Pascal (88)
mellamokb (6): AWK (32), DOS BATCH (54), JavaScript (47), PHP (61), QBasic (34), TI-83 BASIC (41)
Gareth (3): J (23), Perl (57), Scala (102)
Kyle Kanos (3): Capela Cray (59), Fortran (44), Golflua (44)
res (3): Coruja (22), R (50), Espaço em branco (123)
kirbyfan64sos (2): Felix (86), MoonScript (48)
ML (2): Julia (71), Piet (56)
Aman Zeek verma (1): SQL (57)
CMP (1): foda cerebral (174)
Gaffi (1): VBA (57)
l0n3_shArk (1): C (78)
Paxinum (1): Máquina de registro ilimitada (285)
Peter Taylor (1): festança (31)
tmartin (1): Q (36)
fonte
code-golf
ecode-challenge
.Respostas:
GolfScript, 16 caracteres
A entrada é fornecida como lista separada por espaço.
JavaScript, 56 caracteres
A entrada é dada no prompt.
Ruby, 44 caracteres
A entrada é fornecida aqui como lista separada por vírgula.
Python, 40 caracteres
A entrada é novamente separada por vírgula.
Java, 141 caracteres
Entrada separada por nova linha.
Lua, 51 caracteres
Entrada separada por nova linha.
Vá, 101 caracteres
Entrada separada por nova linha.
Fortran, 90 caracteres
Entrada separada por nova linha.
Befunge, 29 caracteres
PostScript, 61 caracteres
Coruja, 23 caracteres
Entrada separada por nova linha.
Elemento , 27 caracteres
Entrada separada por nova linha.
fonte
Brainfuck - 174
Piet - 82?
Não sei como medir o golfe competitivo aqui. Eu vou com o tamanho total da imagem (em codels) O meu é 41x2:
Befunge - 34
Inglês - 278
Não tenho certeza se isso conta, mas pensei em tentar. É notavelmente difícil descrever até mesmo um algoritmo simples com precisão. Meio que gostaria que o inglês apoiasse algum tipo de símbolo de agrupamento para estabelecer precedência.
fonte
D:\Software\Programming\Piet\npiet-1.3a-win32>npiet series2.png
? 5
? -19
? 77
05
A solução deve ser-4 1
QBasic, 42
Requer entrada com vírgulas, saídas com espaços (isso está ok?)
Mercúrio, 319
Haskell,
8581Agora entradas com espaços, saídas com novas linhas.
C, 80
C ++, 96
Nimrod, 146
Entrada com novas linhas, vírgula de saída.
Este não conta, mas sinto que ainda se encaixa de alguma forma:
Teorema matemático, 713 caracteres do LaTeX
Enquanto escrevemos
:=
definições ...Pascal,
9088Cuda, 301
fonte
m
e reutilizandoc
, e outros dois usando, emc-=b;c/=b-a;
vez dec=(c-b)/(b-a);
.scanf()
string de formato.AWK, 35 caracteres
2 0 -4
bc, 39 caracteres
z=f(2, 0, -4)
bc
expressão. Depois debc
ler o arquivo de origem, ele lê a entrada padrão. É por isso que a entrada deve se parecer com uma chamada de função.bc
, que requer uma nova linha após o{
.Lisp comum, 88 caracteres
2 0 -4
csh, 86 caracteres
2 0 -4
csh
é o único idioma para o qual conto nova linha no final do arquivo. Isso ocorre porquecsh
nunca executa o último comando, a menos que haja nova linha.set i=($<)
não funciona, porque$<
não possui divisão de palavras.dc, 30 caracteres
2 0 _4
onde_
está o sublinhado.es, 95 caracteres
2 0 -4
es
é a concha extensível de Paul Haahr e Byron Rakitzis.Fator, 138 caracteres
2 0 -4
PicoLisp,
7472 caracteres2 0 -4
a(read)b(read)c(read)
parar read a(r)b(r)c(r)
.TI-83 BASIC,
6361 caracteres2
ENTER0
ENTER¯4
ENTER, onde¯
é o menos unário da calculadora.→
(a seta à direita) conta como U + 2192. Por exemplo, a calculadora contaInput A
com 2 caracteres, mas contoInput A
com 7 caracteres. Eu também conto:
como 1 caractere.zsh, 62 caracteres
2 0 -4
fonte
AWK (32)
Demonstração: http://ideone.com/kp0Dj
bash (38)
Demonstração: http://ideone.com/tzFi8
DOS / LOTE (54
55)Toma parâmetros como lista de argumentos separados por espaço.
Java (143
185)JavaScript (48
6167)Demonstração: http://jsfiddle.net/BT8bB/6/
PHP (61
77)Demonstração: http://ideone.com/CEgke
QBasic (34)
TI-83 Básico (25
41)Sim, o parêntese certo ausente está de propósito. É uma técnica de otimização conhecida que fechar os parênteses antes de uma operação STO não é necessário na programação básica da TI-83.
fonte
p
indefinido. A especificação JS diz que os argumentos da função devem ser avaliados antes que a função seja resolvida?Espaço em branco, 123
A E / S é separada por nova linha. (Para obter o código-fonte, entre no modo de edição e copie o espaço em branco entre as tags de pré-formato; ou consulte o exemplo online em Ideone .)
Explicação, em que S, T, L representa Espaço, Guia, Alimentação de linha:
R, 50
A E / S é separada por espaço.
Coruja
--- 22 ---
A E / S é separada por nova linha.
--- 19 --- (se esta versão for permitida; mas acho que é trapaça, já que o \ é um código executável):
A E / S é separada por espaço. Uso da linha de comando:
owl prog 5 19\ 77
(o \ atua como um postfix unário menos no Owl).fonte
J, 23 caracteres
Uso:
Os números negativos são representados por sublinhados em J.
PHP, 88 caracteres
Scala, 102 caracteres
Perl, 57 caracteres
Requer a opção '-p', à qual adicionei 2 caracteres. Assume que a entrada é válida para salvar alguns caracteres.
Todas as minhas respostas ocupam espaços separados por números.
fonte
1!:1]3
à direita da expressão lerá a entrada de STDIN. Acho que houve uma discussão sobre meta ou nos comentários de algumas respostas J sobre se isso deveria ser permitido ou não. Eu sou um tanto ambivalente - eu gosto de descobrir como fazer J fazer o que eu quero no menor espaço; eu levarei a penalidade de 6 caracteres para entrada de STDIN, se é isso que todo mundo quer.(],1{x-0{x*])%~/2-/\x=:".1!:1]1
parece ok no modo console.)($a=($_[1]-pop)/($_[0]-$_[1])).$/.($_[1]-$_[0]*$a)
PHP,
74,72, 69Quando a entrada é passada como argumentos:Agora, como @mellamokb sugeriu, usando $ n = $ argv:C,
77, 78^ não funciona, então aqui está o seguinte: [obrigado a @ugoren por notá-lo]fonte
fscanf
escanf
sem espaços. Impressionante!$argv
, ou seja,$n=$argv
no começo?scanf
feito primeiro ed=..
depoisb-d*a
?VBA, 57 characters
(This is basically the same as the other 'BASIC' functions, but I didn't see any VBA submissions out there already.)
fonte
Debug.?y;b-a*y
bash (42 chars)
Festa pura:
bash (31 chars)
Descascar para outra coisa:
(Baseado na implementação de Howard OWL )
fonte
Este é um código (não otimizado) para a máquina de registro não limitada, descrita aqui: http://www.proofwiki.org/wiki/Definition:Unlimited_Register_Machine
A entrada deve estar no registro 1,2 e 3 e a saída estará no registro 1, 2 após a conclusão do programa. Números não negativos e não inteiros não são manipulados, mas as entradas 0,7,14 e 2,5,11 são manipuladas corretamente.
Zero[8] Trans[2,11] Jump[3,11,7] Succ[11] Succ[8] Jump[11,11,3] Zero[5] Trans[1,12] Jump[2,12,13] Succ[12] Succ[5] Jump[12,12,9] Zero[17] Trans[8,13] Jump[13,17,25] Zero[16] Trans[5,14] Jump[13,14,22] Succ[14] Succ[16] Jump[14,14,18] Succ[9] Trans[16,13] Jump[17,17,15] Zero[6] Zero[20] Jump[9,6,40] Zero[7] Trans[1,21] Jump[20,7,36] Succ[21] Trans[21,19] Trans[19,21] Succ[7] Jump[7,7,30] Trans[21,18] Trans[18,20] Succ[6] Jump[6,6,27] Trans[20,4] Zero[10] Trans[4,15] Jump[2,15,47] Succ[15] Succ[10] Jump[15,15,43] Trans[9,1] Trans[10,2]
EDIT: removendo colchetes e encurtando os nomes das instruções:
URM 285
Z8 T2,11 J3,11,7 S11 S8 J11,11,3 Z5 T1,12 J2,12,13 S12 S5 J12,12,9 Z17 T8,13 J13,17,25 Z16 T5,14 J13,14,22 S14 S16 J14,14,18 S9 T16,13 J17,17,15 Z6 Z20 J9,6,40 Z7 T1,21 J20,7,36 S21 T21,19 T19,21 S7 J7,7,30 T21,18 T18,20 S6 J6,6,27 T20,4 Z10 T4,15 J2,15,47 S15 S10 J15,15,43 T9,1 T10,2
fonte
DOS-BATCH, 98
Entrada em linhas separadas
Bash, 51
Exemplo:
sh prog.sh 2 0 -4
(space separated arguments)Perl, 84
Java, 297
Space separated input, space separated output.
SQL, 57
This is a sad entry, but 'just' solves the purpose. The query binds input at runtime 1,2,3 are variables in order of input.
fonte
bash
solution, I just wanted to suggest you could have removed all those extra spaces and saved 6 characters.Q, 36
usage
fonte
Fortran 44
Input will be in a single line (comma or space separated)
Cray Chapel 59
Input will be on single line, no newline (add 2 chars for that by using
writeln
in place ofwrite
).Golflua 44
Newline delimited input, space delimited output
fonte
Julia, 71 characters
Space delimited input and output.
i,j,k=int(split(readline(STDIN)));println("$(l=div(k-j,j-i)) $(j-i*l)")
Example input and output:
Piet,
866056 codels (14x4), codel size 10 for better visibilityI could actually shrink down the amount of codels by a whopping 35%. I didn’t expect such a good outcome. Coding this program backwards was, as I expected, quite successful. I doubt it can be shorter than this, but I would be really interested if anyone could find a smaller solution.
The challenge does not state if the program has to stop after showing the result, so my smallest (56 codel) program should be valid. It just loops back to the beginning after showing the result, asking for a new triplet of integers. Due to the tight packing there is no place for the output of two newline characters, but that is no problem with the npiet interpreter, because it always prints a ‘?’ if it awaits input.
There are two possible sizes to build a looped version, but a version that runs only once is only possible in a program that’s at least 64 codels (16x4) big. The versions below show the reason. Maybe it’s also interesting for those who are familiar with Piet.
The final, most tightly packed 56 codel version, with a loop:
Second version (60 codels), with a loop
Se a versão do 56 codel for contra as regras, aqui está a versão final do 64 codel, executando apenas uma vez :
Minha primeira versão (86 codels)
Entrada e saída são delimitadas por nova linha.
Exemplo de entrada e saída:
Para versões em loop, parecendo um pouco mais feias:
Eu escolhi a nova linha como delimitador porque a codificação ASCII 10 (\ n) obviamente precisa de apenas 7 codels, em comparação com a ASCII 32 () que precisa de 8 codels ou até a ASCII 40 (,) que precisa de 9 codels.
A codificação inversa do resultado para a primeira entrada é uma ótima maneira de reduzir o uso do codel para operações de ROL. A ordem das pilhas no início e no final é conhecida, o resto é facilmente feito à mão.
Aqui está uma versão em texto do programa 64 codel (com pilha), na minha abreviação inventada. Os programas mais curtos simplesmente não terminam, mas retornam ao início.
fonte
MoonScript (48 caracteres, entrada delimitada por nova linha, saída delimitada por espaço)
Felix (86 caracteres, entrada delimitada por nova linha, saída delimitada por vírgula)
Julia (84 caracteres, entrada delimitada por espaço, saída delimitada por espaço)
fonte
julia file.jl
give the same error?