Как Джордж Оруэлл написал в 1984 году :
Война - это мир.
Свобода - это рабство.
Невежество - это сила.
Напишите программу или функцию, которая берет одно из шести основных слов из цитаты Оруэлла и выводит свой аналог.
В частности:
[input] -> [output]
war -> peace
peace -> war
freedom -> slavery
slavery -> freedom
ignorance -> strength
strength -> ignorance
Никаких других пар ввода / вывода не требуется.
Вы должны предполагать, что слова всегда полностью строчные, как указано выше. В качестве альтернативы, вы можете считать , что слова всегда полностью в верхнем регистре: WAR -> PEACE
, PEACE -> WAR
и т.д.
Самый короткий код в байтах побеждает.
code-golf
string
kolmogorov-complexity
Кальвин Хобби
источник
источник
w p f s i
) больше нигде не встречаются ни в одном из слов. Интригующая собственность.Ответы:
05AB1E , 30 байтов
05AB1E использует CP-1252 .
Попробуйте онлайн! или как тестовый набор
объяснение
Прямой подход
ignorance strength war peace freedom slavery
источник
ignorance strength war peace freedom slavery
я чувствую, что пропустил около десятка шагов!JavaScript (ES6), 80 байт
Как это устроено
Мы используем небольшую таблицу поиска, основанную на коде ASCII 2-го символа каждого слова, возвращая индекс его аналога.
В качестве примечания, если бы разрешался смешанный регистр, использование
war PEACE FREEDOM slavery IGNORANCE strength
с модулем 6 привело бы к идеальному хешу.Контрольная работа
Показать фрагмент кода
источник
z
и сжатие строки сatob
сохранением 8 байтов?atob
вы получите строку, которая в основном является допустимым javascript - в конце концов вам нужно экранировать только `\` и заключительную кавычку. Может быть трудно разместить его на этом сайте, но это не лишает законной силы ответ. Смотрите ответ perl от smisЖеле , 24 байта
Попробуйте онлайн!
Как это устроено
Во-первых, токен
индексы в словарь желе, чтобы создать строку
который
Ḳ
разделяется на пробелы, чтобы получить массив строкµ
начинается новая монадическая цепочка с этим строковым массивом в качестве аргумента, который также является текущим возвращаемым значением.ɠ
читает одну строку ввода из STDIN иi
находит его индекс предыдущего возвращаемого значения, то есть сгенерированного массива строк.Теперь,
^1
принимает побитовый XOR этого индекса и 1 . Для четных индексов - помните , что индексы Желе являются 1 -А и модульным, поэтому сила имеет индекс 1 и невежество имеет индекс 6 / 0 - это увеличивает индекс; для нечетных индексов это уменьшает их.Наконец,
ị
извлекает строку с этим индексом из аргумента цепочки.источник
Mathematica, 84 байта
объяснение
Больше "арифметики" со строками! Как и в связанном ответе, это основано на том факте, что вы можете «умножать» строки в Mathematica, что оставит их неоцененными (аналогично умножению двух неназначенных переменных
x*y
), но Mathematica будет применять базовые упрощения, такие как факторы отмены в делении.Таким образом , мы начинаем хранить три пары в качестве продуктов в
x
,y
,z
, соответственно , и умножить их все вместе:Это оценивает
(Mathematica автоматически сортирует факторы, но нас не волнует порядок.)
Мы делим это на вход, чтобы удалить слово, которое нам не нужно
.../#
, так как Mathematica отменяет факторы. Например, если бы ввод был,"peace"
мы бы в итоге:Наконец, мы избавляемся от пар , мы не заинтересованы, путем замены каждого из
x
,y
иz
с1
. Опять же, упрощение Mathematica в этом1*a
всегдаa
. Эта часть сделана с:Хорошая вещь заключается в том, что Mathematica знает, что умножение
Orderless
таково, что он найдет два фактора независимо от того, являются ли они смежными в продукте или нет. Только слово, противоположное входу, больше не соединено в продукте, поэтому оно не будет удалено и останется единственным выходом.источник
WordList[][[<|"l"->14007,"t"->17083,"a"->25105,"r"->32106,"g"->33790,"e"->39048|>@#[[2]]]]&
.WordList
хорошо. Взять список символов в качестве входных данных и вернуть строку, хотя и немного странно. ;) Тем не менее, вы можете сделать 4 байта лучше сx[[7-Position[x={"war","slavery","ignorance","strength","freedom","peace"},#][[1,1]]]]&
.<|#->#2&~MapThread~{x={"war","slavery","ignorance","strength","freedom","peace"},Reverse@x}|>
для 94 байтовVim, 60 байт
Попробуйте онлайн! в обратно совместимом V-интерпретаторе.
Конечно, если бы мы переключились на V, мы могли бы сохранить один байт , используя более удобный метод ввода. Но так как это такая небольшая разница, я бы предпочел использовать версию без игры в гольф.
Объяснение:
источник
C (gcc) ,
120107 байтовМаксимальное злоупотребление указателем! Требуется машина с прямым порядком байтов и 64-битные значения.
Код содержит несколько непечатных документов, но копирование должно работать.
Попробуйте онлайн!
источник
Python, 81 байт
Или той же длины:
источник
l
качестве необязательного аргумента.Perl 6 , 61 байт
С непечатными символами, обозначенными как Sta (потому что StackExchange удаляет их в противном случае):
Вот
xxd
шестнадцатеричный дамп:Расширенная версия (непечатные символы заменены на escape-последовательности, добавлены пробелы и комментарии):
источник
Баш ,
100878678 байтПопробуйте онлайн!
2-я буква каждого слова однозначно идентифицирует это слово, поэтому я использую этот символ в качестве имени переменной; значение этой переменной является соответствующим другим словом.
Например, 2-я буква
peace
ise
, и слово, соответствующееpeace
iswar
, поэтому я установилe=war
.При заданной входной строке второй символ этой строки используется в качестве имени переменной, чтобы вызвать нужное соответствующее слово, используя косвенное расширение параметра bash.
источник
TI-Basic,
1038477 байтСокращение до одной строки сэкономило много байтов!Ха-ха, как иронично было это утверждение ...источник
Perl , 63 байта
62 байта +
-p
флаг.Попробуйте онлайн!
ord
возвращает код символа первого символа входного слова.После
%6
мы имеем:Таким образом , у нас есть
slavery
иstrength
как возвращение 1 (так как они оба начинаются с той же буквы), и никто не возвращался 2. Таким образом, мы добавим1
кstrength
(это единственное слово , которое будет соответствовать/h/
), и мы имеем каждое слово переведенный с индексом от 0 до 5.источник
R 86
8792байтаИзменено на безымянную функцию и
gsub
наsub
несколько байтов. Вgrep
определяет , какая из 3 -х строк используются , и входной удаляются из этой строки сsub
.источник
PHP, 70 байт
источник
Befunge,
8988 байтПопробуйте онлайн!
объяснение
Мы начинаем с того, что помещаем в стек все возможные выходные строки с нулевым завершением. Эта последовательность выполняется справа налево, поэтому значения перемещаются в обратном порядке, поскольку в этом порядке символы будут необходимы, когда они в конечном итоге будут выведены.
Затем мы читаем первые два символа из stdin, и это все, что нам нужно для идентификации входной строки. Если мы возьмем значение ASCII первой буквы mod 2 плюс вторую букву mod 7, мы получим уникальное число в диапазоне от 2 до 7.
Этот номер может затем использоваться как своего рода индекс в списке строк в стеке. Мы итеративно уменьшаем индекс (в первый раз на 2), и для каждой итерации мы очищаем одну строку из стека с последовательностью
>_
.Как только индекс достигнет нуля, у нас останется правильная выходная строка в верхней части стека, поэтому мы используем простую последовательность выходных строк, чтобы записать результат в стандартный вывод.
источник
:-<
и@>:#
«смайлики» здесь :)Пайк, 29 байт
Попробуй это здесь!
источник
С, 93
@ Ответ Арно, портированный на C
источник
C (gcc) ,
113108 байтовВсе экземпляры
\0
могут быть заменены фактическими байтами NUL для целей оценки.t+*--t-47
неопределенное поведение; это может / не будет работать с другими компиляторами.Попробуйте онлайн!
источник
JavaScript (ES6), 71
78Так скучно, как ответ Арно, но и короче.
Теперь я добавил кодировку с
btoa
. В закодированной строке есть 4 байта, которые я не могу опубликовать на этом сайте, даже если они являются допустимыми символами в строке javascript. Поэтому я использовал шестнадцатеричный escape в форме\xHH
. Каждое из этих побегов считается за 1 байт.Закодированная строка
strength0ignorance0peace0war0slavery0freedom
Это 82 и без учета регистра
Контрольная работа
источник
CJam, 52 (только ASCII)
Попробуйте онлайн
Примечание: космические объекты - это символы табуляции (один до и один после "EK {")
Объяснение:
Часть до «+» распаковывает строку «slaveryjfreedomjwarjpeacejignorancejstrength», используя базовое преобразование:
строка (обрабатывается как массив кодов символов) → (базовое 144) число → (базовое 26) массив чисел → (добавление «a» к каждому число) строка
источник
> <> (Рыба),
8478 байтПопробуйте онлайн!
Мы начинаем плавать сверху слева, направляясь вправо. Сначала мы загружаем стек с 0. Затем мы читаем первую букву input (
i
), отбрасываем его (~
), читаем вторую букву (i
) и уменьшаем его значение ASCII по модулю 10 (a%
). Это отображает a, e, r, l, g и t на 7, 1, 4, 8, 3 и 6 соответственно - давайте назовем это число N..
Выдвинем два значения из стека - N и 0 - и перейдем к строка N, символ 0.После прыжка рыба выполняет один такт перед выполнением инструкций, поэтому игнорирует первый символ и пересекает строку N, которая загружает соответствующее слово в стек. Наконец, мы переходим к строке 2, которая выводит весь стек и завершает работу.
источник
JavaScript, 78 байт
Это своего рода порт моего ответа на Python . Мы храним слова в строке, где каждое находится в противоположной позиции по отношению к своему аналогу. Мы находим индекс данного слова
w
и получаем этот индекс с конца, чтобы вернуть результат.Тестовый фрагмент:
источник
Par / GP, 86 байт
Pari / GP - интерактивный интерпретатор, нам не нужен «print» -cmd для вывода; однако для утилиты Try-It_Online требуется "print" -cmd, поэтому я разделил ее на "нижний колонтитул".
Мы определяем «объект-функцию» (буква O мне очень напоминает функцию Оруэлла ... ;-)):
После этого позвоните
Попробуйте онлайн!
(Обратите внимание, что в Pari / GP приведенные здесь токены являются не строками, а допустимыми именами переменных! Этим переменным никогда не должно назначаться какое-либо значение)
источник
С накоплением, 70 байт
Попробуй это здесь! Принимает ввод в стек и оставляет вывод в стек. Например:
Этот код довольно понятен. Немного изменен для запуска всех тестовых случаев:
источник
'LF
?@x
устанавливает переменную,'...'
является строкой иLF
является переменной перевода строкиДжольф, 35 байт
Есть много непечатных. Вот hexdump, хотя он не принесет много пользы:
Вот онлайн-ссылка.
В основном код выглядит так:
источник
На самом деле 56 байтов
Попробуйте онлайн!
К сожалению, без каких-либо встроенных функций сжатия короче не сжимать строку и не распаковывать ее вручную.
Объяснение:
источник
Haskell, 104
111байтовИдея:
fromEnum
, переместите 3 шага вправо (модуль 6) и преобразуйте обратно в ключевое слово::O
Необходимо потому , что определение типа имеют некоторые проблемы. Предоставлениеf
подписиf :: O -> O
будет иметь тот же эффект , но это не то, что короткий.Редактировать:
Заменены
по
спасибо @Laikoni.
источник
f
короче:f s=toEnum$mod(3+fromEnum s)6
Дьялог АПЛ , 66 байт
Любой из них:
'slavery' 'freedom' 'ignorance' 'strength' 'war' 'peace'⊃⍨6|⎕UCS⊃⍞
использует этот метод (требуется,⎕IO←0
который используется по умолчанию во многих системах).'strength' 'freedom' 'war' 'peace' 'slavery' 'ignorance'(⍳⊃(⌽⊣))⊂⍞
выполняет поиск, а затем выбирает соответствующий элемент из обращенного списка.источник
Qbasic,
13899 байтD$
хранит все слова с левой стороны мантры, а затем все слова с правой стороны. Каждое слово дополняется пробелами до 9 букв на слово.D$
затем добавляется к себе.Затем
instr
используется для поиска индекса слова, введенного пользователем. Другая часть мантры всегда хранится точно в 9 * 3 позициях далее в строке, поэтому мы печатаем подстроку, начинающуюся с этой позиции, принимая 9 символов.источник
SmileBASIC, 92 байта
источник
Python , 80 байт
Каким-то образом обошел кснор!
Это безымянная лямбда-функция, которая возвращает результат.
Попробуйте онлайн!
Список слов организован так, что каждое из них находится в противоположной позиции по отношению к своему аналогу. По данному слову
w
мы находим его индекс в списке слов, а затем поразрядно НЕ (~
) его. Это переворачивает все биты, которые вычисляютсяn => -n-1
. Из-за отрицательной индексации Python получает противоположный индекс в списке.В качестве своего рода непреднамеренного бонуса вы можете передать любой список слов противоположностей этой функции в качестве второго аргумента.
источник