Sudoku kartı çıktısı


25

Bugünün zorluğu basittir: Herhangi bir giriş yapmadan, geçerli bir sudoku kartı çıkar.

Sudoku aşina değilseniz, Wikipedia geçerli bir panonun nasıl görünmesi gerektiğini açıklar :

Amaç, 9 × 9'luk bir ızgarayı rakamlarla doldurmaktır; böylece her sütun, her satır ve ızgarayı oluşturan dokuz 3 × 3 alt listenin her biri ("kutular", "bloklar" veya "bölgeler" de denir) içerir. 1'den 9'a kadar olan rakamların tümü.

Şimdi burada bir şey var ... 6,670,903,752,021,072,936,960 farklı geçerli sudoku kartı var . Bunlardan bazılarının daha az byte olarak sıkıştırılması ve çıktısı alınması çok zor olabilir. Diğerleri daha kolay olabilir. Bu zorluğun bir kısmı, hangi panoların en çok sıkıştırılabileceğini ve en az byte çıktısını alabilmektir.

Gönderiminiz her zaman aynı kartı çıkarmak zorunda değildir. Ancak birden fazla çıkış mümkün ise, mümkün olan her çıkışın geçerli bir kart olduğunu kanıtlamanız gerekir.

Belirli bir kılavuzun geçerli bir çözüm olup olmadığını doğrulamak için bu komut dosyasını (Magic Octopus Urn sayesinde) veya bu yanıtların herhangi birini kullanabilirsiniz. [1]Geçerli bir yönetim kurulu için a ve geçersiz bir yönetim kurulu için başka herhangi bir şey çıkartacaktır .

Açıkça 2 boyutlu olduğu sürece cevabınızı hangi formatta çıktıracağınız konusunda çok seçici değilim. Örneğin, bir 9x9 matris, dokuz 3x3 matris, bir dize, bir dizi dizisi, 9 basamaklı bir tam sayı dizisi veya bir ayırıcıyla dokuz 9 basamaklı sayı yazdırabilirsiniz. 1 boyutta 81 basamak çıkmasına izin verilmez. Belirli bir çıktı formatı hakkında bilmek istiyorsanız, yorumlarda bana sormaya çekinmeyin.

Her zamanki gibi, bu , bu yüzden seçtiğiniz dilde bulabileceğiniz en kısa cevabı yazınız!


Üç adet 3x9 matris üretebilir miyiz? Her alt matrisin her satırı, sudoku panosundaki bir satırı temsil eder. Gibi bu
dylnan

2
İlgili ama bir dup değil . Ayrıca, esnek çıktılara izin veriyorsanız , kolmogorov karmaşıklığının uygulandığından emin değilim , çünkü normalde kesin sanat gibi sabit çıktılar içindir.
BradC

Yanıtlar:


13

Pyth, 22 14 12 10 bayt

.<LS9%D3 9

Bay Xcoder sayesinde 2 bayt kurtarıldı.

Burada dene

.<LS9%D3 9
     %D3 9     Order the range [0, ..., 8] mod 3.
  >            For each, ...
.< S9          ... Rotate the list [1, ..., 9] that many times.

11: m.<S9d%D3 9.
Sayın Xcoder

O out, 10 Çapraz: .<LS9%D3 9.
Sayın Xcoder

Bağlantıyı güncellemek
isteyebilirsiniz


8

T-SQL, 96 89 bayt

Önemsiz çıktılardan daha kısa bulundu!

SELECT SUBSTRING('12345678912345678',0+value,9)FROM STRING_SPLIT('1,4,7,2,5,8,3,6,9',',')

Oluşturulan bellek içi tabloyla tanımlandığı gibi STRING_SPLIT(SQL 2016 ve sonrasında desteklenir) farklı noktalardan başlayan 9 karakterli dizeleri ayıklar . 0+valueBen tam sayıya örtük bir döküm yapabileceği en kısa yolu oldu.

Orijinal önemsiz çıktı (96 bayt):

PRINT'726493815
315728946
489651237
852147693
673985124
941362758
194836572
567214389
238579461'


6

Python 2 , 53 bayt

r=range(9)
for i in r:print[1+(j*10/3+i)%9for j in r]

