Contribution
Vous obtenez une carte 2D avec des balles et du sol. Cela ressemble à ceci:
1 5 2
3
4
__________________________
Chaque numéro est une balle et le _
niveau du sol. Le _
caractère de soulignement n'est autorisé sur aucune autre ligne que la ligne au niveau du sol. Seuls les espaces, les nouvelles lignes et les chiffres sont 0-9
autorisés au-dessus du niveau du sol. Vous ne pouvez pas supposer que la dernière ligne est le niveau du sol - les lignes vides en dessous du niveau du sol sont autorisées. Vous pouvez également ajouter des espaces, pour remplir les lignes vides, si cela vous aide.
Les balles peuvent avoir des numéros de 0
à 9
, peuvent être placées les unes au-dessus des autres, mais pas sous le sol. Les numéros du ballon seront uniques.
Supposons que chaque personnage mesure un mètre .
Obtenez la carte de pastebin!
Cas de test 1 - devrait produire quelque chose comme ceci
Cas de test 2 - devrait produire les mêmes résultats que la première carte
Défi
Votre défi est de lire une carte comme celle-ci à partir d'un fichier ou de stdin
- vous êtes autorisé à utiliser cat balls.txt | ./yourexecutable
- et de produire la vitesse de chaque balle lorsqu'elle touche le sol.
Voici la formule de la vitesse:
Supposons que h
c'est la différence de numéro de ligne entre le numéro de ligne du sol et le numéro de ligne de la balle, et qui g
est égal 10m/s^2
.
Production
Vous devez afficher le nombre et la vitesse de chaque balle m/s
au niveau du sol. Par exemple N - Vm/s
, où N
est le nombre de billes et V
sa vitesse. Vous pouvez également sortir un tableau si vous le souhaitez.
Bon codage! :)
Réponses:
MATL ,
31302725 octetsL'entrée est un tableau de caractères 2D avec
;
comme séparateur de ligne:Essayez-le en ligne! Ou incluez une initiale
t
dans le code pour afficher la carte pour plus de clarté.Voici les autres cas de test: premier , deuxième .
Explication
la source
C,
125122121 octetsCompilez et exécutez avec
gcc -w golf.c -lm && cat balls.txt | ./a.out
.la source
0 ... 9
apparaît dans le fichier texte. Quoi qu'il en soit, +1, car ne pas le signaler est de ma faute_
. Cependant, cela pourrait être corrigé avec un octet supplémentaire (!=
au lieu de<
).C -
194 (-5)150137 octetsAvec un peu plus de temps et de réflexion, j'ai joué au golf 44 octets
Merci à orlp de m'avoir aidé à économiser 13 octets
Je vais commencer avec mon code C:
Et version lisible par l'homme:
Compilez et exécutez comme ça:
gcc -o balls ballsgolf.c -lm && cat 1.txt | ./balls
Production
la source
~(c=getchar())
au lieu de(c=getchar())!=EOF
.if (x != -1)
est identique àif (~x)
(sur les machines à complément à deux) parce qu'il l'~-1
est (uniquement)0
. En C, le golf n'est jamais utiliséwhile(cond)
, car ilfor(;cond;)
est tout aussi long et offre plus de possibilités pour le golf. Dans votre exemple, cela peut devenirfor(;~(c=getchar());n=c==95?l:n)b[c]=(l+=c==10);
.l=1
peut être contourné en créantl
le premier argument pourmain
, car le runtime C transmet le nombre d'arguments à main comme premier argument (argc
), et lorsque vous appelez un programme sans aucun argument de ligne de commande (./a.out
), alorsargc = l = 1
.n=0;
est inutile, car les entiers globaux sont automatiquement initialisés à 0. Donc,n;
cela suffira.Pyth,
27262524 octetsEssayez-le en ligne!
la source
Matlab,
100968990 octetsBeaucoup d'octets enregistrés grâce à Luis Mendo
Format d'entrée:
Explication:
la source
Python 3, 84 octets
Version 6, 84 octets: (Merci à Leaky Nun!)
Version 5, 91 octets:
Version 4, 92 octets:
Version 3, 99 octets:
Version 2, 102 octets:
Les versions ci-dessus prennent un tableau de chaînes en entrée.
Version 1, 140 octets:
Cela prend le répertoire du fichier comme entrée de l'utilisateur.
la source
1 for l in i
->1for l in i
(n-1)*20
->~-n*20
print
appel?e
, car alors le tokenizer Python tentera de l'analyser en notation scientifique à virgule flottante (par exemple1e5
). Exemple qui échoue:f = lambda n:-1if n<0else 1
. Un exemple qui échoue dans les deux versions de Python est0or 1
, car le tokenizer pense qu'il0o
commence un nombre octal.Python 3, 84 octets
Une fonction anonyme qui accepte l'entrée par argument comme une chaîne multi-lignes avec toutes les lignes vides remplies d'espaces, et retourne un tableau où chaque élément est de la forme [numéro de balle, vitesse].
Comment ça fonctionne
Essayez-le sur Ideone
la source
f = MyAnswer
, puis appeler en utilisantf(x)
. Il existe un consensus sur le fait qu'il n'est pas nécessaire de nommer des lambdas . Beau défi, au fait!JavaScript (ES6) 93
Éditer 2 octets enregistrés thx @Jacajack
Une fonction avec une chaîne multiligne comme paramètre d'entrée. La sortie n'est pas triée (car cela n'est pas demandé)
Tester
la source
sqrt(x)
plus court quepow(x,.5)
?