Bir barda barkod yazabilir misiniz?


12

PiNapple bar Melbourne'e hoş geldiniz. En iyi kod golfçülerin hepsi, dizüstü bilgisayarları, örnekleme kokteylleri ve giderek daha kötü programlama ile burada.

Son noktayı yeniden vurgulamak için özel bir ihtiyaç hissediyorum. Giderek kötü. Alkol programlama mantığına komik şeyler yapabilir.

Golfçülerden birkaçı gittikçe daha egzotik dillerde iç içe geçmiş bazı ayıklar deniyordu. Biri INTERCAL'de dördüncü düzeye ulaşmıştı. Sonra alkol akışı durdu. Sarhoş bir şekilde, yanlışlıkla herhangi bir ağa bağlı olmayan tamamen farklı bir bilgisayardan barkod okuma algoritmalarını sildi! (Çocuklar - INTERCAL yapma. Senin iyiliğin için. Ailenin iyiliği için.)

Normalde, bu büyük bir sorun olmazdı. Ancak, bazı golfçüler sistemi yıllar önce tasarlamışlardı ve hiçbir barkod standart değildi. 1'lerin satır ve 0'ların boşluk olduğu varsayılırsa, hepsi 101 ile başlar ve 1001 ile biter. Ortadaki her şey 7 bit ASCII kodludur.

Barkeep, programınıza bağlı olarak STDIN, argüman veya dosya yoluyla 1 ve 0'lardan oluşan rasgele uzunluk (300 bit'ten az olsa da) bir dizi döndürecek büyük bir barkod okuyucusuna sahiptir. Şişenin tutulma şekline bağlı olarak ileri veya geri gelebilir. Programınız dizeyi barkodun ortasından STOUT veya dosya aracılığıyla döndürmelidir.

Ne yazık ki, depolamaya fazla para harcamamış, bu yüzden en kısa kaynağa sahip program seçilecek ve diğer golfçülerden ücretsiz içecekler ve sarhoş programlama dersleri kazanacak.

İyi şanslar!


7
Başka bir deyişle, girişin ikinci durumda mı 101...1001yoksa 1001...101tersi mi olduğunu belirleyin , ardından merkezi baytlara paketleyin.
John Dvorak

1
Tamamen doğru. Ama bunun içindeki eğlence nedir? : p
lochok

Yanıtlar:


9

GolfScript, 30 karakter

.-1%]$1=3>7/);{{1&}%2base}%""+

Giriş STDIN'de sağlanır. Örnek :

> 1011000001100001010000111001
ABC

> 1001110000101000011000001101
ABC

1

J - 35 bayt

_7(a.{~#.)\_4}.3}.|.^:([:-.2{])"."0

Açıklama daha sonra geliyor :).


4
Ne kadar sonra? ;-)
Tim

0

Pyth , 21

smCid2c:?zv@z2_z3_4 7

Açıklama:

        ?zv@z2_z           Input if 3rd character of input is 1, else reversed input.
       :        3_4        Slice out the middle portion, ASCII of the above string.
      c             7      Chop into 7 character chunks.
 mCid2                     Convert each chunk from binary to integer, then to a character.
s                          Sum up the characters into a string and print.

Soru dilden daha eski olsa da, sorunun varlığının dilin tasarımını hiçbir şekilde etkilemediğini unutmayın, çünkü soruyu bugün daha önce görmedim.

Hala kurallar kural, bu yüzden onu CW yapıyorum.


Tamam, sonra CW yapacağım.
isaacg

0

AWK, 116 bayt

/101$/{r=1}{L=split($0,a,"")
n=r?L-2:3
N=r?-1:1
while(d<L-7){c=0
for(k=0;k<7;k++){c*=2;c+=a[n+=N];d++}printf"%c",c}}

Bu sorunun çok fazla sevgi görmediğini biliyorum, ama görmeyi ve AWKçözümü merak ediyordum . Bu kadar zekice değil, ama işe yarıyor gibi görünüyor ve golf için belirgin alanlar görmüyorum. Başlangıçta gerektiğinde dizgiyi tersine çevirdim, ancak bu sadece geriye doğru hareket etmek için artış mantığını değiştirmekten daha fazla bayt ekledi.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.