Rastgele Bağlama Kartı Oluştur


16

4x12 harf / boşluk ızgarası oluşturun:

Her kalıp tam olarak bir kez görünmeli, konum rastgele seçilmelidir. Konumlar, zarların düzgün bir rastgele permütasyonuna yakın olmalıdır. Her kalıbın rastgele (tekrar, yaklaşık homojen) bir yüz görüntüleyin. 3 karakterlik pencerede yüzü sola yaslayın. Örneğin,

A  E  A  A
E  C  D  E
D  A  Qu E
E  A  H  D

İstediğim formatta rastgele olmayan bir tahtadır. Sondaki boşluğa izin verilir.

Zar:

A  A  E  E  G  N
E  L  R  T  T  Y
A  O  O  T  T  W
A  B  B  J  O  O
E  H  R  T  V  W
C  I  M  O  T  U
D  I  S  T  T  Y
E  I  O  S  S  T
D  E  L  R  V  Y
A  C  H  O  P  S
H  I  M  N  Qu U
E  E  I  N  S  U
E  E  G  H  N  W
A  F  F  K  P  S
H  L  N  N  R  Z
D  E  I  L  R  X

Eğlenceli gerçek: sette sadece 1 K var. Bu ölümü başka hangi mektup paylaşıyor?

Bu yani en kısa bytecount ile program kazanır!


3
K'ler varsa F'ler olamaz. Bu demek oluyor ki ... büyülemez! : P
Blazer

@Blazer: Evet, sen de heceleyemezsin. : P
Ry-

Yanıtlar:


5

GolfScript, 116 bayt

Puanlama bayt cinsinden olduğundan, çözümdeki tüm baytları kullanabileceğimiz anlamına gelir . Yazdırılabilir ASCII setinin dışına çıkmak, Peter Taylor'ınkinden biraz daha kısa bir çözüme izin verir , bu da kodun burada görüntülenmesini zorlaştırır. Yazdırılamaz veriler olmadan kodum şöyle görünür:

'57 BYTES OF BINARY DATA HERE'256base 26base 6/{;9.?rand}${6rand=65+.81='  u '2/=}%8/n*

Peter Taylor'ın çözümüne oldukça benziyor ve utanmadan bir parça borç almayı kabul ediyorum ( .81=' u '2/=hile gibi ), ancak daha iyi rasgelelik için ekstra bir char bayt harcadıktan sonra bile karışıklığını biraz kısaltmayı başardım .

Komut dosyasının başındaki ikili dize yazdırılamaz karakterler içeriyor ve bu nedenle doğrudan buraya yapıştırılamıyor. Bunun yerine, komut dosyasını onaltılı döküm olarak sunacağım:

0000000: 2701 8302 7c56 97d5 ec9c 52e3 462e 44d7  '...|V....R.F.D.
0000010: a8d2 81c9 6115 fc80 4da4 6cd3 b06f a6d8  ....a...M.l..o..
0000020: 4e7e 2029 12a9 f331 0b83 3481 de36 81e2  N~ )...1..4..6..
0000030: 41b4 534d dee8 13f7 ccfd 2732 3536 6261  A.SM......'256ba
0000040: 7365 2032 3662 6173 6520 362f 7b3b 392e  se 26base 6/{;9.
0000050: 3f72 616e 647d 247b 3672 616e 643d 3635  ?rand}${6rand=65
0000060: 2b2e 3831 3d27 2020 7520 2732 2f3d 7d25  +.81='  u '2/=}%
0000070: 382f 6e2a                                8/n*

Linux'ta veya xxdyardımcı programın yüklü olduğu herhangi bir sistemde , bu onaltılık dökümü, geçirilerek 116 baytlık çalışan bir GolfScript programına dönüştürülebilir xxd -r.

Düzenleme: Değiştirilen 999randile 9.?randiçin çok daha iyi bir rastgelelik. Karıştırma şimdi altta yatan RNG'nin izin verdiği ölçüde mükemmele yakın olmalıdır.


