Vous êtes l'utilisateur: créez les exigences

15

Mon patron * ne comprend pas pourquoi ses programmeurs réagissent négativement aux utilisateurs changeant les exigences du programme. Aidez-la à comprendre! À chaque réponse, créez une nouvelle exigence. Ensuite, écrivez un programme / fonction qui résout cette exigence et toutes les exigences antérieures, dans un nouveau langage de programmation.

Exemples

L'utilisateur 1 publie la première réponse. Il précise que le programme doit sortir "Hello, World". Il crée un programme en Java qui génère "Hello, World".

L'utilisateur 2 publie la deuxième réponse. Elle précise que le programme doit accepter l' entrée n et la sortie du n ième premier, jusqu'au numéro de la langue max. Elle crée un programme en C ++ qui accepte les entrées n et renvoie le n ième premier et sorties « Bonjour, monde. » Elle n'aurait pas pu créer un programme en Java.

L'utilisateur 3 publie la troisième réponse. Il précise que la source du programme ne peut pas contenir le texte "Bonjour". Il crée une fonction en Python qui accepte l'entrée n et sort le n ème premier et «Bonjour, le monde». sans utiliser le texte "Bonjour" dans sa source. Il n'aurait pas pu créer un programme en Java ou C ++.

Format de réponse

#Answer # - <language name> [version, if pertinent]

Requirement: <rule>.

<code>

[explanations, encoding, TIO link, etc.]

Règles de réponse

  • La réponse doit suivre le format ci-dessus ou similaire.

  • La réponse peut être un programme ou une fonction.

  • La réponse doit répondre à toutes les exigences jusqu'à et y compris la réponse actuelle.

  • Le même utilisateur ne peut pas poster deux réponses consécutives.

  • Si deux réponses sont publiées avec le même numéro, celle publiée plus tard doit être supprimée.

  • Ne modifiez pas vos exigences, sauf si vous avez mal gâché et qu'aucune autre réponse n'a été publiée.

  • Si votre réponse n'est pas conforme à votre règle et à toutes les autres règles, elle n'est pas valide. Essayez de résoudre ce problème avant que quelqu'un d'autre ne poste la réponse suivante.

  • Différentes versions de la même langue ne comptent comme langues différentes que si le programme ou la fonction créé dans l'une ou l'autre version se comporte différemment dans l'autre version.

  • La réponse peut n'accepter aucune entrée non requise et ne peut rien afficher de non requis, à l'exception des espaces nécessaires. Cependant, alors qu'en arrière-plan le programme doit remplir toutes les exigences "cachées" (de l'utilisateur), il peut faire tout ce que vous voulez, surtout si vous devez remplir une condition de temps d'exécution.

Règles d'exigence

  • L'exigence ne doit spécifier qu'une seule exigence. Cette exigence peut être conditionnelle, et si cette exigence nécessite une entrée et / ou une sortie, cela peut être inclus.

  • L'exigence ne peut pas supprimer ou modifier les exigences antérieures, ni entrer en conflit avec elles, mais peut en étendre une (préciser lesquelles).

  • Si l'exigence restreint la source (source ) ou requiert du texte dans la source, elle ne peut supprimer qu'une seule chaîne (par exemple 0, Hello) ou exiger un seul caractère.

  • Cette exigence ne peut pas exiger que la source soit inférieure à 100 octets, exiger un codage spécifique ou, en soi, exclure une majorité de langues courantes.

  • L'exigence peut ne pas forcer la source à se conformer à un certain modèle (par exemple, commencer chaque ligne avec un certain caractère, ou (@Conor) hacher à une certaine valeur) autre que celui spécifié dans la source restreinte.

Il s'agit réponses, donc toutes les réponses s'appuient sur les réponses précédentes. Moi et peut-être d'autres, j'essaierai de garder une liste de toutes les exigences. Pour voir les réponses dans l'ordre, vous pouvez trier par les plus anciennes. Pour voir la réponse la plus récente, triez par la plus ancienne, puis accédez à la fin de la liste.

