Kübik Küpü Uygulama


10

Cubically , çok özel bir sorun alt kümesi için kısa, golf benzeri cevaplar oluşturabilen oldukça yeni bir ezoterik dildir. Hafızayı 3x3 Rubik küpü şeklinde saklaması benzersizdir, bu da hesaplamaları çoğu dilden çok daha az önemsiz hale getirir. Kübik olarak, programcı, yüzlerde depolanan değerleri değiştirmek için dahili küpü döndürmeli, ardından bu değerleri hesaplamalarında kullanmalıdır. Hesaplamalar, "not defteri" olarak bilinen hayali bir yüz üzerinde depolanan tek bir 32 bit tam sayı üzerinde gerçekleştirilir. Ek olarak, Cubically kullanıcı girişi isteyebilir ve sadece tek bir tamsayı değerinden oluşan bir giriş arabelleğinde saklayabilir.

Küp

Küpün yüzleri U p, D kendi, Sol , Sağ , F ront ve B ack'tur:

   UUU
   UUU
   UUU
LLLFFFRRRBBB
LLLFFFRRRBBB
LLLFFFRRRBBB
   DDD
   DDD
   DDD

Program başladığında, küp, o yüzdeki her kare o yüzün 0 tabanlı dizinine eşit olacak şekilde başlatılır:

   000
   000
   000
111222333444
111222333444
111222333444
   555
   555
   555

Bir yüz döndürüldüğünde, her zaman saat yönünde döndürülür:

Cubically> F1

   000
   000
   111
115222033444
115222033444
115222033444
   333
   555
   555

Bir yüzün değeri, o yüzdeki her karenin toplamı olarak tanımlanır. Örneğin, yukarıdaki küpte, yüzün 0değeri 3'tür.

Sözdizimi

Komutlar önce bir komutun belleğe yüklenmesi, ardından komutun yürütülmesi için argümanların iletilmesiyle yürütülür. Örneğin, komut F1komutu Fbelleğe yükler , sonra argümanla çağırır 1. Ayrıca, F13komutu Fbelleğe yükler , sonra argümanla 1çağırır, sonra argümanla çağırır 3. Sayı olmayan herhangi bir karakter komut olarak kabul edilir ve herhangi bir sayı bağımsız değişken olarak kabul edilir.

Senin görevin

Göreviniz Cubically'nın dahili bellek küpünü istediğiniz bir dilde uygulamaktır. Kodunuz dilin çok küçük bir alt kümesini yürütebilmelidir.

Komutları

  • R - Küpün sağ yüzünü belirtilen sayıda saat yönünde döndürün.
  • L - Küpün sol yüzünü belirtilen sayıda saat yönünde döndürün.
  • U - Küpün üst yüzünü belirtilen sayıda saat yönünde döndürün.
  • D - Küpün alt yüzünü belirtilen sayıda saat yönünde döndürün.
  • F - Küpün ön yüzünü belirtilen sayıda saat yönünde çevirin.
  • B - Küpün arka yüzünü belirtilen sayıda saat yönünde döndürün.
  • %- Verilen yüzdeki değeri çıktılar. Bir yüzün değeri, o yüzdeki tüm karelerin toplamı olarak tanımlanır.

kurallar

  • Bu zorluğun yayınlandığı tarihten önce veya sonra oluşturulan herhangi bir dili, bu zorluğu çözebilecek bir program veya işlev yazmak için kullanabilirsiniz.
  • Giriş ya STDIN, bir dize ya da bir karakter dizisi olarak aktarılır (seçerseniz, lütfen belirtiniz).
  • Çıktı ya STDOUT'a ya da işlevin çıktısı olarak iletilmelidir ve ya bir tamsayı, yalnızca rakam içeren bir dize ya da bir rakam dizisi olmalıdır. Dil ise gerektirir çıkışına bir eğik yeni satır, öyle yapabilirsiniz.
  • Giriş her zaman şu biçiminde olacaktır: ([UDLRFB]\d*)*%[0-5]. Girişte boşluk karakteri olmayacaktır.
  • İçin giriş %her zaman 0 tabanlı bir dizin kullanır.

Bu , bayt en kısa cevap kazanır.

Test Durumları

%0 -> 0
%1 -> 9
%2 -> 18
%3 -> 27
%4 -> 36
%5 -> 45
R1%2 -> 27
RD3F2%5 -> 32
L1R23F1B5U9D2%3 -> 17

Daha fazla test örneği için TIO yorumlayıcısına göz atın . TIO çalışmıyorsa, bunun yerine Lua yorumlayıcısını kullanabilirsiniz .


3
Bu soru kopyası mı bu ?
TehPers


@TehPers Bence çok benzer. Gelecekteki zorluklar için, hala sorularınız varsa, bunları en az 24 saat boyunca sanal alanda bırakmanızı öneririz. (Bunu zor yoldan öğrenmek zorunda kaldım; ilk zorluklarım hiç iyi karşılanmadı. Bu kapatılmadı veya düşürülmedi, bu yüzden kötü değil , ancak daha uzun süre kum havuzunda bırakılmış olsaydı, diğer kullanıcılar Ben kusurları fark ettim.)
MD XF

@ MDXF Bunu bir dahaki sefere aklımda tutacağım. Teşekkürler!
TehPers

Eğer bir katına dışarı özledin mi 4arasına Rve Dörnekte RD3F2%5 -> 30?
Jonathan Allan

Yanıtlar:


8

Python 2 , 476 bayt

import re
c=[[i]*9for i in range(6)]
r=lambda f:[f[a+b]for a in(0,1,2)for b in(6,3,0)]
U=lambda c:[r(c[0])]+[c[j+1][:3]+c[j or 4][3:]for j in(1,2,3,0)]+[c[5]]
y=lambda c:[r(c[0])]+c[2:5]+[c[1],r(r(r(c[5])))]
z=lambda c:[c[2],r(r(r(c[1]))),c[5],r(c[3]),c[0][::-1],c[4][::-1]]
s=input()
exec("c="+"(c);c=".join("".join("zzzUz U zzUzz yyyzUzzzy zUzzz yzUzzzyyy".split()[ord(t)%11%7]*sum(map(int,n))for t,n in re.findall("([BUDLFR])(\d*)",s[:-2])))+"(c)")
print sum(c[int(s[-1])])

Çevrimiçi deneyin!

Simüle A Rubik Küp yanıtımdan bir liman . Revisit beni 47 baytlık golf oynamaya yönlendirdi.


0

Kübik , 1 bayt

Rekabetçi değil çünkü topal. Bunu kabul etme.

¶  Read a line from stdin and evaluate

Bu öğleden sonra ekledim: P


2
Sanırım en kısa koda sahipsin.
TehPers

2
@TehPers yapıyorum, ama dediğim gibi, topal. Bu yerleşik ile kübik olarak diğer rubik -küp zorluklarını kazanabilir , bunu kazanmaya gerek yoktur.
MD XF
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.