Anti-golfscript anti-golf: crie uma tarefa em que o GolfScript ou J seja superado pelo seu idioma (convencional) [fechado]


29

Você precisa fazer três coisas:

  1. Declaração de uma tarefa, T .
  2. Solução da tarefa em linguagem não tipicamente usado para jogar golfe, A .
  3. Solução da tarefa em linguagem tipicamente usado para jogar golfe, B . Não tente apenas inchar B para aumentar a pontuação; pense como se B tivesse sido escrito pelo seu concorrente.

Use o bom senso na definição typically used for golfing, tente maximizar a diversão para outros usuários.

Outros usuários podem propor Bs melhores (talvez incluindo em outros idiomas "golfe").

A pontuação é (length_in_bytes(B)+5)/(length_in_bytes(A)+5), quanto mais, melhor. (Talvez a fórmula de pontuação deva ser alterada? ..)

A idéia principal é inventar uma tarefa em que idiomas que normalmente apresentam bom desempenho no codegolf enfrentam um problema. Pode ser a força repentina de um idioma usual na tarefa especificada ou a fraqueza repentina de algum idioma de golfe.

Evite tarefas que mencionem linguagens de programação específicas, como Input a string and execute it as a Scheme code.


11
Suponho que você faça disso um concurso de popularidade em vez de um código de golfe. Caso contrário, as pessoas reclamarão que não é um "menor código ganha".
— Victor Stafusa

OK, mudando para concurso de popularidade. Você também pode sugerir um título melhor ou uma pontuação melhor.
— Vi.

Presumo que minha pergunta anterior se qualifique? codegolf.stackexchange.com/questions/18633/... A solução perl é de 48 caracteres, enquanto a solução é de 54 caracteres J
— user12205

11
Podemos especificar lang B (desde que seja bom no golfe)? Ou alguém pode dizer "aqui está um programa no idioma <inserir nome do idioma> e possui uma solução muito curta para o comprimento <n>:"?
— Justin

11
BTW, algumas linguagens como Perl podem estar no lado A e no lado B, dependendo do contexto.
— Vi.

Respostas:


14

Minha pergunta anterior, Imprimir uma onda sinusoidal (verticalmente), se qualifica neste momento. Estou postando aqui como uma solução, também esperando que vocês possam apresentar algumas soluções mais curtas para a minha pergunta original.

Conforme exigido por Vi., Publicarei um resumo da pergunta.

Imprima uma onda sinusoidal contínua rolando verticalmente em um terminal. O programa não deve terminar e deve rolar a onda continuamente para baixo (exceto até SIGINT). Você pode assumir que o estouro não é um problema (ou seja, você pode usar loops infinitos com contadores crescentes ou recursão infinita).

A onda deve satisfazer as seguintes propriedades:

  • Amplitude = 20 caracteres (amplitude de pico)
  • Período = 60 a 65 linhas (inclusive)
  • A saída deve consistir apenas em espaços, nova linha e |
  • Após cada linha de saída, faça uma pausa de 50ms

Existe uma amostra de saída na minha pergunta original, mas não a estou postando aqui, porque isso tornará minha resposta ridiculamente longa. Minha pergunta original pode ser vista aqui: Imprimir uma onda sinusoidal (verticalmente)

AAtualmente, o mais curto : uma solução Perl com 48 caracteres: https://codegolf.stackexchange.com/a/18655/12205

print$"x(25+20*sin).'|
';$_+=.1;`sleep .05`;do$0

BAtualmente, o mais curto : uma solução J com 54 caracteres: https://codegolf.stackexchange.com/a/18649/12205

