Деякий час тому було задано таке питання: 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!')
Брейнфук
>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
++++++++++++++++++++++++++++++++++++++++++++++++.
-----------------.
++++++++.
+++++.
--------.
+++++++++++++++.
------------------.
++++++++.
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(){}
Основний тестовий набір
Це тести, які треба пройти. Нижче наведено одне вкладиш для кожної мови, де ваша програма повинна виявити мову, на якій вона написана (я не перевіряв, який із них є поліглотом).
Піт
*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
Гольфскрипт
;'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.
Піт
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
Гольфскрипт
);:|;{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
Піт
Порівняйте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')
Гольфскрипт
Лорем Іпсум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}'