Ausgabe Pi ohne Mathe [geschlossen]


56

In so wenigen Bytes wie möglich müssen Sie ein Programm schreiben, das Folgendes ausgibt:

3.14

Zur Feier eines späten Pi-Tages natürlich! :)

Regeln

Sie können es tun, wie Sie möchten, aber es gibt einige Einschränkungen.

  • Sie dürfen in Ihrem Programm keine arithmetischen Operationen verwenden. Dazu gehört +, -, *, /, %, ^(Potenzierung), etc ... Dazu gehört auch die ( in der Regel erhöht wird ++), Erniedrigen ( --), bitweise Operationen und jeder eingebauten Funktionen , die als Ersatz wie verwendet werden können sum(), prod(), mod(), double(), pow(), sqrt(), inc(), dec()usw ... (Autor Ermessen)
  • Die Ziffern 3, 1und 4können nicht überall in Ihrem Code angezeigt.
  • Sie können nicht alle vordefinierten Variablen / Konstanten verwenden , die Ihre Sprache als Ersatz haben kann 3, 1und 4. (Ermessen des Autors)
  • Sie können auch nicht alle trigonometrischen Funktionen wie sin(), cos(), tan(), arcsin(), arccos(), arctan(), sinh(), cosh(), tanh(), etc ... (Autor Ermessen)
  • Sie dürfen keine integrierten oder vordefinierten Werte von Pi (oder 3.14) verwenden. Keine Webanfragen .
  • Ihr Programm kann keinerlei Eingaben erfordern (abgesehen davon, dass es ausgeführt wird).
  • 3.14ist das einzige, was Sie ausgeben können, es kann nicht Teil einer längeren / größeren Ausgabe sein.

Gewinner

Die Antwort mit der geringsten Anzahl von Bytes am 18. April gewinnt. Viel Glück!

Ich freue mich auf clevere Antworten von cleveren Köpfen! Jemand malbolge? : P


3
Möglicherweise möchten Sie klarstellen, dass dies ^der Potenzierungsoperator und nicht der bitweise XOR-Operator ist.
ace_HongKongIndependence

2
Sind bitweise Operatoren erlaubt?
ProgramFOX

1
@ProgramFOX Nun, sie können als Ersatz für den normalen Betrieb verwendet werden, also nein. Nicht erlaubt. Ich werde den Beitrag bearbeiten.
kukac67

1
Webanfragen erlaubt?
Swish

7
@swish: Ich würde keine Webanfragen verwenden, weil das zu der Liste der Standard "Lücken" gehört, die nicht mehr lustig sind
ProgramFOX

Antworten:


25

CJam - 8 6

S`,'.E

CJam ist eine neue Sprache, die ich entwickle, ähnlich wie GolfScript - http://sf.net/p/cjam .
Hier ist die Erklärung:

SIst eine Variable auf Leerzeichen vorinitialisiert (""),
`wird die Zeichenfolgendarstellung des letzten Wertes generiert - was genau " "(3 Zeichen)
,die Zeichenfolgenlänge berechnet (3) Ist
'.das Punktzeichen
Eeine Variable auf 14 vorinitialisiert; 3, 1 und 4 sind nicht erlaubt, sagen aber nichts über 14 :)

Dank an Doorknob für die Backtick-Idee


1
@Brilliund ich würde die Verwendung von akzeptieren E.
kukac67

6
@ kukac67 Ich habe zwar noch kein offizielles Release veröffentlicht (kommt heute), aber ich habe den aktuellen CJam-Code bereits über hg verfügbar gemacht. Wenn Sie den CJam-Code 1 Tag vor dem Absenden der Frage erhalten, wird mein Programm korrekt ausgeführt (daher habe ich keine Änderungen zur Lösung dieses Problems vorgenommen). Aber das macht mir sowieso nichts aus.
Aditsu

33
Zeit für die Entwicklung von HQ9 + π ...
Nzall

