Rakam bloğu


18

Bu metin bloğunun çıktısını al / yazdır:

1234567890
2468013579
3691470258
4815926037
5049382716
6172839405
7306295184
8520741963
9753108642
0987654321

Kabul edilebilir biçimler şunları içerir:

  • Sondaki satır sonları / boşluk
  • Dizelerin listesi
  • Karakter listelerinin listesi
  • Tamsayıların listesi

Ancak, son satır bir tam sayı olmadığından tamsayıların listesi kabul edilemez.

Bu . Bayt cinsinden en kısa cevap kazanır. Standart boşluklar geçerlidir.

Yanıtlar:






5

MATL , 12 11 bayt

Luis sayesinde bir bayt kurtardı. Unutmaya devam ediyorum &, çoğaltma ve aktarma için bir kısayol.

10:&*11\10\

Çevrimiçi deneyin!

@ Martin algoritmasını kullanma: x*y % 11 % 10

Açıklama:

10            % Pust 10 to the stack. Stack: 1
  :           % 1-based range. Stack: [1 2 3 ... 10]
   &          % Duplicate range. Stack: [1 2 3 ... 10],[1 2 3 ... 10]
              % Transpose last range. Stack [1 2 3 ... 10],[1;2;3 ...10]
    *         % Multiply with broadcasting. Stack: [1 2 3 ...;2 4 6...] (10-by-10 array)
     11       % Push 11 to the stack. Stack [1 2 3 ...;2 4 6 ...], 11
       \      % Modulus. 
        10    % Push 10 to the stack.
          \   % Modulus
              % Implicit display 

Aynı bayt:

10t:&*11\w\

Sen yerine bir bayt kaydedebilirsiniz t!*tarafından&*
Luis Mendo

1
@LuisMendo, yorumlarda kod snippet'inin sonunda ters eğik çizgi varsa ters çevirir.
Martin Ender

@MartinEnder Teşekkürler! Nasıl çalıştığını asla hatırlamıyorum, bu yüzden kolay yoldan gittim :-)
Luis Mendo

@LuisMendo evet farklı sözdizimi kullanan yayınlar ve yorumlarla biraz kafa karıştırıcı.
Martin Ender

Teşekkürler @LuisMendo! Bu dokümanlarýn içinde deđil mi?
Stewie Griffin



2

Retina , 59 bayt

Bayt sayımı ISO 8859-1 kodlamasını varsayar.


10$*
1
,1$`
,1+
$_¶
(?<=(¶?.+)+)1
$#1$*
1{10}1?

,(1*)
$.1

Çevrimiçi deneyin!

açıklama

...% 11% 10 algoritmasının başka bir uygulaması . Regex ile yapmanın eğlenceli kısmı, her iki modulo hesaplamasına da aynı anda bakabilmemizdir.


10$*

Dizeyi on 1s olarak başlatın .

1
,1$`

Bunların her birini virgül, bir tane ve önündeki önek ile değiştirin. Bu ,1,11,...,1111111111, yani bir tekli aralık verir .

,1+
$_¶

Şimdi aralık öğelerinin her birini tüm dizeyle ve ardından bir satır besleme ile değiştirin. Bu bize mevcut sütunu gösteren 10x10 tekli sayı ızgarası verir.

(?<=(¶?.+)+)1
$#1$*

Her 1birini eşleştirin ve grubu bir çok kez tekrarlayarak hangi satırda olduğunu belirleyin. Değiştir 1birçok ile 1s. Bu, her satırdaki değerleri satırın 1 tabanlı diziniyle çarpar.

1{10}1?

Şimdi bir adımda mod 11, mod 10 yapalım . Mod 11'i yapmak için , normalde 1{11}kalanlarla kalan dizeden hepsini kaldırırdık . Ondan sonra çıkarırdık 1{10}. Ancak eğer mümkünse on 1s artı bir tane daha kaldırırsak , regex motorunun açgözlülüğü bizim için olabildiğince uzun mod 11 yapacak ve eğer değilse, en azından mod 10'u deneyecek .

,(1*)
$.1

Son olarak, her sayıyı uzunluğuyla değiştirerek ondalık sayıya dönüştürürüz.



