Aritmetik Tabloların Tam Sayıları


17

Meydan okuma:

Girdiye dayalı olarak aşağıdaki altı aritmetik tablodan birinin 'tamsayı hanelerini' çıktılayın:
- add ( +);
- çıkarma ( -);
- çarpma ( *);
- bölünme ( /);
- üs alma ( ^);
- modulo işlemi ( %).

Kurallar:

  • Tam olarak aşağıdakilerden biridir aritmetik işlenen her sonucu:: Ben tamsayı-basamak 'olarak tanımlarım ne 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Bu , tüm sonuçları veya daha yüksek, her sonucu veya daha düşük sonuçlarını ve tamsayı olmayan her sonucu hariç tuttuğunuz anlamına gelir .10-1
  • Aritmetik sonuçları nasıl hesaplarız: Önce üst basamağı kullanarak, ardından sol basamağıyla işlenen kullanın. Çıktıların altısı için tutarlı olduğunuz sürece, y/xbunun tersini (yani yerine x/y) yapmanıza izin verilir ! (Eğer kullanıma izin verilmez yüzden y-xve x/yaynı yanıtında.)
  • 0 test senaryosuna bölmek için hiçbir şey vermeyeceğiz (bölme ve modulo operasyon tabloları için)
  • Kenar kasası için hiçbir şey çıkarmayacağız 0^0.

Çıktı:

Bu yüzden aşağıdakileri çıktılayın (tablo formatı biraz esnektir (aşağıya bakınız): bu nedenle çizgiler isteğe bağlıdır ve esas olarak test senaryolarının okunabilirliği için eklenmiştir):

İlave:

+ | 0 1 2 3 4 5 6 7 8 9
-----------------------
0 | 0 1 2 3 4 5 6 7 8 9
1 | 1 2 3 4 5 6 7 8 9
2 | 2 3 4 5 6 7 8 9
3 | 3 4 5 6 7 8 9
4 | 4 5 6 7 8 9
5 | 5 6 7 8 9
6 | 6 7 8 9
7 | 7 8 9
8 | 8 9
9 | 9

Çıkarma:

- | 0 1 2 3 4 5 6 7 8 9
-----------------------
0 | 0 1 2 3 4 5 6 7 8 9
1 |   0 1 2 3 4 5 6 7 8
2 |     0 1 2 3 4 5 6 7
3 |       0 1 2 3 4 5 6
4 |         0 1 2 3 4 5
5 |           0 1 2 3 4
6 |             0 1 2 3
7 |               0 1 2
8 |                 0 1
9 |                   0

Çarpma işlemi:

* | 0 1 2 3 4 5 6 7 8 9
-----------------------
0 | 0 0 0 0 0 0 0 0 0 0
1 | 0 1 2 3 4 5 6 7 8 9
2 | 0 2 4 6 8
3 | 0 3 6 9
4 | 0 4 8
5 | 0 5
6 | 0 6
7 | 0 7
8 | 0 8
9 | 0 9

Bölünme:

/ | 0 1 2 3 4 5 6 7 8 9
-----------------------
0 | 
1 | 0 1 2 3 4 5 6 7 8 9
2 | 0   1   2   3   4
3 | 0     1     2     3
4 | 0       1       2
5 | 0         1
6 | 0           1
7 | 0             1
8 | 0               1
9 | 0                 1

Üs:

^ | 0 1 2 3 4 5 6 7 8 9
-----------------------
0 |   1 1 1 1 1 1 1 1 1
1 | 0 1 2 3 4 5 6 7 8 9
2 | 0 1 4 9
3 | 0 1 8
4 | 0 1
5 | 0 1
6 | 0 1
7 | 0 1
8 | 0 1
9 | 0 1

Modülo:

% | 0 1 2 3 4 5 6 7 8 9
-----------------------
0 | 
1 | 0 0 0 0 0 0 0 0 0 0
2 | 0 1 0 1 0 1 0 1 0 1
3 | 0 1 2 0 1 2 0 1 2 0
4 | 0 1 2 3 0 1 2 3 0 1
5 | 0 1 2 3 4 0 1 2 3 4
6 | 0 1 2 3 4 5 0 1 2 3
7 | 0 1 2 3 4 5 6 0 1 2
8 | 0 1 2 3 4 5 6 7 0 1
9 | 0 1 2 3 4 5 6 7 8 0