2
@AnonymousPi Jeder kann frei für die Antworten stimmen, die er wählt. Vielleicht sind sie von anderen Antworten mehr beeindruckt, auch wenn sie nicht so kurz sind.
Aditsu

2
Warum haben Sie eine Variable auf 14 vorinitialisiert?
user2357112

113

PHP - 22 Bytes

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

Der Pi Day im Jahr 1998 war wirklich cool!


13
@ kukac67: n.jist das Format und 8899e5der Unix-Zeitstempel vom 14. März 1998.
ProgramFOX

7
Das ist so schlau.
Amal Murali

7
Sie können 7 Zeichen speichern, indem Sie entfernen ,8899e5. Es wird einmal im Jahr korrekt sein.
Damir Kasipovic

1
@Timo Du hast recht, aber es enthält die unzulässige Ziffer "3";).
Blackhole

18
@Blackhole 20 Bytes: <?=date('w.W',78e5);1. April 1970 war ein Mittwoch in Woche 14.
Primo

92

C 39

Angenommen, die Maschine ist Little-Endian und verwendet den IEEE-Gleitkommastandard.

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

Die lustige Tatsache ist, dass "P@I@"eigentlich nichts damit zu tun hat, PIsondern gleichbedeutend 0x40494050ist mit der Darstellung von3.144550323486328

http://ideone.com/uXVEtl


3
Das ist ziemlich genial.
wchargin

1
In Ihrem Code wird davon ausgegangen, dass auf einem Little-Endian-Computer die Eingaben getätigt werden.
Nayuki

@NayukiMinase, ja du hast recht, es lohnt sich darauf hinzuweisen. Außerdem wird die Verwendung des IEEE-Gleitkommastandards vorausgesetzt.
Michael M.

Und es enthält undefiniertes Verhalten (implizite Deklaration der variadischen Funktion)
Rubenvb

5
Dieser Code geht davon aus, dass es sich bei der Maschine um Michaels Maschine handelt :-).
Konrad Borowski

50

Gleichstrom , 11 9 Bytes

zE[.]znPp
  • z Schieben Sie die aktuelle Stapeltiefe (0) auf den Stapel
  • EE 16 (== 14 10 ) drücken
  • [.] Drücken Sie die Zeichenfolge "."
  • z Schieben Sie die aktuelle Stapeltiefe (3) auf den Stapel
  • n Pop 3 und als Nummer drucken
  • PPop "." und als char drucken
  • p Pop 14 und als Nummer mit Zeilenvorschub drucken

Ausgabe:

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

"Use Input Base" ist also ein Operator? Es riecht nach einer arithmetischen Operation, ist aber wahrscheinlich immer noch gültig.
Brilliand

@Brilliand In der Frage, die Basis-Conversions verbietet, sehe ich nichts. Tatsächlich scheint das OP in einem Kommentar hier codegolf.stackexchange.com/a/25681/11259
Digitales Trauma,

Ich bin damit einverstanden, dass es gültig ist; Ich denke nur, dass, wenn die Basiskonvertierung ein Operator ist und nicht Teil der Zahlensyntax, die Grenze zwischen Inline-Daten und einer arithmetischen Operation verwischt wird.
Brilliand

Ich denke, das sollten 15 Bytes sein?
Registrierter Benutzer

9
@AdityaPatil Warum? dcist eine Sprache und ein Dolmetscher, genau wie alle anderen Sprachen hier. dc -e ist nur die Anrufung dieses Dolmetschers. Ich hätte das 9-Byte-Programm genauso einfach in einer Datei speichern und ausführen können dc pi.dc. Wenn diese Bytes gezählt werden müssen, muss dies auch für alle anderen Sprachen gelten. zB python in alle Python-Einträge oder ruby golfscript.rb in alle Golfscript-Einträge aufnehmen. Ich glaube, dass die hier vereinbarte Konvention diese nicht beinhaltet, es sei denn, spezielle Optionen müssen verabschiedet werden.
Digital Trauma

42