Ah - Bir haritalamaya göre sıralayabileceğini unutmuştum.
Peter Taylor

4

Python 2.7, 253229 215 karakter

from random import*
j=0
for x in map(choice,sample("AAEEGN ELRTTY AOOTTW ABBJOO EHRTVW CIMOTU DISTTY EIOSST DELRVY ACHOPS HIMNQU EEINSU EEGHNW AFFKPS HLNNRZ DEILRX".split(),16)):j+=1;print x+' u'[x=='Q']+'\n'[j%4:],

Karakterlerin çoğu sadece zarların kendisidir. Çok fazla azaltmak için çok fazla zaman harcamak istemedim

küçük düzenleme: 2 gereksiz bayt kaldırıldı (fazladan boşluk)

edit2: 229'a kadar

edit3: aşağı 215


1
kodunuzu indeksleme ile daha sıkı hale getirebilirsiniz print a+' u'[a=='Q']veprint'\n'[j%4:]
Keith Randall

@keith teşekkürler! Bu iki hileyi birleştirerek daha da sıkılaştırdım :)
Blazer

1
Onu öldürmeden 218'e indirmeyi başardım (sanırım?): 1) İthalat ifadesini değiştirin from random import*ve hepsini kaldırın r.. 2) Dizedeki ayırıcıları `` (boşluk) olarak değiştirin ve str.splitvarsayılan argümanından yararlanın. 3) Yapılması jve kullanılması gereken her şeyden kurtulun '\n'[len(d)%4:]. 4) list.popVarsayılan bağımsız değişkenini kullanın . 5) ... 6) Kâr!
Dillon

@DC ahh teşekkürler! Onları gözden kaçırdığım için şaşırdım. ama sanırım birkaç dakika içinde yazmak için aldığım şey bu: P
Blazer

1
Ve küçük bir harita hilesi kullanarak 3 karakter daha da azalttım, ama j=0...+'\n'[j%4:]çalışmak için tutmak zorunda kaldım
Blazer

3

GolfScript ( 141 139 137 karakter bayt)

Hangi 94 zar içeren dizeye genişler. Şekil, kodun kaydırılmadan görülebilmesi için sarılmasını sağlamak için eklenen yeni satır satırını içermez:

'Y
ISY
XIAOOW
VYAAEEGNABBJOOEHRTVWCIMOTUEIOSSTACHOPSHIMNQUEEINSUEEGHNWAFFKPSHLNNRZ'n/'TTELRD'*
6/{[6rand=99rand\]}%${1=.81='  u '2/=}%8/n*

Eğer (elle) analizim doğruysa, zarların sırasına ve zarlara bakılmaksızın, verileri basit değiştirme ile sıkıştırmak için yeterince uzun ve sık olan başka dizeler yoktur.
Peter Taylor

Zarları harmanlayarak ve çalışma uzunluğu kodlamasını kullanarak tabloyu 96 ila 84 karaktere indirebildim. Farkı yaratabilecek kod çözme ... kesinlikle python için yapar.
boothby

30 bitte 6 harfi, ardından 16 bayt tasarruf ederek 5 yazdırılabilir karakterde kodlayabilirsiniz. Ancak bunları çıkarmak için bazı vardiya / maskeye ihtiyacınız olacak.
ugoren

@ugoren, Ilmari bunu zaten yaptı.
Peter Taylor

