Wyjście Pi bez matematyki [zamknięte]

56

W jak najmniejszej liczbie bajtów Twoim zadaniem jest napisanie programu, który wyświetli:

3.14

Oczywiście z okazji późnego dnia Pi! :)

Zasady

Możesz to zrobić w dowolny sposób, ale istnieją pewne ograniczenia.

  • Być może nie korzystać z operacji arytmetycznych w dowolnym miejscu w programie. Obejmuje to +, -, *, /, %, ^(potęgowanie), etc ... To również obejmuje inkrementacji (zazwyczaj ++), zmniejszanie ( --), operacje bitowe , oraz ewentualne wbudowane funkcje, które mogą być stosowane jako zamiennik takich jak sum(), prod(), mod(), double(), pow(), sqrt(), inc(), dec()itp. ... (według uznania autora)
  • Cyfry 3, 1i 4może nie pojawić się w dowolnym miejscu w kodzie.
  • Być może nie stosować żadnych predefiniowane zmienne / stałe, które mogą mieć język jako zamiennik 3, 1i 4. (Według uznania autora)
  • Można również nie używać żadnych funkcji trygonometrycznych, takich jak sin(), cos(), tan(), arcsin(), arccos(), arctan(), sinh(), cosh(), tanh(), itd ... (dyskrecja autora)
  • Być może nie korzystać z wbudowanego lub predefiniowane wartości PI (lub 3.14). Brak żądań internetowych .
  • Twój program nie może wymagać żadnych danych wejściowych (poza jego uruchomieniem).
  • 3.14jest jedyną rzeczą, którą możesz wydać, nie może być częścią dłuższej / większej produkcji.

Zwycięzca

Odpowiedź z najmniejszą liczbą bajtów 18 kwietnia wygrywa. Powodzenia!

Czekamy na sprytne odpowiedzi od mądrych umysłów! Zaskoczyć kogoś? : P

kukac67
źródło
3
Możesz wyjaśnić, że ^jest to operator potęgowania, a nie bitowy operator XOR.
ace_HongKongIndependence
2
Czy dozwolone są operatory bitowe?
ProgramFOX
1
@ProgramFOX Cóż, mogą być używane jako zamiennik normalnych operacji, więc nie. Nie dozwolony. Zmienię post.
kukac67
1
Czy żądania sieciowe są dozwolone?
swish
7
@swish: Nie używałbym żądań internetowych, ponieważ należą one do listy standardowych „luk”, które nie są już zabawne
ProgramFOX

Odpowiedzi:

25

CJam - 8 6

S`,'.E

CJam to nowy język, który rozwijam, podobny do GolfScript - http://sf.net/p/cjam .
Oto wyjaśnienie:

Sjest zmienną wstępnie zainicjalizowaną do spacji („”)
`generuje ciąg znaków reprezentujący ostatnią wartość - która dokładnie " "(3 znaki)
,oblicza długość łańcucha (3)
'.to kropka
Ejest zmienną wstępnie zainicjalizowaną do 14; 3, 1 i 4 są niedozwolone, ale nie mówi nic o 14 :)

Podziękowania dla Doorknob za pomysł backtick

aditsu
źródło
1
@Brilliand Akceptuję użycie E.
kukac67
6
@ kukac67 Chociaż nie wydałem jeszcze oficjalnej wersji (już dziś), już udostępniłem obecny kod CJam za pośrednictwem hg. Jeśli otrzymasz kod CJam 1 dzień przed wysłaniem pytania, uruchomi on mój program poprawnie (więc nie wprowadziłem zmian w celu rozwiązania tego problemu). Ale i tak nie będę miał nic przeciwko.
aditsu
33
czas na opracowanie HQ9 + π ...
Nzall
2
@AnonymousPi Każdy może głosować na wybrane przez siebie odpowiedzi. Może są pod większym wrażeniem innych odpowiedzi, nawet jeśli nie są tak krótkie.
aditsu
2
Dlaczego masz zmienną wstępnie zainicjalizowaną na 14?
user2357112
113