Çevrimiçi deneyin!


Alternatifler:

Python 2 , 53 bayt

i=0;exec"print[1+(i/3+j)%9for j in range(9)];i-=8;"*9

Çevrimiçi deneyin!

Python 2 , 54 bayt

for i in range(81):print(i/9*10/3+i)%9+1,'\n'*(i%9>7),
i=0;exec"print[1+(i/3+j)%9for j in range(9)];i+=10;"*9
r=range(9);print[[1+(i*10/3+j)%9for j in r]for i in r]

5

Python 3 , 58 55 bayt

l=*range(10),
for i in b"	":print(l[i:]+l[1:i])

Çevrimiçi deneyin!

  • Jo King sayesinde -3 bayt,

Bayt dizesinin elemanları [1, 4, 7, 2, 5, 8, 3, 6, 9], dönmelerine izin vermek için kullanılan sayıları vererek sona erer [0..9]. 0Uzaklaştırılır l[1:i]ve (iki characaters alır boş bir byte için bir ihtiyaç vardır \0) bir bit nesnesinde temsil etmek.

55 bayt

_,*l=range(10)
for i in b"	":print(l[i:]+l[:i])


@JoKing Zeki, teşekkürler
dylnan 19:18

4

Jöle , 9 8 bayt

9Rṙ`s3ZẎ

Çevrimiçi deneyin!

9Rṙ`s3ZẎ
9R         Range(9) -> [1,2,3,4,5,6,7,8,9]
   `       Use the same argument twice for the dyad:
  ṙ        Rotate [1..9] each of [1..9] times.
           This gives all cyclic rotations of the list [1..9]
    s3     Split into three lists.
      Z    Zip. This puts the first row of each list of three in it's own list, 
           as well as the the second and third.
       Ẏ   Dump into a single list of nine arrays.

4

Toplu iş, 84 bayt

@set s=123456789
@for %%a in (0 3 6 1 4 7 2 5 8)do @call echo %%s:~%%a%%%%s:~,%%a%%

@ Mnemonic'in çıktısını kullanır. callDeğişkeni dilimleme işlemine dahil etmek için kullanılır (normalde sadece sayısal sabitleri kabul eder).



4

Perl 6 , 40 32 27 bayt

Nwellnhof sayesinde -5 bayt

{[^9+1].rotate($+=3.3)xx 9}

Çevrimiçi deneyin!

9x9'luk bir matris döndüren adsız kod bloğu. Her satırı 1 ila 9 aralığındaki farklı bir dönüşe eşler.


4

J , 18 bayt

>:(,&|:|."{,)i.3 3

Çevrimiçi deneyin!

Çıktı

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

Nasıl çalışır

>:(,&|:|."{,)i.3 3
             i.3 3  The 2D array X = [0 1 2;3 4 5;6 7 8]
   ,&|:|."{,        3-verb train:
   ,&|:               Transpose and flatten X to get Y = [0 3 6 1 4 7 2 5 8]
           ,          Flatten X to get Z = [0 1 2 3 4 5 6 7 8]
       |."{           Get 2D array whose rows are Z rotated Y times
>:                  Increment

Süslü versiyonu, 23 bayt

|.&(>:i.3 3)&.>|:{;~i.3

Çevrimiçi deneyin!

Çıktı:

┌─────┬─────┬─────┐
│1 2 3│4 5 6│7 8 9│
│4 5 6│7 8 9│1 2 3│
│7 8 9│1 2 3│4 5 6│
├─────┼─────┼─────┤
│2 3 1│5 6 4│8 9 7│
│5 6 4│8 9 7│2 3 1│
│8 9 7│2 3 1│5 6 4│
├─────┼─────┼─────┤
│3 1 2│6 4 5│9 7 8│
│6 4 5│9 7 8│3 1 2│
│9 7 8│3 1 2│6 4 5│
└─────┴─────┴─────┘

Nasıl çalışır

|.&(>:i.3 3)&.>|:{;~i.3
                    i.3  Array [0 1 2]
                 {;~     Get 2D array of boxed pairs (0 0) to (2 2)
               |:        Transpose
|.&(>:i.3 3)&.>          Change each pair to a Sudoku box:
            &.>            Unbox
    >:i.3 3                2D array X = [1 2 3;4 5 6;7 8 9]
|.&                        Rotate this 2D array over both axes
                             e.g. 1 2|.X gives [6 4 5;9 7 8;3 1 2]
            &.>            Box again so the result looks like the above

4

05AB1E , 14 12 bayt

8ÝΣ3%}ε9Ls._

-2 Bayt'ın Pyth cevabının portu oluşturarak bayt .

Çevrimiçi deneyin. (Güzel yazdırmak için altbilgi eklenir. Gerçek sonuç 9x9'luk bir matristir; görmek için altbilgiyi kaldırmaktan çekinmeyin.)

Açıklama:

8Ý              # List in the range [0, 8]
  Σ  }          # Sort the integers `i` by
   3%           #  `i` modulo-3
      ε         # Map each value to:
       9L       #  List in the range [1, 9]
         s._    #  Rotated towards the left the value amount of times

Orijinal 14 baytlık çözüm:

9Lε9LN3*N3÷+._

Çevrimiçi deneyin. (Güzel yazdırmak için altbilgi eklenir. Gerçek sonuç 9x9'luk bir matristir; görmek için altbilgiyi kaldırmaktan çekinmeyin.)

Açıklama:

9L                # Create a list of size 9
  ε               # Change each value to:
   9L             #  Create a list in the range [1, 9]
     N3*N3÷+      #  Calculate N*3 + N//3 (where N is the 0-indexed index,
                  #                        and // is integer-division)
            ._    #  Rotate that many times towards the left

Her iki cevap Sudoku ile sonuçlanır:

123456789
456789123
789123456
234567891
567891234
891234567
345678912
678912345
912345678

4

Octave & Matlab, 50 48 29 bayt

mod((1:9)+['furRaghAt']',9)+1

Çevrimiçi deneyin!

-2 Johnathon frech'e teşekkürler

-14 Sanchises Broadcast ek önerisi sayesinde, uyumsuzluğa da dikkat çekti.

-5 vektörün bir karakter dizisi ve yer değiştirmeyle matlab üzerine yazılabildiğini fark ederek.

Sezgiseldi, şimdi öyle değil. Char dizgisi tarafından belirlenen değerlere göre 1: 9'u 9 satıra yaymak için yayın toplamayı kullanır.

Sudoku kurulu üretti:

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

Merhaba ve PPCG'ye hoş geldiniz; güzel ilk mesaj.
Jonathan Frech


Tabii ki, matrisin kendisinde tanımlanabilir. Baytları da yanlış saymış olmalıyım.
Poptimist

Bu şimdi Octave, artık MATLAB ile uyumlu değil. İsterseniz, varsayılan PPCG formatını kopyalamak için Jonathan'ın bağlantısının üstündeki küçük zincir simgesini kullanabilirsiniz.
Sanchises

İsterseniz, yayın ekleme ile bunu 34 bayta kadar indirebilirsiniz: Çevrimiçi deneyin!
18'de Sanchises


3

Java 10, 82 75 bayt

v->{for(int i=81;i-->0;)System.out.print((i/9*10/3+i)%9+1+(i%9<1?" ":""));}

-7 byte @TFeld'in Python 2 cevaplarından birinin portunu oluşturarak .

Çevrimiçi deneyin.

Açıklama:

v->{                    // Method with empty unused parameter and no return-type
  for(int i=81;i-->0;)  //  Loop `i` in the range (81, 0]
    System.out.print(   //   Print:
     (i/9               //    (`i` integer-divided by 9,
         *10            //     then multiplied by 10,
         /3             //     then integer-divided by 3,
           +i)          //     and then we add `i`)
             %9         //    Then take modulo-9 on the sum of that above
               +1       //    And finally add 1
    +(i%9<1?            //    Then if `i` modulo-9 is 0:
            " "         //     Append a space delimiter
           :            //    Else:
            ""));}      //     Append nothing more

Aşağıdaki sudokuyu (aşağıdaki gibi yeni satırlar yerine ayrılmış alan) çıkarır:

876543219
543219876
219876543
765432198
432198765
198765432
654321987
321987654
987654321

2

Python - 81 bayt

l=list(range(1,10))
for i in range(1,10):print(l);l=l[3+(i%3==0):]+l[:3+(i%3==0)]

Çevrimiçi Deneyin

81 bayta sahip olmayı seviyorum, ancak bazı optimizasyonlardan sonra :(

Python 2 - 75 68 59 58 bayt

@DLosc sayesinde -7 bayt

@Mnemonic sayesinde -9 bayt

@JoKing sayesinde -1 bayt

l=range(1,10)
for i in l:print l;j=i%3<1;l=l[3+j:]+l[:3+j]

Çevrimiçi Deneyin


2
81 bytes Mükemmel puan! : D
DJMcMayhem

@DJMcMayhem Yaparak daha kısa hale getirmeyi düşünüyordum r=range(1,10)ama güzelliği mahvedemedim
Don Bin


@DLosc Ooh akıllıca yeniden kullanımıl
Don Bin

Python 2'ye aldırış etmezseniz, parenleri baskıdan çıkarabilir ve liste paketini kaldırabilirsiniz.


2

R , 54 bayt

x=1:9;for(y in(x*3)%%10)print(c(x[-(1:y)],x[(1:y)]))

Çıktı:

[1] 4 5 6 7 8 9 1 2 3
[1] 7 8 9 1 2 3 4 5 6
[1] 1 2 3 4 5 6 7 8 9
[1] 3 4 5 6 7 8 9 1 2
[1] 6 7 8 9 1 2 3 4 5
[1] 9 1 2 3 4 5 6 7 8
[1] 2 3 4 5 6 7 8 9 1
[1] 5 6 7 8 9 1 2 3 4
[1] 8 9 1 2 3 4 5 6 7

Çevrimiçi deneyin!





1

C (clang) , 65 bayt

f(i){for(i=0;i<81;)printf("%d%c",(i/9*10/3+i)%9+1,i++%9>7?10:9);}

İşlev artık yeniden kullanılabilir

Çevrimiçi deneyin!


Rakamlarınızı ayırmak için bir NUL baytı yazdırmak yerine, aynı bayt sayısında bir sekme karakteri kullanabilirsiniz.
Jonathan Frech

“Gönderiminiz her zaman aynı kartı çıkarmak zorunda değildir. Ancak, birden fazla çıkış yapılması mümkün ise, her çıkışın geçerli bir kart olduğunu kanıtlamanız gerekir.” Birden fazla çıktıya ihtiyaç duyulduğu söylenemez. @ceilingcat
Logern 24:18

1
@Logern Söz konusu kural, işlev bildirimlerinin yeniden kullanılabilir olması gerektiğidir . f(); f()Aynı kartı iki kez çıkarırsa sorun olmaz, ancak ikinci çağrı hiç çalışmıyorsa sorun değil.
Anders Kaseorg


61 byte, @JoKing önerilerini içerenf(i){for(i=81;i--;)printf("%d%c",(i/9*10/3+i)%9+1,i%9?9:10);}
ceilingcat

1

K (ngn / k) , 16 bayt

1+9!(<9#!3)+\:!9

Çevrimiçi deneyin!

Ngn / k cinsinden ilk cevap, erkeğin kendisinin büyük yardımı ile yapıldı.

Nasıl:

1+9!(<9#!3)+\:!9 // Anonymous fn
              !9 // Range [0..8]
    (     )+\:   // Sum (+) that range with each left (\:) argument
        !3       // Range [0..2]
      9#         // Reshaped (#) to 9 elements: (0 1 2 0 1 2 0 1 2)
     <           // Grade up
  9!             // Modulo 9
1+               // plus 1


0

Kömür , 14 bayt

E⁹⭆⁹⊕﹪⁺÷×χι³λ⁹

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı bir versiyonudur. @ Mnemonic'in çıktısını kullanır. Açıklama:

E⁹              Map over 9 rows
  ⭆⁹            Map over 9 columns and join
          ι     Current row
         χ      Predefined variable 10
        ×       Multiply
       ÷   ³    Integer divide by 3
            λ   Current column
      ⁺         Add
     ﹪       ⁹  Modulo 9
    ⊕           Increment
                Implicitly print each row on its own 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.