JavaScript ( ES5 ) 20 Byte

Eine Variation der JS-Lösung von m.buettner.

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

Bearbeiten: JavaScript ( ES5 ) 18 Bytes

Eine Variation der Idee von ComFreek, die Base64-Dekodierungsfunktion zu verwenden.

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

Bearbeiten: Javascript ( ES5 ) 16 Bytes

Wenn der unäre +Operator eine Zeichenkette in eine Zahl umwandeln darf, kann dies reduziert werden auf:

+atob('MDMuMTQ')

BEEINDRUCKEND! Das ist wirklich schlau!
Kukac67

9
@NateEldredge Dies ist eine Zeichenfolgenverkettung, keine Arithmetik.
Tomsmeding

wird die verwendung von +hier akzeptiert?
Phuclv

1
Ich finde die Javascript-Lösung am elegantesten und wollte meine posten, bis ich bemerkte, dass sie eine '4' enthält: atob ('My4xNA =='), lol.
Rdev5

1
@ Tennis du hast recht, es ist immer noch da. Es ist sogar da, wenn ich das Ergebnis von der Konsole kopiere und einfüge. Ich bin damit nicht zufrieden und greife auf die 16-Byte-Lösung zurück.
nderscore

39

Haskell, 41 Bytes

Wann ist Pi Day in Australien?

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

Bearbeitet, um hinzuzufügen: Wie die andere Haskell-Antwort, die eine Zeichenfolge ausgibt, hat auch diese Anführungszeichen. Sie können 33 Punkte erzielen und sich strikt an die Regeln halten, aber es macht weniger Spaß:

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

Haha wow Das ist gut!
Ry

Können Sie erklären, warum das funktioniert?
yhager

5
Ich mag dieses sehr, +1. Aber ich denke technisch ".." ruft den Inkrement-Operator auf, was verboten war. (Eigentlich ruft Upvoting auch eine Inkrementierungsoperation auf, daher sollte es auch verboten sein ;-)
Marc van Leeuwen

Ich habe darüber nachgedacht - ich hatte eine noch kürzere Antwort: p=[2.9,2.92..]!!([0,6..]!!2)... und in dieser ..sieht es falsch aus. Aber Haskell ist stark getippt und das Inkrement in der Antwort, die ich gegeben habe, ist Charnicht Numund nicht arithmetisch - das, was eigentlich verboten ist. Ich brauche eine fromEnum, um die Zeichen wieder in Zahlen umzuwandeln, damit ich sie so verwenden kann. Wie auch immer, mein Gewissen ist klar :)
bazzargh

6
@yhager: ['.' ..] ist die Zeichenfolge "./0123456 ..." (etc). (a: n: y: t: i: m: e: _) ist eine Musterübereinstimmung, bei der die ersten 7 Zeichen herausgezogen werden. [m, a, t, e] ordnet 4 davon in "3.14" um. Da Sie wissen, dass Sie dies tun möchten, müssen Sie das Wörterbuch durchsuchen, um Wörter mit der richtigen Struktur zu finden. Was ich getan habe ... zB war ein anderes Paar "hässlichster Anzug". Dann kommen Sie mit einem Witz :)
bazzargh

32

Morsecode, 33 Bytes

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

Technisch gesehen dauert die Information nur 21 Bytes.


11
Wir brauchen definitiv mehr Golflösungen im Morsecode ...
aufgehört,

26
Technisch gesehen würde ich 21 Bits sagen , keine Bytes
Michael M.

14
@Michael, da Morsecode entweder ein Punkt, ein Bindestrich oder ein Leerzeichen sein kann, würde es nicht mehr als 1 Bit erfordern, um eine Operation zu speichern?
smcg

5
@smcg ButSpacesAreForWeakPeopleWhoCan'tReadThingsLikeThis
Cole Johnson