PHP - 22 bajty

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

Dzień Pi w 1998 roku był naprawdę fajny!

Czarna dziura
źródło
13
@ kukac67: n.jjest formatem i 8899e5jest datownikiem uniksowym z 14 marca 1998 roku.
ProgramFOX
7
To takie sprytne.
Amal Murali
7
Możesz zapisać 7 znaków, usuwając ,8899e5. Będzie to poprawne raz w roku.
Damir Kasipovic
1
@ Timo Masz rację, ale zawiera niedozwoloną cyfrę „3”;).
Blackhole
18
@Blackhole 20 bajtów: <?=date('w.W',78e5);1 kwietnia 1970 r. Była środa w 14 tygodniu.
primo
92

C, 39

Zakłada, że ​​maszyna jest little-endian i używa standardu zmiennoprzecinkowego IEEE.

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

Zabawne jest to, że "P@I@"tak naprawdę nie jest to związane, PIale jest równoważne 0x40494050z reprezentacją3.144550323486328

http://ideone.com/uXVEtl

Michael M.
źródło
3
To całkiem niesamowite.
wchargin
1
Twój kod zakłada pisanie na maszynie little-endian.
Nayuki,
@NayukiMinase, tak, masz rację, warto to podkreślić. Zakłada także stosowanie standardu zmiennoprzecinkowego IEEE.
Michael M.
I zawiera nieokreślone zachowanie (niejawna deklaracja funkcji
wariadycznej
5
Ten kod faktycznie zakłada, że maszyna jest maszyną Michaela :-).
Konrad Borowski
50

dc , 11 9 bajtów

zE[.]znPp
  • z Wciśnij aktualną głębokość stosu (0) na stos
  • ENaciśnij E 16 (== 14 10 )
  • [.] Naciśnij ciąg „.”
  • z Wciśnij aktualną głębokość stosu (3) na stos
  • n Pop 3 i wydrukuj jako numer
  • PMuzyka pop "." i wydrukuj jako char
  • p Pop 14 i wydrukuj jako numer z nową linią

Wynik:

$ dc <<< zE[.]znPp
3.14
$ 
Cyfrowa trauma
źródło
Więc „użyj bazy danych wejściowych” jest operatorem? Pachnie trochę jak operacja arytmetyczna, ale prawdopodobnie nadal obowiązuje.
Brilliand
@Brilliand Nic nie widzę w pytaniu, które zakazywało konwersji bazowych. W rzeczywistości OP wydaje się zachęcać do konwersji podstawowych w komentarzu tutaj codegolf.stackexchange.com/a/25681/11259
Cyfrowa trauma
Zgadzam się, że to jest ważne; Po prostu myślę, że gdy podstawowa konwersja jest operatorem, a nie częścią składni liczbowej, zaciera granicę między danymi wstawionymi a operacją arytmetyczną.
Brilliand
Myślę, że powinno to być 15 bajtów?
Zarejestrowany użytkownik
9
@AdityaPatil Dlaczego? dcjest językiem i tłumaczem, tak jak wszystkie inne języki tutaj. dc -e jest tylko przywołaniem tego tłumacza. Równie łatwo mogłem zapisać 9-bajtowy program w pliku i uruchomić dc pi.dc. Gdyby bajty te trzeba było policzyć, to samo musiałoby mieć zastosowanie do wszystkich innych języków. np. uwzględniaj python we wszystkich wpisach ruby golfscript.rb w Pythonie lub we wszystkich wpisach w golfa. Uważam, że uzgodniona konwencja nie obejmuje ich, chyba że konieczne będzie przyjęcie specjalnych opcji.
Cyfrowa trauma
42

JavaScript ( ES5 ) 20 bajtów

Odmiana rozwiązania JS m.buettnera.

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

Edycja: JavaScript ( ES5 ) 18 bajtów

Odmiana pomysłu ComFreek na użycie funkcji dekodowania base64.

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

