>>>>>+>,[>++++++[-<-------->]<+>,]<[-[█<█<]++++++++++<]>[-]>>██[>█>>█>]+[<]<<[<]>█<<+>>[>]█>[>]█+[<]<<[<]>-█>]>>[->]<[-[[<]<]++++++++++<]>[-]>[<█]>]>[>]<[[█]<]<<<<<[<]<<██>>[>]<█[->+<]<█>>[>]<[-[[<]<]++++++++++<]>███>[<<]>[[[>]>████[<]<[-[[<]<]++++++++++<]>[-]>[█<]>]>[>]<[[-]>+[>]<-<[<]<]+<<<<<[<]>[[>]+[[>]>]>[>]>[-<+>]<[<]<[>+[<]>>-<<<<<[[<]<]>>███████>[[█]>]<]<[[<]<]<[█]>]>>>[[>]<->>]]>[[>]>]<<[[[█]<]<]<<<[█]<<█>>>[>]█[-[[<]<]++++++++++<]>>[[>]+[------->++<]>.+.+++++.[---->+<]>+++.>>]>[>]+[------->++<]>++.++.---------.++++.--------.
>>>>>+>,[>++++++[-<-------->]<+>,]<[-[[<]<]++++++++++<]>[-]>>[[[>]>>[>]+[<]<<[<]>[<<+>>[>]>>[>]<+[<]<<[<]>-]>]>>[->]<[-[[<]<]++++++++++<]>[-]>[<<]>]>[>]<[[-]<]<<<<<[<]<<[>>>[>]<[[->+<]<]>>[>]<[-[[<]<]++++++++++<]>[-]>[<<]>[[[>]>[>]+[<]<[-[[<]<]++++++++++<]>[-]>[<<]>]>[>]<[[-]>+[>]<-<[<]<]+<<<<<[<]>[[>]+[[>]>]>[>]>[-<+>]<[<]<[>+[<]>>-<<<<<[[<]<]>>[[-]+>]>[[>]>]<]<[[<]<]<[<]>]>>>[[>]<->>]]>[[>]>]<<[[[-]<]<]<<<[<]<<]>>>[>]<[-[[<]<]++++++++++<]>>[[>]+[------->++<]>.+.+++++.[---->+<]>+++.>>]>[>]+[------->++<]>++.++.---------.++++.--------.
Попробуйте онлайн!
Это реализует сито Эратосфена.
Начальные >>>>>+>,[>++++++[-<-------->]<+>,]
вводят каждую цифру в виде кода символа и вычитают 47, чтобы поместить ее в диапазон 1-10. Это позволяет значению ячейки 0 обозначать интервал между числами. В +>
начале этого раздела число должно быть не менее двух цифр, что будет важно в ближайшее время.
Следующее, и первое, что я понял, это раздел <[-[[<]<]++++++++++<]>[-]>
. Это встречается в коде несколько раз, каждый с различными шаблонами редактирования, но было нетрудно догадаться, что все эти экземпляры, вероятно, были одним и тем же кодом. Этот код требует три нуля слева от десятичного числа на ленте, и его эффект заключается в уменьшении числа. Последняя итерация цикла помещает значение 10 в две ячейки слева от числа, но [-]
очищает его.
Если десятичное число было 0, посторонние 10 не создаются, а обнуляемая ячейка [-]
является самой значимой цифрой. В этом случае головка ленты занимает вторую по значимости цифру (поэтому необходимы как минимум две цифры). За большинством экземпляров этого фрагмента сразу же следует [<<]>
, что помещает головку в ненулевую ячейку в нормальных условиях и нулевую ячейку, если исходное десятичное число было равно нулю. Похоже, что в этой программе десятичное представление n-1
используется для обозначения n
, так что уменьшение до 0
улавливается вместо уменьшения до -1
.
Следующая часть помещает числа от n-1 (n) до 0 (1) на ленте:
>[ until the number reaches zero:
[ for each digit:
[>]>>[>]+[<]<<[<]> create a placeholder for the next copy
[ while the original value of the digit is nonzero:
<<+ add 1 to copy two cells left (to keep one copy)
>>[>]>>[>]<+ go to new copy and increment that cell
[<]<<[<]>- go back to original digit and decrement
] (this is effectively the same as [<+>>+<-] but with the cells at variable locations)
>] next digit
>>[->] cancel the placeholder 1s that were used for the new copy
<[-[[<]<]++++++++++<]>[-]>[<<]> decrement
]
>[>]<[[-]<] clean up the trash 10s on the tape while ending at a known location relative to the last number
Теперь эти числа находятся на ленте с двумя нулевыми ячейками, разделяющими их. <<<<<[<]<<
помещает нас в последнюю ячейку предпоследнего числа на ленте, где мы будем находиться на каждой итерации цикла. Цикл завершается, когда обрабатываются все числа, кроме оригинала.
В начале цикла мы перемещаем текущее число (последнее еще на ленте) на одну ячейку вправо, чтобы иметь место для уменьшения, а затем продолжаем и уменьшаем:
[>>>[>]<[[->+<]<]>>[>]<[-[[<]<]++++++++++<]>[-]>[<<]>
Если это уменьшение не уменьшилось, мы переходим к преобразованию числа в унарное:
[[[>]>[>]+[<]<[-[[<]<]++++++++++<]>[-]>[<<]>]
Обратите внимание, что этот отрубленный имеет открытый [
. В результате остальная часть этого цикла пропускается, если число было 0 (представляющее 1). После преобразования в унарный, мы убираем оставшиеся 10 с, перетаскивая унарное представление с нами влево:
>[>]<[[-]>+[>]<-<[<]<]+
Я не замечал, пока только что написал это, но +
конец этого фрагмента отделен от унарного представления одним 0. Это также является частью унарного представления: последовательность 1011...11
будет представлять 0 mod k. Следующее <<<<<[<]>
ставит нас в начале числа k+1
, начиная новый цикл.
Внутренний цикл здесь «помечает» каждое число на ленте с 1 на ячейке сразу справа и использует унарное представление в качестве часов, чтобы определить, какие числа кратны k
.
[
[>]+ mark the current decimal number
[[>]>] move to end of decimal part of tape
>[>] move to 0 in middle of unary "clock"
>[-<+>] move the following 1 to the left if possible
<[<]< if a 1 was moved this will bring us back to a zero before the start of this "clock";
otherwise the looped move command doesn't move us at all and we are at the final 1
[ if there was no gap (happens every kth iteration):
>+[<]>>- reset to original position
<<<<<[[<]<]>> go to number that was just marked
[[-]+>] replace digits with 0s (cell value 1)
>[[>]>]< go back to where we would be without this conditional
]
<[[<]<]<[<]> return to first unmarked number
]
В [[-]+>]
этом разделе была последняя часть, которую я понял. До этого я предполагал, что программа просто делала пробные разделы, но я не мог видеть, где был использован результат.
Этот цикл завершает две ячейки слева от крайнего левого числа и >>>[[>]<->>]]
удаляет маркеры, размещенные на ленте, и возвращает нас к концу ленты снова. После этого >[[>]>]<<[[[-]<]<]
удаляются либо одинарные часы, либо, если весь этот сегмент был пропущен, оставшиеся 10 с. Цикл устанавливается в исходное состояние с помощью <<<[<]<<]
.
После этого просто читаем, был ли введенный номер заменен на 1 в любой момент:
>>>[>]<[-[[<]<]++++++++++<]>> do the check
[[>]+[------->++<]>.+.+++++.[---->+<]>+++.>>] conditionally print "not "
>[>]+[------->++<]>++.++.---------.++++.--------. unconditionally print "prime"
К счастью, фактический вывод не был отредактирован вообще.
Wolfram Language (Mathematica)
Взламывает этот ответ .
Попробуйте онлайн!
источник
Boole
неPrimeQ
.Brain-Flak, MegaTom
Попробуйте онлайн!
Эта программа выполняет пробное деление от n-2 до 1, затем выводит 1 тогда и только тогда, когда это заканчивается с коэффициентом 1.
источник
8086 DOS COM Джошуа
xxd
представление, из-за кодировок и нулевых байтов и других страшных вещей:Сначала разобрали мента вручную, затем собрали с помощью yasm. Некоторые байты были искажены тем, что использовал Джошуа, но я только что обработал их как отредактированные байты. Я на 99,72% уверен в их фактическом содержании. Хотя это не займет много времени, чтобы исправить это, если я ошибаюсь. Наслаждаться:
источник
bx < 2
чтобы закончить, а не составлять К вашему сведению, искажение было связано с тем, что изначально в качестве символа маски использовалось X, а не все исправлялось при переключении на █.Желе
Взламывает этот ответ.
Попробуйте онлайн!
Объяснение:
Глядя на
ị
иv
я думаю о создании списка чисел,ị
ndex его в некоторый список и оценивать его.«Тривиальный» способ проверки первичности в желе
ÆP
(если он может взломать представление):Æ
иP
.256
с[14, 81]
.Итак ... список в начале программы совпадает с
[14, 81, 49]
модом 256 ( TIO ) иṖ
выскакивает последний элемент.источник
sh + coreutils
Взламывает этот ответ .
Нет Попробуйте онлайн! на этот раз из-за некоторых проблем . Однако вы можете использовать jdoodle .
Возвращает по коду выхода.
0
(успех) для простого,1
(ошибка) для составного.Фактическая команда выполнена
Как взломать
base64
команду.+
это действительный символ base64.sh -c "`echo ...|base64 -d`"
к исходной программе .источник
tail +n
. Когда я попробовал твой треск на машине на работе, он пожаловался на это. Вы действительно сняли маску с правильного кода ... :(Октава , 86 байт, Стьюи Гриффин .
Попробуйте онлайн!
Это было весело! Я боролся с этим в течение хорошей пары дней.
Первым признаком было распознавание
eval([...,'(x)'])
как конструкции, создающей вызовisprime
функции, как конкатенацииints
иchar
неявного преобразования массива вchar
, так что...
необходим либо один из них,isprime
либо массив, который имеет значения ASCIIisprime
,[105, 115, 112, 114, 105, 109, 101]
.Остальное было просто пролистывать документацию, чтобы выяснить, что
reshape
может принять одно неизвестное измерение[]
, хотя, полагаю, я мог бы сделатьreshape(...,2, 7)
с тем же количеством байтов.Использование
+'e'
(101) вместо+'d'
(100) было приятным прикосновением, которое тянуло меня еще на несколько минут, пока я не заметил, что последние цифры (необъясненные) были,00
а не01
, и с этим это было легко.источник
JavaScript
Попробуйте онлайн!
Я почему-то сомневаюсь, что это именно то, что вы имели в виду, но это работает.
источник
> <> , Esolanging фрукты
в
Попробуйте онлайн!
Умное использование редактирования новой строки немного смутило меня. Кажется, не работает на 1 или 2, хотя.
источник
^
,v
,/
или\
для второй заготовки мог бы работать там. Теперь я хотел бы, чтобы я покрыл*
вместо/
.Java (OpenJDK 8) , Волшебная Урна Осьминога
Попробуйте онлайн!
Код взят из RosettaCode и объяснен на SO .
источник
Python 3 , 44 байта, osuka_
Попробуйте онлайн!
Не работает, когда х <2.
or 0
Может быть заменен>0{2 spaces}
или даже 4 пробелаДля проблемы x <2, так как
i>=x
должен быть помещен впереди (иначе будет бесконечный цикл), иi>=x
возвращает true немедленно, когда x <2, так что я думаю, что это не исправить.источник
М, Дилнан
Это, вероятно, не было намеченным решением.
Попробуйте онлайн!
Как это работает
ÆP
это встроенный тест на простотуø
существа новая, ниладическая цепь. Поскольку предыдущее возвращаемое значение (результатÆP
) выходит из области видимости, это печатает его неявно.“;;“»
оценивает список строк["< Aalst" ""]
иV
пытается их оценить .s
пытается разбить свой аргумент на куски длиной 0 , что приводит к сбою интерпретатора M, подавляя дальнейший вывод.источник
Пиф, мистер Xcoder
источник
Python 3 , пользователь71546
Попробуйте онлайн!
источник