Comment gagner (modifié pour le vote d'attente):

Lorsqu'aucune réponse n'est publiée pendant deux semaines, le défi est terminé et les scores seront calculés. Les scores seront calculés en additionnant le nombre total de réponses par chaque utilisateur, mais en pondérant les messages en fonction de leur niveau dans la chaîne (car les derniers messages ont plus d'exigences, ils sont plus difficiles).

Pseudocode:

for each answer in user.Answers {
   score += 1 + (answer.number / 100)
}

Exemple:

Sally a trois réponses. Elle a affiché la réponse 5, la réponse 7 et la réponse 20.

Son score sera 1.05 + 1.07 + 1.2 = 3.32. S'il s'agissait d'une simple somme de réponses, son score serait de 3, mais la pondération de la profondeur de la chaîne récompense les réponses plus difficiles.

Commencer:

Voici la première exigence, donnée par mon patron *:

Condition 0: Le programme doit sortir 0 avant toute autre chose.

*fictif

Liste des exigences et des langues

Notez que cela peut être obsolète - veuillez consulter la dernière réponse publiée immédiatement avant de publier votre réponse pour vous assurer que vous remplissez toutes les conditions. Je suis vraiment désolé si vous créez un programme exquis, uniquement pour que quelqu'un le snipe - si vous voulez vraiment vraiment le publier de toute façon, spécifiez non concurrentiel.

Complet (mais peut-être pas actuel) Condition: ne peut pas contenir 0, *ni ]dans le code source, et ne peut pas utiliser une fonction intégrée join-on-newline. Sorties 0, puis prend une entrée entière non négative net sort une nouvelle ligne suivie du nnuméro de Fibonacci indexé 0 (peut être 1indexé), suivie d'une nouvelle ligne, suivie de la même entrée n au carré, suivie d'une nouvelle ligne, suivie d'une nmultiplication par une nouvelle entrée m, suivie d'une nouvelle ligne, suivie de 10^B, où Best le nombre d'octets dans le code source, suivie d'une nouvelle ligne, suivie du nombre premier nth- 0indexé (peut également être 1-indexé), suivi d'une nouvelle ligne, suivi du plus grand diviseur commun de n et m.

0: Le programme doit sortir 0avant toute autre chose. Langue: N / A
1: La source du programme ne peut pas contenir 0. Langue: 05AB1E
2: Le programme prend une entrée entière non négative net sort une nouvelle ligne suivie du 0nième numéro de Fibonacci -indexé (peut être 1indexé). Langue: dc
3: Le programme sort une nouvelle ligne, suivie de la même entrée au ncarré. Langue: J
4: Le programme sort une nouvelle ligne, puis nmultipliée par une nouvelle entrée m. Langue: Ohm
5: Le programme ne peut pas contenir *(code ASCII 0x2A). Langue: Python 3
6: Le programme génère une nouvelle ligne, suivie de 10^B, où Best le nombre d'octets dans le code source. Langue: Mathematica
7: Le programme génère une nouvelle ligne, suivie du nombre premier nth- 0indexé (peut aussi être 1-indexé). Langage: JavaScript (ES6)
8: Le programme n'utilise pas de fonction intégrée de jointure sur nouvelle ligne, mais peut utiliser n'importe quelle autre fonction intégrée de jointure. Langue: Jelly
9: Le programme génère une nouvelle ligne suivie du plus grand diviseur commun de n et m. Langue: Scala
10: Le programme ne peut pas contenir ]. Langue: Pyth

Scores actuels (classés par premier message)

Okx : 1,01
R. Kap : 2,09
Conor O'Brien : 1,03
Nick Clifford : 1,04
Eric Rose : 1,05
Greg Martin : 1,06
Erik le Outgolfer : 2,18
math_junkie : 1,09

Stephen
la source
3
Pourquoi accepter la dernière réponse? Cela donne l'impression que vous gagnez en ajoutant une exigence que personne ne peut satisfaire.
xnor
5
Par exemple, "le hachage md5 du programme doit être ..."
Conor O'Brien
2
Même si les règles tiennent le coup pour empêcher une exigence qui met fin à la chaîne, je pense toujours qu'avoir une «condition de victoire» encourage les gens à faire des règles presque impossibles plutôt que des règles amusantes.
2017
2
@StephenS Eh bien, les gens ne semblent pas jouer pour gagner, il semble donc que ma préoccupation soit déplacée.
xnor
2
Cela devrait être appelé 'Scope Creep'
NonlinearFruit

