Otomatik çeviricimi programla


16

Gün içinde telefon otomatik çeviricileri aranacak numaranın her basamağı için bir sütun içeren delikli kartlar kullandılar. Sütunların yedi sırası vardı. İlk üç sıra sırasıyla (1,2,3), (4,5,6) ve (7,8,9) sayılarını temsil etti. Son üç sıra bu düzenlemeyi 90 ° döndürdü: (1,4,7), (2,5,8) ve (3,6,9). Orta sıra 0 için kullanıldı. Herhangi bir 1-9 basamağı, ilk üç sıradan biri ve alt üç sıradan biri olmak üzere iki deliğe sahip olacaktır. Sıfır yalnızca orta sırayı delirirdi. Numaralı 6 delikli sütun görselleştirmek olsun ( ., unpunched olan xsol kılavuz kodlama göstermek için, sadece bir, delinmektedir):

123 .
456 x
789 .
 0  .
147 .
258 .
369 x

Hangi satırları çevirmeye çalıştığımız numarayı içereceğine bakarız. 6 için, bu ikinci sıra ve dokuzuncu sıra. Bu iki sıra delinir, kalan beş sıra delinmez. İşte tüm 0-9 basamakları için delinmiş desenler:

    0 1 2 3 4 5 6 7 8 9
123 . x x x . . . . . .
456 . . . . x x x . . .
789 . . . . . . . x x x
 0  x . . . . . . . . .
147 . x . . x . . x . .
258 . . x . . x . . x .
369 . . . x . . x . . x

Amacınız bu kartları benim için yumruklamak (bir program veya işlev yazmak).

Girdi: 9999999999999'u aşmayacak şekilde makul herhangi bir biçimde (dize, tamsayı, tamsayı listesi & c.) Alınan bir sayı.

Çıktı: Sayı girişine karşılık gelen delikli sütun ızgarası. Yukarıda gösterilen başlıklara veya fazladan boşluklara ihtiyacınız yoktur, sadece delikli sütunların kendileri. Satır aralığı / sütunlar arasındaki boşluk , tutarlı olduğu sürece , öndeki / sondaki satırsonları uygundur . Konuşma, tutarlı oldukları sürece, delikli için herhangi bir (boşluk olmayan) karakteri ve delikli olmayan için başka bir karakteri kullanabilirsiniz (açık olsa da, lütfen hangi karakterleri kullandığınızı belirtin).

Bu kod golf, bu yüzden en kısa kod kazanır. Standart boşluklara izin verilmez.

Test .senaryoları (hepsi xdelinmiş , delinmiş için kullanılır):

In: 911
Out: .xx
     ...
     x..
     ...
     .xx
     ...
     x..

In: 8675309
Out: ....x..
     .x.x...
     x.x...x
     .....x.
     ..x....
     x..x...
     .x..x.x

In: 5553226
Out: ...xxx.
     xxx...x
     .......
     .......
     .......
     xxx.xx.
     ...x..x

2
Soruyu çözmek için tamamen gereksiz, ancak burada bu kartların / cihazların küçük bir galeri var .
brhfl

Eğer delinmiş herhangi bir karakter ve unpunched için başka bir karakter kullanabilir Eğer ortalama herhangi boşluk olmayan karakterler?
Outgolfer Erik

Evet, sanırım başka bir yere boşluk bırakıldığı için bu tercih edilebilir. Ve görmek uğruna. Düzenleyecek, teşekkürler.
brhfl

1
serin bir meydan okuma ... bir FORTRAN 77 cevap yazmak için cazip, ama idk nasıl golf
qwr

@ qwr "Fortran'da golf için ipuçları" gönderisi oluşturmaktan çekinmeyin.
mbomb007

Yanıtlar:



3

Pyth, 25 bayt

.tm?djNmX*3NkZ.Dtd3X*7N3Z

Kullanımları 0delikli ve "unpunched için.
Burada deneyin

açıklama

.tm?djNmX*3NkZ.Dtd3X*7N3Z
  m                      Q  For each number in the (implicit) input...
   ?d                       ... if the number is nonzero...
              .Dtd3         ... get (n - 1) divmod 3...
       mX*3NkZ              ... replace each position in `"""` with `0`...
     jN                     ... and stick them together with `"`. ...
                   X*7N3Z   ... Otherwise, `"""0"""`.
.t                          Transpose the result.

3

JavaScript (ES6), 60 54 bayt

Girdiyi tamsayılar dizisi olarak alır. 0 = deliksiz / 1 = delikli bir ikili matris döndürür .

a=>[14,112,896,1,146,292,584].map(n=>a.map(i=>n>>i&1))

Çevrimiçi deneyin!


3

05AB1E , 16 15 bayt

