Sortie Pi sans maths [fermé]


56

Dans le moins d'octets possible, votre travail consiste à écrire un programme qui génère:

3.14

Bien sûr, pour célébrer une fin de journée Pi! :)

Règles

Vous pouvez le faire quand bon vous semble, mais il y a des restrictions.

  • Vous ne pouvez pas utiliser d'opérations arithmétiques nulle part dans votre programme. Cela comprend +, -, *, /, %, ^(exponentiation), etc ... Cela inclut également incrémenter ( en général ++), décrémentation ( --), les opérations au niveau du bit , et tout construit dans les fonctions qui peuvent être utilisées en remplacement tels que sum(), prod(), mod(), double(), pow(), sqrt(), inc(), dec()etc ... (discrétion de l'auteur)
  • Les chiffres 3, 1et 4peuvent ne pas apparaître n'importe où dans votre code.
  • Vous pouvez ne pas utiliser des variables / constantes prédéfinies que votre langue peut avoir pour remplacer 3, 1et 4. (Discrétion de l'auteur)
  • Vous pouvez également ne pas utiliser des fonctions trigonométriques telles que sin(), cos(), tan(), arcsin(), arccos(), arctan(), sinh(), cosh(), tanh(), etc ... (la discrétion de l' auteur)
  • Vous ne pouvez pas utiliser les valeurs prédéfinies ou intégrées de Pi (ou 3.14). Aucune demande Web .
  • Votre programme ne peut nécessiter aucune entrée d'aucune sorte (en plus de son exécution).
  • 3.14est la seule chose que vous puissiez produire, cela ne peut pas faire partie d’une sortie plus longue / plus longue.

Gagnant

La réponse avec le moins d'octets le 18 avril l' emporte. Bonne chance!

Dans l'attente de réponses intelligentes d'esprits intelligents! Malbolge quelqu'un? : P


3
Vous voudrez peut-être préciser qu'il ^s'agit de l'opérateur d'exponentiation, et non de l'opérateur XOR au niveau du bit.
ace_HongKongIndependence

2
Les opérateurs au niveau du bit sont-ils autorisés?
ProgramFOX

1
@ProgramFOX Eh bien, ils peuvent être utilisés en remplacement des opérations normales, alors non. Interdit. Je vais éditer le post.
kukac67

1
Demandes Web autorisées?
swish

7
@swish: je n'utiliserais pas les requêtes Web, car cela fait partie de la liste des "échappatoires" standard qui ne sont plus amusantes
ProgramFOX

Réponses:


25

CJam - 8 6

S`,'.E

CJam est un nouveau langage que je développe, similaire à GolfScript - http://sf.net/p/cjam .
Voici l'explication:

Sest une variable pré-initialisée dans l’espace ("")
`génère la représentation sous forme de chaîne de la dernière valeur - qui est exactement " "(3 caractères)
,calcule la longueur de chaîne (3) si
'.le caractère de point
Eest une variable pré-initialisée à 14; 3, 1 et 4 ne sont pas autorisés mais cela ne dit rien sur 14 :)

Crédits à la poignée de porte pour l'idée de backtick


1
@Brilli et j'accepterais l'utilisation de E.
kukac67

6
@ kukac67 Bien que je n'ai pas encore publié de version officielle (à ce jour), j'ai déjà rendu le code actuel de CJam disponible via hg. Si vous recevez le code CJam le jour précédant l’envoi de la question, le programme sera exécuté correctement (donc, je n’ai pas apporté de modifications pour résoudre ce problème). Mais ça ne me dérange pas vraiment de toute façon.
Aditsu

33
Il est temps de développer HQ9 + π ...
Nzall

2
@AnonymousPi Tout le monde est libre de voter pour les réponses qu'il choisit. Peut-être sont-ils plus impressionnés par d'autres réponses, même si elles ne sont pas aussi courtes.
Aditsu

2
Pourquoi avez-vous une variable pré-initialisée à 14?
user2357112

113

PHP - 22 octets

<?=date('n.j',8899e5);

Pi Day en 1998 était vraiment cool!


13
@ kukac67: n.jest le format, et 8899e5est l'horodatage Unix du 14 mars 1998.
ProgramFOX

7
C'est si intelligent.
Amal Murali

7
Vous pouvez enregistrer 7 caractères en les supprimant ,8899e5. Ce sera correct une fois par an.
Damir Kasipovic

1
@Timo Vous avez raison, mais il contient le chiffre illégal "3";).
Blackhole

