Cramming The Gramming - Двенадцать заданий


42

Ваш начальник только что прислал вам список из 12 задач программирования, которые ему нужно выполнить как можно скорее. Задачи достаточно просты, но ваш начальник, будучи молодым программным магнатом, занятым социальными сетями, настаивает на том, чтобы ваши решения могли поместиться в одном твиттере Twitter .

Это означает, что у вас есть всего 140 байтов кода для решения всех задач, в среднем 11,67 байта на задачу. (Да, Твиттер считает символы, но ваш босс специально сказал байтов.)

Вы понимаете, что нет способа решить все 12 задач в 140 байтах, но вы подозреваете, что ваш босс не будет на самом деле тестировать все ваши решения. Итак, вы приступаете к решению как можно большего количества задач, полностью пропуская некоторые из них. Ваше мышление заключается в том, что не имеет значения, какое подмножество задач вы выполняете, важно лишь то, что подмножество максимально велико .

Сколько заданий вы можете выполнить?

Вызов

Напишите до 12 различных программ, каждая из которых точно решает одну из 12 задач, перечисленных ниже. Суммарная сумма длин этих программ не может превышать 140 байт.

В качестве альтернативы вы можете написать одну программу длиной не более 140 байт, которая принимает целое число от 1 до 12 и (в идеале) переходит к решению соответствующей задачи, принимая больше входных данных по мере необходимости. Не все задачи должны работать, но только те, которые действительно учитываются в вашем счете. Задачи, которые не работают, могут ошибаться или делать что-либо еще.

В любом случае «программа» может фактически быть функцией, которая принимает входные данные в качестве аргументов или запрашивает их и печатает или возвращает выходные данные. Так, например, вы можете написать 140-байтовую функцию, которая выглядит как f(taskNumber, taskInput), или вы можете написать отдельные фрагменты кода для каждой задачи, некоторые как функции, а некоторые как полноценные программы.

Другие детали:

  • Весь код должен быть написан на одном языке.

  • Как обычно, входные данные должны поступать из стандартного ввода, командной строки, аргумента функции или из того, что обычно для вашего языка. Вывод выводится в stdout или ближайшую альтернативу вашего языка или возвращается в соответствующем типе.

  • Разумное количество входного форматирования хорошо; например, кавычки вокруг строк или \nвместо фактических новых строк.

  • Вывод должен быть именно тем, что требуется, без постороннего форматирования или пробелов. Исключением является необязательный одиночный трейлинг-перевод строки.

  • Код, который выполняется только в среде REPL , не представляет собой программу или функцию.

  • Вы не можете писать несколько программ, которые решают несколько задач. Это либо одна программа, которая (в идеале) решает все задачи, либо (в идеале) 12 программ, каждая из которых решает одну задачу.

  • Публикация решения задачи, которое вы не написали или только слегка изменили, не допускается без указания авторства оригинала и, в идеале, получения разрешения. Если ваш ответ в первую очередь состоит из кратчайших решений из всех других ответов, то это должна быть вики сообщества.

счет

Представление, которое выполняет большинство задач, является победителем. Если два представления связаны, побеждает тот с наименьшим количеством байтов. Если количество байтов связано, выигрывает более ранняя отправка. Сообщество вики ответы не могут выиграть.

Обязательно сообщите нам, какие задачи вы решили, а не сколько!

Гандикап для игроков в гольф:

Вероятно, что в этой задаче будут доминировать языки игры в гольф . Многие языки могут иметь проблемы с решением даже одной или двух задач в пределах 140 байт. Поэтому вы можете отправить неконкурентный ответ, где ограничение составляет 3 твита, то есть 420 байтов. Все остальные правила остаются прежними.

Задачи

Задача 1 - Могут ли три числа образовывать треугольник?

Возьмите три положительных целых числа и выведите истинное / ложное значение, указывающее, могут ли три линии с такой длиной сформировать треугольник . Вы не можете предполагать, что числа идут в каком-то определенном порядке.

Правдивые примеры (по одному на строку):

20 82 63
1 1 1
2 3 4
1 2 2

Ложные примеры:

6 4 10
171 5 4
1 1 2
1 2 3

Задача 2 - Ближайший к миллиону

Задав строку из ровно 7 десятичных цифр (0-9), переставьте их так, чтобы получить число, максимально приближенное к одному миллиону. То есть abs(1000000 - rearrangedNumber)должны быть сведены к минимуму.

Выведите или верните полученное число в виде целого числа, а не строки (поэтому не должно быть начальных нулей, если это не норма для вашего языка).

Например, ввод 9034318должен привести 984331(а не 1033489).

2893984должен стать 2348899.

0001000должен стать 1000000.

0000020должен стать 200000.


Задача 3 - Простой симулятор клавиатуры

Возьмите строку из строчных букв (az), пробелов и угловых скобок <>. Читайте слева направо, эта строка представляет клавиши, которые были нажаты на стандартной клавиатуре, когда был открыт изначально пустой текстовый редактор. Буквы и пробел соответствуют их обычным клавишам, но <соответствуют клавише со стрелкой влево и клавише >со стрелкой вправо, обе из которых перемещают курсор при нажатии.

<перемещает курсор на один символ влево или ничего не делает, если курсор находится в начале строки.
>перемещает курсор на один символ вправо или ничего не делает, если курсор находится в конце строки.

