Anti-golfscript anti-golf: créez une tâche où GolfScript ou J est dépassé par votre langue (conventionnelle) [fermé]

29

Vous devez faire trois choses:

  1. Déclaration d'une tâche, T .
  2. Solution de la tâche dans le langage généralement pas utilisé pour jouer au golf, A .
  3. Solution de la tâche dans le langage généralement utilisé pour jouer au golf, B . N'essayez pas de gonfler juste B pour augmenter le score, pensez plutôt comme si B a été écrit par votre concurrent.

Faites preuve de bon sens dans la définition typically used for golfing, essayez de maximiser le plaisir pour les autres utilisateurs.

D'autres utilisateurs peuvent proposer de meilleurs Bs (y compris peut-être dans d'autres langues "golfy").

La notation est (length_in_bytes(B)+5)/(length_in_bytes(A)+5), plus c'est mieux. (Peut-être que la formule de notation devrait être modifiée? ..)

L'idée principale est d'inventer une tâche où les langages qui fonctionnent généralement bien dans le codegolf rencontrent un problème. Cela peut être la force soudaine d'une langue usuelle dans la tâche donnée ou la faiblesse soudaine d'un golflang.

Évitez les tâches qui mentionnent des langages de programmation spécifiques, comme Input a string and execute it as a Scheme code.