18
@Blackhole 20 octets: <?=date('w.W',78e5);le 1 er avril 1970 était un mercredi de la semaine 14.
primo du

92

C, 39

Suppose que la machine est little-endian et utilise la norme à virgule flottante IEEE.

main(){printf("%.2f",*(float*)"P@I@");}

Le fait amusant est qu’il "P@I@"n’est en réalité pas lié à, PImais qu’il est équivalent à 0x40494050la représentation de3.144550323486328

http://ideone.com/uXVEtl


3
C'est vraiment génial.
wchargin

1
Votre code suppose le typage sur une machine little-endian.
Nayuki

@NayukiMinase, oui vous avez raison, cela vaut la peine de le préciser. Et cela suppose également l’utilisation de la norme à virgule flottante IEEE.
Michael M.

Et il contient un comportement indéfini (déclaration implicite de fonction variadique)
rubenvb

5
Ce code suppose en fait que la machine est la machine de Michael :-).
Konrad Borowski

50

dc , 11 9 octets

zE[.]znPp
  • z Insérez la profondeur actuelle de la pile (0) dans la pile
  • EAppuyez sur E 16 (== 14 10 )
  • [.] Poussez la chaîne "."
  • z Poussez la profondeur actuelle de la pile (3) sur la pile
  • n Pop 3 et imprimer en tant que nombre
  • PPop "." et imprimer en caractère
  • p Pop 14 et impression sous forme de numéro avec une nouvelle ligne

Sortie:

$ dc <<< zE[.]znPp
3.14
$ 

Donc, "utiliser la base de saisie" est un opérateur? Cela sent une sorte d'opération arithmétique, mais probablement toujours valide.
Brilliand

@Brilliand Rien dans la question n'interdit les conversions de base. En fait, le PO semble encourager les conversions de base dans un commentaire ici codegolf.stackexchange.com/a/25681/11259
Digital Trauma

Je suis d'accord que c'est valide; Je pense simplement que lorsque la conversion de base est un opérateur plutôt qu'une partie de la syntaxe numérique, elle estompe la ligne entre les données en ligne et une opération arithmétique.
Brilliand

Je pense que cela devrait être 15 octets?
Utilisateur enregistré

9
@AdityaPatil Pourquoi? dcest une langue et interprète, tout comme toutes les autres langues ici. dc -e est juste l'invocation de cet interprète. J'aurais pu tout aussi facilement sauvegarder le programme de 9 octets dans un fichier et l'exécuter dc pi.dc. Si ces octets doivent être comptés, il en ira de même pour toutes les autres langues. par exemple, inclure python dans toutes les entrées python ou ruby golfscript.rb dans toutes les entrées golfscript. Je crois que la convention convenue ici n’est pas de les inclure, sauf si des options spéciales doivent être adoptées.
Digital Trauma

42

JavaScript ( ES5 ) 20 octets

Une variante de la solution JS de m.buettner.

(x='.'+0xE).length+x

Edit: JavaScript ( ES5 ) 18 octets

Une variante de l'idée de ComFreek d'utiliser la fonction de décodage base64.

atob('Mw')+'.'+0xE

Edit: Javascript ( ES5 ) 16 octets

Si l' +opérateur unaire est autorisé à convertir une chaîne en un nombre, vous pouvez le réduire à:

+atob('MDMuMTQ')

HOU LA LA! C'est vraiment intelligent!
kukac67

9
@NateEldredge C'est une concaténation de chaîne, pas d'arithmétique.
tomsmeding

