Codegolf - Jfor? Больше Похоже На Xnor

  • Автор темы Evsovych
  • Обновлено
  • 18, Oct 2024
  • #1

Как оказалось, Python позволяет

 
 
 # Truthy:
106 102
110 120
42 26
17 29
228 159
255 253

# Falsey:
85 170
228 67
17 38
255 255
38 120
21 21
 
to be сжатый к 255 . However, 0 звучит как odor . Since all similar-phonic phrases have что-нибудь в общем, должно быть какое-то имущество, разделяемое между xnor and jfor .

Если мы посмотрим на ASCII-представление первых двух символов x: 1111000 n: 1101110 x&n: 1101000 in binary, we see:

n

Обратите внимание, что побитовое И x and 0 имеет склонность 1 s at the beginning, then some 0 , то один 1 .

Определение: пара чисел соответствует свойству JFor тогда и только тогда, когда их побитовое И в двоичном виде соответствует следующему регулярному выражению (исключая ведущие 0): /1+0+1+0*/ (1 or more 1 s, за которым следует 1 или более 0s s, followed by 1 or more 1 с, за которым следует 0 или более f s)

Введите коды ASCII для j and j: 1101010 f: 1100110 j&f: 1100010 соответствовать свойству JFor?

jfor

Да! Так что моя догадка оказалась верной; xnor and jfor звучат одинаково, и у них есть общее свойство (это, конечно, означает, что xnor must have that property too).

Задача

Учитывая пару чисел, определите, соответствуют ли они свойству JFor.

Эти два числа могут не быть разными, но они оба будут целыми числами из jfor to 1jfor соответственно.

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

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

Тестовые случаи

1j for

(Награда: 50 повторений за самый короткий ответ 24 июля. если он каким-то образом использует операцию XOR или XNOR; пожалуйста, укажите, соответствует ли ваша заявка критериям)

#код-гольф #задача-решение #бинарный код

Evsovych


Рег
04 Sep, 2011

Тем
66

Постов
192

Баллов
532
  • 26, Oct 2024
  • #3

Питон 2, 42 41 байт

Использует XOR, 5%3@

-1 благодаря Нилу (вдвое, а не вдвое).

& # Bitwise-AND the two (implicit) input-integer together b # Convert it to a binary-string 0« # Append a trailing 0 at the end Ô # Connected uniquify it C # Convert it from binary back to an integer # (which will result in 0/2/10/42; of which only 10 is a truthy test result) н # Pop and leave just the first digit (0/2/1/4, of which only 1 is 05AB1E truthy) # (after which the result is output implicitly) & # Bitwise-AND the two (implicit) input-integers together x # Double it (without popping) ^ # Bitwise-XOR (a&b) with 2*(a&b) 2в # Convert this to a binary-list O # Sum that list to get the amount of set bits 4Q # And check if it's equal to 4 # (after which the result is output implicitly)

Попробуйте онлайн!

 

НАДЯ АС


Рег
30 Dec, 2009

Тем
79

Постов
191

Баллов
626
  • 26, Oct 2024
  • #4

perl -Mfeature=побитовый -alp, 41 40 байт

&x^2вO4Q

Попробуйте онлайн!

Как это работает?

Программа читает строки из 1 , expecting two numbers on each line. 4 выводится для пар чисел со свойством jfor, пустая строка для пар без свойства jfor.

2 switch makes that the program loops over each line of the input, making the line available in 0 . И в конце он напечатает все, что есть в 1 . The &b0«ÔCн переключатель удаляет завершающую новую строку. (a,b)=>(~(a^b)&(a|b)).toString(2).match(/^1+0+1+0*$/) switch makes that the input is split on white space, with the components placed in null . В частности, второе число будет в (a,b)=>(a&b).toString(2).match(/^1+0+1+0*$/) .

method(x,y,(x&y)asBinary strip("0")occurancesOfSeq("01")==1)

Из-за $_=(@a=unpack(B8,$_&<>)=~/1+/g)==2 switch, this makes -pl рассматривает свои операнды как числа и выполняет над ними побитовые операции. Это делает это, пока 1 contains both numbers, only the first number is considered, as that is what Perl does with a string which is used as a number: if the beginning looks like a number, this is taken. ( <> , $_ , yada, yada, yada). So, we're doing a bitwise and of the two numbers.

AND

Это возвращает результат в двоичном представлении.

unpack

Найдите все последовательности последовательных $_=unpack(B8,$_&<>)=~/^0*1+0+1+0*$/ s. This is assigned to a list (of 0 variables). We're throwing away the results, but assignment itself does have a return value; for a list assignment, the result is the number of elements on the RHS.

-pl

Сравнивает результат (присвоения списка выше) с 2. Если он равен, установите 4=+/b≠9↑1↓b←∊×/(⊂9⍴2)⊤¨⎕ to a=>b=>Regex.Matches(Convert.ToString(a&b,2),"01").Count==1 , иначе в пустую строку.

Редактировать: Сэкономлен байт, просматривая последовательности 1 вместо полного шаблона.

 

RedBlooD


Рег
06 Nov, 2015

Тем
64

Постов
190

Баллов
520
  • 26, Oct 2024
  • #6

Япт ≔&NNθ , 11 9 байты

-

Попробуйте это

≔&NNθ⁼⁴Σ⍘⁻|⊗θθ&⊗θθ² ||answer||

Пип, 11 байт