2

Haskell, 43 bayt

l=[1..10]
f=[[x*i`mod`11`mod`10|i<-l]|x<-l]

2

Javascript (ES6), 70 64 56 bayt

_=>[...1e9+''].map((_,a,b)=>b.map((_,c)=>-~a*++c%1‌​1%10))

Shaggy sayesinde 4 bayt, Arnauld sayesinde 8 bayt tasarruf etti.


1
66 bayt: _=>[...a=Array(10)].map((_,x)=>[...a].map((_,y)=>(x+1)*++y%11%10)). Beni 4 bayt kurtarıyorsun, seni 4 bayt kurtardım :)
Shaggy

Çok teşekkürler. Ayrıca bir hatayı düzelttiniz, bu yüzden çözümünüzün 2 baytını daha tıraş ettim ;-)
Luke

1
Önce içinde geri arama 3 parametresini kullanarak 5 bayt kaydedebilir map()kullanarak ve 3 daha bayt 1e9+''yerine Array(10). Bu yol açar _=>[...1e9+''].map((_,x,a)=>a.map((_,y)=>-~x*++y%11%10)).
Arnauld

@Arnauld: 1e9Hile için teşekkürler . Bunu bilmiyordum. Üçüncü argümanı kullanmayı düşündüm, ama bir nedenden dolayı onu kullanmadım.
Luke

Geçenlerde burada benzer numaraların bir listesini derledim .
Arnauld

2

Japt , 16 12 11 bayt

Bu benim 200 (silinmemiş) cevabım olduğu ortaya çıktı :)

Martin'in gördüğü formülün aynısı olduğu anlaşılıyor .

Aõ
£®*X%B%A

Test edin ( -Ryalnızca görselleştirme amacıyla işaretleyin)

  • Luke bir dizi dizinin döndürülmesine izin verildiğini belirten 4 bayt kurtardı .

açıklama

Aõ    :Generate an array of integers from 1 to 10, inclusive.
£     :Map over each element in the array, returning...
®     :Another map of the same array, which...
*X    :Multiplies the current element of the inner function by the current element of the outer function...
%B    :Modulus 11...
%A    :Modulus 10.
      :Implicit output of resulting 2D array

Beni döv ... Son iki karakteri bırakabilirsin ve -Rbayrağı kullanabilirsin
Luke

1
Daha da iyisi, son dört karakteri bırakın. İzin verildiği görülüyor ...
Luke

Evet, haklısın gibi görünüyor, teşekkürler, @Luke :)
Shaggy

1

Java 8, 84 bayt

o->{String r="";for(int x=0,y;++x<11;r+="\n")for(y=0;++y<11;r+=x*y%11%10);return r;}

@MartinEnder Mathematica yanıtıyla aynı algoritmayı kullanır : 1 dizinli x*y%11%10.

Açıklama:

Burada deneyin.

o->{                     // Unused Object parameter and String return-type
  String r="";           //  Result-String
  for(int x=0,y;++x<11;  //  Loop (1) from 1 to 11 (exclusive)
      r+="\n")           //    And append a new-line after every iteration
    for(y=0;++y<11;      //   Inner loop (2) from 1 to 11 (exclusive)
      r+=x*y%11%10       //    And append the result-String with `x*y%11%10`
    );                   //   End of inner loop (2)
                         //  End of loop (1) (implicit / single-line body)
  return r;              //  Return result-String
}                        // End of method




1

Odun kömürü , 30 29 19 bayt

Fχ«FχI﹪﹪×⁺¹ι⁺¹κ¹¹χ⸿

Çevrimiçi deneyin!

Martin'in formülünü kullanır .

  • Neil sayesinde 10 bayt kurtardı, öğrenmem gereken çok şey olduğunu bir kez daha kanıtladı ...

Sondaki »s'ye ihtiyacınız yoktur ve ωbunun yerine kullanabileceğiniz gibi, daha sonra olduğu gibi ””kullanarak bir sürü bayt kaydedebilirsiniz . (Yaklaşık bildiğim Önce ben önerdi olurdu hala bayt sayısını kaydetmiş hangi.)⸿Fχ«FχI﹪﹪×⁺¹ι⁺¹κ¹¹χ⸿⸿J⁰ι
Neil

@Neil ⸿Ters operatör, kodunuzun sonunda argüman olmadan ne yapar? Belgelenmiş mi?
Charlie

1
Hayır, , Ters operatörüdür ⸿olan move cursor to start of next linekarakteri (gibi ama ayrı dizede olabilir).
Neil


0

QBIC , 17 bayt

[|?[|?a*b%11%z';

Bu, elbette, Martin Yöntemini kullanır. Bu QBasic koduna çevirir .

açıklama

[|               FOR A = 1 to 10 ([ starts a FOR loop, | delimits the list of arguments; 
                 a FOR loop with 0 args loops from 1 to 10 by default with increment 1.
  ?              PRINT a newline
   [|            Start a second FOR loop from 1-10, iterator b
     ?           PRINT
      a*b%11%z   the result of Martin's formula.
              '; and suppress newlines/tabs/spaces

0

C #, 81 bayt

_=>{var r="";for(int x=0,y;++x<11;r+="\n")for(y=0;++y<11;r+=x*y%11%10);return r;}

Diğer cevapların çoğu ile aynı algoritma ve aslında @Kevins Java cevabının C # portu .



0

GolfScript , 37 24 bayt

10,{){\)*11%10%}+10,%}%`

Çevrimiçi deneyin!

Akıllı bir numara sayesinde -13 Martin Ender önerdi.


tam bir programa dönüştürürseniz ( {-> ;, }-> `), en azından ilkini bırakabilirsiniz [.
Martin Ender

Yine de zip tekniği yerine basit bir iç içe döngü kullanmak çok daha kısa:{){\)*11%10%}+10,/n}10,/
Martin Ender

@MartinEnder Umm ... fazla kullanıyorsun /. ;)
Outgolfer Erik

@MartinEnder Oh, ne yaptığını görüyorum ... kullandın int blk +-> {int space contents-of-blk}.
Outgolfer Erik

@MartinEnder ok Hileni uyguladım +... kodunu biraz değiştirmeme rağmen
Erik Outgolfer




0

Pyke, 13 bayt

TS F~u0+*i>i%

Burada deneyin!

TS            -  [1, 2, 3, 4, 5, 6, 7, 8, 9]
   F~u0+*i>i% - for i in ^:
    ~u0+      -     "01234567890"
        *     -    ^ * i
         i>   -   ^[i:]
           i% -  ^[::i]



0

TECO, 45 bayt

1un@i/
/10<@i/01234567890/jl10<qnc0a^t>jtl%n>

Rod'un Python cevabının (oldukça) basit bir uygulaması.

1un           !initialize register n to 1!
@i/<nl>/      !insert a newline!
10<           !loop for 10 rows!
@i/01234567890/  !insert the mysterious string of digits!
j             !move point to start of buffer!
l             !move forward past the newline!
10<           !loop for 10 digits on a line!
qnc           !move point forward by n characters!
0a^t          !print the character at point!
>             !end inner loop!
j             !move point to start of buffer!
t             !print (empty) line!
l             !move to start of digit string!
%n            !increment register n (for next line)!
>             !end outer loop!

<ESC> sonlandırılmış ekler ve ^ T komutu için bir kontrol karakteri kullanmak başka bir üç okunabilirlik pahasına beş bayt daha kaydeder.

Martin'in mod-11 / mod-10 formülünü kullanmak, ^ A ve ^ T için kontrolleri kullanarak 43 baytta aslında daha uzun hale getirir, çünkü çoğunlukla TECO'nun bir mod operatörü yoktur.

0ur10<%run10<qn-10"g-11%n'qn\r0a^Tqr%n>^a
^A>

Mod 11, 10'u aştığında qn cinsinden sayıyı -11 artırarak sürekli bir şekilde yapılır. qn\r0a^T Sekans, düzenleme arabelleğine sayıyı ondalık basamak olarak ekler, son basamağı tersine çevirir, arabellekten alır ve yazar, aslında mod-10 yapıyor.

Daha kısa olmasını bekliyordum. Oh iyi.

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.