8
So sehr ich Morsecode (und damit diese Lösung) mag - aber verstößt das nicht gegen Regel 3: "Sie dürfen keine vordefinierten Variablen / Konstanten verwenden, die Ihre Sprache als Ersatz für 3, 1 und 4 haben könnte." oder sogar Regel 2: "Die Ziffern 3, 1 und 4 dürfen nirgendwo in Ihrem Code vorkommen."
Kratenko

27

J - 15 11 10 char

Mit dem Fantastischen kürzer gemacht i:.

6{i:6.28j8

Erklärt:

  • 6.28j8 - Die komplexe Zahl 6,28 + 8i.
  • i:- Hier passiert die Magie. i:auf einer komplexen Zahl A + Bi nimmt B ≠ 0 B + 1 gleich beabstandete Punkte aus dem Intervall [-A, A].
  • 6{ - Nehmen Sie das Element am Index 6, der gerade 3.14 ist.

Zuvor hatten wir den folgenden Unsinn:

|.'.'2}":22b8d5

Erklärt durch 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'

Stattdessen |.'.'2}":22b8d5können Sie 2 Zeichen speichern, indem Sie eine Zahl auswählen, für die keine Umkehrung erforderlich ist:'.'1}":16bbc6
rationalis

3
@epicwisdom Die Ziffern 3, 1 und 4 sind gesperrt. Ich muss eine Zahl in dem Formular verwenden, 41X3da ich nur die Zeichen bei den Indizes 0 und 2 ändern darf.
algorithmshark

20

Linux-Befehlszeile, 35 Byte

Dieser ist bei weitem nicht zu gewinnen, aber hier ist es nur zum Spaß:

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

Ausgabe (nach 2 Sekunden):

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

Zitat aus der Frage: "Keine Webanfragen."
Türklinke

9
@Doorknob ICMP-Echoanforderung! = Webanforderung. Ungeachtet dessen lautet der Ping 4.6.3.14, von dem ich keine Antwort bekomme. Es ist also nicht so, als würde ich nützliche Informationen aus dem Internet zurückerhalten
Digitales Trauma

10
@Doorknob Aber wenn dich das noch stört, können wir das machen :;ping -t${#?} -qc2 67502862|grep -oP '.\..\d'. Dies setzt die TTL auf 1, so dass das ausgehende ICMP-Echo von Ihrem Router verworfen wird, bevor es jemals in die Nähe des Internets gelangt
Digital Trauma

1
Mit können Sie 9 s einsparen ping -w2 67502862. (Ninja bearbeiten, weil, bevor ich w1 beriet, fast die Regeln gebrochen.)
Lolesque

@ Lolesque Danke. Verbessert das Golfergebnis jedoch nicht ;-)
Digital Trauma

16

GolfScript, 18 13 12

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

Alte Version:

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

Es ist sehr künstlerisch, nur 3 einzigartige Charaktere! ;)

Wie es funktioniert:

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

Hier ist eine Erklärung der 12-Zeichen-Version (viel interessanter, IMO):

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