Edycja: JavaScript ( ES5 ) 16 bajtów

Jeśli +operator jednoargumentowy może rzucić ciąg na liczbę, można go zredukować do:

+atob('MDMuMTQ')
nderscore
źródło
ŁAŁ! To jest naprawdę sprytne!
kukac67
9
@NateEldredge To jest konkatenacja łańcuchów, a nie arytmetyka.
tomsmeding
czy użycie +tutaj jest akceptowane?
phuclv
1
Uważam, że rozwiązanie Javascript jest najbardziej eleganckie i miałem zamiar opublikować moje, dopóki nie zauważyłem, że ma w nim „4”: atob („My4xNA ==”), lol.
rdev5
1
@Dennis masz rację, nadal tam jest. Nawet tam, jeśli skopiuję + wkleję wynik z konsoli. Nie jestem z tego zadowolony, więc wrócę do 16-bajtowego rozwiązania.
nderscore
39

Haskell, 41 bajtów

Kiedy jest dzień pi w Australii?

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

Edytowano, aby dodać: podobnie jak inna odpowiedź Haskella, która wyświetla ciąg znaków, podobnie jak cudzysłowy. Możesz zdobyć 33 punkty i ściśle przestrzegać zasad, ale to mniej zabawne:

p=putStr$map([','..]!!)[7,2,5,8]
bazzargh
źródło
Haha, wow. To jest dobre!
Ry-
Czy możesz wyjaśnić, dlaczego to działa?
yhager
5
Bardzo mi się podoba, +1. Ale myślę, że technicznie „..” wywołuje operatora inkrementacji, co było zabronione. (Właściwie upvoting również wywołuje operację inkrementacji, więc też powinno być zabronione ;-)
Marc van Leeuwen
Właściwie o tym myślałem - miałem jeszcze krótszą odpowiedź: p=[2.9,2.92..]!!([0,6..]!!2)... i w tym ..wygląda źle. Ale Haskell jest silnie napisany na maszynie, a przyrost odpowiedzi, którego udzieliłem, Charnie Numjest i nie jest arytmetyką - rzecz, która jest rzeczywiście zabroniona. Potrzebowałbym fromEnumprzekonwertować znaki z powrotem na liczby, aby użyć ich w ten sposób. W każdym razie moje sumienie jest czyste :)
bazzargh
6
@yhager: ['.' ..] to ciąg znaków „./0123456 ...” (itp.). (a: n: y: t: i: m: e: _) to dopasowanie wzorca wyciągające pierwsze 7 znaków, [m, a, t, e] zmienia kolejność 4 z nich na „3.14”. Wiedząc, że to właśnie chcesz zrobić, należy przeszukać słownik, aby znaleźć słowa o odpowiedniej strukturze. Co zrobiłem ... np. Inna para była „najbrzydszym garniturem”. Potem
wymyślasz
32

Kod Morse'a, 33 bajtów

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

Technicznie rzecz biorąc, informacja zajmuje tylko 21 bajtów.

Ken A.
źródło
11
Zdecydowanie potrzebujemy tutaj więcej rozwiązań golfowych w kodzie Morse'a ...
przestałem obracać przeciwnie do zegara
26
Mówiąc technicznie, powiedziałbym 21 bitów , a nie bajtów
Michael M.
14
@Michael, ponieważ kod Morse'a może być kropką, myślnikiem lub spacją, czy nie wymaga więcej niż 1 bitu do przechowywania 1 operacji?
smcg
5
@smcg ButSpacesAreForWeakPeopleWhoCan'tReadThingsLikeThis
Cole Johnson
8
Tak jak lubię kod Morse'a (i stąd to rozwiązanie) - ale czy nie jest to sprzeczne z regułą 3: „Nie możesz używać żadnych predefiniowanych zmiennych / stałych, które twój język może mieć jako zamiennik dla 3, 1 i 4.” lub nawet reguła 2: „Cyfry 3, 1 i 4 mogą nie pojawiać się nigdzie w twoim kodzie”.
kratenko
27