@PeterTaylor, yaptığını söylersen sana inanıyorum (Golfscript'i öğrenmek için hiç uğraşmadım). Ama yazdırılamayan 57 karakter kullanıyor gibi görünüyor, ben 80 yazdırılabilir önerdi.
ugoren

2

Yakut, 201 197 karakter

%W(AAEEGN ELRTTY AOOTTW ABBJOO EHRTVW CIMOTU DISTTY EIOSST DELRVY ACHOPS HIMNQU EEINSU EEGHNW AFFKPS HLNNRZ DEILRX).sample(16).map{|c|c[rand 6]}.each_slice(4){|x|puts x.join("  ").gsub(/Q ?/,"Qu")}

(ve bu tek astarlı)

Düzenleme 1: .split ve bir çift tırnaktan kaçınmak için% W () kullanılır.

Düzenleme 2: Spesifikasyona getirildi (her çıkış sütunu arasında iki boşluk)


Ben sadece bu cevap "anonim kullanıcı" tarafından bir düzenleme onayladı; Bunun Mark sendin varsayalım ve sadece giriş unuttum (Ps Çıktı spec tam olarak görünmüyor;. Kullanarak. x.join(" ").gsub(/Q ?/,"Qu"). Düzeltmek olacağını üç ekstra karakter pahasına)
Ilmari Karonen

(Bu join, SE yazılımının boşlukları yönetmesi durumunda , dizede fazladan bir boşluk ve normal ifadede fazladan bir boşluk ve soru işareti ...)
Ilmari Karonen

@IlmariKaronen Teşekkürler, sütunlar arasındaki iki boşluğu fark etmedim. Şimdi belirtmek gerekir.
Mark Thomas

2

Powershell, 234 karakter

$d=(0..15|%{@{'AAEEGNELRTTYAOOTTWABBJOOEHRTVWCIMOTUDISTTYEIOSSTDELRVYACHOPSHIMNQUEEINSUEEGHNWAFFKPSHLNNRZDEILRX'[6*$_+(random)%6]=random}.GetEnumerator()}|sort Value|%{$_.Key})
0..3|%{($d[($_*4)..($_*4+3)])-join"   "-replace'Q ','Qu'}

İşte, okunabilirliği geliştirmeye çalışan ekstra boşluk ile aynı kodu :-)

#########################################
# roll the 16 dice and shuffle them     #
#########################################

$d=(
        0..15 | % {
                    @{
                       'AAEEGNELRTTYAOOTTWABBJOOEHRTVWCIMOTUDISTTYEIOSSTDELRVYACHOPSHIMNQUEEINSUEEGHNWAFFKPSHLNNRZDEILRX'[6*$_+(random)%6]=random
                     }.GetEnumerator() 
                  } | sort Value | % {
                                        $_.Key
                                     }
    )

############################################
# add the 16 results to the 4 by 4 grid    #
############################################

0..3 | % {
            ($d[($_*4)..($_*4+3)]) -join "   " -replace 'Q ','Qu'
         }

shufflePowershell yerleşik bir özellik farkında değilim , bu yüzden her sonucu bir anahtar / değer çifti - bir zar sonucu eşit değer ve rastgele bir sayıya eşit değer dönüştü. Daha sonra bu çiftleri değere göre sıralayıp ardından anahtarları çıktılamak bir durumdu.


belki ms cinsinden şimdiki zamandaki son rakamları bir sıralama değeri olarak kullanabilirsiniz?
Blazer

@Blazer - muhtemelen, ama "rastgele" sadece altı karakter alır :-)
Andrew Shepherd

0

Perl, 179 karakter

@d=(Qu,map"$_ ",HIMNUAAEEGNELRTTYAOOTTWABBJOOEHRTVWCIMOTUDISTTYEIOSSTDELRVYACHOPSEEINSUEEGHNWAFFKPSHLNNRZDEILRX
=~/./g);print+(splice@d,6*int rand@d/6,6)[rand 6],@d%24?$":$/while@d

İşte programın ayrıntılı bir sürümü:

my $fullset = "HIMNUAAEEGNELRTTYAOOTTWABBJOOEHRTVWCIMOTUDISTTY"
           . "EIOSSTDELRVYACHOPSEEINSUEEGHNWAFFKPSHLNNRZDEILRX";
my @dice = ("Qu");
push @dice, "$_ " for split //, $fullset;
while (@dice) {
    my @die = splice @dice, 6 * (int rand @dice / 6), 6;
    print $die[rand 6];
    print @dice % 24 ? " " : "\n";
}
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.