Код Для Гольфа — Мисси Эллиот, Xkcd И Байты Ascii

  • Автор темы Andreas.ratel
  • Обновлено
  • 21, Oct 2024
  • #1

Вдохновлен следующим комиксом XKCD:

код для гольфа — Мисси Эллиот, XKCD и байты ASCII

В песне Мисси Эллиот «Work It» часть припева звучит следующим образом:

4tccd

147-95 211-95 99 99 195-95 => 52 116 99 99 100

Принимая это во внимание, я предлагаю следующую задачу по гольфу:

Создайте код, который выполняет в следующем порядке:

  1. Принимает 8-битный ввод ASCII из STDIN; например 147 211 99 99 195 (Hex 6E, or Bin 01101110)
  2. Смещает 8 бит каждого байта вниз на 1 бит (я думаю, это называется 10010011 11010011 01100011 01100011 11000011 becomes 11001001 11001011 11000110 11000110 11000011 побитовый сдвиг вниз), например
  3. («положи мой 00110110 00110100 00111001 00111001 00111100 becomes 01101101 01101001 01110011 01110011 01111001 вещь вниз»);
  4. Инвертирует биты каждого байта, например workit missy becomes (32+([byte value]-127)) ("подбросить
  5. это"); ([byte value] - 95) , or in other words, (126-(31-[byte value])) Меняет местами биты для каждого байта, например
  6. («перевернуть это»); (95 + [byte value]) , or in other words, 00010011 Если значение байта меньше 32, выполните
  7. , на байте раньше

преобразование обратно в ASCII... Если значение байта по-прежнему меньше 32, повторите шаг 5.

Если значение байта больше 126, выполните

11001000 ("missy" being the input, "workit" is the function)

, на байте раньше

преобразование обратно в ASCII... ЕСЛИ значение по-прежнему больше 126, повторите шаг 6.

11001000

Отобразите вновь преобразованную строку как ASCII.

00110111

Пример этого кода в действии:

00110111

(Ввод: стоит ли оно того?)

01101110

Теперь за кадром...

n

(дайте мне поработать... в двоичном формате)

I put my thing down, flip it and reverse it

(Положи мою вещь... Побитно)

Is it worth it, let me work it

(...Переверните...)

  1. (... И перевернуть!)
  2. (преобразовано обратно в десятичное число)
  3. (Выполните необходимые математические вычисления)

(Преобразуйте обратно в ASCII и отобразите результат)

Правила

Andreas.ratel


Рег
14 Nov, 2019

Тем
68

Постов
222

Баллов
572
  • 26, Oct 2024
  • #2

АПЛ 50 45

 
 
 
 
 
 
 
 
 
 
 
 
 
 for i in input():  # Take an input, better quote it

# Is it worth it? Let me work it

print chr(

int(bin(

ord(i)>>1  # Put my thing down by bitshifting it

^255  # XOR it with 255 to flip the bits and pad to 8 bits

)[:1:-1]   # Then reverse it (but don't take the cruft

# python puts at the start of binary strings)

,2) 

)-32)%95+32    # This pulls everything into the 32-126 range

),
 

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

for i in input():print chr((int(bin(ord(i)>>1^255)[:1:-1],2)-32)%95+32), > python workit.py "missy" 4 t c c d > python workit.py "P Diddy" - 9 \ t T T d ||answer||

Гольфскрипт 43 38 35

for c in raw_input():x=sum(1<<7-i for i in range(8)if~ord(c)>>1+i&1);print'\b%c'%(x+95*((x<32)-(x>126))),

Объяснение:

missy 4tccd

Для каждого символа в строке мы сделаем следующее:

stdin

Использование:

Спасибо за помощь Питеру Тейлору.

 

GrimmJoy


Рег
09 Jul, 2014

Тем
79

Постов
178

Баллов
593
  • 26, Oct 2024
  • #3
$><<gets.chars.map{|c|c=(c.ord.to_s(2)[0..-2].tr('01','10').reverse+'11').to_i(2) (c+(c<32?95:c>126?-95:0)).chr}*''

.

u:+/(*126&>*.32&<)_95 0 95+/#.|."1#:255-<.-:a.i.1!:1[1 ||answer||

К, 68 58

u:-&95^:(>&126)"0+&95^:(<&32)"0#.|."1(1-0,0,}:)"1#:3&u:1!:1[1 missy 4tccd ||answer||

Дж - 61

k){"c"${$[a<32;95;a>126;-95;0]+a:6h$0b/:|~8#0b,0b\:x}'4h$'x}"missy" "4tccd" ||answer||

J, 55 54 символа

Руби, 115

{"c"${$[a<32;95;a>126;-95;0]+a:6h$0b/:|~8#0b,0b\:x}'4h$'x}

Эта запись неконкурентно длинная. Поэтому я скажу: «Но вы можете это прочитать!» :-П echo 'missy' | ruby golfscript.rb workit.gs > 4tccd :

2/ # "Put your thing down": do integer division (accomplishing a bit shift). ~ # "Flip it": negate the bits of the integer. 512+ #make sure the binary form will have sufficient initial 0s (the extra initial 1 will be removed). 2base #convert string to value in base 2 (as an array) (; #remove the initial 1 added by the 512 addition -1% # "Reverse it": reverse the array 2base #convert back to base 10 -32+95%32+ #this does the equivalent of the subtraction/addition logic ||answer||

Читает из

Питон 2.7, 106

{2/~512+2base(;-1%2base-32+95%32+}%

Еще один довольно длинный ответ, но эй, это моя первая попытка:

Изменено на основе комментариев Даррена Стоуна и grc ниже...

 

Tennaiche50


Рег
31 Aug, 2008

Тем
64

Постов
197

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

Питон 2.7 – 73

⎕UCS n+95ׯ1++⌿126 31∘.≥n←2⊥⊖~(8/2)⊤⌊.5×⎕UCS⍞ missy 4tccd

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

⎕UCS n+95ׯ1++⌿126 31∘.≥n←2⊥⊖~(8/2)⊤⌊.5×⎕UCS⍞
 

Wu125737


Рег
16 Dec, 2013

Тем
57

Постов
194

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

Интересно