J - 15 11 10 znaków

Skrócił się, używając fantastycznego i:.

6{i:6.28j8

Wyjaśniono:

  • 6.28j8 - Liczba zespolona 6,28 + 8i.
  • i:- Tutaj dzieje się magia. i:na liczbie zespolonej A + Bi, B ≠ 0 przyjmuje B + 1 równo oddalone punkty od przedziału [-A, A].
  • 6{ - Weź element o indeksie 6, który akurat wynosi 3,14.

Wcześniej mieliśmy następujący nonsens:

|.'.'2}":22b8d5

Wyjaśnione przez wybuch:

         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'
algorytmshark
źródło
Zamiast tego |.'.'2}":22b8d5możesz zapisać 2 znaki, wybierając liczbę, która nie wymaga cofnięcia:'.'1}":16bbc6
rationalis
3
@epicwisdom Cyfry 3, 1 i 4 są zbanowane. Muszę użyć liczby w formularzu, 41X3ponieważ wolno mi modyfikować znaki tylko przy indeksach 0 i 2.
algorytm
20

Wiersz poleceń systemu Linux, 35 bajtów

Ten jest nigdzie blisko wygranej, ale tutaj jest dla zabawy:

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

Wyjście (po 2 sekundach):

$ ping -w2 67502862|grep -oP '.\..\d'
3.14
$
Cyfrowa trauma
źródło
Cytat z pytania: „Brak żądań internetowych”.
Klamka
9
@Doorknob ICMP echo request! = Request web. Niezależnie od tego, ping dotyczy wersji 4.6.3.14, z której nie otrzymuję odpowiedzi, więc nie otrzymuję żadnych przydatnych informacji z Internetu
Digital Trauma
10
@Doorknob Ale jeśli nadal Ci to przeszkadza, możemy to zrobić :;ping -t${#?} -qc2 67502862|grep -oP '.\..\d'. To ustawia TTL na 1, więc wychodzące echo ICMP jest odrzucane przez router, zanim dotrze ono gdziekolwiek w pobliżu Internetu
Digital Trauma
1
Możesz zaoszczędzić 9 sekund, używając ping -w2 67502862. (Edytuj Ninja, ponieważ zanim
doradziłem
@lolesque Thanks. Nie poprawia jednak wyniku golfa ;-)
Digital Trauma
16

GolfScript, 18 13 12

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

Stara wersja:

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

To bardzo artystyczne, tylko 3 unikalne postacie! ;)

Jak to działa:

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

Oto wyjaśnienie wersji 12-znakowej (o wiele bardziej interesujące, IMO):

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

Działa, ponieważ n`,jest 4, ponieważ n`jest '"\n"'. Ta sama logika dla '.'`,. Zamienia także zamiast tworzyć nowy ciąg znaków w celu zapisania znaku (dzięki @algorithmshark).

Alternatywna wersja:

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

lub

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

Lub cokolwiek w tych ciągach, naprawdę. : P

Klamka
źródło
Tylko 3 różne postacie, super :)
aditsu
Czy '.'.`,\.,n`,pracowałbyś, żeby uratować chara? Ponowne użycie '.'przez powielanie i zamianę.
algorytmshark
@algorytmshark Tak, dziękuję!
Klamka
To bardzo sprytne! +1
Wizyta
to wygląda jak wersja kodu Morse'a
pwned
14

Odpowiedź OP.

Mathematica, 21 20 18

To wydaje się tanie ...

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

lub

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

Zrozumiałem, jak to zrobić 18:

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

Haskell, 49 48 12

(48 zawiera nowy znak linii)

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

Uruchom go, wywołując rfunkcję.

Korzystając z metody opisanej powyżej w Mathematica, możesz wpisać to w GHCi:

[-2.86..]!!6

Java, 87 86

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

Scala, 27

Przetłumaczone z Java, zgodnie z sugestią Score_Under . (Naprawdę nie znam Scali)

print("tri".length+"."+0xe)
kukac67
źródło
Och, 0xejest sprytny. Czy masz coś przeciwko, jeśli poprawię w ten sposób moją odpowiedź JS? ;)
Martin Ender
Większość java można bezpośrednio przekonwertować na scala, który jest zwykle krótszy, jeśli naprawdę chcesz zaoszczędzić na bajtach - jeśli używasz go jako skryptu, wszystko jest po prostu: print („tri” .length + ”.” + 0xe)
Score_Under
Tak, myślałem o tej samej rzeczy, która w Julii jest krótsza niż w [-.86:5][5]przypadku 11, ale pomyślałem, że to się nie liczy, ponieważ zakresy to tylko matematyka.
gggg
12

Bash, 50

Komunikaty pomocy / błędów nie są zasobami zewnętrznymi, są wyjściem polecenia!

Jeśli cokolwiek jest naruszeniem zasad, to jest to. Wykorzystuje zbieg okoliczności, że komunikat pomocy przekazany STDERRprzez dokładne polecenie

ping6

ma 314 znaków (przynajmniej na Ubuntu 13.10 z iputils-121221). EDYCJA: Doceniam to, że jest o wiele mniej przenośny niż się spodziewałem ...

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

Pierwszy wiersz przyjmuje długość znaku komunikatu pomocy i zapisuje go w zmiennej.

Podobnie jak w moich innych odpowiedziach, kilka następnych wierszy otrzymuje numer 1, przyjmując status wyjścia false(niezbyt przenośny, ale w końcu to jest !), A następnie użyj tej wartości, aby wstawić kropkę dziesiętną w ostatnim wierszu

Wynik: 3.14


źródło
jesteś genialny
Jozuego
1
Och, och, „2.81” na Ubuntu 12.04 (iputils-101006). +1 tak samo ;-)
Cyfrowa trauma
@DigitalTrauma zgodnie z info ping6mam
sprawdź także moją - chmodnadużywającą odpowiedź na to pytanie na codegolf.stackexchange.com/a/25724/16402
2
jeszcze krótszy:ping6|&wc -c|sed 's/./&./'
malkaroee,
11

Bash + TeX 28 bajtów

Jeśli masz zainstalowany TeX:

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

Numer wersji TeXa asymetrycznie zbliża się do pi wraz z poprawą oprogramowania. W miarę upływu czasu możesz używać tej (niezgodnej) implementacji do drukowania coraz większej liczby cyfr!

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

Wydrukowano 3.1415926 w 2011 roku; od stycznia 2014 r. wydrukuje 3.14159265.

nneonneo
źródło
Kocham to!
gniourf_gniourf
Możesz użyć, tex -v|grep -oP '.\..\d'aby zapisać 4 bajty. (Regex skradziony z odpowiedzi DigitalTrauma .) W każdym razie +1, ponieważ właśnie pomyślałem o tej samej odpowiedzi.
ace_HongKongIndependence
10

JavaScript, 20 bajtów

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

Użyj go w konsoli, aby wynik został wydrukowany bezpośrednio. W przeciwnym razie alert(...)doda kolejne 7 znaków.

Podobnie jak moja inna odpowiedź, zauważyłem, że w JS jest o wiele krótszy.

Pomysł użycia 0xeprzez 14 jest wzięty ze złożenia PO za uprzejmą zgodą PO.

Martin Ender
źródło
1
Jest w porządku, możesz go użyć :)
kukac67
1
Alternatywne rozwiązanie 20 bajtów:(x='.'+0xE).length+x
nderscore
@nderscore to całkiem fajny pomysł. Jeśli opublikujesz to jako inną odpowiedź, dostaniesz mój upovote;)
Martin Ender
10

Data GNU, 17 bajtów

date -d2/5 +%u.%y

Ten gwarantował, że zadziała tylko w tym roku, ale nie widzę żadnych ograniczeń w przepisach na ten temat ;-)

To +po prostu wskazuje początek specyfikatora formatu datei nie jest dodatkiem arytmetycznym. To samo z -, wskazując datę wejścia.

Wynik:

$ date -d2/5 +%u.%y
3.14
$
Cyfrowa trauma
źródło
only guaranteed to work this yearW porządku .. :)
kukac67,
10

Bash, 17 bajtów

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

Dash, 41 bajtów

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


..










.
Dennis
źródło
Bash głośno narzekał na brakujący znacznik końcowy, podczas gdy Dash nie, więc rozwiązanie Bash bez komunikatów o błędach wymagałoby dwóch dodatkowych bajtów.
Dennis
+1 również. Chyba @TheDoctor zapomniał kliknąć przycisk upvote?
Digital Trauma
@DigitalTrauma oops ... naprawiono
TheDoctor
7

Bash 23 22

seq 2 .02 5|sed -n 58p

Powłoka (bez rozszerzenia historii) 20

seq 2 .02 5|sed 58!d
użytkownik80551
źródło
seq 2 .06 5|sed -n 20pdziała również tak, jak podano w odpowiedzi Mathematica OP.
user80551
sed 58!djest nieco krótszy.
Dennis
@Dennis dziwne, substytuty gnome-terminal !dz dpkg ...którego była ostatnia komenda że wpadłem, że zaczęło się d. Działa dobrze, kshale zshmówi, zsh: event not found: dwięc to zdecydowanie zastępuje coś.
user80551
Wynika to z ekspansji historii Basha . To domyślnie wyłączone dla skryptów, więc jeśli zapiszesz samo polecenie pi.shi wykonać bash pi.sh, to będzie działać dobrze.
Dennis
6

Python, 39 lub 28 47 lub 34

(Dziękuję Score_Under za tak dużo gry w golfa)

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

+ tutaj jest operator konkatenacji ciągu, a nie dodawanie.

Kopiowanie 0xesztuczkę z PO, oto 28 znaków z pomocą @psal

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

Stare wersje:

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

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

print"%s.%s"%(len('aaa'),0xe)
ace_HongKongIndependence
źródło
Drugi można skrócić, usuwając spację po wydruku i używając formatu „% s” zamiast str (). por. print"%s.%s"%(len('aaa'),0xe)29 bajtów. Możesz zrobić to samo z pierwszym: print"%s.%s%c"%(len('aaa'),len('a'),52)przy 39 bajtach.
Score_Under
@Score_Under Och, myślałem, że używanie %swciąż wymaga str. Dzięki za podpowiedź :)
ace_HongKongIndependence 10.04.2014
1
kolejne 29 bajtów:print('%s,%s'%(0xE9,0xE))[2:]
Cebulkowy
1
... i w 28 bajtach:print('%X.%s'%(675,0xE))[2:]
Cebulkowy
5

GolfScript, 8 bajtów

'??.'(\(

Ten program zawiera niedrukowalne znaki ASCII, więc nie można go tutaj wkleić bezpośrednio. Zamiast tego znaki zapytania w powyższym kodzie powinny zostać zastąpione bajtami 03i 0Eszesnastkowo.

Dla wygody oto zrzut szesnastkowy aktualnego programu. Użytkownicy systemów Unix / Linux mogą uruchomić zrzut zrzutu szesnastkowego, xxd -raby zrekonstruować program:

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

Wyjaśnienie:

  • Pierwsze pięć bajtów programu tworzy literał łańcuchowy z pojedynczym cudzysłowem kodujący trzy znaki kodami ASCII 3, 14 i 46 (= okres ASCII).

  • (odcina pierwszy znak z ciągu i wypycha swój kod ASCII (3) na stos. \zamienia dwa górne elementy na stosie, ciągnąc łańcuch z powrotem na górę, a drugi (odcina kolejny znak z łańcucha, ponownie wypychając swój kod ASCII (14) na stosie.

Na końcu programu stos (wyłączając pusty ciąg wejściowy) wygląda zatem następująco:

3 "." 14

Pod koniec programu domyślnym zachowaniem interpretera GolfScript jest stritowanie i drukowanie wszystkiego na stosie, uzyskując pożądany wynik.

Ilmari Karonen
źródło
1
Kłapnięcie! Miałem dokładnie ten sam pomysł , tylko o 12 godzin za późno. Chyba powinienem przeczytać stronę 2 przed opublikowaniem ... Cóż, cofam się, +1 do ciebie.
Dennis,
5

bash - 39

Wszyscy wiemy, że kilka pierwszych cyfr Pi można obliczyć z następującego wyrażenia:

Czy mogę prosić o duży pojemnik z kawą?

Potrzebujemy tylko 2 miejsc po przecinku, prawda?

m=May
i=I
h=have
echo ${#m}.${#i}${#h}
diabelnie
źródło
4

Mathematica - 78

DateList["March"<>ToString@FromDigits@"E"]~DateString~{"MonthShort",".","Day"}
śmigać
źródło
W duchu Pi Day! : D
kukac67,
4

Perl, 15 20 bajtów

print 05706=~s/0/./r
print 0xbc6=~s/0/./r
tłum
źródło
Czy PI__ nie jest czymś stałym związanym z Pi?
Llamageddon
To nie jest stałe. Są to dwa ciągi znaków edytowane w XOR.
nderscore
Operatory bitowe nie są dozwolone.
kukac67
Nie są. Cóż, oto moje hipotetyczne rozwiązanie. To powiedziawszy, jeśli operatory bitowe nie są dozwolone, to czy jest jeszcze coś więcej do zrobienia niż liczenie długości ciągów?
Llamageddon
Istnieje kilka odpowiedzi, które używają liczb w różnych bazach.
kukac67
4

tr + Bash, 17 bajtów

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

Te -tutaj znaki nie są operatory arytmetyczne odejmowanie. Wskazują zasięg.

Wynik:

$ tr a-j 0-9<<<d.be
3.14
$
Cyfrowa trauma
źródło
Sprytne, chociaż tłumaczenie znaków jest naprawdę ukrytą arytmetyką.
Pierre Arlaud
@ArlaudPierre Prawda, choć twierdziłbym, że prawie wszystkie rozwiązania mają ukrytą arytmetykę w ten czy inny sposób. Jeśli spojrzysz na rzeczywiste instrukcje maszynowe wykonane dla którejkolwiek z tych odpowiedzi, pomyślałbym, że wszystkie mają jakieś instrukcje bitowe lub arytmetyczne, które są zabronione przez jawne użycie przez pytanie.
Cyfrowa trauma
@ArlaudPierre Pytanie wymaga wyprowadzenia ciągu „3.14”. Niezależnie od języka, gdzieś pod maską, przerodzi się w write()połączenie lub podobne. Pod pokrywami koniecznie będzie pewna arytmetyka, aby zapewnić zapisanie poprawnej liczby bajtów, jeśli nigdzie indziej. Myślę, że chodzi o to, aby ukryć niezbędne obliczenia arytmetyczne / bitowe.
Cyfrowy uraz
4

BASH, 57

To jest dłuższe niż większość odpowiedzi, ale nie ma nic złego w próbie.

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

daje

3.14
zarejestrowany użytkownik
źródło
3
Przepraszam za ponowne c=wc\ -c;echo `$c<<<..`.`$c<<<''``$c<<<...`
zagranie w
4

C, 36

main(){printf("%d\b.%o\b",' ','`');}
użytkownik19057
źródło
1
Jeśli połączymy to z moją odpowiedzią, możemy zaoszczędzić 2 bajty, aby uzyskać wynik 34 :main(){printf("%d\b.%d",' ',0xe);}
vsz
3

