Qualche tempo fa, è stata posta la seguente domanda: GolfScript, CJam o Pyth? Basandomi solo sul titolo, ho pensato che sarebbe stata una bella sfida, ma sfortunatamente si è rivelata una domanda che richiede suggerimenti. Ecco la sfida che volevo leggere:
Chi ha detto che le lingue del golf non sono state utilizzate nel mondo reale? Come tutti sanno, il rapporto di bug per riga di codice è lo stesso indipendentemente dal linguaggio di programmazione utilizzato, quindi esiste una chiara opportunità per ridurre i costi di debug e manutenzione con tali linguaggi. La tua azienda ha finalmente visto la luce e ha deciso di utilizzare Golfscript, CJam e Pyth per sviluppare i suoi prodotti.
Sfortunatamente, dopo un paio di mesi, i tuoi dischi rigidi sono ingombri di frammenti di codice e non sai nemmeno quali sono scritti in quali lingue (sospetti addirittura che alcuni dei tuoi programmatori utilizzino il Perl).
È necessario scrivere uno strumento per rilevare quale di CJam, Golfscript o Pyth è la lingua in cui è scritto un programma. La situazione è critica, puoi usare qualsiasi lingua tu voglia, ma tienila breve (l'archiviazione dei dati è costosa: più byte utilizziamo, più costa).
Generale
- Vincita del codice più breve
- Scappatoie standard, ecc.
- Non usare un interprete online
- È possibile scrivere una funzione o un programma
- Puoi usare eval per rilevare la tua lingua
Ingresso
- L'input viene preso dal flusso di input standard o come stringa
- L'input contiene solo caratteri e avanzamenti di riga ASCII stampabili
- La dimensione dell'input è lunga fino a 256 byte
Produzione
- L'output viene stampato sul flusso di output o restituito come una sequenza di stringhe / simboli
Se l'input è senza dubbio un programma X valido , stampa o ritorna X , X ∈ {CJam, Pyth, Golfscript}
Nota : "senza dubbio" non significa che ti è permesso rispondere con un analizzatore stupido che non riesce a rilevare in modo coerente qualsiasi lingua. Per Pyth , mi aspetto che vengano riconosciuti i programmi semplici (ma nessun hardcoding). Lo stesso vale per CJam ( cheat sheet , esempi ) e Golfscript ( esempi ). I collegamenti precedenti puntano alle specifiche di ogni lingua. Se usi un approccio fuzzy / bayesiano, "senza dubbio" significa con un alto livello di confidenza (ad esempio ottieni un punteggio del 99% con la tua classificazione). Vedi sotto per la suite di test attuale.
Se l'input è valido in più lingue, ogni lingua rilevata deve essere stampata / restituita. Quando viene stampato, deve esserci un separatore tra più output (ad es. Spazio, newline, virgola ...).
- L'ordine in cui vengono provate le lingue non ha importanza
- Non mi interessa il caso (CJam, Cjam, CJAM, SPAM) [1]
- Se non viene rilevata nessuna delle lingue sopra , stampa "
Probably Perl
" . Grazie a questo commento di mbomb007 , nel caso precedente puoi anche generare "Seriously
" per una penalità di 4 byte (la differenza tra entrambe le stringhe).
[1] Per essere chiari, SPAM non è valido
Esempi
-
"Crime predicted: -- Calling: 1--555- "30*{_5<{iAa*:mr}&}/
Output (esempio di più valori di ritorno)
["Golfscript", "Cjam"]
Ingresso
3
Output (esempio su output standard)
golfscript cjam pyth
Ingresso
if {} aazd
Produzione
Probably Perl
Nell'ultimo caso, il programma di input produce un errore con tutti e tre gli interpreti online.
Punteggio, criterio vincente
Vincita del codice più breve. Aggiungi 4 byte se si visualizza "Seriamente". Quindi, applica i bonus.
Test falliti
Di seguito sono riportati frammenti che non devono essere riconosciuti come nessuna delle tre lingue sopra.
One-liner (ovvero una voce per riga)$^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";
}
Pesce
#ifndef __linux
#include "x.h"
#define X/*\
a=1 set -e
+++++++++++++++++++++_+++++++++++++....Hello World!?:Q:
#endif
echo "Hello, World!"
int m(){}
Suite di test di base
Quelli sono test che devono superare. I belows sono a linea singola per ogni lingua in cui il tuo programma deve rilevare la lingua in cui viene scritto (non ho verificato quali di questi sono poliglotti).
Pyth
*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 argento: conteggio byte * 0.6
Tutti i test precedenti devono essere superati, nonché i seguenti one-liner. Tutti questi frammenti sono tratti dalle risposte reali di CodeGolf.
Pyth
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*
Bonus oro: punteggio precedente * 0,8
Pyth
Confrontarejdm@cd)._-FQcj"
is
equal greater less
to than
"Qb
Pupazzo di neve
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
Granderri: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
Pupazzo di neve
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.
Orologio digitale
:*{32' _':$@'14'{?~!=}:&~32}%n*{:x' |':|\'1237'&$x'017'&|x'56'&}%n*{:x|\'134579'&$x'147'&|x'2'&}%
Buon compleanno
4,{"Happy Birthday "["To You""Dear GolfScript"]@2==n}%
Sequenza Farey
~:c[,{){.}c(*}%.c/zip{+}*]zip{~{.@\%.}do;1=},{~<},{~\10c?*\/}${'/'*}%', '*'F'c`+' = {0/1, '+\', 1/1}'