($:+&0.1[6!:3@]&0.05[2:1!:2~' |'#~1,~[:<.20*1+1&o.)0  




Atualmente, a pontuação desta resposta é 1.113 (uma pontuação muito baixa)


A pontuação atual de acordo com a fórmula atual é de aproximadamente 1.113
— Vi.

@Vi. devo excluir esta resposta ou devo esperar um pouco e ver o que acontece? Se este último, quanto tempo devo esperar?
— precisa saber é o seguinte

A instrução indica bytes, não caracteres. Convertida para UTL-8, a solução APL produziu 61 bytes (70 para UTF-16).
— Vi.

2
Você está afirmando que Perl não é um idioma normalmente usado para jogar golfe, mas é o idioma que foi primeiro associado à palavra golfe ! Ruby, aos 56 anos, parece o idioma A real nas respostas atuais às suas perguntas.
— Peter Taylor

8

Adicione dois números

Obtenha dois números do STDIN e adicione-os. Você precisa suportar números de ponto flutuante, portanto 0,5 + 1,5 deve ser igual a 2.

Perl 5 (com -E)

say<>+<>

GolfScript

n%'+'*'"#{
}"'n/\*~

Pontuação calculada como (24+5)/(8+2+5) = 1.9(3). -Etambém contados como bytes do programa.
— Vi.

O mesmo comentário que fiz ao ás: você está afirmando que o Perl não é um idioma normalmente usado para jogar golfe, mas é o idioma que foi primeiro associado à palavra golfe !
— Peter Taylor

E seu programa GolfScript não funciona. Um programa de trabalho seria n%'+'*'"#{ }"'n/\*~onde o caractere {}é uma nova linha literal (não suportada nos comentários).
— Peter Taylor

@ PeterTaylor, Comparado com o GolfScript, Perl é uma linguagem "usual"; comparado com Java, é uma linguagem de "golfe".
— Vi.

11
A J para isso não é muito ruim, na verdade: +/".1!:1,~1. O APL provavelmente seria ainda menor.
— algorithmshark


7

Pontuação 48/37 ou 1. (297)

T: escreva um trecho de código que encerre o programa após exatamente uma hora (o mais próximo possível, como dentro de um segundo) da execução. Não se preocupe com exceções, elas podem não ser tratadas.

A: Java (32)

Thread.sleep(3600000);int a=1/0;

B: é para o Befunge 98, requer a impressão digital TIME (43)

"EMIT"4(HMS00p01p02p#;gS-!01gM-!H-!++3-!j;@

Isso leva a hora, o minuto e o segundo no momento da execução e coloca as células 02, 01 e 00. Em seguida, passa ;para a segunda parte. A segunda parte funciona da seguinte maneira:

g          get the value at 00
"EMIT"4(S) get the current time in seconds
-!         subtracts the values and changes a 0 to 1, anything else to 0

da mesma forma para o minuto e a hora.

++  sums up the values
3-! i the sum is 3, we get a 1, otherwise, we get a 0.
j   jump over the next that many cells
;   skip code execution until the next ;
@   end program

Observe que o Befunge retornará automaticamente ao início da linha quando o final de uma linha for atingido.


Como podemos ver, o Befunge não é bom quando se trata de esperar por horários específicos. No entanto, Java não é ruim.


9
APL:⎕DL 3600
— marinus 17/01

14
Java geralmente lê como class Main{public static void main...
— Vi.

3
@Vi. consulte "snippet de código". Basicamente, requer o código que realmente faz o trabalho, não mais do que isso.
— Justin

2
Não conheço o Befunge, mas o snippet Java não "encerra o programa", conforme exigido pelas especificações. Isso exigiria um System.exit(0);ou envolver seu sono em um mainmétodo.
— Peter Taylor

3
@DoorknobofSnow falha ao compilar:error: not a statement
— Bob

5

Saída de um determinado arquivo de texto (498.388888 pontos)

A saída do objetivo está aqui .

O script Python 3.4.3 para imprimi-lo é de 49 bytes:

for b in dir(__builtins__):print(eval(b).__doc__)

O programa CJam ingênuo igual à saída do objetivo, envolvendo a cadeia de saída "..."e escapando a cada uma "que ocorre nela, seria 26908 bytes.


Muito inteligente, embora possa entrar em conflito com a restrição de "idiomas específicos" (que é vago, é certo).
— BMac 27/08/2015

A regra mais próxima é "evite mencionar um idioma específico". Python não é mencionado, mas é claramente significado.
— Vi.

Sim, essa resposta é um pouco irônica, eu meio que queria ressaltar que a regra é uma espécie de declive escorregadio. Imagine se eu tivesse "manipulado" mais a saída - digamos, pegando a soma de verificação SHA1 de cada docstring - seria muito estranho afirmar "esse monte de dígitos hexadecimais é muito específico para o idioma" :)
— Lynn

Se eu quisesse dar uma resposta mais "justa", provavelmente usaria o Mathematica. Você pode fazer várias coisas extremamente específicas do domínio que exigiriam milhares de bytes de CJam / Pyth / qualquer outra coisa. Mas, infelizmente, eu não sei o idioma.
— Lynn

O link para a saída está inoperante.
— pppery 19/10

4

Diga "Olá, mundo!" (50/26 ~ 1,92)

Mostre uma caixa de mensagem para dizer "Olá, mundo!"

Javascript

alert('Hello world!')

Em um navegador com suporte para DOM Nível 0+.

Perl

use Win32;Win32::MsgBox('Hello world!','',48)

Executando no ActivePerl com Win32 :: GUI.


alertnão é inerentemente parte do JS, e o programa GolfScript é apenas um comentário.
— Peter Taylor

Mudei a resposta para usar Perl simples.
— Escova de dentes

3

Saída "Olá, mundo!" até o usuário pressionar "q", 1,842 105/44 = 2,386

  1. Imprimir "Olá, mundo!" (incluindo nova linha).
  2. O usuário pressiona uma tecla que não é ecoada na tela.
  3. Repita até que a tecla pressionada seja "q".

QBasic ( 52 39 caracteres)

1?"Hello world!":IF"q"<>INPUT$(1)THEN 1

Desde que postei minha resposta original, descobri que era possível desativar a formatação automática no QB64. : ^ D Com o número da linha e o ?atalho para PRINT, isso parece uma expressão ternária em idiomas do tipo C.

Primeira versão:

PRINT "Hello world!"
IF INPUT$(1) <> "q" THEN RUN

Perl 5 (100 caracteres)

while("q"ne$e){print"Hello world!\n";system"stty cbreak -echo";$e=getc;system"stty -cbreak echo";}

O acima funcionará apenas em sistemas UNIX (certos?) (Testado no Ubuntu 12.04). É possível que alguém possa usar várias plataformas e reduzi -lo a 91 caracteres usando o módulo Term :: ReadKey , mas não o testei:

use Term::ReadKey;while("q"ne$e){print"Hello world!\n";ReadMode 3;$e=ReadKey 0;ReadMode 0;}

1

Olá mundo (3 1/3 pontos)

Escreva um programa que produza Hello World. .

HQ9 + (1 caractere)

Esta não é a linguagem "normalmente usada para jogar golfe", então acredito que se encaixa aqui. Trabalha neste intérprete, a propósito .

H

GolfScript (15 caracteres)

Duvido que possa ficar mais curto, mesmo que seja GolfScript.

"Hello World."

8
Eu não acho que HQ9+combina como uma linguagem. Ele é projetado para truques / enigmas / diversão. Brainfuck / unlambda / outras línguas esotéricas também não parece terno como A .
— Vi.

@ Vi: Mas normalmente não é usado para jogar golfe.
— precisa saber é o seguinte

4
Você pode hovewer tentar usar HQ9+como B linguagem e vencê-lo por Java ou tal ...
— Vi.

7
Parece que há uma hierarquia: comparado ao Java, o Perl é um golflang. Comparado ao Perl, o GolfScript é um campo de golfe. Comparado ao GolfScript, o HQ9 + é um campo de golfe ...
— Vi.

@ Vi: verifiquei cuidadosamente a descrição da sua tarefa. O HQ9 + nunca é usado para jogar golfe, exceto por duas tarefas específicas - "99 garrafas" e "Olá, mundo". A menos que você possa mostrar alguma outra tarefa na qual o HQ9 + vence com qualquer outra linguagem de programação, ainda acho que ele se encaixa na definição, mesmo que a abuse (ei, é um concurso de popularidade ). O HQ9 + simplesmente não é usado para coisas de golfe não relacionadas a essas duas tarefas. Portanto, não é normalmente usado para jogar golfe. O segundo é obviamente projetado para o CodeGolf - é o GolfScript.
— precisa saber é o seguinte

0

Saída "Olá, mundo!", 33/97 = 2,94

Escreva um programa que produza Hello world!

Arduino ou GML

Serial.print("Hello world!")

ou

show_message("Hello world!")

Ambos são 28 caracteres.

GTB

Eu uso muito o GTB para jogar golfe (especialmente desde que eu o criei, e é Turing completo). Infelizmente, há apenas suporte limitado para caracteres minúsculos (porque a calculadora TI-84 não pode lidar com isso). Este é provavelmente o programa GTB mais curto que pode gerar o Hello world!

S;"lower",1,1)→_~"H"+S;"expr(",1,1)+_+_+S;"cos(",2,1)+" W"+S;" or ",2,2)+_+S;" and ",4,1)+"!

92 caracteres.


A versão GTB também a envia para a porta serial?
— Vi.

A versão GTB está intencionalmente inchada com vários coss e exprsou realmente não pode simplesmente produzir algo de maneira regular? Ou o "personagem na verdade não é uma string literal e está me confundindo ...
— Vi.

@Vi. Não está nada inchado ... tem que retirar e de expr, dois l de baixo, o de cos, ou de ou, l de baixo, d de e.
— Timtech

'Outros usuários podem propor Bs melhores (talvez incluindo em outros idiomas "golfe"). '--- deixe-me tentar o golfscript:"Hello world!"
— John Dvorak

@JanDvorak Você provavelmente está certo.
— Timtech
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.