Недавно штат Орегон оштрафовал инженера-электрика на изучение светофоров на 500 долларов за то, что он называл себя инженером.
Учитывая 2-буквенную строку в качестве входных данных, представляющих штат США, выведите:
I am not an engineer
если штат Орегон (OR
)I am an engineer
если штат любой другой штат СШАWhat is an engineer?
учитывая любой другой вклад
Выход может не содержать какой - либо ведущий пробела, но может содержать стольких завершающих пробела , как вы хотите.
Вы можете предположить, что ввод всегда будет состоять из 2 заглавных букв.
Вот список всех 50 аббревиатур штатов США:
AL, AK, AZ, AR, CA, CO, CT, DE, FL, GA, HI, ID, IL, IN, IA, KS, KY, LA, ME,
MD, MA, MI, MN, MS, MO, MT, NE, NV, NH, NJ, NM, NY, NC, ND, OH, OK, OR, PA,
RI, SC, SD, TN, TX, UT, VT, VA, WA, WV, WI, WY
счет
Это код-гольф , поэтому выигрывает меньшее количество байтов на каждом языке !
code-golf
string
kolmogorov-complexity
Skidsdev
источник
источник
Ответы:
C #,
311 309240237222195184183 байтаПопробуйте онлайн!
Сохраненные 2 байта, добавив пробел перед
an
кb
-69 (huehue)-72 байта благодаря TheLethalCoder-15 байт благодаря гениальной строке состояний TotallyHuman
-38 байт, потому что больше сжатие строк
Ungolfed:
источник
..."+b
вместо интерполированных строк, заменитьif..else if...else
наreturn s==
«ИЛИ»? ....: System.Arr ... `то есть использовать троичный. Используйтеu.Contains
вместоArray.Exists
. Я думаю, что если вы используете пробелы вместо запятых, то.Split()
без параметров будет работать.u
- это массив, а не строка. Тем не менее, вы можете сохранить байты, задавu
строку и используя.Contains
ее.s=>{var b=" an engineer";return s=="OR"?"I am not"+b:"AL AK AZ AR CA CO CT DE FL GA HI ID IL IN IA KS KY LA ME MD MA MI MN MS MO MT NE NV NH NJ NM NY NC ND OH OK PA RI SC SD TN TX UT VT VA WA WV WI WY".Contains(s)?"I am"+b:$"What is{b}?";};
. Думаю, я удалил все соответствующие пробелы. (Не проверено)JavaScript (ES6), 182 байта
демонстрация
Показать фрагмент кода
источник
LA
: /C
215208190 байтов-7 благодаря классному парню
Используется "родовая строка" @ totallyhuman.
Как это работает:
"string"z
автоматически объединяется"string"
сz
(" an engineer"
). Да, С делает это.!strcmp(s,"OR")
сравнивает строку с "ИЛИ"?"I am not"z
возвращает «Я не инженер», если верно. Иначе...:strstr(...,s)
проверяет, содержит ли строка гениальности @ totallyhuman предоставленную строку.?"I am"z
возвращает «Я инженер», если так, и ...:"What is"z"?")
возвращает "Что такое инженер?" иначе.Попробуйте онлайн!
источник
#define z " an engineer" f(char*s){!strcmp(s,"OR")?puts("I am not"z):strstr("MINCALA MSCTNMNVAKY WAZ PAR FL GA NHID COKSD ME MDE MA MTX NE NJ NY ND MOH RIA UT WVT WIL WY",s)?puts("I am"z):puts("What is"z);}
Python 2 ,
228168 байтПопробуйте онлайн!
источник
Python 2 ,
192186182178176 байтВозможно, может сжать строку состояния больше.
Попробуйте онлайн!
источник
u
в,if s in u
вы можете заметить использовать его напрямую, вместо того, чтобы объявить это?VALA WAZ NCA COH CTX SDE FL GA HID WIL MIN IAKSC KY ME MD MA MNMS MOK MTNE NH NJ NY ND PARI UT NVT WV WY
- самое маленькое, что я могу сделать'MINCALA MSCTNMNVAKY WAZ PAR FL GA NHID COKSD ME MDE MA MTX NE NJ NY ND MOH ORIA UT WVT WIL WY'
Java (JDK 10) , 184 байта
Попробуйте онлайн!
Я прошу прощения за повторное использование сжатой строки: я не мог найти ничего лучше ... :(
источник
05AB1E ,
104103101 байтПопробуйте онлайн!
Старая 104-байтовая версия на случай, если ее будет легче улучшить.
Не устраивает ни компрессия, ни особый случай для
?
.источник
(A=1,C=3 ...)
. 103-байтовая версия делает то же самое для некоторых состояний и объединяет некоторые состояния, заканчивающиеся той же буквой, с которой начинается новое состояние. Я уверен, что это все еще можно улучшить, и я добавлю лучшее объяснение, когда я буду играть в гольф больше..•~Zµ∞/'—¶[@øl•Œ2ù
вы использовали для некоторых состояний, а не просто сжимали все состояния и выполняли2ô
. И хороший подход в целом. (Рад, что я видел твой ответ, прежде чем пытаться что-то сам, потому что он определенно не был бы таким коротким ..)F # , 222 байта
Попробуйте онлайн!
Expanded:
Учитывая двухбуквенное состояние v, переданное функции f , создайте кортеж (a, b), представляющий голову и хвост предложения «инженер».
Не стесняйтесь свободно использовать «сжатую строку состояния»; это на целый байт короче, чем у MINCALA ...
источник
R ,
10996 байтПопробуйте онлайн!
13 байтов благодаря J. Doe - благодаря использованию регулярных выражений и индексации.
источник
sub
гораздо лучше, спасибо!Japt ,
136135131129128 байтМожно сэкономить больше, экспериментируя с порядком сокращений штатов - я вернусь к этому через некоторое время.
Попробуйте онлайн
объяснение
ò
метод.ø
метод, чтобы увидеть, содержит ли массив массивUv
входных данных, преобразованный в нижний регистр."I am "
¥
(равна)"OR"
добавить"not "
или пустую строковую переменнуюP
."an engineer"
."What is an engineer?"
.источник
Python 3 ,
180179178 байтПопробуйте онлайн!
источник
CJam , 143 байта
Попробуйте онлайн! или как набор тестов
объяснение
Так как Oregon (
OR
) находится в начале строки, нахождение знака индекса входного в нем будет -1, если не найден, 0, еслиOR
, 1, если любое другое состояние. Какая строка для печати может быть решена этим.источник
PHP, 188 байт
Попробуйте онлайн!
источник
in_array(...)
кstrpos(_AKALARAZCACOCTDEFLGAHIIAIDILINKSKYLAMAMDMEMIMNMOMSMTNCNDNENHNJNMNVNYOHOKPARISCSDTNTXUTVAVTWAWIWVWY,$argn)&1
._NMMNINTNRIHIMIWISCNCCTMTUTVTWVNVFLILCAALGAIAMAPAVAWACOLAMOAKARKSMSNHOHOKORAZDEIDKYMEMDNENJNYNDSDTXWY
работыC #, 178 байт
Запустить в C # Pad
Гольф на основе решения Mayube ; здесь новость, поэтому у меня недостаточно представителей, чтобы комментировать.
источник
Haskell ,
220214210209 байтПопробуйте онлайн!
источник
1<2
еще корочеOR
в длинную строку во втором определении яJavascript 204
источник
s=>(!(h=/(A[LKZR]|C[AOT]|DE|FL|[GPLV]A|[HR]I|I[DLNA]|K[SY]|M[EDAINSOT]|N[EVHJMYCD]|O[HKR]|S[CD]|T[NX]|[VU]T|W[AVIY])/.test(s))?"What is":"I am"+(s=='OR'?" not":""))+" an engineer"+['?'[+h]]
AWK, 189 байт
Если входные данные соответствуют регулярному выражению, содержащему все сокращения состояний, выведите «Я инженер» со словом «не», вставленным в середине, если штат - Орегон, затем выйдите.
Если ввод не соответствует регулярному выражению, он не должен быть аббревиатурой штата США.
источник
Python 3, 238 байт
объяснение
Методы сжатия не используются.
источник
Java, 173 байта
источник
s->
в начало.Stax , 100 байт
Этот язык ставит перед собой задачу. Но автор (я) этого не видел до сих пор.
Запустите и отладьте его
источник
JavaScript ES6,
175171 байтПрисоединился много хорошего
Или 152 байта в кодировке ISO
Генератор:
источник
C (gcc) , 0 + 176 байт
Попробуйте онлайн!
чистый перевод
источник
Powershell, 175 байт
Тестовый скрипт:
Выход:
источник
Python 3 ,
236182181 байтПопробуйте онлайн!
TIO содержит контрольные примеры для всех штатов.
-54 байта благодаря сжатию строки
источник
MINCALA MSCTNMNVAKY WAZ PAR FL GA NHID COKSD ME MDE MA MTX NE NJ NY ND MOH ORIA UT WVT WIL WY
лучше сжатиеq / kdb +, 174 байта
Решение:
Объяснение:
Заметки:
Использовал «сжатую» строку из других ответов, изо всех сил пытаясь найти способ вывести ее в одну строку, чтобы избежать присвоения
a
переменной (но все же добавить,?
когда вход не является состоянием.источник
Сетчатка , 175 байт
Попробуйте онлайн! Надеюсь, я присвоил лучший государственный список. Объяснение:
Начните наращивать результат. Кроме того, вставьте список состояний для использования на следующем этапе.
Если это один из 49 штатов, удалите штат и список.
Если это штат Орегон, замените штат на
not
и удалите список.Если это что-то еще, замените все другим выходом.
Добавьте это слово в последнюю очередь, чтобы избежать повторения.
источник
Кристалл,
232 207205 байтПопробуйте онлайн . (немного изменен из-за проблемы с ARGV)
источник
Фактор, 135 байт
Более читабелен и назван:
[ x ] dip
иx swap
эквивалентны по эффекту стеки , но первый короче только тогда , когда вложенные:[ [ [ x ] dip ] dip ] dip
.источник
Python 2,
213211194 байтаПопробуйте онлайн
Вещи, которые я работаю над сокращением:
(i=="OR")
or x[0].lower()+x[1]in c
Обновить:
s=not r
наs=r^1
источник
Рубин, 164 байта
Используется кодировка длины серии, поэтому длина магической строки составляет 50 байтов, по одному на состояние. Чтобы построить это, сначала необходимо было поместить коды состояния в алфавитном порядке кода штата, а не названия штата. К сожалению, для преобразования представления base36
j
из строчного кода состояния в верхний регистр требуется 7 байтов .Неуправляемый в тестовой программе
источник