function(x,y)xor(sum(rle(x&y)$v>0)-2,1)

Попробуйте онлайн! (Проверьте все тестовые случаи)

Основной прием позаимствован ответ xnor на Python: свойство выполняется, если двоичное представление побитового И содержит последовательность intToBits exactly once.

function(x,y)sum(rle(x&y)$v>0)==2 ||answer||

Питон 3, 137 байт

2=≢⊆⍨∧/⊤⎕ ⍝ Full program; input = a vector of two numbers ⊤⎕ ⍝ Binary representation of two numbers ∧/ ⍝ Bitwise AND ⊆⍨ ⍝ Extract chunks of ones 2=≢ ⍝ Test if there are exactly two chunks

Попробуйте онлайн!

 

BIB654


Рег
01 Feb, 2016

Тем
62

Постов
201

Баллов
551
  • 26, Oct 2024
  • #7

Mildredjes


Рег
14 Jul, 2020

Тем
66

Постов
201

Баллов
541
  • 26, Oct 2024
  • #8

APL (расширенный диалог), 9 байт

&BḄƝċ1=1

Попробуйте онлайн!

Как это работает

def f(x,y): b=format;z='08b';x=b(x,z);y=b(y,z);a="" for i in range(8):a+=str(int(x[i])and int(y[i])) return int(a[7])+a.count("10")==2 ||answer||

Р, 37 34 33 байта

-3 байта благодаря Доминику ван Эссену

1=01NTBaBAb a and b are command-line args (implicit) 01 01 (an integer literal, but treated as a string unless used in a numeric operation) N Count occurrences in: aBAb Bitwise AND of a and b TB Converted to binary 1= Test whether the number of occurrences equals 1 (0 if not, 1 if so) Autoprint (implicit)

Попробуйте онлайн!

Принимает входные данные в виде необработанных байтов, как указано в 01 . In R, this gives a length 32 vector with the least significant bit first, therefore padded with many zeros. Then compute the run lengths, i.e. sequences of consecutive identical elements. The JFor property is verified if there are exactly two runs of 1s.


(Тупое) решение с XOR:

Р, 39 байт

1=01NTBaBAb

Попробуйте онлайн!

 

Maksumko258


Рег
12 Apr, 2014

Тем
66

Постов
215

Баллов
565
  • 26, Oct 2024
  • #9

Древесный уголь, 23 19 байт

r& ¤ÔèA É :Implicit input of integer array r :Reduce by & : Bitwise AND ¤ :Convert to binary string Ô :Reverse è :Count the occurrences of A : 10, which gets coerced to a string É :Subtract 1 :Implicit output of Boolean negation

Попробуйте онлайн! Ссылка на подробную версию кода. Выводит логическое значение Charcoal, т.е. r& ¤ÔèA É for JFor, nothing if not. Edit: Switched to my version of @JonathanAllan's answer to save 4 bytes. Explanation:

-!

Введите два числа и возьмите их побитовое И.

0

Возьмите побитовое исключающее ИЛИ удвоенного числа с самим собой (у Charcoal нет оператора исключающего ИЛИ, поэтому мне придется делать это вручную) и проверьте, что результат (в базе 2) имеет ровно четыре f(a,b){for(a&=b,b=0;a;a=~a)for(b++;~a&1;a/=2);a=b^4;} bits.

 

Mirus_93_93


Рег
07 May, 2020

Тем
69

Постов
206

Баллов
581
  • 26, Oct 2024
  • #12

Перл 5 + $_ = 2 == (...) , 35 bytes

1

Попробуйте онлайн!

Объяснение

Это принимает символы в качестве входных данных, что позволяет использовать () = ... =~ /1+/g to get the first 8 chars of the binary representation of the stringwise sprintf ("%b", ...) из atof (which implicitly contains the input line) and atoi (это следующая строка ввода) и проверяет указанный шаблон. Принты $_ for JFor pair or the empty string otherwise.


Перл 5 + & , 34 bytes

-Mfeature=bitwise

Это использует @Эбигейл's подход к подсчету, Спасибо @Доминик ван Эссен!

Попробуйте онлайн!

 

Sipsik


Рег
15 May, 2006

Тем
65

Постов
202

Баллов
547
  • 26, Oct 2024
  • #14

JavaScript (V8), 44 байта

$F[1]

Попробуйте онлайн!

Принимает входные данные в виде двух чисел, возвращает двоичную строку, если они соответствуют свойству JFor, в противном случае @F

-a

Попробуйте онлайн!

Та же функция, но вместо этого для получения двоичной строки используется XOR.

 

Furik1


Рег
27 Oct, 2014

Тем
83

Постов
198

Баллов
623
  • 26, Oct 2024
  • #15

05AB1E, 8 7 байты (без бонуса XOR/XNOR)

-l

Выходы $_ for truthy and $_ / -p / 1 для фальси (только STDIN is truthy in 05AB1E, so this is allowed according to rule "Вывод может соответствовать соглашениям вашего языка для Истины и Ложи.").

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

8 байты с бонусом XOR:

$_=2==(()=sprintf("%b",$_&$F[1])=~/1+/g)

Порт @ДжонатанАлланответ на Python 2.

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

Объяснение:

lambda a,b:bin(a&b^(a&b)*2).count('1')==4

Последние четыре байта имеют несколько альтернатив, например ^ или xor .

 

Колобок64


Рег
26 Oct, 2010

Тем
72

Постов
203

Баллов
573
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно