Jakiś czas temu zadano następujące pytanie: GolfScript, CJam lub Pyth? Opierając się tylko na samym tytule, pomyślałem, że będzie to bardzo miłe wyzwanie, ale niestety okazało się, że jest to pytanie z pytaniem o wskazówki. Oto wyzwanie, które chciałem przeczytać:
Kto powiedział, że w prawdziwym świecie nie używa się golfa? Jak wszyscy wiedzą, stosunek błędów do wiersza kodu jest taki sam, niezależnie od używanego języka programowania, więc istnieje wyraźna szansa na zmniejszenie kosztów debugowania i konserwacji w tych językach. Twoja firma w końcu ujrzała światło i zdecydowała się wykorzystać Golfscript, CJam i Pyth do opracowania swoich produktów.
Niestety, po kilku miesiącach twoje dyski twarde są zaśmiecone fragmentami kodu i nawet nie wiesz, które są napisane w których językach (podejrzewasz nawet niektórych programistów używających Perla).
Musisz napisać narzędzie, które wykryje, w którym języku CJam, Golfscript lub Pyth jest językiem, w którym napisany jest program. Sytuacja jest krytyczna, możesz użyć dowolnego języka, ale pamiętaj, aby był on krótki (przechowywanie danych jest drogie: im więcej bajtów używamy, tym więcej kosztuje).
Generał
- Najkrótszy kod wygrywa
- Standardowe luki itp.
- Nie używaj tłumacza online
- Możesz napisać funkcję lub program
- Możesz użyć eval do wykrycia własnego języka
Wejście
- Twoje dane wejściowe są pobierane ze standardowego strumienia wejściowego lub jako ciąg znaków
- Dane wejściowe zawierają tylko znaki drukowalne ASCII i linie
- Rozmiar danych wejściowych wynosi do 256 bajtów
Wynik
- Dane wyjściowe są drukowane do strumienia wyjściowego lub zwracane jako sekwencja ciągów / symboli
Jeśli dane wejściowe są bez wątpienia poprawnym programem X , wydrukuj lub zwróć X , X ∈ {CJam, Pyth, Golfscript}
Uwaga : „bez wątpienia” nie oznacza, że możesz odpowiadać głupim analizatorem, który konsekwentnie nie wykrywa żadnego języka. W przypadku Pyth spodziewam się, że zostaną rozpoznane proste programy (ale nie zostaną zapisane na stałe ). To samo dotyczy CJam ( ściągawki , przykłady ) i Golfscript ( przykłady ). Poprzednie linki wskazują specyfikacje każdego języka. Jeśli zastosujesz podejście rozmyte / bayesowskie, „bez wątpienia” oznacza z wysokim poziomem pewności (na przykład zdobywasz 99% swojej klasyfikacji). Poniżej znajduje się rzeczywisty zestaw testów.
Jeśli dane wejściowe są prawidłowe w wielu językach, każdy wykryty język powinien zostać wydrukowany / zwrócony. Po wydrukowaniu musi istnieć separator między wieloma wyjściami (np. Spacja, nowa linia, przecinek ...).
- Kolejność wypróbowania języków nie ma znaczenia
- Nie obchodzi mnie sprawa (CJam, cjam, CJAM, SPAM) [1]
- Jeśli żaden z powyższych języków nie zostanie wykryty, wydrukuj „
Probably Perl
” . Dzięki temu komentarzowi z mbomb007 , w powyższym przypadku możesz również wypisać „Seriously
” za karę 4 bajtów (różnica między oboma łańcuchami).
[1] Dla jasności SPAM jest nieprawidłowy
Przykłady
-
"Crime predicted: -- Calling: 1--555- "30*{_5<{iAa*:mr}&}/
Dane wyjściowe (przykład wielu zwracanych wartości)
["Golfscript", "Cjam"]
Wejście
3
Wyjście (przykład na standardowe wyjście)
golfscript cjam pyth
Wejście
if {} aazd
Wynik
Probably Perl
W ostatnim przypadku program wejściowy generuje błąd w przypadku wszystkich trzech internetowych tłumaczy.
Punktacja, kryterium wygranej
Najkrótszy kod wygrywa. Dodaj 4 bajty, jeśli wypisujesz „Poważnie”. Następnie zastosuj bonusy.
Nieudane testy
Poniżej znajdują się fragmenty kodu, których nie można rozpoznać jako jeden z trzech powyższych języków.
Jednoliniowe (tj. Jeden wpis na linię)$^X=~/([a-z]+)[^\/]+$/;print$1,$/
<>;map($s-=(-1)**$_/(2*$_-1),1..$_),$s=!print$s,$/for<>
((THIS IS LISP HAIKU) (TRULY THIS IS LISP HAIKU) (THIS IS LISP HAIKU))
(format t"~@(~{~R~^, ~}~).~%~:*~@(~{~:R~^, ~}~)."(loop for i to 99 collect(1+ i)))
print sum(ord(c) for c in 'Happy new year to you!')
Brainfuck
>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
++++++++++++++++++++++++++++++++++++++++++++++++.
-----------------.
++++++++.
+++++.
--------.
+++++++++++++++.
------------------.
++++++++.
Perl
@list=( "aaaa",
"aaaaaaaa",
"aaaaaaaaaaaaaaa",
"aaaaaaaaaaaaaaaa",
"aaaaaaaaaaaaaaaaaaaaaaa",
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
while (@list) {
for($i=0;$i<6;$i++){
print length($list[$i])." ";
}
print "\n";
}
Ryba
#ifndef __linux
#include "x.h"
#define X/*\
a=1 set -e
+++++++++++++++++++++_+++++++++++++....Hello World!?:Q:
#endif
echo "Hello, World!"
int m(){}
Podstawowy zestaw testów
To są testy, które muszą przejść. Belows są jednej wkładki dla każdego języka, gdzie program powinien wykryć język jest on napisany w (nie sprawdzić, które z nich są poliglota).
Pyt
*2Q
FNrZTN
FNrZhTN
FNUhTN
VhTN
FNr1hQN
=N5N
K5K
K1FNr1hQ=K*KN
K1FNr1hQ=K*KNK
K1FNr1hQ=K*KN;K
DhZK*3ZRK
L?b*bytb1yQ
A(Z1)VQHA(H+HG
Golfscript
;'2706 410'~{.@\%.}do;
;''6666,-2%{2+.2/@*\/10.3??2*+}*`50<~\;
'Hello, world!'
1 2 [\]
CJam
"Hello, world"
{`"_~"}_~
"`_~"`_~
T1{_2$+}A*]`
{__'`>\'x>26*2-*-}/
Y38#
N/s:X,8-,{X>9<__{'a<},,\4%{'Z>},,*I={4=}{;}?}/
Bonus srebrny: liczba bajtów * 0,6
Wszystkie poprzednie testy muszą zostać zaliczone, a także następujące jednowierszowe. Wszystkie te fragmenty pochodzą z rzeczywistych odpowiedzi CodeGolf.
Pyt
VzJ:zZhZpkJ~Zhy}rJ0-G"aeoui
Vzjdm?@zd}N,dt-lzd\ Uz
jd.iSQs*RtQ,\?":0
rsXOtQmO*-GJ"aeiou"J/Q2*%Q2O"hy"4
VhQIq`N_`NN
s["$$\\varphi=1+"*Q"\cfrac1{1+"\\<\dQ"dots"*Q\}"$$
@c"weak trick fair"d-!JlfhT-M.:us_cG.u+NYtKrH7-52hK.zU52 2>J26
Golfscript
);:|;{0):0;|$:§-1%" - "§" = ""0"4$~§~-+-4>:|n|6174`=!}do"Iterations: "0"."
'-+,/'{)))))}%
4:echo(2+2);
#undef X;A!"$%&'()*+-[,.]/0123456789:<=>?@BCDEFGHIJKLMNOPQRSTUVWYZ\^_`abcghijklmopqrstvwxyz{|}~
{`),32>^.}.~
"126,32>''+".~\-'.~\-"'-
"),@`^^32>#.~".~
...[[]]{{}}&%%++++5i
*++..0011125::::;;;?bbbbcccc{}
"This program wasn't written in "o"GolfScript"", it was built for ""CJam"oo"!"
CJam
"Q"c("ASSW"1$("aRD"(((T1
%\@_@){;_0}*__*)\15
"This program wasn't written in "o"GolfScript"", it was built for ""CJam"oo"!"
"P2"1e3K51_,1>K*$K*~]N*
li__,\mf:i2m1+:*/fb:+
ri:B__(^2/):G/,{_BBG/@-(#G@*G(B2/*+*}/]:+
{1$+S@]_1=4+1$`,-S*"2$~"}21D2$~
[S'-26*N]:Z[S'|:PS24*PN]:RR'(PS5*qi:XD=X0<-X2%2*+:Y[" ^ "_" > ""(O)"" - "__]=S8*Y[" ^ "" "" < ""(O)"" - "__]=S5*P')NRRXD=[SPS7*'oA*S7*PN]:QR?Y[[SPS5*'oSC*'oS5*PN]:T_R[SPS7*'oS8*'oS7*PN]RRR]=QY2=TR?RRZ
li4H#+2bW%32<2b
q~:R100:H*\d:T/i){R-H*HT-/m]}6*_H)<*
"JamesBdo,"YZ+/)BA*c+Y*Y%:BS@SB)))[JW:Z____)ci+*]U*
Złoty bonus: poprzedni wynik * 0,8
Pyt
Porównaćjdm@cd)._-FQcj"
is
equal greater less
to than
"Qb
Bałwan
M@GCHgc" ___
___
_"bhzgc" (_*_)
_===_
.....
/_\\"bhzs[g" \ "@z4\(g"-.oO"@z2g" ,._"@z1g"-.oO"@z3\)g" / "@z5)s[g" < /"@z4\(gc"
:
] [
> <"b@z6\)g" > \\"@z5)++" ("gc"
:
\" \"
___"bez\)
CJam
Dużyrri:Hri:Vri:Q[q~]3/_Qa3*a+_|$W%:Pf{\a#}:AH/:B0ff*
P,,[AHAW%HBz:+_W%V\V]2/
ff{~@@f=/::|1#}0Ua4*t:R;
P0f<
V{H{BI=J=_2$=
0R{"I>! I+V<J>! J+H<"4/+4/z{~~}%:&1$*\)}%);2$-|t
}fJ}fI
[P,{_La#\1$0t1$f-}*;;]
{:TR=2/~\~V\-,>\f{\_3$=@~H\-,>{Tt}/t}~}/
:~Pf=:~
~]S*N
Bałwan
q:Q;SS"
_===_,___
....., _
/_\,___
(_*_)"',/0{Q=~(=}:G~N" \ "4G'(".oO-"_2G",._ "1G@3G')" / "5GN"< / "4G'(" : ] [> < "3/6G')"> \ "5GNS'(" : \" \"___ "3/7G')
Golfscript
Lorem IpsumLorem ipsum dolor sit amet, consectetur adipiscing elit. Cras imperdiet est ut sem commodo scelerisque. Sed ut ultricies enim. Nam eget lectus suscipit, gravida turpis a, volutpat tellus. Cras efficitur luctus neque, at semper massa condimentum at posuere.
Zegar cyfrowy
:*{32' _':$@'14'{?~!=}:&~32}%n*{:x' |':|\'1237'&$x'017'&|x'56'&}%n*{:x|\'134579'&$x'147'&|x'2'&}%
Wszystkiego najlepszego z okazji urodzin
4,{"Happy Birthday "["To You""Dear GolfScript"]@2==n}%
Sekwencja opłat
~:c[,{){.}c(*}%.c/zip{+}*]zip{~{.@\%.}do;1=},{~<},{~\10c?*\/}${'/'*}%', '*'F'c`+' = {0/1, '+\', 1/1}'
Odpowiedzi:
Rubin, (135 + 4) * 0,6 * 0,8 = 66,72
Działa to w systemie Windows i jestem zbyt zmęczony, aby go skrócić, uruchamiając na Uniksie.
Zrobiłem te rzeczy, ale nie jestem pewien, czy są dozwolone:
cjam-[version].jar
nacjam
,pyth.py
napyth
,golfscript.rb
nagolfscript
.f
zamiast pobierać dane wejściowe. (DodajIO.write(?f,gets);
do początku, aby to naprawić, a nowa długość to (153 + 4) * 0,6 * 0,8 = 75,36)źródło
Python 2, 332 * 0,6 * 0,8 = 159,36
O ile mi wiadomo, jest to zgodne z zasadami. Wymaga interpreterów Pyth, CJam i Golfscript (
pyth.py
,cjam.jar
igolfscript.rb
) w bieżącym katalogu oraz zainstalowanych Python 3, Java i Ruby. Prosty test: spróbuj uruchomić program. Jeśli to wróci0
, jesteśmy dobrzy. Jeśli nie, jest nieważny. Nazwany plik tymczasowy (np. Plik utworzony w$TMP
) jest tworzony w celu przechowywania programu, ponieważ CJam nie ma opcji skryptu.delete=False
Flaga jest konieczne, aby zapobiec przed usunięciem, gdy jest ona zamknięta (OS zadba o to dla nas) plik. Plik musi zostać zamknięty przed próbą odczytu z niego (chociaż ręczne opróżnianie pliku powinno również działać, ale jest to prostsze).stdout
istderr
zostaną przekierowani na/dev/null
aby ukryć dane wyjściowe / błędy (zauważ, że dzięki temu działa tylko w systemach * NIX).Dodatkowa zabawa: spróbuj uruchomić dany kod we wszystkich 4 językach, aby zobaczyć, co otrzymujemy:
źródło
cat
program ... może powinieneś przynajmniej spróbować przekierować / dev / null również na dane wejściowe?