JavaScript - 23 bajty

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

Dzięki nderscore (zobacz jego komentarze)!

ComFreek
źródło
Fajnie: DI nawet o tym nie wiedziałem
kukac67,
Zawiera 4jednak;)
nderscore
@nderscore Ah! Masz rację! Czy jakoś się btoa()uda 3.14?
kukac67
@ kukac67 Zestaw znaków base64 nie zawiera
kropki
3
23-bajtowa „legalna” wersja: atob('Mw')+atob('LjE0')i 14-bajtowa „nielegalna” wersja:atob("My4xNA")
nderscore
3

DO#

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

ĺ jest znakiem 314, a nie predefiniowaną zmienną lub stałą. .ToString formatuje dane wyjściowe na cyfrę, kropkę, a następnie 2 kolejne cyfry.

Grax32
źródło
Fajnie, ale obecnie nie wyświetla i nie można go skompilować.
Rudi Kershaw
Console.Write (((int) 'ĺ'). ToString ("# \\. ##"));
Grax32
3

GolfScript, 13 10

{xy}.*'.'\

Dzięki Ilmari Karonen za ulepszoną wersję!

xi ysą znakami, których nie można wydrukować ( więcej informacji można znaleźć na stronie http://www.asciitable.com/ ) ETXi SO, które dekodują do 3 i 14.

To, co robi ten kod, powinno być całkiem jasne.

Uwaga: następująca reguła

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

nie jest zepsuty, ponieważ znaki ASCII nie są ani zmiennymi, ani stałymi.

Vereos
źródło
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
Cyfry nigdzie się nie pojawiają. Nie ma danych wejściowych.
Vereos
A twój ostateczny kod to ...?
user80551
{}.*.{}.*, aw nawiasach znajdują się odpowiednio 2 niedrukowalne znaki ( asciitable.com ) ETXiSO
Vereos
2
Możesz to skrócić do {xy}.*'.'\ (10 znaków). Mój jest jednak jeszcze krótszy. ;-) Ale +1 za nauczenie mnie o { }.*(i { }.%), będę musiał pamiętać o tej sztuczce.
Ilmari Karonen,
3