0 ve 1 kullanır .

ε9ÝÀ3ôD¨ø«¢O}ø»

Çevrimiçi deneyin!

açıklama

ε           }     # apply to each digit in input                
 9Ý               # push the range [0 ... 9]
   À              # rotate left
    3ô            # split into pieces of 3
      D¨          # duplicate and remove the last digit (0)
        ø         # transpose
         «        # append
          ¢O      # sum the counts of each in the current digit     
             ø    # transpose
              »   # format output



2

Python 3 , 84 80 bayt

def f(s):[print(*[int(i in[~-n//3,6--n%3-3*(n<1)])for n in s])for i in range(7)]

Çevrimiçi deneyin!


Beşinci ve altıncı satırlarınızda bir şey korkak görünüyor (ters çevrilmiş gibi görünüyorlar). [1,2,3] örneğin çapraz bir çizgi oluşturmalıdır.
brhfl

Söylediğin için @brhfl teşekkürler, düzelttim
ovs

2

C (çınlama) , 108 107 bayt

c,i;f(*q){char*r;for(i=~0;i++<6;puts(""))for(r=q;c=*r++;c-=48,putchar(".X"[(c--?16<<c%3|1<<c/3:8)>>i&1]));}

Çevrimiçi deneyin!

Girdi numarasını dize olarak alır. Çıktı basar .ve Xörneklerde olduğu gibi.

Kredi

-1 bayt teşekkürler @ sadece ASCII


1
107 ve üstbilgiyi kaldırdığınızda, üstbilgiyi
bayt

Beni fonksiyon çözümlerine doğru bayt sayımı için başlık kapanımlarının sayılması gerektiğine dair genel konsensüse işaret edebilir misiniz (tam programlar değil)
GPS


putchar(".X"[(c--?16<<c%3|1<<c/3:8)>>i&1]))c-=48Bunun yerine önerc-=48,putchar(".X"[(c--?16<<c%3|1<<c/3:8)>>i&1]))
ceilingcat

2

J , 31 20 bayt

FrownyFrog sayesinde -11 bayt!

(e."1],0,|:)1+i.@3 3

Çevrimiçi deneyin!

J , 31 bayt

1*@|:@:#.(a,0,|:a=.1+i.3 3)=/~]

Çevrimiçi deneyin!

Girdiyi rakam listesi olarak alır

0 - delinmemiş, 1 - delikli

Açıklama:

   a=.1+i.3 3 - generates the matrix and stores it into a
1 2 3
4 5 6
7 8 9

   (a,0,|:a=.1+i.3 3) - generates the entire comparison table 
1 2 3
4 5 6
7 8 9
0 0 0
1 4 7
2 5 8
3 6 9

   ]=/ - creates an equality table between the input and the comparison table

 ((a,0,|:a=.1+i.3 3)=/~]) 9 1 1
0 0 0
0 0 0
0 0 1
0 0 0
0 0 0
0 0 0
0 0 1

1 0 0
0 0 0
0 0 0
0 0 0
1 0 0
0 0 0
0 0 0

1 0 0
0 0 0
0 0 0
0 0 0
1 0 0
0 0 0
0 0 0

  1*@|:@:#. - adds the tables, transposes the resulting table and finds the magnitude

  (1*@|:@:#.(a,0,|:a=.1+i.3 3)=/~])  9 1 1
0 1 1
0 0 0
1 0 0
0 0 0
0 1 1
0 0 0
1 0 0

@FrownyFrog Teşekkür ederiz! Her zamanki gibi harikasın!
Galen Ivanov



1

Odun kömürü , 28 bayt

E⁴⭆θI⁼ι÷﹪⊖λχ³E³⭆θI∧Iλ¬﹪⁻⊖λι³

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı versiyonudur. 0/1 kullanır, ancak rasgele karakterleri 1 bayt maliyetle destekleyebilir: Çevrimiçi deneyin! . Açıklama:

E⁴              Loop from 0 to 3
  ⭆θ            Loop over input string and join
           λ     Current character
         ⊖      Cast to integer and decrement
        ﹪  χ    Modulo predefined variable 10 (changes -1 to 9)
       ÷    ³   Integer divide by literal 3
     ⁼ι         Compare to outer loop variable
    I           Cast to string
                Implicitly print each outer result on a separate line

E³              Loop from 0 to 2
  ⭆θ            Loop over input string and join
            λ   Current character
           ⊖    Cast to integer and decrement
          ⁻  ι  Subtract outer loop variable
         ﹪    ³ Modulo by literal 3
        ¬       Logical not
       λ        Inner loop character
      I         Cast to integer
     ∧          Logical and
    I           Cast to string
                Implicitly print each outer result on a separate line

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.