l'utilisation est-elle +acceptée ici?
phuclv

1
Je trouve la solution Javascript la plus élégante et j'étais sur le point de poster la mienne jusqu'à ce que je remarque qu'elle contenait un «4»: atob ('My4xNA =='), lol.
rdev5

1
@ Dennis tu as raison, c'est toujours là. C'est même là si je copie + colle le résultat depuis la console. Je ne suis pas content, alors je vais revenir à la solution à 16 octets.
nderscore

39

Haskell, 41 octets

Quand est la journée de pi en Australie?

p=(\(a:n:y:t:i:m:e:_)->[m,a,t,e])['.'..]

Modifié pour ajouter: comme l’autre réponse Haskell, une chaîne est générée, ainsi que des guillemets. Vous pouvez marquer 33 et respecter strictement les règles, mais c'est moins amusant:

p=putStr$map([','..]!!)[7,2,5,8]

Haha, wow. C'est bon!
Ry-

Pouvez-vous expliquer pourquoi cela fonctionne?
Yhager

5
J'aime beaucoup celui-ci, +1. Mais je pense que techniquement ".." fait appel à l'opérateur d'incrémentation, ce qui était interdit. (En réalité, le vote ascendant appelle également une opération d’augmentation, ce qui devrait donc également être interdit ;-)
Marc van Leeuwen

En fait, j’y ai réfléchi - j’avais une réponse encore plus courte: p=[2.9,2.92..]!!([0,6..]!!2)... et celle-ci a l’ ..air faux. Mais Haskell est fortement typé, et l'augmentation de la réponse que j'ai donné est Charpas Numet ne arithmétique la chose qui est en fait interdit. J'aurais besoin fromEnumde reconvertir les caractères en chiffres pour les utiliser de cette façon. Quoi qu'il en soit, ma conscience est claire :)
bazzargh

6
@yhager: ['.' ..] est la séquence de caractères "./0123456 ..." (etc). (a: n: y: t: i: m: e: _) est une correspondance de motif extrayant les 7 premiers caractères, [m, a, t, e] en réordonnant 4 dans "3.14". Sachant que c'est ce que vous voulez faire, il suffit de chercher dans le dictionnaire pour trouver les mots avec la bonne structure. Ce que j'ai fait ... par exemple, une autre paire était "la combinaison la plus laide". Ensuite, vous arrivez avec une blague :)
bazzargh

32

Code morse, 33 octets

morse -d ...-- .-.-.- .---- ....-

Techniquement, l'information ne prend que 21 octets.


11
Nous avons définitivement besoin de plus de solutions de golf dans le code morse ici ...
cessé de tourner à l'envers

26
Techniquement parlant, je dirais 21 bits , pas les octets
Michael M.

14
@Michael puisque le code Morse peut être un point, un tiret ou un espace, ne faudrait-il pas plus d'un bit pour stocker une opération?
smcg

5
@smcg ButSpacesAreForWeakPeopleWhoCan'tLeadThingsLikeThis
Cole Johnson

8
Même si j'aime bien le code morse (et donc cette solution) - mais cela n’est pas contraire à la règle 3: "Vous ne pouvez pas utiliser de variables / constantes prédéfinies que votre langue pourrait remplacer par 3, 1 et 4." ou même la règle 2: "Les chiffres 3, 1 et 4 peuvent ne pas apparaître n'importe où dans votre code."?
kratenko

27

J - 15 11 10 car

Fait plus court, en utilisant le fantastique i:.

6{i:6.28j8

A expliqué:

  • 6.28j8 - Le numéro complexe 6.28 + 8i.
  • i:- C'est ici que la magie opère. i:sur un nombre complexe A + Bi, B ≠ 0 prend B + 1 des points équidistants de l'intervalle [-A, A].
  • 6{ - Prenez l'élément à l'index 6, qui se trouve être 3.14.

Auparavant, nous avions le non-sens suivant:

|.'.'2}":22b8d5

Expliqué par explosion:

         22b8d5  NB. 8d5 in base 22 = 4163
       ":        NB. convert to string
  '.'2}          NB. change character at index 2 to '.'