Nowy na stronie i nie może jeszcze pisać komentarzy, więc opublikuję go tutaj. Zastanawiam się nad tym rozwiązaniem Javascript:

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

i ta zasada:

3.14 jest jedyną rzeczą, którą możesz wydać, nie może być częścią dłuższych / większych wyników.

Jeśli uruchomię ten kod w konsoli przeglądarki, otrzymam:

"3.14"

lub używając Węzła w linii poleceń:

'3.14'

ale jeśli uruchomię ten kod:

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

Dostaję:

3.14

Używając Node.js do uruchomienia pliku .js, mogę napisać:

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

i dostać:

3.14
Robert Munn
źródło
1
Nigdy nie było ograniczenia, jaki typ może być wynikowa wartość. Tak więc ciąg lub liczba nie ma znaczenia. Cytaty wokół ciągu nie są uważane za część wyniku.
nderscore
Witamy w CodeGolf and Programming Puzzles @RobertMunn! Ta odpowiedź jest prawidłowa, ponieważ jest zgodna z wszystkimi zasadami ... Pamiętaj, że consolezwykle wyświetla ciągi w cudzysłowach podczas ich wyświetlania ... +Użyłeś, ale nie arytmetycznie, jest on używany jako konkatenator, więc to jest ważne ... Również mógłbyś to zmniejszyć, używając alertzamiast console.log... Ale poza tym wielki wysiłek. Mamy nadzieję, że Ci się spodoba tutaj ...
WallyWest
To całkiem miłe! Powinieneś rozważyć dodanie nazwy języka i liczby bajtów (np. Javascript, 20)
Vereos
1
Dzięki Ace, właśnie uczę się tutaj zasad. Nie mogłem zostawić komentarza, więc opublikowałem osobno, wydaje mi się, że było to bardziej wyjaśnienie zasad tego rodzaju postów, które nderscore i WallyWest wyjaśniły mi. Doceniam cierpliwość każdego z nowicjuszem.
Robert Munn
2

Mathematica, 56 bajtów

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

Niewiele do powiedzenia. Generuję cyfry jako długości łańcuchów i łączę je.

Martin Ender
źródło