Bu, xkcd # 153'e dayanmaktadır .
Her biri bir dize veya bir bayt veya karakter listesi veya dizisi olan 2 parametre alan bir program veya adlandırılmış işlev yapın. İkinci parametre yalnızca lrfu
(veya eşdeğer ASCII baytlarından) çizilen karakterleri içerir . İlk parametre ile temsil edilen bir bit dizisi üzerinde gerçekleştirilecek bir dizi talimat olarak yorumlanmalıdır.
Gerçekleştirilen işlem aşağıdakilere eşit olmalıdır:
- İlk parametreyi, her karakterin bitlerini birleştirerek oluşturulan tek bir bit dizisine dönüştürün (7 bit ASCII, 8 bit genişletilmiş ASCII veya standart Unicode kodlaması olarak yorumlanır). Örneğin, ilk parametre
"AB"
bu ise bu10000011000010
(7 bit),0100000101000010
(8 bit veya UTF-8)00000000010000010000000001000010
veya01000001000000000100001000000000
(iki endianitede UTF-16), vb. - İkinci parametredeki her karakter için sırasıyla ilgili komutu yürütün:
l
bit dizesini sola döndürür. Örneğin10000011000010
olur00000110000101
.r
bit dizesini sağa döndürür. Örneğin10000011000010
olur01000001100001
.f
bit dizesindeki her biti çevirir (veya tersine çevirir). Örneğin10000011000010
olur01111100111101
.u
bit dizisini tersine çevirir. Örneğin10000011000010
olur01000011000001
.
- Bit dizisini, bit başına bir karakter kullanan bir ASCII dizesine dönüştürün. Örneğin
10000011000010
olur"10000011000010"
. Bunun nedeni, 7/8 bitlik tüm kümelerin kendilerine atanmış bir karakteri olmamasıdır.
Örnek (Python'da):
>>> f("b", "rfu")
01110011
Bu döner "b"
, 8-bitlik ASCII ikili gösterimi içine 01100010
doğru döndüğü o (, 00110001
), her bit (çevirir 11001110
) ve tersine çevirir onu ( 01110011
).
Esneklik
Diğer karakterler Karakterler yerine kullanılabilir l
, r
, f
, ve u
, ancak açıkça belgelenmiş olmalıdır.
sayı tahtası
Aşağıdaki kod snippet'ini oluşturduğu için @Optimizer'a teşekkürler . Kullanmak için, "Kod snippet'ini göster" i tıklayın, en alta kaydırın ve "► Kod snippet'ini çalıştır" ı tıklayın.
"rrfrburb"
? Ayrıca, bir kişi bitleri değiştirdiğinde veya ters çevirdiğinde, her harf veya bir bütün olarak dize için mi yapılır? Daha fazla test örneği daha net hale getirecektir.