Réponses:

2

Réponse 10 - Pyth

Condition: prend deux entrées, n(> = 0) et m. Sorties 0 sans utilisation de 0, *ou ]n'importe où dans le code source, et sans prédéfinis pour rejoindre des sauts de ligne. 1Affiche ensuite une nouvelle ligne suivie du nième numéro de Fibonacci -indexé (peut être 0indexé), suivie d'une nouvelle ligne, suivie d'un ncarré, suivie d'une nouvelle ligne, suivie de nmultipliée par m, suivie d'une nouvelle ligne, suivie de 10^BBest le nombre d'octets dans le code source, suivi d'une nouvelle ligne et du nombre premier nth- 1indexé (peut également être 0-indexé), et enfin suivi d'une nouvelle ligne et du plus grand diviseur commun de n et m.

JU2KE=H2VQ=+Js>2J=+YK=hHW!P_H=hH;jb[ZeJ^Q2sY^T51HiK

Interprète en ligne

Erik le Outgolfer
la source
Oui, c'est aussi du golf :-)
Erik the Outgolfer
De plus, avant de commenter, non, je ne peux pas simplement utiliser à la jplace de jb, car alors j'utiliserais une fonction intégrée join-on-newlines.
Erik the Outgolfer
6

Réponse 1 - 05AB1E

Condition: Imprime 0... sans un 0dans le code source

¾
Okx
la source
4

Réponse 3 - J

echo"+(1-1),(*:,~[:+/@:!&i.-)@".1!:1(3)

Condition: génère 0sans 0dans le code source, puis prend une entrée entière non négative net 0génère une nouvelle ligne suivie du numéro nde Fibonacci -indexé (peut être 1indexé), suivie d'une nouvelle ligne, suivie de la même entrée au ncarré.

Essayez-le en ligne!

Conor O'Brien
la source
4

Réponse 4 - Ohm

Condition: génère 0sans 0dans le code source, puis prend une entrée entière non négative net génère une nouvelle ligne suivie du nnuméro de Fibonacci indexé 0 (peut être 1 indexé), suivie d'une nouvelle ligne, suivie de la même entrée n au carré, suivi d'une nouvelle ligne, suivi de nmultiplié par une nouvelle entrée m.

¼,≡ƒ,²,*,
Nick Clifford
la source
4

Réponse 2 - DC

12298P?sa1 1-sb1sc[lblcdsb+scla1-dsa1 1-<y]dsyxlcp

Condition: affiche 0sans 0dans le code source, puis prend une entrée entière non négative net 0génère une nouvelle ligne suivie du -ième index nde Fibonacci -indexé (peut être1 indexé).

Essayez-le en ligne!

R. Kap
la source
@ R.Kap Pas de problème :)
Stephen
2
Quand j'ai lu la nouvelle exigence, pour une raison quelconque, j'ai commencé à rire. +1.
Camarade SparklePony
4

Réponse 5 - Python 3

Exigences: génère 0 sans 0 dans le code source, puis prend une entrée entière non négative n et génère une nouvelle ligne suivie du nième numéro de Fibonacci indexé 0 (peut être 1 indexé), suivi d'une nouvelle ligne, suivie de la même entrée n au carré, suivi d'une nouvelle ligne, suivi de n multiplié par une nouvelle entrée m. N'utilisez pas le caractère *, le code ASCII 0x2A.

    def f(n, m):
        print(1-1)
        a = 1-1
        b = 1
        for i in range(n):
            c = a+b
            a = b
            b = c
        print(b)
        print(n.__mul__(n))
        print(n.__mul__(m))
EricRoe
la source
3

Réponse 6 - Mathematica

Condition: affiche 0 sans 0 ou * dans le code source, puis prend une entrée entière non négative n et génère une nouvelle ligne suivie du nième numéro de Fibonacci indexé 0 (peut être 1 indexé), suivi d'une nouvelle ligne, suivie de la même entrée n au carré, suivie d'une nouvelle ligne, suivie de n multipliée par une nouvelle entrée m, suivie d'une nouvelle ligne, suivie de 10 ^ B où B est le nombre d'octets dans le code source.

