Вступление:
Поскольку сейчас почти Хэллоуин, я просто думал о некоторых случайных темах на Хэллоуин. В конце концов я прочитал страницу Википедии Франкенштейна и наткнулся на следующий текст:
Существо
Частью неприятия Франкенштейном его творчества является тот факт, что он не дает ему имя, что вызывает отсутствие идентичности. Вместо этого на него ссылаются такие слова, как «негодяй», «монстр», «существо», «демон», «дьявол», «изверг» и «оно». Когда Франкенштейн разговаривает с существом в главе 10, он обращается к нему как «мерзкое насекомое», «отвратительный монстр», «злодей», «отвратительный дьявол» и «отвратительный дьявол».
Вызов:
Учитывая два целых числа (год и главу), выведите строку, основанную на следующих правилах:
- Если год меньше 1818: выведите пустую строку †
- Если год ровно 1818, а глава меньше 10: выведите случайную строку из списка
["wretch", "monster", "creature", "demon", "devil", "fiend", "it"]
- Если год ровно 1818, а глава 10 или выше: выведите случайную строку из списка
["vile insect", "abhorred monster", "fiend", "wretched devil", "abhorred devil"]
- Является ли год выше 1818 (и, таким образом, книга была опубликована), возвращение
"Frankenstein's Monster"
.
Правила вызова:
- Вы можете выбрать, выводить ли строчную, прописную или комбинацию.
- Год всегда будет в диапазоне
1500-2017
- Глава всегда будет в пределах досягаемости
1-24
(если я правильно погуглил, книга состоит из 24 глав) - † Вместо вывода пустой строки для варианта 1, вы также разрешается выход
null
,undefined
,false
,0
, или любое другое значение по своему усмотрению не являются частью других трех вариантов (пожалуйста , укажите , что вы использовали в своем ответе). - Вывод не может содержать ни начальных, ни конечных пробелов / табуляций, ни каких-либо начальных новых строк. Он может содержать один дополнительный трейлинг новой строки.
Основные правила:
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
Не позволяйте языкам кода-гольфа отговаривать вас от публикации ответов на языках, не относящихся к кодексу. Попробуйте найти как можно более короткий ответ для «любого» языка программирования. - К вашему ответу применяются стандартные правила , поэтому вы можете использовать STDIN / STDOUT, функции / метод с соответствующими параметрами, полные программы. Ваш звонок.
- Лазейки по умолчанию запрещены (особенно «Ложные случайные числа» ).
- Если возможно, добавьте ссылку с тестом для вашего кода.
- Также, пожалуйста, добавьте объяснение, если это необходимо.
Тестовые случаи:
year,chapter possible outputs:
1700,1 ""; null; undefined; false; 0; etc.
1700,12 ""; null; undefined; false; 0; etc.
1817,10 ""; null; undefined; false; 0; etc.
1818,1 "wretch"; "monster"; "creature"; "demon"; "devil"; "fiend"; "it"
1818,9 "wretch"; "monster"; "creature"; "demon"; "devil"; "fiend"; "it"
1818,10 "vile insect"; "abhorred monster"; "fiend"; "wretched devil"; "abhorred devil"
1818,11 "vile insect"; "abhorred monster"; "fiend"; "wretched devil"; "abhorred devil"
1818,18 "vile insect"; "abhorred monster"; "fiend"; "wretched devil"; "abhorred devil"
1819,1 "Frankenstein's Monster"; "frankenstein's monster"; "FRANKENSTEIN'S MONSTER"
1819,18 "Frankenstein's Monster"; "frankenstein's monster"; "FRANKENSTEIN'S MONSTER"
2017,24 "Frankenstein's Monster"; "frankenstein's monster"; "FRANKENSTEIN'S MONSTER"
<...>
предполагает наличие шариков?Python 2 ,
227220214 байтПопробуйте онлайн!
источник
'abhorred '
их в список внизу, поскольку он использовался дважды. ('wretch'
также возможно, но количество байтов остается прежним.)Perl 5 , 172 байта
Код 171 байт + 1 для
-p
.Попробуйте онлайн!
объяснение
Довольно стандартная, немного необычная вещь - это использование оператора космического корабля (
<=>
)1818
для возврата-1
,0
или1
, если входное значение$_
меньше, равно или больше, чем1818
для возврата последнего, первого или второго индекса исходных данных , Также мне нравится рыбный оператор !источник
$F=fiend
, но после тестирования он получился такой же длины, чтобы сделать это.$
сигил :($}
какое имя переменной ...$W
мне нужно было использовать${W}
его рядом с другим письмом.C # (компилятор Visual C #) ,
225209 байтПопробуйте онлайн!
-16 благодаря Кевину Круйссену
Не очень кратко, но я ожидаю, что C # займет больше места для объявления и использования любых повторяющихся строк, как это делает ответ Python, чем просто повторяет их. У включенного тестового бегуна есть
Thread.Sleep(1)
внутреннее перечисление тестовых случаев, потому что заполнение по умолчанию дляRandom()
использует текущее время и фактическую функцию, выполняющуюся достаточно быстро, чтобы в результате получить те же начальные значения при последующих запусках без задержки.В вызовах функции используется синтаксис каррирования
f(year)(chapter)
(или любое другое имя, в котором хранится функция вместо f)источник
fiend
в середину одного строкового массива, поскольку он присутствует в обоих списках. Вы можете сохранить несколько байт, заменяяnew[]{"wretch","monster","creature","demon","devil","it","fiend","vile insect","abhorred monster","wretched devil","abhorred devil"}
с"wretch,monster,creature,demon,devil,it,fiend,vile insect,abhorred monster,wretched devil,abhorred devil".Split(',')
(-16 байт)","
просто,
компенсирует дольше.Split(',')
по сравнениюnew[]{}
с более чем несколькими пунктами.Bash,
229,206,197, 179 байтовобъяснение расширений скобок / переменных
сначала расширяется до
тогда переменная m расширяется
однако следующее не работает, потому что
$w
будет сначала соединено сed
иwed
не определено и будет расширено до пустой строки.это можно сделать, добавив явные скобки arround w, но это займет больше времени
TIO
источник
wretch
иmonster
( 225 байтов ).APL (Dyalog Unicode) , 189 байтов
Попробуйте онлайн!
Чтобы проверить, просто добавьте контрольный пример к последней фигурной скобке следующим образом:
Огромное спасибо @ngn за помощь в решении проблемы пробелов.
Как это устроено:
Стоит отметить, что APL интерпретирует строки как массивы ( векторы ) символов, поэтому
'wretch' 'creature'
будет интерпретироваться в других языках как[[w,r,e,t,c,h],[c,r,e,a,t,u,r,e]]
Это вспомогательные функции:
Это основная функция, которая будет разбита на 3 части для лучшего понимания:
Часть 1:
Часть 2:
Часть 3:
источник
Java (OpenJDK 8) ,
275269255207203 байтаПопробуйте онлайн!
источник
Object
вместо печати напрямую:y->c->y<1818?0:y>1818?"Frankenstein's monster":"wretch,monster,creature,demon,devil,fiend,it,vile insect,abhorred monster,fiend,wretched devil,abhorred devil".split(",")[(int)(Math.random()*(c<9?7:5))+(c<9?0:7)]
fiend
(который присутствует в обоих списках) посередине:y->c->y<1818?0:y>1818?"Frankenstein's monster":"wretch;monster;creature;demon;devil;it;fiend;vile insect;abhorred monster;wretched devil;abhorred devil".split(";")[(int)(Math.random()*(c<10?7:5))+(c<10?0:6)]
( 207 байтов )IntFunction
s вместо того,Function<Integer>
чтобы заставить его работать.PHP,
184176 байтЗапустите с
-n
и укажите год и главу в качестве аргументов командной строки или попробуйте онлайн .Индекс и, следовательно, результат оценивают
NULL
на год <1818, что приводит к пустым результатам.источник
$argv[1]<=>1818
? Я никогда не видел этого.Javascript (ES6), 205 байт
Возвращает,
0
если год меньше 1818Показать фрагмент кода
источник
Javascript 199 байт
источник
C, 380 байт
источник
"Frankenstein's Monster"
непосредственно вместо создания переменной для него. Кроме того, откудаyear
иchapter
откуда? Я не рассматриваю это как параметры метода. Советы по игре в гольф на <все языки> и Советы по игре в гольф на Си могут быть полезны. Приятного пребывания! :)void o(int y,int c){char*b[]={"wretch","monster","creature","demon","devil","fiend","it"},*a[]={"vile insect","abhorred monster","fiend","wretched devil","abhorred devil"};printf("%s",y<1818?0:y==1818?c>9?a[rand()%6]:b[rand()%7]:"Frankenstein's Monster");}
256 байт. Попробуйте здесь! (Я удалил все ненужные пробелы, переименовал метод / переменные / параметры в одну букву; удалил некоторые ненужные круглые скобки в тройном-if; одиночныйprintf
; изменил<10
на>9
; и т. Д.) Не уверен, почемуrand()
не работает в TIO ..: SMBASIC , 288 байт
источник
05AB1E ,
114110 байтВыходы,
0
когда год ниже1818
.Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
Смотрите этот 05AB1E наконечник шахты (разделы Как пользоваться словарем? ; Как сжать строки не часть словаря? ; Как сжать большие целые числа? И Как сжать целые списки? ) , Чтобы понять , почему:
…뢼–±¹
есть"creature devil monster"
;.•ʒ¦Ë"ìËM₂G¶тá≠•
есть"demon fiend it wretch "
;.•1ÏiT¥Ƶʒ“T¡Äg… 5ÀΘO¼™Ãí?ιË%4₄‡‡λYιi¾н•
есть"abhorred devilabhorred monsterfiendvile insectwretched devil"
;•Jtm•
есть1249548
и•Jtm•17в
есть[14,16,5,11,14]
;'ì³
есть"liechtenstein "
;’¡¬ÿÿ±¹’
есть"frankÿÿmonster"
;Ž7X
есть1818
.источник
JavaScript, 194 B
источник