Es funktioniert, weil es n`,ist 4, seit es n`ist '"\n"'. Gleiche Logik für '.'`,. Es wird auch ausgetauscht, anstatt einen neuen String zu erstellen, um ein Zeichen zu speichern (danke @algorithmshark).

Alternative Version:

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

oder

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

Oder irgendetwas in diesen Streichern. : P


Nur 3 verschiedene Charaktere, cool :)
aditsu

Würde es '.'.`,\.,n`,funktionieren, um einen Char zu retten? Wiederverwenden '.'durch Duplizieren und Austauschen.
Algorithmushai

@algorithmshark Ja, danke!
Türklinke

Das ist sehr schlau! +1
VisioN

dies sieht aus wie die
morse

14

OP's Antwort.

Mathematica, 21 20 18

Das fühlt sich billig an ...

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

oder

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

Fand heraus, wie man es macht 18:

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

Haskell, 49 48 12

(48 enthält das neue Zeilenzeichen)

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

Führen Sie es aus, indem Sie die rFunktion aufrufen .

Mit der oben beschriebenen Methode von Mathematica können Sie Folgendes in GHCi eingeben:

[-2.86..]!!6

Java, 87 86

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

Scala, 27

Übersetzt aus Java wie von Score_Under vorgeschlagen . (Ich kenne Scala nicht wirklich)

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

Oh, 0xeist schlau. Stört es Sie, wenn ich meine JS-Antwort damit verbessere? ;)
Martin Ender

Die meisten Java-Dateien können direkt in Scala konvertiert werden, was normalerweise kürzer ist, wenn Sie wirklich die Bytes speichern möchten. Wenn Sie es als Skript verwenden, lautet das Ganze einfach: print ("tri" .length + "." + 0xe)
Score_Under

Ja, ich dachte an dasselbe, was in Julia kürzer ist als [-.86:5][5]in 11, aber ich dachte , es zählt nicht, da Bereiche nur Mathe sind.
gggg

12

Bash, 50

Hilfe- / Fehlermeldungen sind keine externen Ressourcen, sondern eine Befehlsausgabe!

Wenn irgendetwas Regelmissbrauch ist, dann ist es das. Es wird der Zufall verwendet, den die Hilfemeldung STDERRdurch den genauen Befehl erhält

ping6

ist 314 Zeichen lang (zumindest unter Ubuntu 13.10 mit iputils-121221). EDIT: Ich schätze, dass dies viel weniger portabel ist als ich erwartet hatte ...

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

Die erste Zeile nimmt die Zeichenlänge der Hilfemeldung und speichert sie in einer Variablen.

Wie in meinen anderen Antworten erhalten die nächsten Zeilen die Nummer 1, indem Sie den Ausgangsstatus false(nicht sehr portabel, aber das ist doch !) Annehmen und dann diesen Wert verwenden, um einen Dezimalpunkt in die letzte Zeile einzufügen

Ausgabe: 3.14


Sie Sir sind Genie
Joshua

1
"2.81" unter Ubuntu 12.04 (iputils-101006). Trotzdem +1 ;-)
Digitales Trauma

@DigitalTrauma nach habe info ping6ich iputils-121221

chmodSieh dir auch meine missbräuchliche Antwort auf diese Frage an: codegolf.stackexchange.com/a/25724/16402

2
noch kürzer:ping6|&wc -c|sed 's/./&./'
malkaroee

11

Bash + TeX 28 Bytes

Wenn Sie TeX installiert haben:

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

Die Versionsnummer von TeX nähert sich asymptotisch pi, wenn sich die Software verbessert. Im Laufe der Zeit können Sie diese (fehlerhafte) Implementierung verwenden, um immer mehr Ziffern zu drucken!

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

Dies druckte 3.1415926 im Jahr 2011; Ab Januar 2014 wird 3.14159265 gedruckt.


Ich liebe dieses!
gniourf_gniourf

Sie können tex -v|grep -oP '.\..\d'4 Bytes speichern. (Regex wurde aus der Antwort von DigitalTrauma gestohlen .) Wie auch immer, +1, weil ich mir gerade die gleiche Antwort überlegt habe.
ace_HongKongIndependence

10

JavaScript, 20 Bytes

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

Verwenden Sie es in einer Konsole, damit das Ergebnis direkt gedruckt wird. Andernfalls alert(...)werden weitere 7 Zeichen hinzugefügt.

Wie meine andere Antwort bemerkte ich nur, dass es in JS viel kürzer ist.

Die Idee, 0xefür 14 zu verwenden, stammt aus der Einreichung des OP mit freundlicher Genehmigung des OP.


1
Es ist in Ordnung, du kannst es benutzen :)
kukac67

1
Alternative 20-Byte-Lösung:(x='.'+0xE).length+x
nderscore

@nderscore das ist eine ziemlich nette Idee. Wenn du das als eine andere Antwort postest, bekommst du meine Gegenstimme;)
Martin Ender

10

GNU-Datum, 17 Bytes

date -d2/5 +%u.%y

Dieser hat dieses Jahr garantiert nur funktioniert, aber ich sehe keine Einschränkung in den Regeln darüber ;-)

Das +is gibt lediglich den Beginn des Formatspezifizierers für an dateund ist keine arithmetische Addition. Gleiches gilt für das -, das das Eingabedatum anzeigt.

Ausgabe:

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

only guaranteed to work this yearEs ist in Ordnung .. :)
kukac67

10

Bash, 17 Bytes

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

Strich, 41 Bytes

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


..










.

Bash würde sich lautstark über den fehlenden Endmarker beschweren, während Dash dies nicht tut. Daher würde eine Bash-Lösung ohne Fehlermeldungen zwei zusätzliche Bytes erfordern.
Dennis

+1 auch. Ich denke, @TheDoctor hat vergessen, auf den Upvote-Button zu klicken?
Digital Trauma

@DigitalTrauma oops ... behoben
TheDoctor

7

Bash 23 22

seq 2 .02 5|sed -n 58p

Shell (ohne Historienerweiterung) 20

seq 2 .02 5|sed 58!d

seq 2 .06 5|sed -n 20pfunktioniert auch wie in der Mathematica-Antwort von OP angegeben.
user80551

sed 58!dist etwas kürzer.
Dennis

@Dennis Weird, ein Gnome-Terminal-Ersatz, !dmit dpkg ...dem der letzte Befehl ausgeführt wurde, mit dem ich begann d. Funktioniert gut in kshaber zshsagt , zsh: event not found: dso dass auf jeden Fall ist für etwas ersetzt zu werden .
user80551

Das liegt an der Geschichte von Bash . Es ist standardmäßig für Skripte deaktiviert. Wenn Sie also denselben Befehl in speichern pi.shund ausführen bash pi.sh, funktioniert es einwandfrei.
Dennis

6

Python, 39 oder 28, 47 oder 34

(Vielen Dank Score_Under, dass Sie so viel Golf gespielt haben.)

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

+ Hier ist der Operator für die Verkettung von Zeichenfolgen, nicht die Addition.

Kopieren Sie den 0xeTrick aus dem OP, hier sind 28 Zeichen mit Hilfe von @psal

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

Alte Versionen:

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

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

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

Die zweite kann gekürzt werden, indem Sie das Leerzeichen nach dem Ausdruck entfernen und anstelle von str () das Format "% s" verwenden. vgl. print"%s.%s"%(len('aaa'),0xe)bei 29 Bytes. Sie können dasselbe auch für das erste tun: print"%s.%s%c"%(len('aaa'),len('a'),52)bei 39 Bytes.
Score_Under

@Score_Under Oh, ich dachte mit %snoch benötigt str. Danke für den Tipp :)
ace_HongKongIndependence

1
eine weitere 29-Byte-Lösung:print('%s,%s'%(0xE9,0xE))[2:]
Zwiebelpsy

1
... und in 28 Bytes:print('%X.%s'%(675,0xE))[2:]
Onionpsy

5

GolfScript, 8 Bytes

'??.'(\(

Dieses Programm enthält nicht druckbare ASCII-Zeichen, daher kann es hier nicht direkt eingefügt werden. Stattdessen sollten die Fragezeichen im obigen Code durch die Bytes 03und 0Ehexadezimal ersetzt werden.

Der Einfachheit halber hier ein Hex-Dump des aktuellen Programms. Unix / Linux-Benutzer können diesen Hex-Dump ausführen, xxd -rum das Programm zu rekonstruieren:

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

Erläuterung:

  • Die ersten fünf Bytes des Programms bilden ein String-Literal in Anführungszeichen, das die drei Zeichen mit den ASCII-Codes 3, 14 und 46 (= ASCII-Periode) codiert.

  • (schneidet das erste Zeichen von der Zeichenkette ab und schiebt seinen ASCII-Code (3) auf den Stapel. \Vertauscht die beiden obersten Elemente auf dem Stapel, zieht die Zeichenfolge nach oben zurück, und die zweite (schneidet ein anderes Zeichen von der Zeichenfolge ab und drückt erneut den ASCII-Code (14) auf den Stapel.

Am Ende des Programms sieht der Stack (ohne die leere Eingabezeichenfolge) daher folgendermaßen aus:

3 "." 14

Am Ende des Programms besteht das Standardverhalten des GolfScript-Interpreters darin, alles auf dem Stapel zu stringifizieren und zu drucken, um die gewünschte Ausgabe zu erzielen.


1
Schnapp! Ich hatte genau die gleiche Idee , nur 12 Stunden zu spät. Ich denke, ich sollte Seite 2 vor dem Posten lesen ... Na ja, rückgängig machen, +1 an Sie.
Dennis

5

Bash - 39

Wir alle wissen, dass die ersten Stellen von Pi aus der folgenden Anweisung berechnet werden können:

Darf ich einen großen Behälter Kaffee haben

Wir brauchen nur 2 Nachkommastellen, oder?

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

4

Mathematica - 78

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

Im Geiste von Pi Day! : D
kukac67

4

Perl, 15 bis 20 Bytes

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

Ist PI__ nicht so etwas wie eine Konstante in Bezug auf Pi?
Llamageddon

Es ist keine Konstante. Es sind zwei Strings, die XOR-verknüpft sind.
Nderscore

Bitweise Operatoren sind nicht erlaubt.
Kukac67

Oh, das sind sie nicht. Nun, da ist meine hypothetische Lösung. Das heißt, wenn bitweise Operatoren nicht erlaubt sind, gibt es noch viel anderes zu tun, als die Länge von Strings zu zählen?
Llamageddon

Es gibt mehrere Antworten, bei denen Zahlen in verschiedenen Basen verwendet werden.
Kukac67

4

tr + Bash, 17 Bytes

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

Die -Zeichen hier sind keine arithmetischen Subtraktionsoperatoren. Sie geben die Reichweite an.

Ausgabe:

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

Clever, obwohl eine Zeichenübersetzung wirklich versteckte Arithmetik ist.
Pierre Arlaud

@ArlaudPierre Stimmt, obwohl ich behaupten würde, dass so ziemlich alle Lösungen hier auf die eine oder andere Weise versteckte Arithmetik haben. Wenn Sie sich die tatsächlichen Maschinenbefehle ansehen, die für eine dieser Antworten ausgeführt werden, würde ich annehmen, dass alle bitweise oder arithmetische Befehle enthalten sind, deren explizite Verwendung durch die Frage verboten ist .
Digital Trauma

@ArlaudPierre Für die Frage muss der String "3.14" ausgegeben werden. Unabhängig von der Sprache, irgendwo unter der Haube, wird dies zu einem write()Anruf oder ähnlichem ausarten . Es wird zwangsläufig ein wenig arithmetisch sein, um sicherzustellen, dass die richtige Anzahl von Bytes geschrieben wird, wenn nirgendwo anders. Ich denke, der Punkt der Frage ist , die notwendigen arithmetischen / bitweisen Berechnungen zu verbergen.
Digital Trauma

4

Bash, 57

Dies ist länger als die meisten Antworten, aber es ist nichts Schlimmes daran, es zu versuchen.

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

gibt

3.14

3
Entschuldigen Sie, dass Sie die Antworten aller erneut c=wc\ -c;echo `$c<<<..`.`$c<<<''``$c<<<...`
golfen haben

4

C, 36

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

1
Wenn wir es mit meiner Antwort kombinieren, können wir 2 Bytes speichern, um eine Punktzahl von 34 zu erhalten :main(){printf("%d\b.%d",' ',0xe);}
vsz

3

JavaScript - 23 Byte

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

Danke an nderscore (siehe seine Kommentare)!


Nizza: DI wusste nicht einmal darüber
kukac67

Es enthält 4zwar;)
nderscore

@nderscore Ah! Du hast recht! Würde btoa()es 3.14irgendwie klappen?
Kukac67

@ kukac67 Der base64-Zeichensatz enthält keinen Punkt :(
nderscore

3
23 byte "legal" version: atob('Mw')+atob('LjE0')und 14 byte "illegal" version:atob("My4xNA")
nderscore

3

C #

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

ĺ ist das Zeichen 314, keine vordefinierte Variable oder Konstante. Die .ToString-Datei formatiert die Ausgabe in eine Ziffer, einen Punkt und zwei weitere Ziffern.


Schön, aber es wird derzeit nicht ausgegeben und ist nicht kompilierbar.
Rudi Kershaw

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

3

GolfScript, 13 10

{xy}.*'.'\

Danke an Ilmari Karonen für die verbesserte Version!

xund ysind nicht druckbare Zeichen (siehe http://www.asciitable.com/ für weitere Informationen) verbunden sind ETXund SO, die 3 und 14 dekodieren.

Was dieser Code tut, sollte ziemlich klar sein.

Hinweis: Die folgende Regel

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

ist nicht fehlerhaft, da ASCII-Zeichen weder Variablen noch Konstanten sind.


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

Die Ziffern erscheinen nirgendwo. Es gibt keine Eingabe.
Vereos

Und dein endgültiger Code ist ...?
user80551

{}.*.{}.*und in den eckigen Klammern stehen jeweils 2 nicht druckbare Zeichen ( asciitable.com ) ETXundSO
Vereos

2
Sie können dies auf {xy}.*'.'\ (10 Zeichen) verkürzen . Meins ist aber immer noch kürzer. ;-) Aber +1, um mir { }.*(und { }.%) beizubringen , muss ich diesen Trick im Hinterkopf behalten.
Ilmari Karonen

3

Neu auf der Seite und kann noch keine Kommentare schreiben. Ich werde sie hier posten. Fragen Sie sich nur über diese Javascript-Lösung:

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

und diese Regel:

3.14 ist das einzige, was Sie ausgeben können. Es kann nicht Teil einer längeren / größeren Ausgabe sein.

Wenn ich diesen Code in meiner Browserkonsole ausführe, erhalte ich:

"3.14"

oder mit Node in der Kommandozeile:

'3.14'

aber wenn ich diesen Code ausführe:

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

Ich bekomme:

3.14

Unter Verwendung von Node.js zum Ausführen einer .js-Datei kann ich schreiben:

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

und bekomme:

3.14

1
Es gab keine Einschränkung, welcher Typ der resultierende Wert sein kann. Zeichenfolge oder Zahl spielen also keine Rolle. Die Anführungszeichen um die Zeichenfolge werden nicht als Teil der Ausgabe betrachtet.
nderscore

Willkommen bei CodeGolf und Programming Puzzles @RobertMunn! Diese Antwort ist gültig, da sie alle Regeln einhält ... Beachten Sie, dass consoleZeichenfolgen bei der Anzeige in Anführungszeichen gesetzt werden ... Sie haben sie verwendet, +aber nicht arithmetisch, sie werden als Verkettung verwendet, das ist also gültig ... Auch du hättest es kleiner machen können, alertanstatt console.log... Aber ansonsten großer Aufwand. Wir hoffen es gefällt euch hier ...
WallyWest

Das ist ziemlich nett! Sie sollten in Betracht ziehen, den Namen der Sprache und die Anzahl der Bytes (z. B. Javascript, 20)
hinzuzufügen

1
Danke Ace, ich lerne hier nur die Regeln. Ich konnte keinen Kommentar hinterlassen, also habe ich separat gepostet. Ich denke, dies war eher eine Klarstellung der Art des Postings mit Regeln, die nderscore und WallyWest für mich klarstellten. Ich schätze die Geduld aller mit einem Neuling.
Robert Munn

2

Mathematica, 56 Bytes

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

Nicht viel zu sagen. Ich generiere die Ziffern als Zeichenkettenlängen und verkette sie.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.