Выведите строку, которая будет в текстовом редакторе после нажатия всех клавиш во входной строке. Вывод управляющих кодов для перемещения курсора не допускается.

На входе всегда будет хотя бы один символ без стрелки.

Например, вход ui<<q>>ck <<<<<<the<<<<>>> >>>>>>>>brown x<o<fдолжен дать the quick brown fox.

op<<l>>t<<<lam>>>>>>imi<<<><>>>zer<<<<<<<<<<<<<<<<<<>>><>mдолжен дать llammoptimizer.

e< <c<b<aдолжен дать abc e.

<<<>><><<><toast>><<>><><<>><должен дать toast.


Задача 4 - ПЯТЫЕ Письма

Во многих шрифтах, 6 из заглавных букв английского алфавита полностью состоят из горизонтальных и вертикальных линий: E, F, H, I, L, и T. Мы назовем это ПЯТЫМИ буквами.

Возьмите строку из заглавных букв (AZ) и сосчитайте количество строк в письмах FILTHE, выводя полученное целое число.

E, F, H, I, L, И Tимеют 4, 3, 3, 3, 2 и 2 линии соответственно.

Например, GEOBITSимеет 4 + 3 + 2 = 9 строк части букв FILTHE (для .E..IT.), поэтому вывод должен быть 9.

ABCDEFGHIJKLMNOPQRSTUVWXYZдолжен выводить 17.

ABCDGJKMNOPQRSUVWXYZдолжен выводить 0.

FILTHYLINESINLETTERSдолжен выводить 39.


Задача 5 - Алекс Рекурсивный А.

У нашего модератора Алексея А. довольно загадочная буква «А».

Теперь я не уверен, но я думаю, что A.стоит .A xelA. И я также довольно уверен, что .Aтам скрытно выступает Alex A..

Таким образом, чтобы получить полное имя Алекса, мы должны расширить буквы A..A":

Alex A. -> Alex [A.] -> Alex [.A xelA] -> Alex .A xelA -> Alex [.A] xelA -> Alex [Alex A.] xelA -> Alex Alex A. xelA -> etc.

Сделайте так, чтобы ваша программа взяла неотрицательное целое число и Alex A.многократно ее расширила , получив полученную строку.

Таким образом ,
0становится Alex A.,
1становится Alex .A xelA,
2становится Alex Alex A. xelA,
3становится Alex Alex .A xelA xelA,
4становится Alex Alex Alex A. xelA xelA,
5становится Alex Alex Alex .A xelA xelA xelA,
и так далее.

(Я сделал это, потому что чувствовал себя плохо из-за непреднамеренного ухода Алекса из моей задачи, связанной с модом .: P)


Задача 6 - Вращение Numpad

Возьмите целое число от 1 до 9 включительно (вы можете взять его как строку). Выведите квадрат 3 × 3 цифр

789
456
123

повернут с шагом 90 °, так что входная цифра появляется в любом месте верхнего ряда. Когда 5вводится, любое вращение является действительным, поскольку не 5может быть повернуто наверх.

например, когда 3вводится, оба

963
852
741

а также

321
654
987

действительные выводы.

Для ввода 4, только

147
258
369

действительный вывод.


Задача 7 - Разделение цифр на десятки

Возьмите непустую строку десятичных цифр (0-9) и выведите истинное значение, если оно может быть разбито на смежные секции, где все цифры в каждой секции суммируют ровно 10. Если это невозможно, выведите ложное значение.

Например, 19306128можно разделить, например 19|3061|28, все разделы суммируются до 10 (1 + 9, 3 + 0 + 6 + 1, 2 + 8), поэтому должно быть выведено истинное значение.

Правдивые примеры (по одному на строку):

19306128
073
730
0028115111043021333109010
2222255

Ложные примеры:

6810410
9218
12341
5222225
000

Задача 8 - Квадратные часы

Возьмите многострочную строку одинакового размера.

Выведите, 12если вход

 _ _
| | |
|_ _|

Выведите, 3если вход

 _ _
| |_|
|_ _|

Выведите, 6если вход

 _ _
| | |
|_|_|

Выведите, 9если вход

 _ _
|_| |
|_ _|

Других вариантов ввода нет.


Задача 9 - Брэкет Арт