Vi.
la source
1
Je suppose que vous en faites un concours de popularité au lieu d'un golf de code. Sinon, les gens se plaindront qu'il ne s'agit pas d'un "gain de code le plus court".
Victor Stafusa
OK, passage au concours de popularité. Vous pouvez également suggérer un meilleur titre ou un meilleur score.
Vi.
Je suppose que ma question précédente est éligible? codegolf.stackexchange.com/questions/18633/… La solution Perl est de 48 caractères tandis que la solution J est de 54 caractères
user12205
1
Pouvons-nous spécifier la langue B (tant qu'elle est bonne au golf)? Ou peut-on dire "voici un programme en langue <insérer le nom de la langue> et il a une très courte solution de longueur <n>:"?
Justin
1
BTW certaines langues comme Perl peuvent être à la fois côté A et côté B, selon le contexte.
Vi.

Réponses:

14

Ma question précédente, Imprimer une onde sinusoïdale (verticalement), se qualifie en ce moment. Je le poste ici comme solution, en espérant également que vous puissiez trouver des solutions plus courtes à ma question initiale.

Comme requis par Vi., Je posterai un résumé de la question.

Imprimer une onde sinusoïdale continue défilant verticalement sur un terminal. Le programme ne doit pas se terminer et doit défiler en continu sur la vague (sauf jusqu'à SIGINT). Vous pouvez supposer que le débordement n'est pas un problème (c'est-à-dire que vous pouvez utiliser des boucles infinies avec des compteurs d'incrémentation ou une récursion infinie).

L'onde doit satisfaire les propriétés suivantes:

  • Amplitude = 20 caractères (amplitude de crête)
  • Période = 60 à 65 lignes (inclus)
  • La sortie ne doit être composée que d'espaces, de retours à la ligne et de |
  • Après chaque ligne de sortie, faites une pause de 50 ms

Il y a un exemple de sortie sur ma question d'origine, mais je ne le poste pas ici, car cela rendra ma réponse ridiculement longue. Ma question originale peut être vue ici: Imprimer une onde sinusoïdale (verticalement)

Le plus court Aactuellement: une solution Perl avec 48 caractères: /codegolf//a/18655/12205

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

Plus court Bactuellement: une solution J avec 54 caractères: /codegolf//a/18649/12205

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




Actuellement, le score de cette réponse est de 1.113 (un score terriblement bas)

user12205
la source
Le score actuel selon la formule actuelle est d'environ 1,113
Vi.
@Vi. dois-je supprimer cette réponse ou dois-je attendre un peu et voir ce qui se passe? Si ce dernier, combien de temps dois-je attendre?
user12205
L'instruction indique des octets, pas des caractères. Convertie en UTL-8, la solution APL a fait 61 octets (70 pour UTF-16).
Vi.
2
Vous prétendez que Perl n'est pas une langue généralement utilisée pour le golf, mais c'est la langue qui a été associée en premier au mot golf ! Ruby, à 56 ans, ressemble à la vraie langue A dans les réponses actuelles à vos questions.
Peter Taylor
8

Ajoutez deux nombres

Obtenez deux numéros de STDIN et ajoutez-les ensemble. Vous devez prendre en charge les nombres à virgule flottante, donc 0,5 + 1,5 doit être égal à 2.

Perl 5 (avec -E)

say<>+<>

GolfScript

n%'+'*'"#{
}"'n/\*~
Konrad Borowski
la source
Score calculé comme (24+5)/(8+2+5) = 1.9(3). -Eégalement compté comme octets de programme.
Vi.
Le même commentaire que j'ai fait à Ace: vous prétendez que Perl n'est pas une langue généralement utilisée pour le golf, mais c'est la langue qui a été associée en premier au mot golf !
Peter Taylor
Et votre programme GolfScript ne fonctionne pas. Un programme de travail serait n%'+'*'"#{ }"'n/\*~où le caractère entre {}est une nouvelle ligne littérale (non prise en charge dans les commentaires).
Peter Taylor
@PeterTaylor, Comparé à GolfScript, Perl est un langage "habituel"; par rapport à Java, c'est un langage "golf".
Vi.
1
Le J pour c'est pas trop mal, en fait: +/".1!:1,~1. APL serait probablement encore plus petit.
algorithmshark
8

Imprimer 'Bonjour tout le monde!' au stdout.

PHP, 13 octets

Hello, World!

Golfscript, 15 octets

'Hello, World!'

Pyth, 14 octets

"Hello, World!
georgeunix
la source
3
Joliment d'actualité. :)
AdmBorkBork
2
Nouveau B: Dans HQ9 +H
Pas que Charles
2
Mais c'est mal orthographié, @NotthatCharles
georgeunix
1
@georgeunix Bon point. Vous avez capitalisé votre "W".
Pas que Charles
7

Score 48/37 ou 1. (297)

T: écrire un extrait de code qui termine le programme après exactement une heure (aussi proche que possible, comme dans une seconde) de l'exécution. Ne vous inquiétez pas des exceptions, elles peuvent être gérées.

A: Java (32)

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

B: est pour Befunge 98, nécessite l' empreinte digitale TIME (43)

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

Cela prend l'heure, la minute et la seconde au moment de l'exécution, et place les cellules 02, 01 et 00. Ensuite, il passe ;à la deuxième partie. La deuxième partie fonctionne comme suit:

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

de même pour la minute et l'heure.

++  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

Notez que Befunge reviendra automatiquement au début de la ligne lorsque la fin d'une ligne est atteinte.


Comme nous pouvons le voir, Befunge n'est pas bon quand il s'agit d'attendre des moments précis. Cependant, Java n'est pas mauvais.

Justin
la source
9
APL:⎕DL 3600
marinus
14
Java se lit généralement comme class Main{public static void main...
Vi.
3
@Vi. voir "extrait de code". Fondamentalement, cela nécessite le code qui fait le travail, pas plus que cela.
Justin
2
Je ne connais pas Befunge, mais l'extrait de Java ne "termine pas le programme" comme requis par la spécification. Cela nécessiterait une System.exit(0);ou enveloppant votre sommeil dans une mainméthode.
Peter Taylor
3
@DoorknobofSnow ne parvient pas à compiler:error: not a statement
Bob
5

Sortie d'un certain fichier texte (498,388888 points)

Le résultat de l'objectif est ici .

Le script Python 3.4.3 pour l'imprimer est de 49 octets:

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

Le programme CJam naïf égal à la sortie de l'objectif, en encapsulant la chaîne de sortie "..."et en échappant à chacune "qui s'y produit, serait de 26908 octets.

Lynn
la source
Très intelligent, bien qu'il puisse aller à l'encontre de la restriction des "langues spécifiques" (qui est vague, certes).
BMac
La règle la plus proche est "éviter de mentionner une langue spécifique". Python n'est pas mentionné, mais est clairement signifié.
Vi.
Oui, cette réponse est un peu ironique, je voulais juste souligner que la règle est une sorte de pente glissante. Imaginez si j'avais "altéré" davantage la sortie - disons, en prenant la somme de contrôle SHA1 de chaque docstring - il serait très étrange de prétendre que "ce tas de chiffres hexadécimaux tronqués est trop spécifique à la langue" :)
Lynn
Si je voulais faire une réponse plus "juste", j'utiliserais probablement Mathematica. Vous pouvez faire beaucoup de choses extrêmement spécifiques au domaine qui prendraient des milliers d'octets de CJam / Pyth / toute autre chose. Mais malheureusement, je ne connais pas la langue.
Lynn
Le lien vers la sortie est mort.
pppery
4

Dites "Bonjour tout le monde!" (50/26 ≈ 1,92)

Afficher une boîte de message pour dire "Bonjour tout le monde!"

Javascript

alert('Hello world!')

Dans un navigateur prenant en charge DOM niveau 0+.

Perl

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

Exécution sur ActivePerl avec Win32 :: GUI.

Brosse à dents
la source
alertne fait pas intrinsèquement partie de JS, et le programme GolfScript n'est qu'un commentaire.
Peter Taylor
J'ai changé la réponse pour utiliser du Perl simple.
Brosse à dents
3

Sortie "Bonjour tout le monde!" jusqu'à ce que l'utilisateur appuie sur "q", 1.842 105/44 = 2.386

  1. Imprimer "Bonjour tout le monde!" (y compris la nouvelle ligne).
  2. L'utilisateur appuie sur une touche qui n'est pas renvoyée à l'écran.
  3. Répétez jusqu'à ce que la touche enfoncée soit "q".

QBasic ( 52 39 caractères)

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

Depuis la publication de ma réponse d'origine, j'ai découvert que je pouvais désactiver la mise en forme automatique dans QB64. : ^ D Avec le numéro de ligne et le ?raccourci pour PRINT, cela ressemble plutôt à une expression ternaire dans des langages de type C.

Première version:

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

Perl 5 (100 caractères)

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

Ce qui précède ne fonctionnera que sur (certains?) Les systèmes UNIX (testé sur Ubuntu 12.04). Il est possible que l'on puisse aller sur plusieurs plates-formes et le réduire à 91 caractères en utilisant le module Term :: ReadKey , mais je ne l'ai pas testé:

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

Bonjour le monde (3 1/3 points)

Écrire un programme qui sort Hello World..

HQ9 + (1 caractère)

Ce n'est pas un langage "généralement utilisé pour le golf", donc je pense qu'il convient ici. Fonctionne dans cet interprète, soit dit en passant .

H

GolfScript (15 caractères)

Je doute qu'il puisse être plus court, même s'il s'agit de GolfScript.

"Hello World."
Konrad Borowski
la source
8
Je ne pense pas que cela HQ9+convient comme une langue. Il est conçu pour des tours / énigmes / amusement. Brainfuck / unlambda / d' autres langues ne semble pas ésotériques aussi costume comme A .
Vi.
@Vi .: Mais ce n'est généralement pas utilisé pour le golf.
Konrad Borowski
4
Vous pouvez cependant essayer d'utiliser HQ9+comme langage B et le battre par Java ou autre ...
Vi.
7
On dirait qu'il y a une hiérarchie: par rapport à Java, Perl est un golflang. Comparé à Perl, GolfScript est un golflang. Comparé à GolfScript, HQ9 + est un golflang ...
Vi.
@Vi .: J'ai soigneusement vérifié la description de votre tâche. HQ9 + n'est jamais utilisé pour le golf, sauf pour deux tâches particulières - "99 bouteilles" et "Bonjour, monde". À moins que vous ne puissiez montrer une autre tâche dans laquelle HQ9 + gagne avec tout autre langage de programmation, je pense toujours qu'il correspond à la définition, même s'il en abuse (hé, c'est un concours de popularité ). HQ9 + n'est tout simplement pas utilisé pour jouer au golf sans rapport avec ces deux tâches. Donc, ce n'est généralement pas utilisé pour le golf. Le second est évidemment conçu pour CodeGolf - c'est GolfScript.
Konrad Borowski
0

Sortie "Bonjour tout le monde!", 33/97 = 2,94

Écrire un programme qui génère Hello world!

Arduino ou GML

Serial.print("Hello world!")

ou

show_message("Hello world!")

Les deux font 28 caractères.

GTB

J'utilise beaucoup GTB pour jouer au golf (surtout depuis que je l'ai créé moi-même, et c'est Turing complet). Malheureusement, la prise en charge des caractères en minuscules est limitée (car la calculatrice TI-84 ne peut pas y faire face). C'est probablement le programme GTB le plus court qui peut produire 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 caractères.

Timtech
la source
La version GTB le produit-elle également sur le port série?
Vi.
La version GTB est-elle intentionnellement gonflée de divers coss et exprsou ne peut-elle vraiment pas produire quelque chose de manière régulière? Ou le "caractère n'est en fait pas une chaîne littérale et me déroute ...
Vi.
@Vi. Il n'est pas du tout gonflé ... il doit retirer e de expr, deux l de inférieur, o de cos, ou de ou, l de inférieur, et d de et.
Timtech
«D'autres utilisateurs peuvent proposer de meilleurs Bs (y compris dans d'autres langues« golfiques »). '--- laissez-moi essayer golfscript:"Hello world!"
John Dvorak
@JanDvorak Vous avez probablement raison.
Timtech