|.               NB. reverse to make '3.14'

Au lieu de |.'.'2}":22b8d5, vous pouvez enregistrer 2 caractères en choisissant un nombre ne nécessitant pas d’inversion:'.'1}":16bbc6
rationalis

3
@epicwisdom Les chiffres 3, 1 et 4 sont interdits. Je dois utiliser un nombre dans le formulaire 41X3car je ne suis autorisé à modifier les caractères qu'aux indices 0 et 2.
algorithmshark

20

Ligne de commande Linux, 35 octets

Celui-ci est loin d'être gagnant, mais le voici pour le plaisir:

ping -w2 67502862|grep -oP '.\..\d'

Sortie (après 2 secondes):

$ ping -w2 67502862|grep -oP '.\..\d'
3.14
$

Citation de la question: "Pas de demandes Web."
Poignée de porte

9
@Doorknob ICMP echo request! = Requête Web. Quoi qu'il en soit, le ping correspond à 4.6.3.14, auquel je ne reçois aucune réponse. Ce n'est donc pas comme si je recevais des informations utiles sur Internet
Digital Trauma Le

10
@Doorknob Mais si cela vous dérange toujours, nous pouvons le faire :;ping -t${#?} -qc2 67502862|grep -oP '.\..\d'. Ceci règle le TTL sur 1, de sorte que l'écho ICMP sortant est éliminé par votre routeur avant qu'il ne soit jamais proche d'Internet
Digital Trauma

1
Vous pouvez enregistrer 9 secondes en utilisant ping -w2 67502862. (Ninja modifier parce qu'avant je conseillais w1, presque enfreint les règles.)
lolesque

@lolesque Merci. N'améliore pas le score de golf cependant ;-)
Digital Trauma

16

GolfScript, 18 13 12

'.'.`,\.,n`,

Ancienne version:

'...','.'.,'....',

C'est très artistique, seulement 3 personnages uniques! ;)

Comment ça fonctionne:

# cmd   # stack
'...',  # 3
'.'.    # 3 '.' '.'
,       # 3 '.' 1
'....', # 3 '.' 1 4

Voici une explication de la version à 12 caractères (beaucoup plus intéressante, IMO):

'.' # '.'
.`, # '.' 3
\.  # 3 '.' '.'
,   # 3 '.' 1
n`, # 3 '.' 1 4

Cela fonctionne car n`,est 4, depuis n`est '"\n"'. Même logique pour '.'`,. Il échange également au lieu de créer une nouvelle chaîne pour enregistrer un caractère (merci @algorithmshark).

Version alternative:

'pi ','.'.,'day!',

ou

'Hi ','.'.,'PPCG',

Ou quoi que ce soit dans ces chaînes, vraiment. : P


Seulement 3 personnages différents, cool :)
Aditsu

Serait '.'.`,\.,n`,travailler pour sauver char? Réutiliser le '.'en dupliquant et en permutant.
algorithmshark

@ algorithmshark Oui, merci!
Poignée de porte

C'est très intelligent! +1
VisioN

cela ressemble à la version du code morse
pwned

14

La réponse de l'OP.

Mathematica, 21 20 18

Cela se sent pas cher ...

Range[2,5,.06][[20]]

ou

Range[2,5,.02][[58]]

Compris comment le faire 18:

Range[-.86,5][[5]]

Haskell, 49 48 12

(48 comprend le caractère de nouvelle ligne)

p=[-6..]
r=concat$show(p!!9):".":(show$p!!20):[]

Exécutez-le en appelant la rfonction.

En utilisant la méthode décrite ci-dessus avec Mathematica, vous pouvez taper ceci dans GHCi:

[-2.86..]!!6

Java, 87 86

class P{public static void main(String[]a){System.out.print("tri".length()+"."+0xe);}}

Scala, 27

Traduit de Java comme suggéré par Score_Under . (Je ne sais pas vraiment Scala)

print("tri".length+"."+0xe)

Oh, 0xec'est malin. Est-ce que ça vous dérange si j'améliore ma réponse JS avec ça? ;)
Martin Ender

La plupart des java peuvent être convertis directement en scala, ce qui est généralement plus court si vous voulez vraiment économiser sur les octets. Si vous l'utilisez comme script, tout se résume à: print ("tri" .length + "." + 0xe)
Score_Under

Oui, j'ai pensé à la même chose, qui est plus courte pour Julia que [-.86:5][5]pour 11 ans, mais je me suis dit que ça ne comptait pas, car les fourchettes ne sont que des mathématiques.
gggg

12

Bash, 50

Les messages d'aide / d'erreur ne sont pas des ressources externes, ils sont le résultat d'une commande!

Si quelque chose est un abus de règle, c'est ça. Il utilise la coïncidence que le message d'aide donné STDERRpar la commande exacte

ping6

est 314 caractères long (au moins sur Ubuntu 13.10 avec iputils-121221). EDIT: J'apprécie que c'est beaucoup moins portable que ce à quoi je m'attendais ...

m=`ping6|&wc -c`
false
o=$?
echo ${m:0:o}.${m:o:2}

La première ligne prend la longueur du caractère du message d’aide et le stocke dans une variable.

Comme dans mes autres réponses, les lignes suivantes obtiennent le nombre 1 en prenant le statut de sortie de false(pas très portable mais c'est du après tout!), Puis utilisez cette valeur pour insérer un point décimal dans la dernière ligne

Sortie: 3.14


vous êtes un génie
Joshua

1
Euh oh, "2.81" sur Ubuntu 12.04 (iputils-101006). +1 tout de même ;-)
Digital Trauma

@ DigitalTrauma selon info ping6j'ai iputils-121221

Consultez également ma chmodréponse - abusive à cette question sur codegolf.stackexchange.com/a/25724/16402

2
encore plus court:ping6|&wc -c|sed 's/./&./'
malkaroee

11

Bash + TeX 28 octets

Si vous avez installé TeX:

tex -v|head -c8|cut -d\  -f2

Le numéro de version de TeX approche asymptotiquement pi à mesure que le logiciel s'améliore. Ainsi, avec le temps, vous pouvez utiliser cette implémentation (non conforme) pour imprimer de plus en plus de chiffres!

tex -v|cut -d\  -f2 | head -n1

Cela a imprimé 3.1415926 en 2011; à partir de janvier 2014, il sera imprimé 3.14159265.


J'aime celui la!
gniourf_gniourf

Vous pouvez utiliser tex -v|grep -oP '.\..\d'pour enregistrer 4 octets. (Regex dérobé à la réponse de DigitalTrauma .) Quoi qu'il en soit, +1 parce que je viens de penser à la même réponse.
ace_HongKongIndependence

10

JavaScript, 20 octets

'...'.length+'.'+0xe

Utilisez-le dans une console pour que le résultat soit directement imprimé. Sinon, alert(...)ajoutera 7 autres caractères.

Identique à mon autre réponse, je viens de remarquer que c'est beaucoup plus court dans JS.

L'idée d'utiliser 0xe14 pour est tirée de la soumission du PO avec la permission de l'OP.


1
C'est bien, vous pouvez l'utiliser :)
kukac67

1
Solution alternative à 20 octets:(x='.'+0xE).length+x
nderscore

@nderscore c'est une bonne idée. Si vous postez cela comme une autre réponse, vous obtiendrez mon vote ascendant;)
Martin Ender

10

Date GNU, 17 octets

date -d2/5 +%u.%y

Celui-ci ne garantit que de fonctionner cette année, mais je ne vois aucune limite dans les règles à ce sujet ;-)

L' +est indique simplement le début du spécificateur de format pour dateet n'est pas une addition arithmétique. Identique à la -, indiquant la date d'entrée.

Sortie:

$ date -d2/5 +%u.%y
3.14
$

only guaranteed to work this yearC'est bon .. :)
kukac67

10

Bash, 17 octets

tr 0 .<<<$[62#MC]

Tableau de bord, 41 octets

perl -pechomp,s/./$./<<$


..










.

Bash se plaindrait très fort du marqueur de fin manquant, contrairement à Dash. Une solution Bash sans message d'erreur nécessiterait donc deux octets supplémentaires.
Dennis

+1 aussi. Je suppose que @TheDoctor a oublié de cliquer sur le bouton de vote positif?
Digital Trauma

@DigitalTrauma oops ... corrigé
TheDoctor

7

Bash 23 22

seq 2 .02 5|sed -n 58p

Shell (sans expansion de l'historique) 20

seq 2 .02 5|sed 58!d

seq 2 .06 5|sed -n 20pfonctionne également comme indiqué dans la réponse OP Mathematica.
user80551

sed 58!dest légèrement plus court.
Dennis

@ Dennis Weird, substituts gnome-terminal !davec dpkg ...qui a été la dernière commande que j'ai exécutée qui a commencé d. Fonctionne bien dans kshmais zshdit zsh: event not found: dalors que c'est définitivement se substituer à quelque chose.
user80551

C'est à cause de l'expansion de l'histoire de Bash . Il est désactivé par défaut pour les scripts. Par conséquent, si vous enregistrez pi.shet exécutez la même commande bash pi.sh, cela fonctionnera correctement.
Dennis

6

Python, 39 ou 28 47 ou 34

(Merci Score_Under pour avoir joué autant au golf)

print"%s.%s%c"%(len('aaa'),len('a'),52)

+ Voici l'opérateur de concaténation de chaînes, pas l'addition.

En copiant le 0xetour de l'OP, voici 28 caractères avec l'aide de @psal

print('%X.%s'%(675,0xE))[2:]

Anciennes versions:

print str(len('aaa'))+'.'+str(len('a'))+chr(52)

print str(len('aaa'))+'.'+str(0xe)

print"%s.%s"%(len('aaa'),0xe)

Le second peut être raccourci en supprimant l'espace après l'impression et en utilisant un format "% s" au lieu de str (). cf print"%s.%s"%(len('aaa'),0xe)à 29 octets. Vous pouvez également faire de même pour le premier: print"%s.%s%c"%(len('aaa'),len('a'),52)à 39 octets.
Score_Under

@Score_Under Oh, je pensais que l'utilisation %snécessite toujours str. Merci pour le tuyau :)
ace_HongKongIndependence

1
une autre solution de 29 octets:print('%s,%s'%(0xE9,0xE))[2:]
onionpsy

1
... et en 28 octets:print('%X.%s'%(675,0xE))[2:]
onionpsy

5

GolfScript, 8 octets

'??.'(\(

Ce programme contient des caractères ASCII non imprimables, il ne peut donc pas être directement collé ici. Au lieu de cela, les points d'interrogation dans le code ci-dessus doivent être remplacés par les octets 03et 0Een hexadécimal.

Pour plus de commodité, voici un vidage hexadécimal du programme actuel. Les utilisateurs Unix / Linux peuvent exécuter ce vidage hexadécimal xxd -rpour reconstruire le programme:

0000000: 2703 0e2e 2728 5c28                      '...'(\(

Explication:

  • Les cinq premiers octets du programme forment un littéral à une seule chaîne codant les trois caractères avec les codes ASCII 3, 14 et 46 (= période ASCII).

  • (coupe le premier caractère de la chaîne et place son code ASCII (3) sur la pile. \échange les deux premiers éléments de la pile, en tirant la chaîne vers le haut, et le second (coupe un autre caractère de la chaîne, poussant à nouveau son code ASCII (14) sur la pile.

A la fin du programme, la pile (à l'exclusion de la chaîne d'entrée vide) se présente donc comme suit:

3 "." 14

À la fin du programme, le comportement par défaut de l'interpréteur GolfScript consiste à définir une chaîne et à imprimer tout le contenu de la pile, ce qui permet d'obtenir le résultat souhaité.


1
Claquer des doigts! J'avais exactement la même idée , 12 heures trop tard. Je suppose que je devrais lire la page 2 avant de poster ... Eh bien, revenons à +1.
Dennis

5

bash - 39

Nous savons tous que les premiers chiffres de Pi peuvent être calculés à partir de l'instruction suivante:

Puis-je avoir un grand récipient de café

Nous n'avons besoin que de 2 décimales, non?

m=May
i=I
h=have
echo ${#m}.${#i}${#h}

4

Mathematica - 78

DateList["March"<>ToString@FromDigits@"E"]~DateString~{"MonthShort",".","Day"}

Dans l'esprit du Pi Day! : D
kukac67

4

Perl, 15 à 20 octets

print 05706=~s/0/./r
print 0xbc6=~s/0/./r

PI__ n'est-il pas une constante de Pi?
Llamageddon

Ce n'est pas une constante. Ce sont deux chaînes étant XOR-ed.
nderscore

Les opérateurs binaires ne sont pas autorisés.
kukac67

Oh, ils ne sont pas. Eh bien, voilà ma solution hypothétique. Cela dit, si les opérateurs de bits ne sont pas autorisés, y a-t-il même autre chose à faire que compter les longueurs de chaînes?
Llamageddon

Il y a plusieurs réponses qui utilisent des nombres dans différentes bases.
kukac67

4

tr + Bash, 17 octets

tr a-j 0-9<<<d.be

le - caractères ici ne sont pas des opérateurs arithmétiques de soustraction. Ils indiquent la gamme.

Sortie:

$ tr a-j 0-9<<<d.be
3.14
$

Clever, bien qu'une traduction de caractère soit une arithmétique vraiment cachée.
Pierre Arlaud

@ArlaudPierre C'est vrai, bien que je dirais que quasiment toutes les solutions ici cachent l'arithmétique d'une manière ou d'une autre. Si vous regardez les instructions réelles de la machine exécutés pour l' une de ces réponses, je pense que tous ont des instructions arithmétiques ou au niveau du bit, qui sont interdits d' explicitement l' utilisation par la question.
Digital Trauma

@ArlaudPierre La question nécessite la sortie de la chaîne "3.14". Peu importe la langue, quelque part sous le capot, cela dégénérera en write()appel ou similaire. Il y aura forcément un peu d'arithmétique sous les couvertures pour s'assurer que le nombre correct d'octets est écrit, si ce n'est nulle part ailleurs. Je pense le point de la question est de cacher les calculs arithmétiques / bits nécessaires.
Digital Trauma

4

BASH, 57

C'est plus long que la plupart des réponses, mais il n'y a rien de mal à essayer.

f=`echo aaaaaaaaaaaaa|wc -c`;e=`echo aa|wc -c`;echo $e.$f

donne

3.14

3
Désolé pour re-golf les réponses de tout le monde: P, dans la même veine, j'ai trouvé: c=wc\ -c;echo `$c<<<..`.`$c<<<''``$c<<<...`
Score_Under

4

C, 36

main(){printf("%d\b.%o\b",' ','`');}

1
Si nous le combinons avec ma réponse, nous pouvons économiser 2 octets pour obtenir un score de 34 :main(){printf("%d\b.%d",' ',0xe);}
vsz

3

JavaScript - 23 octets

atob('Mw')+atob('LjE0')

Merci à nderscore (voir ses commentaires)!


Nice: Je ne savais même pas à ce sujet
kukac67

Il contient 4cependant;)
nderscore

@nderscore Ah! Vous avez raison! Est-ce que ça btoa()marcherait 3.14?
kukac67

@ kukac67 Le jeu de caractères base64 ne contient pas de point :(
nderscore

3
Version "légale" de 23 octets: atob('Mw')+atob('LjE0')et version "illégale" de 14 octets:atob("My4xNA")
nderscore

3

C #

 ((int)'ĺ').ToString("#\\.##");

est le caractère 314, pas une variable ou une constante prédéfinie. le .ToString formate la sortie en un chiffre, une période, puis 2 autres chiffres.


Bien, mais il ne produit pas actuellement, et ce n'est pas compilable.
Rudi Kershaw

Console.Write (((int) 'ĺ'). ToString ("# \\. ##"));
Grax32

3

GolfScript, 13 10

{xy}.*'.'\

Merci à Ilmari Karonen pour la version améliorée!

xet ysont des caractères non imprimables (voir http://www.asciitable.com/ pour plus d’informations), respectivementETX etSO qui décodent en 3 et 14.

Ce que ce code fait devrait être assez clair.

Remarque: la règle suivante

You may not use any predefined variables/constants that your language may have as a replacement for 3, 1, and 4. (Author's discretion)

n'est pas cassé, car les caractères ASCII ne sont ni des variables, ni des constantes.


The digits 3, 1, and 4 may not appear anywhere in your code.,Your program cannot require input of any kind (besides running it).
user80551

Les chiffres n'apparaissent nulle part. Il n'y a pas d'entrée.
Vereos

Et votre code final est ...?
user80551

{}.*.{}.*et à l'intérieur des crochets, il y a 2 caractères non imprimables, respectivement ( asciitable.com ) ETXetSO
Vereos

2
Vous pouvez raccourcir ceci à {xy}.*'.'\ (10 caractères). Le mien est encore plus court, cependant. ;-) Mais +1 pour m'apprendre à propos de { }.*(et { }.%), je vais devoir garder cette astuce à l'esprit.
Ilmari Karonen

3

Nouveau sur le site et ne peut pas encore écrire de commentaires, je le posterai ici. Je m'interroge sur cette solution Javascript:

'...'.length+'.'+0xe

et cette règle:

3.14 est la seule chose que vous puissiez produire, il ne peut pas faire partie d’une sortie plus longue / plus longue.

Si je lance ce code dans la console de mon navigateur, je reçois:

"3.14"

ou en utilisant Node sur la ligne de commande:

'3.14'

mais si je lance ce code:

parseFloat('...'.length+'.'+0xe)

Je reçois:

3.14

En utilisant Node.js pour exécuter un fichier .js, je peux écrire:

console.log('...'.length+'.'+0xe)

et obtenir:

3.14

1
Il n'y a jamais eu de limitation sur le type de la valeur résultante. Donc, la chaîne ou le nombre n'a pas d'importance. Les guillemets autour de la chaîne ne sont pas considérés comme faisant partie de la sortie.
nderscore

Bienvenue sur CodeGolf et la programmation Puzzles @RobertMunn! Cette réponse est valide car elle obéit à toutes les règles ... N'oubliez pas que les consolechaînes sont entourées de guillemets lors de leur affichage ... Vous avez utilisé, +mais pas arithmétiquement, il est utilisé comme concaténateur, donc c'est valide ... Aussi vous auriez pu réduire la taille de cette utilisation alertplutôt que console.log... Mais sinon, de gros efforts. Nous espérons que vous l'aimerez ici ...
WallyWest

C'est plutôt sympa! Vous devriez envisager d'ajouter le nom de la langue et le nombre d'octets (par exemple, Javascript, 20)
Vereos

1
Merci Ace, j'apprends les règles ici. Je ne pouvais pas laisser de commentaire, alors j’ai posté séparément, je suppose que c’était plus une clarification sur le type de règles, ce que nderscore et WallyWest ont clarifié pour moi. J'apprécie la patience de chacun avec un newb.
Robert Munn

2

Mathematica, 56 octets

(l=ToString@StringLength@#&)@"..."<>"."<>l@"."<>l@"...."

Pas grand chose à dire. Je génère les chiffres sous forme de longueurs de chaîne et les concatène.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.