((e=Echo)[1-1];e@Fibonacci@#;e[#^2];e[1##];2^# 5^#&@59)&
Greg Martin
la source
1
Oui, d'où mon montage hâtif après avoir vu qu'EricRoe m'a battu d'une minute :)
Greg Martin
2

Réponse 7 - JavaScript (ES6)

(a,b)=>String.fromCharCode(48)+'\n'+(m=(a)=>a>1?m(a-1)+m(a-2):1)(a)+'\n'+Math.pow(a,2)+'\n'+Math.exp(Math.log(a)+Math.log(b))+'\n'+1E257+'\n'+(T=(u,i=2,l=1-1,m=2)=>l<=u?(p=(o,z=2,s=1-1)=>z<o?p(o,z+1,s+(o%z<1&&z!=o)):s)(i)<1?T(u,i+1,l+1,i):T(u,i+1,l,m):m)(a)

Condition: une fonction qui prend deux entrées, un entier non négatif net n'importe quel nombre met retourne une chaîne contenant 0sans utiliser 0n'importe où dans le code source, puis une nouvelle ligne suivie du 0numéro de nFibonacci -indexé (peut être 1indexé), suivi par un saut de ligne, suivi de ncarré, suivi d'un saut de ligne, suivi de nmultiplié par msans l'utilisation de *n'importe où dans le code source, suivi d'un saut de ligne, suivi de 10^BBest le nombre d'octets dans le code source, et finalement suivi d'un newline et le nth- 0indexé (peut également être1 -indexé).

Extrait de test

R. Kap
la source
Vous pouvez économiser une quantité considérable d'octets en passant String.fromCharCode(48)à 1-1. Ce n'est pas vraiment important ;-) (En outre, il y a deux zéros plus tard dans le code source, que vous pouvez corriger de la même manière)
ETHproductions
1

Réponse 8 - Gelée

Condition: une fonction qui prend deux entrées, un entier non négatif net n'importe quel nombrem et retourne une chaîne contenant 0sans utiliser 0n'importe où dans le code source, puis une nouvelle ligne suivie du 0numéro de nFibonacci -indexé (peut être 1indexé), suivi par un saut de ligne, suivi de ncarré, suivi d'un saut de ligne, suivi de nmultiplié par msans l'utilisation de *n'importe où dans le code source, suivi d'un saut de ligne, suivi de 10^BBest le nombre d'octets dans le code source, et finalement suivi d'un newline et le nth- 0indexé (peut également être1-indexé) nombre premier. Aucun buildins pour rejoindre sur les nouvelles lignes autorisé, mais rejoindre les builtins est toujours autorisé.

ÆḞṭØDW⁺¤;⁸²¤;×;ȷ25;⁸ÆN¤j⁷

Essayez-le en ligne!

Erik le Outgolfer
la source
Oui c'est du golf.
Erik the Outgolfer
1

Réponse 9 - Scala

Exigences : Prend deux entrées, n(> = 0) et m. Sorties 0sans utilisation de 0ou *n'importe où dans le code source, et sans prédéfinis pour rejoindre des sauts de ligne. 1Affiche ensuite une nouvelle ligne suivie du nième numéro de Fibonacci -indexé (peut être 0indexé), suivie d'une nouvelle ligne, suivie d'un ncarré, suivie d'une nouvelle ligne, suivie de nmultipliée par m, suivie d'une nouvelle ligne, suivie de 10^BBest le nombre d'octets dans le code source, suivi d'une nouvelle ligne et du nth- 1indexé (peut également être0 -indexé), et enfin suivi d'une nouvelle ligne et du plus grand diviseur commun de n et m.

(n:Int,m:Int)=>{
 val z=1-1;val o=println _;var i=1;var j=z
 o(z)
 o((1 to n).foldLeft(z,1)((a,b)=>(a._2,a._1+a._2))._1)
 o(math.pow(n,2))
 o(List.fill(n)(m).sum)
 o(math.pow(9+1,299))
 while(j!=n){i+=1;if((2 to i-1)forall(i%_!=z))j+=1};o(i)
 o((1 to math.min(n,m)).filter(c=>n%c==z&&m%c==z).last)
}

Essayez-le ici

accro aux mathématiques
la source