Zorluk kuralları:

  • Sondaki yeni satırlar ve sondaki boşluklar isteğe bağlıdır
  • Test kutularındaki yatay ve dikey çizgiler isteğe bağlıdır. Bunları yalnızca daha iyi okunabilirlik için ekledim.
  • Her sonuç arasındaki boşluklar isteğe bağlı DEĞİLDİR.
  • Aritmetiğin sembolü, hangisinin olduğu açık olduğu sürece farklı olabilir. Yani ×veya çarpma ·yerine *; bölme ÷yerine /; vs
    Ve de başlarına olduğu gibi tek bir karakter, Python en çok üzgünüm **.
  • Giriş formatı esnektir. Karşılık gelen altı tablo için 0-5 veya 1-6 arasında bir dizin seçebilirsiniz; işlenen sembolünü girebilirsiniz; (Sonuçta görüntülediklerinizin aksine, tam dizeler girmenize veya **Python'un durumunda girmenize izin verilir .)
    Yanıtınızda hangi giriş biçimini kullandığınızdan emin olun!

Genel kurallar:

  • Bu , bayt en kısa cevap kazanır.
    Kod golf dillerinin, kod yazmayan dillerle yanıt göndermenizi engellemesine izin vermeyin. 'Herhangi bir' programlama dili için mümkün olduğunca kısa bir cevap bulmaya çalışın.
  • Cevabınız için standart kurallar geçerlidir , bu nedenle STDIN / STDOUT, fonksiyon / yöntemi uygun parametrelerle, tam programları kullanmanıza izin verilir. Çağrınız.
  • Varsayılan Loopholes yasaktır.
  • Mümkünse, lütfen kodunuz için test içeren bir bağlantı ekleyin.
  • Ayrıca, gerekirse bir açıklama ekleyin.

† Yatay ve dikey çizgiler içermeyen, ÷sembol olarak ve aşağıdakilerin y/xyerine kullanılan geçerli çıktı örneği x/y:

÷ 0 1 2 3 4 5 6 7 8 9
0   0 0 0 0 0 0 0 0 0
1   1
2   2 1
3   3   1
4   4 2   1
5   5       1
6   6 3 2     1
7   7           1
8   8 4   2       1
9   9   3           1

Dilimizdeki sonuç buysa sonuç sıfır olarak bölmek için uygun mudur? Örneğin, APL'de, 0 ÷ 0 varsayılan olarak 1'dir ve N mod-0 N'dir? Ayrıca sıfıra bölmenin daima sıfır olduğu farklı bir şema seçilebilir.
Adám

Sütunlar arasında birden fazla boşluğa izin var mı?
Adám

@ Adám Son yanıt için üzgünüz. İlk sorunuza gelince: üzgünüm. Bazı dilleri basıyorum 1, diğerleri 0, diğerleri için başka bir şey 0^0ya da böl / mod 0, ama bunun etrafında çalışmak zorunda kalacaksınız. İkinci sorunuza gelince: Evet, rakamlar hala aynı sütunlarda / satırlarda olduğu sürece istediğiniz kadar boşluk kullanabilirsiniz.
Kevin Cruijssen

Değişkenlerin sırası değişmeli olmayan işlemler için önemli mi?
Adám

Adam So @ sen çıkış için ızgara olacak demek y-x, y/x, y^xve y%xyerine x-y, x/y, x^yve x%y? Hmm, sanırım bu iyi olabilir. Cevapta düzenleyeceğim; sürece hepsini altı (çok değil tutarlı olacak şekilde y-xve x/yaynı yanıt olarak).
Kevin Cruijssen

Yanıtlar:


7

Japt , 45 bayt

@ETHproductions ile işbirliği yaptı

AÆAÇU¥'p«Z«XªOvZ+U+X)+P r"..+"SÃuXÃuAo uU)m¸·

Çevrimiçi çalıştırın!

Girişi şu şekilde alır:

"+" ek olarak

"-" çıkarma için

"*" çarpma için

"/" bölünme için

"p" üs için

"%" modulo için

Açıklama (Genişletilmiş kısayollarla):

AÆ  AÇ  U¥ 'p«  Z«  Xª OvZ+U+X)+P r"..+"SÃ uXÃ uAo uU)m¸  ·
AoX{AoZ{U=='p&&!Z&&!X||OvZ+U+X)+P r"..+"S} uX} uAo uU)mqS qR

A                                                             // By default, 10 is assigned to A
 o                                                            // Create a range from [0...9]
  X{                                         }                // Iterate through the range, X becomes the iterative item
    Ao                                                        //   Create another range [0...9]
      Z{                                 }                    //   Iterate through the range, Z becomes the iterative item
                                                              //     Take:
        U=='p                                                 //       U (input) =="p"
             &&!Z                                             //       && Z != 0
                 &&!X                                         //       && X != 0
                     ||                                       //     If any of these turned out false, instead take
                       Ov                                     //       Japt Eval:
                         Z+U+X                                //         Z{Input}X
                              )+P                             //     Whichever it was, convert to a string
                                  r"..+"S                     //     Replace all strings of length 2 or more with " "
                                                              //     (this makes sure the result !== "false" and has length 1)
                                           uX                 //   Insert X (the row number) into the front of the row
                                               u              // Insert at the beginning the first row:
                                                Ao            //   [0...9]
                                                   uU)        //   with the input inserted at the beginning
                                                      mqS     // Join each item in the final array with " "
                                                          qR  // Join the final array with "\n"

8

JavaScript (ES7), 128 bayt

f=
c=>[...c+`0123456789`].map((r,_,a)=>a.map(l=>l==c?r:r==c?l:/^\d$/.test(l=c<`^`?eval(l+c+r):l|c?l**r:l/r)?l:` `).join` `).join`
`
<select onchange=o.textContent=f(this.value)><option>><option>+<option>-<option>*<option>/<option>%<option>^<option>&<option>,<option>.</select><pre id=o>

Özel kasa 0^0bana 8 byte mal oldu.


Test snippet'inize OR ve AND gibi ek işlenenleri nasıl eklediğiniz çok güzel. +1
Kevin Cruijssen

@KevinCruijssen Bir bayt kaydetmek için VEYA kaldırmak zorunda kaldım (diğer tüm operatörler daha önce sıralar ^), ama teşekkürler!
Neil

5

Operation Flashpoint kodlama dili, 343 333 303 301 bayt

f={o=_this;s=o+" 0 1 2 3 4 5 6 7 8 9\n";i=0;while{i<10}do{j=0;s=s+format["%1",i];if(i<1&&(o=="/"||o=="%"||o=="^"))then{if(o=="^")then{if(j<1)then{s=s+"  ";j=1}}else{s=s+"\n1";i=1}};while{j<10}do{r=call format["%1%2%3",j,o,i];if(r>9||r<0||r%1>0)then{r=" "};s=s+format[" %1",r];j=j+1};s=s+"\n";i=i+1};s}

İle ara:

hint ("+" call f)

Ungolfed:

f=
{
    o=_this;
    s=o+" 0 1 2 3 4 5 6 7 8 9\n";
    i=0;
    while{i<10}do
    {
        j=0;
        s=s+format["%1",i];
        if(i<1&&(o=="/"||o=="%"||o=="^"))then
        {
            if(o=="^")then{if(j<1)then{s=s+"  ";j=1}}
            else{s=s+"\n1";i=1}
        };
        while{j<10}do
        {
            r=call format["%1%2%3",j,o,i];
            if(r>9||r<0||r%1>0)then{r=" "};
            s=s+format[" %1",r];
            j=j+1
        };
        s=s+"\n";
        i=i+1
    };
    s
}

Çıktı:

operatör +

Şebeke -

Şebeke *

Şebeke /

operatör ^

Şebeke %


5

Python 2 , 240 231 226 224 203 202 200 197 bayt

a=i=input()
R=range(10)
for z in R:a+=' '+`z`
print a
for x in R:
 try:
	d=`x`
	for b in R:c=eval("b%s(x*1.)"%('**',i)[i<'^']);d+=' '+(' ',`int(c)`)[(i<'^'or x+b>0)and c in R]
 except:pass
 print d

Çevrimiçi deneyin!

Girişi "+", "-", "*", "/", "^" veya "%" 'dan biri olarak alır.

Düzenlemeler

Bazı harika ipuçları için @FelipeNardiBatista sayesinde -9 -16

@FelipeNardiBatista'dan daha fazla yardım alarak 221'e ve daha sonra kaybederek 203'e kadar and E(c)==int(E(c)). İçinde olup olmadığını kontrol edersek E(c), range(10)her zaman bir tamsayı olacaktır. Yinelenen kontrole gerek yok.

Bu , Python 3'e geçmeden ve bildirmeden 200'ün altına inmelidir P=print. Herhangi bir fikir? Öğrenmekten her zaman mutlu olurum.

Yesss! Bunun yapılabileceğini biliyordum. 197. Şimdi yatma zamanı. Bunun için yeterince zaman geçirdim. @KevinCruijssen'in ilginç mücadelesi için teşekkürler.


1
('**',i)[i<'^']ve (i<'^'or x>0 or b>0)4 bayt kurtardı
Felipe Nardi Batista

1
a=i=input()ile for z in R:a+=' '+`z`bazı ekstra baytlar kaydedildi vsa=i+' 0 1 2 3 4 5 6 7 8 9'
Felipe Nardi Batista

1
1.vs 1.0ve E(c)in Rvs -1<E(c)<10için 2 bayt
Felipe Nardi Batista

1
x+b>0vs x>0 or b>0and "b%s(x*1.)"%('**',i)[i<'^']vs"b"+('**',i)[i<'^']+"(x*1.)"
Felipe Nardi Batista

1
Ekstra parantez içinde bir set var (, )senin katılmak için 223 bayt
Felipe Nardi Batista

4

Mathematica, 150 bayt

r=0~Range~9;p=Prepend;±i_:=Grid@p[p[If[0<=#<=9,#]/._@__->""&/@<|Thread[Characters@"+-*/^%"->{Plus,#-#2&,1##&,#/#2&,Power,Mod}]|>[i][r,#],#]&/@r,r~p~i]

Tekli bir işlev tanımlar ±Karakterlerden birini +-*/^%girdi olarak alan i(örneğin, ±"^") alıp OP'deki Gridson çıktıya tam olarak benzeyen bir nesneyi döndüren .

<|Thread[Characters@"+-*/^%"->{Plus,#-#2&,1##&,#/#2&,Power,Mod}]|>olası her giriş karakterine karşılık gelen (okunabilir) ikili fonksiyonu (burada #-#2&,1##&,#/#2&golfed versiyonları Subtract,Times,Divide) ilişkilendirir; bu nedenle <|...|>[i][r,#]ikili işlemi tüm olası ilk argümanlarla ve #ikinci argüman olarak hesaplar . If[0<=#<=9,#]/._@__->""&her sonucu a Nullveya ""tek basamaklı bir sonuç değilse dönüştürür ( /._@__->""gerekli, çünkü bazı sonuçlar 1/0eşitsizlikler tarafından işlenemez0<=#<=9 ). Son olarak, çeşitli üstbilgi ve altbilgileri önleriz ve yanıtı görüntüleriz.


Güzel cevap ve açıklama. Belki de çevrimiçi dene bağlantınız var mı? Ve bir soru / not, edge-case kuralından hiç bahsetmiyorum: " edge-case için hiçbir şey vermeyeceğiz 0^0. " Mathematica bu edge-case için varsayılan olarak hiçbir şey çıkarmıyor mu?
Kevin Cruijssen

1
Yukarıya bir link ekledim. Mathematica değerlendirir 0^0için Indeterminatebize mutsuz unevaluated sonuç veren If[0<=Indeterminate<=9, Indeterminate]orta hesaplama; ancak /._@__->""değerlendirilmemiş herhangi bir işlevi ve argümanlarını alan ve görünmez bir dizeye dönüştüren bir kuraldır.
Greg Martin

Tamam, bu yüzden Mathematica iki çelişkili kural #^0=1ve 0^#= 0` ın gerçekleştiğini doğru bir şekilde döndürür 0^0. Şimdilik iyi ve bu meydan okuma için uygun. :) Btw, bağlantınız çalışmıyor gibi görünüyor. Erişim iznim olmadığına dair bir hata alıyorum.
Kevin Cruijssen

Tamam, sandbox.open.wolframcloud.com adresine gitmeniz ve kodu kendinize yapıştırmanız, ardından böyle bir komutla çağırmanız gerekir ±"^".
Greg Martin

4

Piton 3, 343 335 363 362 bayt

Bunun en üzücü yanı, bir Java cevabının beni dövüyor olması ... Sabahları daha fazla golf oynayacağım.

o=input()
r=range(10)
g=[['']*10 for i in r]
for x in r:
 for y in r:exec('if"/"!=o and(o!="%"or x)and(o!="**"or x or y):k=str(y'+o+'x);g[x][y]=k')
if'/'==o:
 for x in r:
  for y in r:
   if x and y%x<1:g[x][y]=str(round(y/x))
if'**'==o:o='^'
print('\n'.join([' '.join([o]+list(map(str,r)))]+[' '.join([str(q)]+[' 'if len(x)!=1else x for x in g[q]])for q in r]))

ReplIT

Bir çift döngü yerine liste kavrayışına geçerek -8 bayt
+28 bayt kenar durumunu önlemek için 0 ^ 0. -.-
değiştirerek -1 bayt ==0için <1@StewieGriffin sayesinde


" Bu konuda en üzücü yanı bir Java cevap beni dövüyor ... " Bu bölüm beni kıkırdadı yaptı .. xD Bu menzil içinde olup olmadığını belirlemek için numaranın uzunluğunu nasıl kontrol gibi 0-9. Btw, umm .. Ben senin Repl. Şu anda üstel **yerine çıktılar vermektedir ^. (Ayrıca, giriş **tablosuna giriş yapmanıza izin verilmiyor , ancak çıktı tablosunda çıktı almıyorsunuz. Şu anda tam
tersi var

1
@KevinCruijssen Başarıyla düzeltildi, bayt sayısında değişiklik yok. Bunu işaret ettiğiniz için teşekkürler!
HyperNeutrino

@StewieGriffin Evet. Teşekkür ederim.
HyperNeutrino

4

Java 7, 312 305 bayt

String c(int o){String r=("+-*/^%".charAt(o))+" 0 1 2 3 4 5 6 7 8 9\n";for(int i=0,j,p;i<10;i++){r+=i+" ";for(j=0;j<10;r+=p<0|p>9?"  ":p+" ")p=p(o,i,j++);r+="\n";}return r;}int p(int o,int a,double b){b=o<1?b+a:o<2?b-a:o<3?b*a:o<4&a>0?b/a:o<5&(a!=0|b!=0)?Math.pow(b,a):a>0?b%a:-1;return b%1==0?(int)b:-1;}

Yatay / dikey çizgi kullanmaz ve karakterler meydan okuma örneklerinde ( +-*/^%) gösterildiği gibidir. Altı matematiksel işlenenin
dizinini 0-5girdi olarak kullanır.

@Frozn sayesinde -7 bayt .

Açıklama:

String c(int o){                   // Method with integer parameter and String return-type
  String r = ("+-*/^%".charAt(o))  //  Get the current mathematical operand character based on the input index
    + " 0 1 2 3 4 5 6 7 8 9\n";    //  Append the column header and a new-line
  for(int i=0,j,p; i<10; i++){     //  Loop over the rows
    r += i+" ";                    //   Append the left-side row-nr
    for(j=0; j<10;                 //   Inner-loop over the columns of the current row
        r += p<0|p>9?"  ":p+" ")   //     And after every iteration, append the result with either a space or an integer
      p = p(o,i,j++);              //    Calculate the current sum-result
                                   //   End of inner-loop (implicit / single-line body)
    r+="\n";                       //   Append result with new-line
  }                                //  End of loop
  return r;                        //  Return result String
}                                  // End of method

int p(int o,int a,double b){       // Separate method with two integer and a double parameters and integer return-type
  b = o<1 ?                        //  If the given operand is 0:
       b+a                         //   Use addition
      : o<2 ?                      //  Els-if the given operand is 1:
       b-a                         //   Use subtraction
      : o<3 ?                      //  Else-if the given operand is 2:
       b*a                         //   Use multiplication
      : o<4 & a>0 ?                //  Else-if the given operand is 3 and `a` is above 0:
       b/a                         //   Use division
      : o<5 & (a!=0|b!=0) ?        //  Else-if the given operand is 4 and not both `a` and `b` are 0:
       Math.pow(b,a)               //   Use exponentiation
      : a>0 ?                      //  Else-if the given operand is 5:
       b%a                         //   Use modulo
      :                            //  Else:
       -1;                         //   Use -1 as result
  return b%1 == 0 ?                //  If the result is not a decimal number:
     (int)b                        //   Return the result
    :                              //  Else:
     -1;                           //   Return -1 as result
}                                  // End of separate method

Test kodu:

Burada deneyin.

class M{
  String c(int o){String r=("+-*/^%".charAt(o))+" 0 1 2 3 4 5 6 7 8 9\n";for(int i=0,j,p;i<10;i++){r+=i+" ";for(j=0;j<10;r+=p<0|p>9?"  ":p+" ")p=p(o,i,j++);r+="\n";}return r;}int p(int o,int a,double b){b=o<1?b+a:o<2?b-a:o<3?b*a:o<4&a>0?b/a:o<5&(a!=0|b!=0)?Math.pow(b,a):a>0?b%a:-1;return b%1==0?(int)b:-1;}

  public static void main(String[]a){
    M m = new M();
    System.out.println(m.c(0)); // +
    System.out.println(m.c(1)); // -
    System.out.println(m.c(2)); // *
    System.out.println(m.c(3)); // /
    System.out.println(m.c(4)); // ^
    System.out.println(m.c(5)); // %
  }
}

1
Belki geçebileceği bbir şekilde doublekarşı pve kurtulmak roturduğum üçlü için değerini atayarak b.
Frozn

3

Haskell'in 230 199 182 + 53 47 ayırıcı 46 + 1 bayt = 284 247 232 229 bayt

f=head.show
g=[0..9]
h=(:" ")
y(%)s=unlines$(s:map f g>>=h):[f y:[last$' ':[f(x%y)|x%y`elem`g]|x<-g]>>=h|y<-g]
0?0=10;a?b=a^b
a!0=10;a!b|(e,0)<-a`divMod`b=e|1>0=10
a&0=10;a&b=mod a b

İşlev, (zipWith y[(+),(-),(*),(!),(?),(&)]"+-*/^%"!!)tek başına 53 bayt alan bir işlemdir, burada 0 toplama, 1 çıkarma, 2 çarpma, 3 bölme, 4 üs alma ve 5 modülondur.

Çevrimiçi deneyin!

açıklama

Daha sonra (muhtemelen). . . . Şimdilik bazı küçük çerezler:? üs alma operatörüdür! bölme operatörü ve & mod operatörüdür.

DÜZENLEME: Topluluğun bir kısmı, diğer yanıtların çoğunun (?) Haskell'in uzun bir içe aktarma olmadan sahip olmadığı eval kullanması olabilir.

EDIT2: Ørjan Johansen için -31 bayt (Wow!) Kod kapalı ve -6 bayt kapalı işlevi için teşekkürler! Ayrıca tutarlılık amacıyla 11'lerin bazılarını 10'lara değiştirdi. Güncellenmiş sürümü çevrimiçi deneyin!

EDIT3: Aynı kişi, on yedi bayt daha! Güncellenmiş, güncellenmiş sürümü çevrimiçi deneyin!


1
Daha kısa !testler: e<-a`div`b,e*b==a=eveya (e,0)<-a`divMod`b=e.
Ørjan Johansen

1
Daha kısa fonksiyon:(zipWith(#)"+-*/^%"[(+),(-),(*),(!),(?),(&)]!!)
Ørjan Johansen

Reversing testleri + bir "standart" golf hüner verir last$f k:[' '|k<0||k>9]. Son olarak (belki), [0..9]iki kez kullanırken bir isim olarak tanımlamak için ödeme yapmak için yeterince uzun.
Ørjan Johansen

Hayır, bir tane daha: a'dan daha k<-[o x y]kısadır let.
Ørjan Johansen

Tek kelime: Vay canına! :)
Görünen Ad

2

Python 2 , 197 bayt

p=input()
r=range(10)
s=' '
print p+s+s.join(map(str,r))
for i in r:print str(i)+s+s.join(eval(("s","str(j"+p+"i)")[i and(j%i==0 and'/'==p or'%'==p)or p in'**+-'and eval("j"+p+"i")in r])for j in r)

Çevrimiçi deneyin!

Giriş: Python 2

'+' İlave

'-' Sbtraction

'*' Çarpma işlemi

'/' Bölünme

'**' Üs

'%' Modülo

Python 3 , 200 bayt

p=input()
r=range(10)
s=' '
print(p+s+s.join(map(str,r)))
for i in r:print(str(i)+s+s.join(eval(("s","str(j"+p+"i)")[i and(j%i==0 and'/'in p or'%'==p)or p in'**+-'and eval("j"+p+"i")in r])for j in r))

Çevrimiçi deneyin!

Giriş: Python 3

+ İlave

- Sbtraction

* Çarpma işlemi

// Bölünme

** Üs

% Modülo

açıklama

range(10)bir değişkene depolayarak r, formatın ilk çıktı satırını alabiliriz

operator 0 1 2 3 4 5 6 7 8 9

her int'i rdizeyle eşleyerek ve dize listesini operatörle ['0','1','2','3','4','5','6','7','8','9']boşlukla sbirleştirerekp

p+s+s.join(map(str,r)

Bunun üzerine, her için iin r(aralık), her için jdeğerlendirmek ive jsizin operatörü ile

eval("j"+p+"i")

burada, işlenmemişse bir istisna atılabilir - bölünme veya modül 0 ile. Bu durumu ( i and(j%i==0 and'/'==p or'%'==p)) ve çıktı biçimini sorun ifadesinde açıklandığı şekilde işlemek için (her değerlendirmenin sonucu negatif bir sayı veya daha büyük bir sayı olmamalıdır) 10 - eval("j"+p+"i")in r),

i and(j%i==0 and'/'==p or'%'==p)or p in'**+-'and eval("j"+p+"i")in r

Böylece aritmetik tablo baskı!

Mutlu Kodlama!


Güzel Python 2 cevabı. Tahmin et 197'de bu bizi eşitliyor. Yine de birkaç deneme daha aldı. Aferin. Hafif sorun. / Tablosunda tamsayı değil .0 gösterilir. Elbette kolayca düzeltilebilir :)
ElPedro

Üzgünüm ama ben gördüm bir kez benim oyumu geri var, Düzeltme şansı olduğunda bir kez daha ekleyeceğim :)
ElPedro

Teşekkür ederim! Ancak giriş olarak '/' kullanırsanız Python 2 int yazdırır ve python 3 yazdırır. Köknar python 3 '//' kullanmanız gerekir. Bundan açıkça bahsetmiştim.
Keerthana Prabhakaran

Ve birileri benim bağlantımı düzenliyor gibi görünüyor ve te python 2 bağlantısı python 3 olarak değiştirildi. Şimdi geri döndüm.
Keerthana Prabhakaran

Bu sorunu daha önce yaşadım. Bunun nedeni aynı sayfada 2 TOI bağlantınızın olmasıdır. İki bağlantıdan birini tıkladığınızda bulduğu ilk bağlantı tanımını açar. İkinci bağlantıyı "çevrimiçi 3 deneyin" veya başka bir şeyle yeniden adlandırıp bağlantı tanımını yeniden adlandırın. O zaman iyi çalışmalı.
ElPedro

2

APL (Dyalog) , 68 76 bayt

⎕IO←0Birçok sistemde varsayılan olanı gerektirir . Girdi istenir ve işleneni temsil eden tek bir karakter bekler.

t'|'=w←⎕
(w,n),n⍪⍉⍣t∘.{(⍺w⍵≡0'*'0)∨(t∧⍵≡0)∨⍺w0'÷':⍬
n∊⍨r←⍵(⍎w)⍺:r
⍬}⍨n←⍳10

Çevrimiçi deneyin!

Çok kodun engelleyecek şekilde olması için APL sonuçları ÷0ve 0*0ve APL modülo (yani karşı koymak |) onun argümanları en diğer dillere göre tersine döndü. Aksi takdirde sadece 41 bayt olurdu :

w←⎕
(w,n),n⍪∘.{0::⍬
÷n∊⍨r←⍵(⍎w)⍺:r}⍨n←⍳10

Çevrimiçi deneyin!


Vaov! ve sonuçta Python cevabım üzerindeki sıkı çalışmam. Adil oyun.
ElPedro

1

R , 194177 bayt

-17 bayt manipüle matris çıkışına geçiş

function(o){s=0:9
y=sapply(s,function(x)Reduce(o,x,init=s))
dimnames(y)=list(s,rep('',10))
y[!y%in%s|!is.finite(y)]=' '
if(o=='^')y[1]=' '
cat(substr(o,1,1),s)
print(y,quote=F)}

Çevrimiçi deneyin!

Bu yaklaşımı değiştirmenin bazı dezavantajları vardır, yani kullanılarak optimize edilemez pryr ve orijinal matrisi ayarlamak için biraz tıknazdır, ancak ilk satırdaki bazı arka boşluklarla mükemmel şekilde çıkarılabilir.

substrHile %%mod operatörü yüzünden hala kullanmam gerekiyor . Bir şansım olduğunda bunu düzeltmeye devam edecek, hala özel davalarla uğraşmak çok tıknaz hissediyor.


0

PHP, 191 Bayt

**yerine ^girdi olarak+ - / % * **

echo$k=$argn,$k=="**"?"":" ",join(" ",$d=range(0,9));foreach($d as$r){echo"\n$r";foreach($d as$c){echo" ";($k=="/"|($m=$k=="%"))&$r<1?print" ":eval("echo in_array($c$k$r,\$d)?$c$k$r:' ';");}}

Her iki Sürümün Çevrimiçi Sürümü

PHP, eval içermeyen 245 bayt

giriş + - / % * ^

bcpowmod($c,1,$r)bunun yerine kullanmak bcmod($c,$r)çünkü bölme girdisinde üçüncü bir parametreye ihtiyacım var. $c**1%$r==$c%$r

BC Math İşlevleri

echo$k=$argn," ".join(" ",$d=range(0,9));foreach($d as$r){echo"\n$r";foreach($d as$c)echo" ",in_array($s=($k=="/"|($m=$k=="%"))&$r<1?-1:("bc".["+"=>add,"-"=>sub,"/"=>div,"*"=>mul,"^"=>pow,"%"=>powmod][$k])($c,$m?1:$r,$m?$r:9),$d)?round($s):" ";}

0

05AB1E , 56 55 bayt

9ÝDãεðýì„/%Iåyθ_*I'mQyO_*~iðë.VD9ÝQàiïëð]«TôεN<š}®I:ðý»

Çizgisiz ve ters çevrilmiş xve y. Giriş / çıkış kullanırken +, -, *, /, m, %.

Çevrimiçi deneyin veya tüm tabloları doğrulayın .

21 bayt düzeltme kenar durumlarda kullanılır /0, %0ve 0^0sonuçlanır 0, 0ve 1sırasıyla 05AB1E içinde .. Burada bu bölümü olmadan ( 34 bayt ):

9ÝDãεðýì.VD9ÝQàiïëð]«TôεN<š}®I:ðý»

Çevrimiçi deneyin veya tüm tabloları deneyin .

Açıklama:

9Ý                     # Push list [0,1,2,3,4,5,6,7,8,9]
  D                    # Duplicate it (for the header later on)
   ã                   # Take the cartesian product with itself (creating all pairs):
                       #  [[0,0],[0,1],[0,2],...,[9,7],[9,8],[9,9]]
ε                      # Map each pair `y` to:
 ðý                    #  Join the pairs with a space
   ì                   #  Prepend it before the (implicit) input-char 
 „/%Iå                 #   If the input is "/" or "%"
         *             #   and
      yθ_              #   The last value of the pair is exactly 0
                  ~    #  OR
          I'mQ        '#   If the input is "m"
                 *     #   and
              yO_      #   The sum of the pair is exactly 0 (thus [0,0])
 i                     #  If that is truthy:
  ð                    #   Push a space character " "
 ë                     #  Else:
  .V                   #   Execute the string as 05AB1E code
    D                  #   Duplicate the result
     9ÝQài             #   If it's in the list [0,1,2,3,4,5,6,7,8,9]:
          ï            #    Cast it to an integer to remove any trailing ".0"
                       #    (since dividing always results in a float)
         ë             #   Else:
          ð            #    Push a space character " "
]                      # Close both the if-else clauses and the map
 «                     # Merge the resulting list with the duplicated [0,1,2,3,4,5,6,7,8,9]
  Tô                   # Split the list in parts of size 10
    ε   }              # Map each list to:
     N<                #  Get the map-index + 1
       š               #  And prepend it at the front of the list
         ®I:           # Then replace the "-1" with the input-character
ðý                     # And finally join every inner list by spaces
  »                    # And join the entire string by newlines (which is output implicitly)
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.