L'objectif d'un Rosetta Stone Challenge est d'écrire des solutions dans autant de langues que possible. Montrez votre multilinguisme de programmation!
Le défi
Votre défi est d'implémenter un programme qui entrera une liste de nombres et sortira la règle utilisée pour générer chaque numéro successif de la série, dans autant de langages de programmation que possible . Vous êtes autorisé à utiliser n'importe quelle sorte de fonction de bibliothèque standard de votre langue, car il s'agit principalement d'une vitrine de langue.
Qu'est-ce qu'une "série"?
Une série est une liste ordonnée d'entiers. Chaque numéro successif de la série peut être généré en appliquant une règle simple au numéro précédent de la série. Dans ce défi, la règle consiste à multiplier le nombre par une constante, puis à ajouter une deuxième constante. Les deux constantes peuvent être n'importe quel entier. Le but de ce défi est de produire ces deux constantes.
Pour la série 2 5 11
, la règle peut s'écrire 2 1
. Cela signifie que chaque nombre est le nombre précédent, multiplié par 2, plus 1. Un fait important est que la plupart des séries ont exactement une règle. Certaines séries ont un nombre infini ou pas du tout, mais vous n'aurez pas à vous en occuper.
Contribution
L'entrée sera une liste de trois entiers différents qui sont les nombres de la séquence. Les nombres peuvent être séparés par des espaces, des virgules ou des sauts de ligne, mais veuillez préciser lesquels. Je vais être flexible sur cette limitation car certaines langues peuvent avoir des restrictions d'entrée. Voici quatre exemples de saisie:
0 7 14
2 5 11
2 0 -4
5 -19 77
Production
La sortie sera constituée de deux entiers qui représentent la règle utilisée pour générer la série. Le premier nombre sera la constante multiplicative, tandis que le deuxième nombre sera la constante additive. Le formatage de la sortie peut être délimité par des espaces, des virgules ou des sauts de ligne. Je suis également flexible sur cette limitation. Voici les exemples de sortie correspondants:
1 7
2 1
2 -4
-4 1
Le critère de gain objectif
En ce qui concerne un critère de gain objectif, le voici: chaque langue est une compétition distincte pour savoir qui peut écrire la plus courte inscription, mais le gagnant général serait la personne qui remporte le plus de ces sous-compétitions. Cela signifie qu'une personne qui répond dans de nombreuses langues rares peut bénéficier d'un avantage. Le code-golf est surtout un bris d'égalité lorsqu'il y a plus d'une solution dans une langue: la personne avec le programme le plus court obtient un crédit pour cette langue.
Règles, restrictions et notes
Votre programme peut être écrit dans n'importe quelle langue qui existait avant le 9 avril 2012. Je devrai également compter sur la communauté pour valider certaines réponses écrites dans certaines des langues les plus rares / ésotériques, car il est peu probable que je puisse tester leur.
Classement actuel
Cette section sera périodiquement mise à jour pour montrer le nombre de langues et qui mène dans chacune.
- AWK (32) - mellamokb
- bash (31) - Peter Taylor
- Befunge (29) - Howard
- bc (39) - kernigh
- enculé (174) - CMP
- C (78) - l0n3_shArk
- C ++ (96) - à gauche
- Lisp commun (88) - kernigh
- Chapelle de Cray (59) - Kyle Kanos
- csh (86) - kernigh
- Cuda (301) - à gauche
- dc (30) - kernigh
- DOS BATCH (54) - mellamokb
- Élément (27) - Howard
- es (95) - kernigh
- Facteur (138) - kernigh
- Félix (86) - kirbyfan64sos
- Fortran (44) - Kyle Kanos
- Aller (101) - Howard
- GolfScript (16) - Howard
- Golflua (44) - Kyle Kanos
- Haskell (35) - à gauche
- J (23) - Gareth
- Java (141) - Howard
- JavaScript (47) - mellamokb
- Julia (71 ans) - ML
- Lua (51 ans) - Howard
- Mercure (319) - à gauche
- MoonScript (48) - kirbyfan64sos
- Nimrod (146) - à gauche
- Chouette (22) - res
- Pascal (88) - à gauche
- Perl (57) - Gareth
- PHP (61) - mellamokb
- PicoLisp (72) - kernigh
- Piet (56) - ML
- PostScript (61) - Howard
- Python (40) - Howard
- Q (36) - tmartin
- QBasic (34) - mellamokb
- R (50) - res
- Rubis (44) - Howard
- Scala (102) - Gareth
- SQL (57) - Aman ZeeK Verma
- TI-83 BASIC (25) - mellamokb
- Machine d'enregistrement illimitée (285) - Paxinum
- VBA (57) - Gaffi
- Espace (123) - res
- zsh (62) - kernigh
Classements des utilisateurs actuels
Les rangs égaux sont triés par ordre alphabétique.
Howard (9): Befunge (29), Element (27), Go (101), GolfScript (16), Java (141), Lua (51), PostScript, (61) Python, (40) Ruby (44)
kernigh (8): bc (39), Common Lisp (88), csh (86), dc (30), es (95), Factor (138), PicoLisp (72), zsh (62)
leftroundabout (6): C ++ (96), Cuda (301), Haskell (35), Mercury (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): Chapelle de Cray (59), Fortran (44), Golflua (44)
res (3): Chouette (22), R (50), Blanc (123)
kirbyfan64sos (2): Felix (86), MoonScript (48)
ML (2): Julia (71), Piet (56)
Aman Zeek verma (1): SQL (57)
CMP (1): enculé (174)
Gaffi (1): VBA (57)
l0n3_shArk (1): C (78)
Paxinum (1): Machine d'enregistrement illimitée (285)
Peter Taylor (1): bash (31)
tmartin (1): Q (36)
la source
code-golf
etcode-challenge
.Réponses:
GolfScript, 16 caractères
L'entrée est donnée sous forme de liste séparée par des espaces.
JavaScript, 56 caractères
L'entrée est donnée à l'invite.
Ruby, 44 caractères
L'entrée est ici donnée sous forme de liste séparée par des virgules.
Python, 40 caractères
L'entrée est à nouveau séparée par des virgules.
Java, 141 caractères
Entrée séparée par un retour à la ligne.
Lua, 51 caractères
Entrée séparée par un retour à la ligne.
Allez, 101 caractères
Entrée séparée par un retour à la ligne.
Fortran, 90 caractères
Entrée séparée par un retour à la ligne.
Befunge, 29 personnages
PostScript, 61 caractères
Chouette, 23 caractères
Entrée séparée par un retour à la ligne.
Élément , 27 caractères
Entrée séparée par un retour à la ligne.
la source
Brainfuck - 174
Piet - 82?
Je ne sais pas comment mesurer le golf compétitif ici. Je vais aller avec la taille totale de l'image (en codels) Le mien est 41x2:
Befunge - 34
Anglais - 278
Je ne sais pas si cela compte, mais j'ai pensé que je pourrais essayer. Il est remarquablement difficile de décrire avec précision même un algorithme simple. J'aimerais que l'anglais soutienne une sorte de symbole de regroupement pour établir la priorité.
la source
D:\Software\Programming\Piet\npiet-1.3a-win32>npiet series2.png
? 5
? -19
? 77
05
La solution devrait être-4 1
QBasic, 42
Nécessite une entrée avec des virgules, des sorties avec des espaces (est-ce correct?)
Mercure, 319
Haskell,
8581Maintenant entrées avec espaces, sorties avec sauts de ligne.
C, 80
C ++, 96
Nimrod, 146
Entrée w / sauts de ligne, sortie virgule.
Celui-ci ne comptera pas, mais je pense qu'il s'intègre toujours d'une certaine manière:
Théorème mathématique, 713 caractères de LaTeX
Pendant que nous rédigeons des
:=
définitions ...Pascal,
9088Cuda, 301
la source
m
et en réutilisantc
, et deux autres en utilisantc-=b;c/=b-a;
au lieu dec=(c-b)/(b-a);
.scanf()
chaîne de format.AWK, 35 caractères
2 0 -4
bc, 39 caractères
z=f(2, 0, -4)
bc
expression. Après avoirbc
lu le fichier source, il lit l'entrée standard. C'est pourquoi l'entrée doit ressembler à un appel de fonction.bc
, qui nécessite une nouvelle ligne après le{
.Lisp commun, 88 caractères
2 0 -4
csh, 86 caractères
2 0 -4
csh
est la seule langue pour laquelle je compte la nouvelle ligne à la fin du fichier. En effet, n'exécutecsh
jamais la dernière commande à moins qu'il n'y ait un saut de ligne.set i=($<)
ne fonctionne pas, car$<
n'a pas de fractionnement de mot.dc, 30 caractères
2 0 _4
où_
est le trait de soulignement.es, 95 caractères
2 0 -4
es
est la coque extensible de Paul Haahr et Byron Rakitzis.Facteur, 138 caractères
2 0 -4
PicoLisp,
7472 caractères2 0 -4
a(read)b(read)c(read)
enr read a(r)b(r)c(r)
.TI-83 BASIC,
6361 caractères2
ENTER0
ENTER¯4
ENTER, où¯
est le moins unaire de la calculatrice.→
(la flèche droite) compte pour U + 2192. Par exemple, la calculatrice compteInput A
pour 2 caractères, mais je compteInput A
pour 7 caractères. Je compte également:
pour 1 caractère.zsh, 62 caractères
2 0 -4
la source
AWK (32)
Démo: http://ideone.com/kp0Dj
bash (38)
Démo: http://ideone.com/tzFi8
DOS / LOT (54
55)Prend les paramètres comme une liste d'arguments séparés par des espaces.
Java (143
185)JavaScript (48
6167)Démo: http://jsfiddle.net/BT8bB/6/
PHP (61
77)Démo: http://ideone.com/CEgke
QBasic (34)
TI-83 Basic (25
41)Oui, la parenthèse droite manquante est intentionnelle. C'est une technique d'optimisation bien connue que la fermeture des parenthèses avant une opération STO n'est pas nécessaire dans la programmation de base de la TI-83.
la source
p
n'est pas définie. La spécification JS indique-t-elle que les arguments de la fonction doivent être évalués avant la résolution de la fonction?Espace, 123
Les E / S sont séparées par des sauts de ligne. (Pour obtenir le code source, entrez en mode édition et copiez l'espace blanc entre les balises préformatées; ou, consultez l' exemple en ligne sur Ideone .)
Explication, où S, T, L représente l'espace, la tabulation, le saut de ligne:
R, 50
Les E / S sont séparées par des espaces.
Hibou
--- 22 ---
Les E / S sont séparées par des sauts de ligne.
--- 19 --- (si cette version est autorisée; mais je pense que c'est de la triche, car le \ est du code exécutable):
Les E / S sont séparées par des espaces. Utilisation de la ligne de commande:
owl prog 5 19\ 77
(le \ agit comme un moins unaire postfixe dans Owl).la source
J, 23 caractères
Usage:
Les nombres négatifs sont représentés par des traits de soulignement dans J.
PHP, 88 caractères
Scala, 102 caractères
Perl, 57 caractères
Nécessite l'option '-p', pour laquelle j'ai ajouté 2 caractères. Suppose que l'entrée est valide pour enregistrer certains caractères.
Toutes mes réponses prennent des nombres séparés par des espaces.
la source
1!:1]3
à droite de l'expression lira l'entrée de STDIN. Je pense qu'il y a eu des discussions sur les méta ou dans les commentaires de certaines réponses J pour savoir si cela devrait être autorisé ou non. Je suis quelque peu ambivalent - j'aime trouver comment faire en sorte que J fasse ce que je veux dans le plus petit espace, je prendrai la pénalité de 6 caractères pour l'entrée de STDIN si c'est ce que tout le monde veut.(],1{x-0{x*])%~/2-/\x=:".1!:1]1
semble correct en mode console.)($a=($_[1]-pop)/($_[0]-$_[1])).$/.($_[1]-$_[0]*$a)
PHP,
74,72, 69Lorsque l'entrée est passée comme arguments:Maintenant, comme @mellamokb l'a suggéré, en utilisant $ n = $ argv:C,
77, 78^ ne fonctionne pas, voici le truc: [merci à @ugoren de l'avoir signalé]la source
fscanf
etscanf
sans espaces. Impressionnant!$argv
, c'est-$n=$argv
à- dire au début?scanf
il fait en premier, puisd=..
ensuiteb-d*a
?VBA, 57 caractères
( C'est essentiellement la même chose que les autres fonctions `` BASIC '', mais je n'ai pas vu de soumissions VBA déjà. )
la source
Debug.?y;b-a*y
bash (42 caractères)
Bash pur:
bash (31 caractères)
Passer à autre chose:
(Basé sur l' implémentation OWL de Howard )
la source
Il s'agit d'un code (non optimisé) pour la machine à registres illimités, décrit ici: http://www.proofwiki.org/wiki/Definition:Unlimited_Register_Machine
L'entrée doit être dans les registres 1,2 et 3, et la sortie sera dans le registre 1, 2 une fois le programme terminé. Les nombres non négatifs et non entiers ne sont pas traités, mais les entrées 0,7,14 et 2,5,11 sont traitées correctement.
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: en supprimant les crochets et en raccourcissant les noms des instructions:
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
la source
DOS-BATCH, 98
Entrée sur des lignes séparées
Bash, 51
Exemple:
sh prog.sh 2 0 -4
(arguments séparés par des espaces)Perl, 84
Java, 297
Entrée séparée par l'espace, sortie séparée par l'espace.
SQL, 57
C'est une entrée triste, mais «juste» résout le but. La requête lie l'entrée à l'exécution 1,2,3 sont des variables dans l'ordre d'entrée.
la source
bash
solution, je voulais juste suggérer que vous auriez pu supprimer tous ces espaces supplémentaires et enregistrer 6 caractères.Q, 36
usage
la source
Fortran 44
L'entrée se fera sur une seule ligne (séparée par des virgules ou des espaces)
Chapelle de Cray 59
L'entrée se fera sur une seule ligne, pas de nouvelle ligne (ajoutez 2 caractères pour cela en utilisant
writeln
à la place dewrite
).Golflua 44
Entrée délimitée par une nouvelle ligne, sortie délimitée par un espace
la source
Julia, 71 caractères
Entrée et sortie délimitées par des espaces.
i,j,k=int(split(readline(STDIN)));println("$(l=div(k-j,j-i)) $(j-i*l)")
Exemple d'entrée et de sortie:
Piet,
866056 codels (14x4), taille de codel 10 pour une meilleure visibilitéJe pourrais en fait réduire la quantité de codels de 35%. Je ne m'attendais pas à un si bon résultat. Comme je m'y attendais, le codage à rebours de ce programme a été assez réussi. Je doute que cela puisse être plus court que cela, mais je serais vraiment intéressé si quelqu'un pouvait trouver une solution plus petite.
Le défi ne précise pas si le programme doit s'arrêter après avoir montré le résultat, donc mon plus petit programme (56 codel) doit être valide. Il revient simplement au début après avoir montré le résultat, demandant un nouveau triplet d'entiers. En raison de l'emballage serré, il n'y a pas de place pour la sortie de deux caractères de nouvelle ligne, mais cela ne pose aucun problème avec l'interpréteur npiet, car il affiche toujours un «? s'il attend l'entrée.
Il existe deux tailles possibles pour créer une version en boucle, mais une version qui ne s'exécute qu'une seule fois n'est possible que dans un programme d'au moins 64 codels (16x4). Les versions ci-dessous montrent la raison. C'est peut-être aussi intéressant pour ceux qui connaissent Piet.
La version finale, la plus compacte de 56 codels, avec une boucle :
Deuxième version (60 codels), avec une boucle
Si la version 56 codel est contraire aux règles, voici la version 64 codel finale, exécutée une seule fois :
Ma première version (86 codels)
L'entrée et la sortie sont délimitées par des sauts de ligne.
Exemple d'entrée et de sortie:
Pour les versions en boucle, un peu plus laid:
J'ai choisi la nouvelle ligne comme délimiteur car le codage ASCII 10 (\ n) n'a évidemment besoin que de 7 codels, par rapport à ASCII 32 () qui a besoin de 8 codels ou même ASCII 40 (,) qui a besoin de 9 codels.
Le codage en arrière du résultat à la première entrée est un excellent moyen de réduire l'utilisation du codel pour les opérations ROL. L'ordre de pile au début et à la fin est connu, le reste se fait facilement à la main.
Voici une version texte du programme 64 codel (avec pile), dans ma sténographie inventée. Les programmes plus courts ne s'arrêtent tout simplement pas mais retournent au début.
la source
MoonScript (48 caractères, entrée délimitée par une nouvelle ligne, sortie délimitée par un espace)
Felix (86 caractères, entrée délimitée par une nouvelle ligne, sortie délimitée par des virgules)
Julia (84 caractères, entrée délimitée par un espace, sortie délimitée par un espace)
la source
julia file.jl
donne-t-il la même erreur?