Возьмем в 4 байта строки, содержащей одно из каждого из левых скобок (, [, {, и <в любом порядке.

Добавьте соответствующие правые скобки, чтобы длина строки составляла 8 байт и имела вертикальную линию симметрии. например [<({становится [<({})>].

Затем переверните каждую скобку в этой строке. например [<({})>]становится ]>)}{(<[.

Выведите исходную 8-байтовую строку в скобках с обращенной версией сверху и снизу в отдельных строках.

Таким образом, окончательный вывод для ввода [<({будет

]>)}{(<[
[<({})>]
]>)}{(<[

Аналогично, выход для <({[должен быть

>)}][{(<
<({[]})>
>)}][{(<

Ввод (<<[неверен, потому что {отсутствует и есть дополнительный <.


Задача 10 - Перимитеризация

Возьмите прямоугольную сетку текста (1 × 1 по меньшей мере), состоящую из .'s, которые представляют пустое пространство, и X', которые представляют сплошные плитки. Клетки за пределами сетки считаются пустыми. Можно предположить, что каждая из 4 строк и столбцов ребер сетки будет содержать хотя бы одну X.

например, допустимый ввод может быть:

XXX.....X.....
X..X...X.X....
XXX.....X....X

Выведите еще одну прямоугольную сетку текста, где каждая пустая ячейка, которая граничит с Xортогональной или диагональной, включая те , которые находятся вне входной сетки , становится o. Таким образом, по существу, периметр o's рисуется вокруг всех частей сплошных плиток. Новая сетка не должна быть больше, чем должна быть.

Таким образом, результат приведенного выше примера будет:

ooooo...ooo.....
oXXXoo.ooXoo....
oXooXo.oXoXo.ooo
oXXXoo.ooXoo.oXo
ooooo...ooo..ooo

Аналогично, результат ввода XXX..X.Xдолжен быть

oooooooooo
oXXXooXoXo
oooooooooo

и вывод

oooooooooo.
oXXXooXoXo.
oooooooooo.

будет недействительным, так как пустой крайний правый столбец не нужен.

Вы можете использовать любые 3 различных печатаемые ASCII символы вместо ., Xи o.


Задача 11 - Площадь Сатор

Выведите площадь Сатора :

SATOR
AREPO
TENET
OPERA
ROTAS

Любая из букв может быть строчной или прописной, поэтому

SatOR
aRePO
tenet
OPERa
RoTaS

также допустим вывод.

Там нет ввода.


Задача 12 - Премьер Твит

Не вводите, а выводите 140-байтовую печатаемую строку ASCII, которая содержит хотя бы один из 95 печатных символов ASCII. (Таким образом, 45 символов будут дубликатами.)

Сумма кодов символов всех 140 байтов в этой строке должна быть простым числом Софи Жермен , то есть таким простым числом p, которое 2p+1также является простым. Код символа для пробела - 32, 33 для !, 34 для "и т. Д. До 126 для ~. Сумма может быть рассчитана в Python как sum(map(ord, myString)).

Пример вывода:

! "#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~STUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~d

Сумма кода символа - это простое число 12203, соответствующее безопасное простое число которого равно 24407.


7
Я буду впечатлен, если кому-нибудь удастся решить все за менее чем 140 байтов, даже с CJam /
Pyth

9
Для меня большая честь быть в .a ni eb ot deronoh ma I ... Ваш вызов. : P
Алекс А.

разрешено ли заданию завершать с ошибкой после вывода результата на выход?
торкадо

1
Как мы должны считать байты из imports? Допустим, я пишу 5 функций, где 2 нуждаются в одном модуле (например import Math), это считается дважды?
Ними

2
Я голосую за то, чтобы закрыть этот вопрос как не по теме, потому что он состоит из нескольких частей с недостаточным взаимодействием между частями
pppery

Ответы:


10

Pyth, 9 заданий в 136 байтах

Задача 1: 7 байт

<-F_SQ0

демонстрация

Сортировка в порядке убывания ( _SQ), сложение вычитания над ними ( a-b-c), проверка, если результат отрицательный.

Задача 2: 14 байт

sho.a-sN^T6.pz

демонстрация

Формируем все строковые перестановки ( .pz), сортируем их ( o) по абсолютному значению разности ( .a-) между числом ( sN) и одним миллионом ( ^T6).

Возьмите первую такую ​​строку ( h) и преобразуйте ее в число. ( s).

Задача 4: 19 байт

s/L+\EPP*3"EFHILT"z

демонстрация

Повторите "EFHILT"три раза ( *3), удалите завершающий LT( PP) и добавьте E( +\E). Сопоставьте каждую букву во входных данных с количеством их появлений в этой строке. ( /L ... z). Сумма. ( s).

Задача 5: 16 байт

u+"Alex "_GhQ".A

демонстрация

Начиная с "A.", переверните и добавьте "Alex "к началу, введите + 1 раз.

Задача 7: 13 байт

}Y-RTsMM./sMz

Преобразуйте входную строку в список однозначных чисел ( sMz). Формируем все разделы ( ./). Суммируйте каждый элемент каждого раздела ( sMM). Удалить все 10 с каждого подсписка ( -RT). Проверьте, не опустошен ли какой-либо из подсписков, проверив, есть ли пустой список в общем списке ( }Y).

Задача 8: 11 байт

*3h%%CQC\Ç4

демонстрация

Модульная магия. Преобразуйте в число ( CQ), возьмите его мод 199 ( C\Ç= 199) и возьмите этот мод 4. Затем добавьте 1 и умножьте на 3.

Задача 9: 21 байт

J+Xz"<{[()]}>")_zJ_JJ

демонстрация

Сначала мы генерируем первую строку, которая состоит из ввода, переведенного в зеркальные символы ( Xz"<{[()]}>")), за которым следует обратный ввод ( + ... _z), и сохраняем его в J. Затем выведите эту строку, ее обратную сторону и снова эту строку ( J_JJ).

Задача 11: 22 байта

+J"SATOR
AREPO
TEN"t_J

демонстрация

Просто напечатайте строку и ее обращение, но не дублируйте центр N.

Задача 12: 13 байт

++G*19\3srd\

демонстрация

В конце кода есть символ invisble DEL( 7F).

Это печатает

abcdefghijklmnopqrstuvwxyz3333333333333333333 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

который имеет сумму символов 11321. Он состоит из Gалфавита 19 3с и всех печатных символов ASCII.


28

CJam, 8 9 заданий в 140 байт

Прежде всего, вот скрипт, который вы можете использовать, чтобы отсортировать ваши решения и сказать, какие из них будут вписываться в твит:

{\s\Se[oSo}:F;
qN/ee{W=,}${)_,_T+:T140>X*_{0:X;}*'=@11+*N+*o\~)YF_,ZFTZFoNo}/

Просто вставьте свои 12 решений во вход, по одному в каждой строке. Запустите это здесь. Первый столбец - это номер задачи, второй - его размер (в символах - вам придется это исправить самостоятельно, если он отличается от числа байтов), третий - совокупный размер. Программы, которые вписываются в твит, отделены от остальных строкой ===.

Для меня вывод выглядит так:

 1   7   7 q~$~\->
 8  10  17 qDbJ%5/)3*
12  12  29 ',32>_51>'d
 7  13  42 Aq{~-Ace|}/N&
 2  15  57 qe!{~1e6-z}$0=~
 4  19  76 q"FIHEELT"3*H<fe=:+
 5  20  96 ".A"q~){" xelA"+W%}*
 9  22 118 q_{_')>+)}%W%+_W%N@N3$
11  22 140 "SATOR\AREPO\TEN"_W%1>
====================================
 6  25 165 9,:)s3/zq~))3mdg*{W%z}*N*
 3  43 208 LLq{_'=-z({+}{'=>_)$\[{)@+\}{\(@\+}]=&}?}/\
10  45 253 0XW]_m*qN/{'.f+W%z}4*f{\~@m>fm>N*}(\{8f^.e>}/

Итак, вот задачи, которые я сейчас могу вписать в твит.

Задача 1 - Могут ли три числа образовывать треугольник? - 8 7 байт

Спасибо jimmy23013 за сохранение 1 байта.

q~$~\->

Тестирование.

Ожидается, что ввод будет в стиле CJam.

Это довольно просто: проверьте, короче ли самая большая сторона, чем сумма двух других. Или, что то же самое, проверьте, что самая короткая сторона длиннее, чем разница двух других:

q~  e# Read and eval input.
$~  e# Sort the values and dump them on the stack.
\-  e# Subtract the middle value from largest.
>   e# Check if the smallest value is greater than that.

Задача 2 - Ближайший к одному миллиону - 15 байт

qe!{~1e6-z}$0=~

Тестирование.

Простая грубая сила:

q        e# Read input.
e!       e# Get all permutations.
{        e# Sort by...
  ~      e#   Evaluate the permutation to get its numerical value X.
  1e6-z  e#   abs(X - 1,000,000)
}$
0=       e# Pick the first element (which minimises the difference)
~        e# Evaluate it to get rid of the leading zeroes.

Задача 4 - FILTHE Letters - 21 19 байтов

Спасибо jimmy23013 за сохранение 2 байта.

q"FIHEELT"3*H<fe=:+

Тестирование.

Идея состоит в том, чтобы создать строку, содержащую каждую из букв FILTHE один раз для каждой из их ортогональных линий. Это делается с помощью забавных манипуляций со строками:

q          e# Read the input.
"FIHEELT"  e# Push this string. It first contains the 3-line letters, then the 2-line 
           e# letters, where we include 'E' twice to make it count for 4.
3*         e# Repeat 3 times: "FIHEELTFIHEELTFIHEELT"
H<         e# Truncate to 17 characters: "FIHEELTFIHEELTFIH". This is chosen such that
           e# it discards the third repetition of the 2-line letters.
fe=        e# For each character in the input, count its occurrences in this new string.
:+         e# Sum them all up.

Задача 5 - Алекс Рекурсивный А. - 27 20 байт

".A"q~){" xelA"+W%}*

Тестирование.

Реализация подстановки A.и .Aнепосредственно слишком дорога. Вместо этого мы замечаем, что нам нужно обрабатывать только один случай, если мы каждый раз переворачиваем строку. Кроме того, добавление Alex(и пробел) каждый раз эквивалентно расширению начального. Мы можем сохранить еще один байт, добавив реверс перед тем, как перевернуть строку:

".A"        e# Start with ".A" (the -1st iteration if you like).
q~)         e# Read input, eval, increment (so the following block is run at least once.)
{           e# Repeat this block that many times...
  " xelA"+  e#   Append " xelA".
  W%        e#   Reverse the string.
}*

Задача 7 - Разделение цифр на десятки - 18 16 13 байт

Aq{~-Ace|}/N&

Тестирование. (С скобками вокруг каждого выхода.)

Не совсем удобно для пользователя: истинное значение - это одна новая строка, ложное значение - пустая строка.

Основная идея проста: добавьте цифры к текущему итогу, который мы сбрасываем всякий раз, когда он достигает ровно 10. Сумма должна быть равна нулю в конце ввода. Для начала оно оказывается короче к итоговому значению в 10 и вычитает цифры, сбрасывая итоговое значение всякий раз, когда мы достигаем 0. Однако нам нужно убедиться, что мы не возвращаем что-либо правдивое, когда все входные данные равны нулю. Самый короткий путь, который я нашел, это сбросить сумму до символа с кодовой точкой 10 (перевод строки), а затем проверить в конце, что у нас фактически есть этот символ в стеке, а не число 10. Это работает, потому что и целое ноль, и ноль символа (нулевой байт) ложны:

A     e# Push a 10, the initial running total.
q{    e# For each character in the input...
  ~-  e#   Evaluate the character to get the digit and subtract it from the total.
  Ac  e#   Push a linefeed character.
  e|  e#   Logical OR of the running total and the linefeed character (using
      e#   short-circuiting).
}/
N&    e# Take the set intersection with the string containing a linefeed character.
      e# If the total is still a number of any character other than the linefeed,
      e# this will yield an empty string. Otherwise, the string will remain unchanged
      e# and the linefeed will be printed.

Задача 8 - Квадратные часы - 10 байт

qDbJ%5/)3*

Тестирование.

Это просто какое-то довольно случайное волшебство по модулю кодов символов, которое происходит с хэшем для правильных значений. Я вполне уверен, что возможно что-то более короткое, но это самое короткое, что я нашел (программно) для такой структуры:

q   e# Read the input.
Db  e# Treat the character codes of the string as digits in base 13. This maps the
    e# four inputs to the values: 2023940117708546863
    e#                            2023940113755405840
    e#                            2023940781838850791
    e#                            2023940113755390292
J%  e# Take the result modulo 19. This gives [2, 5, 12, 18], respectively.
5/  e# Divide by 5 (rounding down). [0, 1, 2, 3], respectively.
)   e# Increment. [1, 2, 3, 4], respectively.
3*  e# Multiply by 3. [3, 6, 9, 12], respectively.

Задача 9 - Bracket Art - 23 22 байта

Спасибо Sp3000 за сохранение 1 байта.

q_{_')>+)}%W%+_W%N@N3$

Тестирование.

Довольно просто. Сопоставление между левыми и правыми скобками выполняется путем добавления 2 (или 1 для скобок):

q_      e# Read input and duplicate.
{       e# Map this block onto each character...
  _')>  e#   Duplicate and check if it's not a parenthesis.
  +     e#   Add the result, leaving parentheses unchanged and incrementing the
        e#   other bracket types.
  )     e#   Increment again.
}%
W%+     e# Reverse and add to the original, giving the middle line.
_W%     e# Duplicate and reverse, giving the first line.
N@      e# Push a linefeed, pull up the middle line.
N3$     e# Push another linefeed, copy the first line.

Задача 11 - Площадь Сатор - 22 байта

"SATOR
AREPO
TEN"_W%1>

Проверьте это здесь.

Наверное, самое скучное решение из всех. Это выдвигает первую половину строки и затем полностью изменяет это:

"SATOR
AREPO
TEN"    e# Push everything up to the centre of the square.
_W%     e# Duplicate and reverse.
1>      e# Discard the "N", because we don't want that twice.

Задача 12 - Prime Tweet - 13 12 байт

',32>_51>'d

Проверьте это здесь. (С диагностическим выводом на результат.)

После 'непечатного <DEL>(0x7F), который SE удаляет. Для вставки копии используйте эту версию:

'~),32>_51>'d

Напечатанная строка

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~STUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~d

Таким образом, он содержит один цикл всех символов, затем другой цикл от Sдо ~, а затем один d. Сумма кодов символов 12203. Я нашел это с помощью проб и ошибок.

'~),32>  e# Push a string with all printable characters.
_51>     e# Duplicate this and discard the first 51 of them.
'd       e# Push a "d".

1
q~$~\-> q"FIHEELT"3*H<fe=:+,
jimmy23013

@ jimmy23013 Оооо, я постоянно забываю, что у нас есть e=эти дни.
Мартин Эндер

Я надеялся получить достаточно ответов, чтобы опубликовать что-то, прежде чем вы заметили, как сделать № 5 из 20 символов.
Питер Тейлор

19

Pyth, 9 заданий по 138 байт

Это заняло довольно много времени.

Я думаю, что 9 задач это предел для Pyth. Включение следующей самой короткой программы (Sator Square) дает 160 байтов. Гольф 20 байтов маловероятен. Есть 2 или 3 задачи, которые немного уродливы и, возможно, могут быть сокращены, но в целом я вполне доволен решениями.

Задача 1 - Могут ли три числа образовывать треугольник ?, 8 байтов

>FsMc2SQ

Попробуйте онлайн: обычный ввод или набор тестов

Задача 2 - Ближайший к одному миллиону, 14 байтов

ho.a-^T6NsM.pz

Попробуйте онлайн: обычный ввод или набор тестов

Задача 4 - FILTHE Letters, 20 байтов

s*Vtsmmdd5/Lz"TLIHFE

Попробуйте онлайн: обычный ввод или набор тестов

Задача 5 - Алекс Рекурсивный А., 16 байт

u+"Alex "_GhQ".A

Попробуйте онлайн: обычный ввод или набор тестов

Задача 6 - Вращение Numpad, 20 байтов

jeo}zhN.uC_N3_c3jkS9

Попробуйте онлайн: обычный ввод или набор тестов

Задача 7 - Разделение цифр на десятки, 15 байтов

qTu+WnGTvHG-zZZ

Попробуйте онлайн: обычный ввод или набор тестов

Задача 8 - Квадратные часы, 12 байтов

*3%%Cz1978 5

Попробуйте онлайн: обычный ввод или набор тестов

Задача 9 - Bracket Art, 20 байтов

V3_WtN+z_Xz"[<({})>]

Попробуйте онлайн: обычный ввод или набор тестов

Задача 12 - Prime Tweet, 13 байт

++*d44srd\\&

Попробуйте онлайн: регулярный ввод


2
Объединение наших представлений дает 133 байта.
Исаак

9

TI-BASIC, 11 12 задач в 728 830 байт

Задача 1 в 7 байтах

:2max(Ans)`<`sum(Ans

Вход представляет собой список в Ans.

Задача 2 в 92 110 байтов

:seq(expr(sub(Ans,I,1)),I,1,7→L₁
:SortA(L₁
:min(7,1+sum(not(L₁
:{L₁(1)+sum(seq(L₁(I))₁₀^(I-8),I,2,7)),L₁(Ans)+sum(seq((I`>`Ans)L₁(I)₁₀^(1-I),I,2,7
:ᴇ6Ans(1+(0`>`min(ΔList(abs(1-Ans

Запрашивает список цифр. Ввод - это строка в Ans.

Задача 3 в 119 байт

:Input Str1
:"  →Str2
:For(I,1,length(Str1
:sub(Str1,I,1→Str3
:inString("`<>`",Ans
:If Ans:Then
:max(0,min(L,C+2Ans-3→C
:Else
:C+1→C
:L+1→L
:sub(Str2,1,C)+Str3+sub(Str2,C+1,L-C+1→Str2
:End
:End
:sub(Str2,2,L

Запрашивает строку. Предполагается, что C и L либо не определены, либо 0.

Задача 4 в 35 байтах

:sum(int(2seq(inString("TLIHFE",sub(Ans,I,1))^.4,I,1,length(Ans

Ввод - это строка в Ans.

Задача 5 в 63 байта

:Ans/2→C
:sub("A.A",1+2fPart(C),2
:For(I,0,C
 :"Alex "+Ans
 :If I≠C
  :Ans+" xelA
:End
:Ans

Ввод числа в Ans.

Задача 6 в 66 байтах

: 𝑖 ^ ((Ans <7) (Ans-3 (Ans >3: For (Y, ⁻1,1: Disp) (seq ((5-real (AnsX + Ans𝑖Y) -3imag (AnsX + Ans𝑖Y)) ₁₀ ^ ( X + 1), X, ,11,1: Конец

Ввод числа в Ans.

Задача 7 в 36 43 байта

:Input <strike>L₁</strike>Str1
:.5
:For(I,1,<strike>dim(L₁</strike>length(Str1
 :Ans+<strike>L₁(I</strike>expr(sub(Str1,I,1
 :If 10=int(Ans
  :0
:End
:not(Ans

Запрашивает строку списка цифр .

Задача 8 в 29 байтах

:18fPart(sum(seq(I(sub(Ans,I,1)=" ")/6,I,1,15

Ввод - это строка в Ans.

Задача 9 в 83 байта

:For(I,1,16,2
 :If I<8
  :Ans+sub("`)}]>`",inString("`({[<`",sub(Ans,4,1)),1
 :sub(Ans,I,1)+Ans
:End
:For(I,⁻1,1
 :Disp sub(Ans,9-8abs(I),8
:End

Ввод - это строка в Ans.

Задача 10 в 159 байтах

:1→X
:Input Str1
:2+length(Str1→L
:"X
:While 2+L`>`length(Ans
 :Ans+Ans→Str2
:End
:Ans→Str3
:While 1
 :"XX
 :Ans+Str1+Ans→Str1
 :For(I,1,L
  :Ans+sub("0X.",2expr(sub(Str2,I+1,1))+not(expr(sub(Ans,I,3)+sub(Str2,I,3)+sub(Str3,I,3))),1
 :End
 :Disp sub(Ans,L+3,L
 :Str2→Str3
 :Str1→Str2
 :Input Str1
:End

Использует X0.вместо .Xoсоответственно (извините, ничего не соответствует). Запрашивает ввод построчно. Вы должны ввести две строки Xs, чтобы увидеть все выходные данные, а затем 2nd + Quit, чтобы выйти.

Задача 11 в 39 байтах

:Disp "SATOR
:Disp "AREPO
:Disp "TENET
:Disp "OPERA
:Disp "ROTAS

Задача 12 в 77 байтах

: Ans + "tvm_I% LinReg (ax + b) DS <(getKeyconj (1-PropZTest (dayOfWk) (Подгонка вручную C / YANOVA (* строка) (HorizRegEQUnarchive [J]! # $ &'', .234567890:; = >? @GBQX \^ _`qw {|} ~

Или в шестнадцатеричном виде:

72702ABB21FFDBADBB25BB3EEF06EF16
6331BB5917746201BB695C092DBBD2BB
D3BBD4AEAE2B3A323334353637383930
3EBBD66A6CAFBBD147425158BBD7F0BB
D9BBD5BBC1BBC708BBD809BBCF

Ввод - это строка, содержащая "в Ans.

Это на самом деле невозможно в TI-BASIC. Можно выполнить шестнадцатеричное редактирование базовой программы и использовать определенные 2-байтовые токены, чтобы получить все печатные символы ascii в исходный код, но это не проблема. Проблема заключается в том, что нет способа сохранить "символ в строку в чистом базовом виде на чистом калькуляторе без ввода программы (то же самое относится и к символу, но это не для печати ascii). Однако можно поместить "в уравнение вне базового, после чего вы можете использовать базовое для преобразования уравнения в строку и отображения этой строки. Кроме того, в любом случае на экране достаточно места для 128 символов одновременно.


7

Perl, 4 задания по 117 байт

Давайте попробуем настоящий язык;)

Еще не сдался, возможно даже сможет сжать 5 задач в 140 байт, хотя вряд ли!

* Задача 1: 30 + 1 = 31 байт.

@F=sort@F;say$F[0]+$F[1]>$F[2]

Использование: perl -aM5.010 entry.pl input.txt

* Задача 4: 32 + 1 = 33 байта

y/ELTFHI/4223/;s/./+$&/g;$_=eval

Использование: perl -p entry.pl input.txt

Задача 5: 54 байта

say"Alex "x($_/2+1).qw(A. .A)[$_%2]." xelA"x(--$_/2+1)

-2b благодаря Дому Гастингсу

Использование: echo 4 | perl -M5.010 entry.pl

Задача 7: 37 + 2 = 39 байт

($i+=$_)>10&&exit,$i%=10for@F;$_=!$i;

Использование: perl -pF entry.pl input.txt

* Задача 8: 21 + 2 = 23 байта

$_=y/|_ 
/14/dr/64%14

Это немного сложнее. Вылетев путем замены каждого |с xи каждым _с yпоследующей заменой пространств для получения уникальной две цифры строки для каждой сетки ( yyxxyxxyyx, yyxxyxxyyxyyxxxxyxyx, yyxxxxyxyxyyxyxxxyyx, yyxyxxxyyxyyxxxxyyx, yyxxxxyyx). Затем я написал программу для подбора значений для xи yи математических операций, которые можно выполнить над числами, произведенными после подстановки, xи yдля каждого из них выдать результат 3,6,9,12. В конце концов, x=1, y=4и операция была магия /64%14.

Использование: perl -0p entry.pl input.txt

Задача 11: 34 байта

say"SATOR
AREPO
TENET
OPERA
ROTAS"

Использование: perl -M5.010 entry.pl

* Задача 12: 30 байт.

say d.pack"C*",32..126,83..126

Использование: perl -M5.010 entry.pl

Отказ от ответственности: -M5.010 считается «бесплатным»


Ruby менее реален, чем Perl? ;)
Мартин Эндер

9
Когда я увижу ваши ответы (которые похожи на шум), я не стану квалифицировать Perl как реальный язык;)
Fatalize

1
Хорошо сделано! Я думаю, что вы можете сэкономить 2 байта с помощью qw(A. .A)[$_%2]вместо ("A.",".A")[$_%2]задачи 5, и я уверен, что вы можете получить еще несколько байтов ...
Dom Hastings

6

Ruby, 4 задания по 280 байт (неконкурентные)

Это всего лишь попытка, я буду продолжать делать задачи позже (и, надеюсь, игра в гольф уже существующие).

Задание 1

a=gets.split.map &:to_i;p a.all?{|e|e<a.inject(:+)-e}

Задача 2

p gets.chars.permutation.map{|a|a.join.to_i}.min_by{|x|(x-1e6).abs}

Задача 4

n,b='EFHILT',0;gets.chars.map{|c|b+=n[c]==p ? 0:[4,3,3,3,2,2][n.index c]};p b

Задача 5

a='Alex A.';gets.to_i.times{|i|i%2<1 ? a.sub!('A.','.A xelA'):a.sub!('.A',a)};$><<a

6

TI-BASIC, 12 заданий по 994 байта

Загрузить все как файл группы TI ( .8xg )

(Теги спойлера добавляются по запросу.)

Задача 1 - Могут ли три числа образовывать треугольник? - 7 байт

Загрузить как программный файл TI-83 + ( .8xp )

:2max(Ans)<sum(Ans

Задача 2 - Ближайший к одному миллиону - 114 байт

Загрузить как программный файл TI-83 + ( .8xp )

:int(10fPart(Ans\10^(\-cumSum(binomcdf(6,0→X
:"sum(\L\X\10^(\cumSum(not(binompdf(6,0→\Y1\
:SortD(\L\X
:\Y1\→X
:sum(not(\L\X
:If Ans
:Then
:If max(\L\X=1
:X+\E\6-\10^(\6-Ans→X
:SortA(\L\X
:augment(ΔList(cumSum(\L\X)),{0→X
:End
:{X,\Y1\
:Ans(1+(0>min(ΔList(abs(\E\6-Ans

Задача 3 - Простой симулятор клавиатуры - 131 127 байт

Загрузить как программный файл TI-83 + ( .8xp )

:Input Str1
:DelVar X1→Y
:"..→Str2
:For(Z,1,length(Str1
:sub(Str1,Z,1→Str3
:(Ans=">")-(Ans="<
:If Ans
:Then
:max(1,min(Y+Ans,X+1→Y
:Else
:sub(Str2,1,Y)+Str3+sub(Str2,Y+1,X-Y+2→Str2
:X+1→X
:Y+1→Y
:End
:End
:sub(Str2,2,X

Задача 4 - FILTHE Letters - 34 байта

Загрузить как программный файл TI-83 + ( .8xp )

:sum(int(\³√(\12seq(inString("TLIHFE",sub(Ans,X,1)),X,1,length(Ans

Задача 5 - Алекс Рекурсивный А. - 107 байт

Загрузить как программный файл TI-83 + ( .8xp )

:Input X
:".A..
:For(X,0,X
:Ans→Str1
:5int(.5X+.5
:sub(Str1,1,Ans+1)+sub(".A xelAlex A.",6gcd(X,2)-5,7)+sub(Str1,Ans+4,5X-Ans+1
:End
:sub(Ans,2,5X+2

Задача 6 - Вращение Numpad - 86 байт

Загрузить как программный файл TI-83 + ( .8xp )

:.3Ans+2(Ans=6→X
:[[9,6,3][8,5,2][7,4,1
:For(X,0,X
:rowSwap(Ans\^T\),1,3
:End
:Ans
:*row+(10,*row+(10,Ans\^T\,1,2),2,3
:For(X,1,3
:Disp Ans(3,X
:End

Задача 7 - Разделение цифр на десятки - 77 байт

Загрузить как программный файл TI-83 + ( .8xp )

:Ans+"0
:seq(expr(sub(Ans,X,1)),X,1,length(Ans
:augment(Ans,{10not(not(max(Ans→X
:1→X
:Repeat Ans≥dim(\L\X
:Ans+1
:If 10=sum(\L\X,X,Ans
:Ans+1→X
:End
:X=Ans

Задача 8 - Квадратные часы - 35 байт

Загрузить как программный файл TI-83 + ( .8xp )

:12-3max(seq(X(sub(Ans,6gcd(X,2)+X,1)≠" "),X,1,3

Задача 9 - Bracket Art - 86 байт

Загрузить как программный файл TI-83 + ( .8xp )

:Input Str1
:For(X,1,4
:For(Y,0,1
:abs(X-9not(Y→Z
:"()[]{}<>
:sub(Ans,inString(Ans,sub(Str1,X,1))+Y,1
:Output(1,Z,Ans
:Output(2,9-Z,Ans
:Output(3,Z,Ans
:End
:End

Задача 10 - Перимитеризация - 218 байт

Загрузить как программный файл TI-83 + ( .8xp )

:".
:For(A,0,\E\9
:Input Str1
:Ans+Str1→Str2
:If Str1≠".
:End
:length(Ans→X
:round(A\^-1\(Ans-2→B
:seq(expr(sub(Str2,A,1)),A,2,X-1→B
:πAns→C
:"augment(Ans,augment(Ans,\L\B))+augment(Ans,augment(\L\C,Ans))+augment(\L\B,augment(Ans,Ans→X
:seq(0,A,1,B
:\L\X→A
:For(C,0,A+1
:seq(\L\A(A+BC),A,1,B→C
:int(Ans→B
:{0
:1+not(\L\X)+not(fPart(\L\X→B
:".
:For(X,1,B+2
:Ans+sub("120",\L\B(X),1
:End
:Disp sub(Ans,2,B+2
:End

Эти замены были сделаны: 0= ., 1= X, 2=o

Для ввода (после запуска программы) введите по одной строке за раз, нажимая ввод при каждом разрыве строки, пока не будет записана последняя строка. Затем нажмите ввод, введите один период, затем снова нажмите ввод, чтобы отправить всю строку.

Задача 11 - Площадь Сатора - 38 байт

Загрузить как программный файл TI-83 + ( .8xp )

:Disp "SATOR","AREPO","TENET","OPERA
:"ROTAS

Задача 12 - Главный твит - 151 байт

Загрузить как программный файл TI-83 + ( .8xp )

:Ans+"!#$%&'()*+,-./01234567889:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
:For(X,1,45
:Ans+" 
:End
:Ans

Ansдолжен содержать двойную кавычку, которая вводится одним \Y1\из них непосредственно из редактора формул и запускается Equ►String(\Y1\,Str1:Str1с главного экрана.

Выходная длина равна 140. 8 появляется дважды, и есть 45 пробелов вместе с другими символами ASCII, каждый из которых появляется один раз. Это составляет (33 + 34 + ... + 126) + 56 + 32 × 45 = 8969, простое число Софи Жермен.


Я спросил ОП, и вы можете рассчитывать маркер , как , sin(как отображение s, i, n, и (в задаче 12
lirtosiast

0

Python 3, 1 задание, 268 байт, неконкурентный

Я пробовал Задание № 2 в Python 3.5.2 Я новичок в коде игры в гольф и Python

import itertools
def f2(l):
    n=1000000
    l=list(itertools.permutations(l))
    j = len(l)
    m=[None]*j
    while j>0:
        j -= 1
        m[j]= int(''.join(str(i) for i in l[j]))
        l[j]=abs(n-m[j])
    l.sort()
    k=n-l[0]
    return(n+l[0],k)[k in m]

Добро пожаловать в PPCG. В Python 3 вы можете поместить некоторые из ваших утверждений в одну строку, например, вы можете написать. x=10;print(x)Это поможет некоторым из ваших разделов с отступом.
джордж
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.