Beberapa waktu lalu, pertanyaan berikut diajukan: GolfScript, CJam, atau Pyth? Berdasarkan judul saja, saya pikir itu akan menjadi tantangan yang sangat bagus, tetapi sayangnya, itu ternyata menjadi pertanyaan yang menanyakan tip. Inilah tantangan yang ingin saya baca:
Siapa bilang bahasa golf tidak digunakan di Dunia Nyata? Seperti yang diketahui semua orang, rasio bug per baris kode sama secara independen dengan bahasa pemrograman yang digunakan, sehingga ada peluang yang jelas untuk mengurangi biaya debugging dan pemeliharaan dengan bahasa-bahasa tersebut. Perusahaan Anda akhirnya melihat cahaya dan memutuskan untuk menggunakan Golfscript, CJam dan Pyth untuk mengembangkan produknya.
Sayangnya, setelah beberapa bulan, hard drive Anda penuh dengan potongan kode dan Anda bahkan tidak tahu mana yang ditulis dalam bahasa apa (Anda bahkan mencurigai beberapa programmer Anda menggunakan Perl).
Anda harus menulis alat untuk mendeteksi CJam, Golfscript atau Pyth mana yang merupakan bahasa tempat program ditulis. Situasinya kritis, Anda dapat menggunakan bahasa apa pun yang Anda inginkan, tetapi harap tetap singkat (penyimpanan data mahal: semakin banyak byte yang kami gunakan, semakin banyak biayanya).
Umum
- Kemenangan kode terpendek
- Celah standar, dll.
- Jangan gunakan penerjemah online
- Anda dapat menulis fungsi atau program
- Anda dapat menggunakan eval untuk mendeteksi bahasa Anda sendiri
Memasukkan
- Input Anda diambil dari aliran input standar atau sebagai string
- Input hanya berisi karakter yang dapat dicetak ASCII dan umpan garis
- Ukuran input hingga 256 byte
Keluaran
- Output dicetak ke aliran output atau dikembalikan sebagai urutan string / simbol
Jika input adalah program X yang valid , cetak atau kembalikan X , X ∈ {CJam, Pyth, Golfscript}
Catatan : "tanpa keraguan" tidak berarti bahwa Anda diizinkan untuk menjawab dengan penganalisa bodoh yang secara konsisten gagal mendeteksi bahasa apa pun. Untuk Pyth , saya berharap Program Sederhana untuk dikenali (tetapi tidak ada hardcoding). Hal yang sama berlaku untuk CJam ( lembar contekan , contoh ) dan Golfscript ( contoh ). Tautan sebelumnya menunjuk ke spesifikasi masing-masing bahasa. Jika Anda menggunakan pendekatan fuzzy / bayesian, "tanpa keraguan" berarti dengan tingkat kepercayaan yang tinggi (Anda skor 99% dengan klasifikasi Anda, misalnya). Lihat di bawah untuk suite tes yang sebenarnya.
Jika input valid dalam berbagai bahasa, setiap bahasa yang terdeteksi harus dicetak / dikembalikan. Saat dicetak, harus ada pemisah antara beberapa output (mis. Spasi, baris baru, koma ...).
- Urutan di mana bahasa dicoba tidak masalah
- Saya tidak peduli dengan case (CJam, cjam, CJAM, SPAM) [1]
- Jika tidak ada bahasa di atas yang terdeteksi, cetak "
Probably Perl
" . Berkat komentar ini dari mbomb007 , dalam kasus di atas Anda juga dapat menampilkan "Seriously
" penalti dari 4 byte (perbedaan antara kedua string).
[1] Untuk lebih jelasnya, SPAM tidak valid
Contohnya
-
"Crime predicted: -- Calling: 1--555- "30*{_5<{iAa*:mr}&}/
Output (contoh beberapa nilai pengembalian)
["Golfscript", "Cjam"]
Memasukkan
3
Output (contoh pada output standar)
golfscript cjam pyth
Memasukkan
if {} aazd
Keluaran
Probably Perl
Dalam kasus terakhir, program input menghasilkan kesalahan dengan All Three Interpreter online.
Penilaian, kriteria kemenangan
Kemenangan kode terpendek. Tambahkan 4 byte jika Anda menampilkan "Serius". Lalu, terapkan bonus.
Tes gagal
Berikut ini adalah cuplikan yang tidak boleh dikenali sebagai salah satu dari tiga bahasa di atas.
Satu baris (yaitu satu entri per baris)$^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";
}
Ikan
#ifndef __linux
#include "x.h"
#define X/*\
a=1 set -e
+++++++++++++++++++++_+++++++++++++....Hello World!?:Q:
#endif
echo "Hello, World!"
int m(){}
Paket tes dasar
Itu adalah tes yang harus lulus. Belows adalah satu-baris untuk setiap bahasa di mana program Anda harus mendeteksi bahasa yang sedang ditulisnya (saya tidak memeriksa yang mana dari polyglot).
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
Naskah Golf
;'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 perak: byte-count * 0,6
Semua tes sebelumnya harus lulus, begitu juga dengan satu-liner berikut. Semua cuplikan itu diambil dari jawaban CodeGolf yang sebenarnya.
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
Naskah Golf
);:|;{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 emas: skor sebelumnya * 0.8
Pyth
Membandingkanjdm@cd)._-FQcj"
is
equal greater less
to than
"Qb
Manusia salju
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
Besarrri: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
Manusia salju
q:Q;SS"
_===_,___
....., _
/_\,___
(_*_)"',/0{Q=~(=}:G~N" \ "4G'(".oO-"_2G",._ "1G@3G')" / "5GN"< / "4G'(" : ] [> < "3/6G')"> \ "5GNS'(" : \" \"___ "3/7G')
Naskah Golf
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.
Jam digital
:*{32' _':$@'14'{?~!=}:&~32}%n*{:x' |':|\'1237'&$x'017'&|x'56'&}%n*{:x|\'134579'&$x'147'&|x'2'&}%
Selamat ulang tahun
4,{"Happy Birthday "["To You""Dear GolfScript"]@2==n}%
Urutan Farey
~:c[,{){.}c(*}%.c/zip{+}*]zip{~{.@\%.}do;1=},{~<},{~\10c?*\/}${'/'*}%', '*'F'c`+' = {0/1, '+\', 1/1}'
Jawaban:
Ruby, (135 + 4) * 0,6 * 0,8 = 66,72
Ini berjalan di Windows dan saya terlalu lelah untuk mempersingkatnya dengan berjalan di Unix.
Saya melakukan hal-hal ini tetapi saya tidak yakin apakah diperbolehkan:
cjam-[version].jar
menjadicjam
,pyth.py
untukpyth
,golfscript.rb
menjadigolfscript
.f
alih-alih mendapatkan input. (TambahkanIO.write(?f,gets);
ke awal untuk memperbaikinya, dan panjang baru adalah (153 + 4) * 0.6 * 0.8 = 75.36)sumber
Python 2, 332 * 0,6 * 0,8 = 159,36
Sejauh yang saya ketahui, ini ada dalam aturan. Membutuhkan Pyth, CJam, dan Golfscript juru (
pyth.py
,cjam.jar
, dangolfscript.rb
) di direktori saat ini, dan Python 3, Java, dan Ruby diinstal. Tes sederhana: coba jalankan program. Jika kembali0
, kita baik-baik saja. Jika tidak, itu tidak valid. File sementara bernama (misalnya file dibuat$TMP
) dibuat untuk menampung program, karena CJam tidak memiliki opsi skrip. Thedelete=False
bendera diperlukan untuk mencegah file dari yang dihapus ketika ditutup (OS akan mengurus itu bagi kita). File harus ditutup sebelum mencoba untuk membacanya (meskipun secara manual pembilasan file juga harus berfungsi, tetapi ini lebih sederhana).stdout
danstderr
dialihkan ke/dev/null
untuk menekan output / kesalahan (perhatikan bahwa ini membuatnya hanya berfungsi pada sistem * NIX).Kesenangan ekstra: coba jalankan kode yang diberikan dalam semua 4 bahasa, untuk melihat apa yang kita dapatkan:
sumber
cat
program ... mungkin Anda setidaknya harus mencoba mengarahkan / dev / null juga ke input?