Некоторое время назад был задан следующий вопрос: GolfScript, CJam или Pyth? Основываясь только на названии, я подумал, что это будет очень хороший вызов, но, к сожалению, это был вопрос с советами. Вот вызов, который я хотел прочитать:
Кто сказал, что языки игры в гольф не использовались в реальном мире? Как всем известно, соотношение ошибок на строку кода независимо от используемого языка программирования одинаково, поэтому существует явная возможность снизить затраты на отладку и обслуживание с этими языками. Ваша компания наконец увидела свет и решила использовать Golfscript, CJam и Pyth для разработки своих продуктов.
К сожалению, через пару месяцев ваши жесткие диски забиты фрагментами кода, и вы даже не знаете, какие из них написаны на каких языках (вы даже подозреваете, что некоторые из ваших программистов используют Perl).
Вы должны написать инструмент, чтобы определить, какой из CJam, Golfscript или Pyth является языком, на котором написана программа. Ситуация критическая, вы можете использовать любой язык, который хотите, но, пожалуйста, оставьте его коротким (хранение данных обходится дороже: чем больше байтов мы используем, тем больше он стоит).
Генеральная
- Самый короткий код выигрыша
- Стандартные лазейки и др.
- Не используйте онлайн переводчик
- Вы можете написать функцию или программу
- Вы можете использовать eval для определения вашего собственного языка
вход
- Ваш ввод берется из стандартного потока ввода или в виде строки
- Вход содержит только печатные символы ASCII и перевод строки
- Размер входного файла - до 256 байт
Выход
- Вывод выводится в выходной поток или возвращается как последовательность строк / символов
Если входные данные, без сомнения, являются действительной программой X , выведите или верните X , X ∈ {CJam, Pyth, Golfscript}
Примечание : «без сомнения» не означает, что вам разрешено отвечать с помощью тупого анализатора, который постоянно не может обнаружить какой-либо язык. Для Pyth я ожидаю, что простые программы будут распознаваться (но без жесткого кодирования). То же самое касается CJam ( шпаргалка , примеры ) и Golfscript ( примеры ). Предыдущие ссылки указывают на спецификации каждого языка. Если вы используете нечеткий / байесовский подход, «без сомнения» означает с высокой степенью достоверности (например, по вашей классификации вы набрали 99%). Ниже приведен актуальный набор тестов.
Если ввод действителен на нескольких языках, каждый обнаруженный язык должен быть напечатан / возвращен. При печати должен быть разделитель между несколькими выходами (например, пробел, символ новой строки, запятая ...).
- Порядок использования языков не имеет значения
- Меня не волнует дело (CJam, CJAM, CJAM, SPAM) [1]
- Если ни один из вышеуказанных языков не обнаружен, выведите «
Probably Perl
» . Благодаря этому комментарию от mbomb007 , в вышеупомянутом случае вы также можете вывести "Seriously
" для штрафа в 4 байта (разница между обеими строками).
[1] Просто чтобы прояснить, СПАМ недействителен
Примеры
-
"Crime predicted: -- Calling: 1--555- "30*{_5<{iAa*:mr}&}/
Вывод (пример нескольких возвращаемых значений)
["Golfscript", "Cjam"]
вход
3
Вывод (пример на стандартный вывод)
golfscript cjam pyth
вход
if {} aazd
Выход
Probably Perl
В последнем случае программа ввода выдает ошибку С Всеми тремя онлайн - переводчиками.
Подсчет очков, критерий победы
Самый короткий код выигрыша. Добавьте 4 байта, если вы выводите «Серьезно». Затем применяйте бонусы.
Неудачные тесты
Ниже приведены фрагменты, которые не должны распознаваться как ни один из трех языков выше.
Одна строка (то есть одна запись в строке)$^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";
}
Рыбы
#ifndef __linux
#include "x.h"
#define X/*\
a=1 set -e
+++++++++++++++++++++_+++++++++++++....Hello World!?:Q:
#endif
echo "Hello, World!"
int m(){}
Базовый набор тестов
Это тесты, которые должны пройти. Ниже приведены однострочники для каждого языка, где ваша программа должна определить язык, на котором она написана (я не проверял, какой из них является полиглотом).
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=}{;}?}/
Серебряный бонус: количество байт * 0,6
Все предыдущие тесты должны пройти, а также следующие однострочные. Все эти фрагменты взяты из реальных ответов 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*
Золотой бонус: предыдущий счет * 0,8
Pyth
сравнитьjdm@cd)._-FQcj"
is
equal greater less
to than
"Qb
Снеговик
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
большойrri: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
Снеговик
q:Q;SS"
_===_,___
....., _
/_\,___
(_*_)"',/0{Q=~(=}:G~N" \ "4G'(".oO-"_2G",._ "1G@3G')" / "5GN"< / "4G'(" : ] [> < "3/6G')"> \ "5GNS'(" : \" \"___ "3/7G')
Golfscript
Лорем ИпсумLorem 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.
Цифровые часы
:*{32' _':$@'14'{?~!=}:&~32}%n*{:x' |':|\'1237'&$x'017'&|x'56'&}%n*{:x|\'134579'&$x'147'&|x'2'&}%
С днем рождения
4,{"Happy Birthday "["To You""Dear GolfScript"]@2==n}%
Последовательность фейри
~:c[,{){.}c(*}%.c/zip{+}*]zip{~{.@\%.}do;1=},{~<},{~\10c?*\/}${'/'*}%', '*'F'c`+' = {0/1, '+\', 1/1}'
Ответы:
Рубин (135 + 4) * 0,6 * 0,8 = 66,72
Это работает на Windows, и я слишком устал, чтобы сократить его, работая на Unix.
Я сделал эти вещи, но я не уверен, что им разрешено:
cjam-[version].jar
вcjam
,pyth.py
чтобыpyth
,golfscript.rb
чтобыgolfscript
.f
вместо того, чтобы получать ввод. (ДобавьтеIO.write(?f,gets);
в начало, чтобы исправить это, и новая длина будет (153 + 4) * 0,6 * 0,8 = 75,36)источник
Python 2, 332 * 0,6 * 0,8 = 159,36
Насколько я знаю, это в рамках правил. Требуется переводчики Pyth, CJam и Golfscript (
pyth.py
,cjam.jar
иgolfscript.rb
) в текущем каталоге, и Python 3, установлен Java и Ruby. Простой тест: попробуйте запустить программу. Если он вернется0
, у нас все хорошо. Если нет, это недействительно. Именованный временный файл (например, файл, созданный в$TMP
) создается для хранения программы, поскольку в CJam нет опции сценария.delete=False
Флаг необходимо , чтобы предотвратить файл от удаления , когда он закрыт (операционная система будет заботиться о нем для нас). Файл должен быть закрыт перед попыткой чтения из него (хотя очистка файла вручную также должна работать, но это проще).stdout
иstderr
перенаправлены на/dev/null
для подавления вывода / ошибок (обратите внимание, что это заставляет его работать только на * NIX системах).Дополнительное удовольствие: попробуйте запустить данный код на всех 4 языках, чтобы увидеть, что мы получаем:
источник
cat
программы ... может быть, вам следует хотя бы попытаться перенаправить / dev / null также на вход?