Profesörün temel bina numarası dönüştürücü


12

Nutty matematik profesörü tüm araştırmalarını rakiplerinin en zayıflarını bile tilki yapacak bir sistem kullanarak kodlamak istiyor!

Bu amaçla profesör, sadece yazdıkları sayının değil, bu sayının her bir basamağının tabanını değiştirmeye karar verdi, basamağın kendini nerede bulduğuna göre (sağdan sayarak, 1 ile başlayarak). Örneğin:

0 sayısının bir rakamı vardır, bu nedenle taban 1: 0'da temsil edilir

1 rakamı, ilk on'da bir basamak olacaktı, ancak profesörümüzün sisteminde bu geçerli değil. Birincilik sadece taban 1 basamakları için ayrılmıştır! Bu, taban 2'ye izin verilen ikinci yere çarpılması gerektiği anlamına gelir: 10

2 sayısı en az 3 taban yazılmasını gerektirir: 100

Ama şimdi 3 sayısı, rakamı ikinci sırada değiştirerek yazılabilir: 110

ve 4 olduğu gibi: 200

Fikri edinmenize yardımcı olacak bazı örnekler:

5: 210

6: 1000

7: 1010

8 1100

9: 1110

10: 1200

11 1210

12: 2000

13: 2010

14: 2100

15: 2110

16: 2200

17: 2210

18: 3000

Bu sistemi kullanarak profesörün notları onlardan başka kimseye bir anlam ifade etmeyecek ve sonunda dünyayı ele geçirecekler !!!! geceleri iyi uyu.

Tabii ki kodlama yöntemi mümkün olduğunca belirsiz olmalıdır.


Göreviniz, her biri 10 haneden birini temsil eden 10 kod parçacığı yazmaktır

0 1 2 3 4 5 6 7 8 9

dönüştürülecek sayı sırasına göre birleştirildiğinde, profesörün diabolik numaralandırma sisteminde yazılmış bir sayı üretecektir (çıktı yöntemi sizin tercihiniz olabilir, ancak yalnızca 0-9 arasındaki rakamları kullanarak okunabilir bir sayı olmalıdır)

Örneğin, parçacıklarım:

0 = MAYMUN 1 = ÖRNEK, 2 = KOD, 3 = GOLF ve 9 = TEST

sonra

19 = ÖRNEK -> 3010

20 = CODEMONKEY -> 3100

21 = CODEEXAMPLE -> 3110

22 = KODEKODE -> 3200

23 = CODEGOLF -> 3210

10 basamaktan fazla negatif sayı girilmemesi veya negatif sayılar dikkate alınmamasına rağmen, ek basamaklar için kod yazmak isterseniz ekstra kudos elde edersiniz. Bu kod golf, bu yüzden en kısa cevap (tüm snippet'lerin toplam bayt toplamlarını kullanarak) kazanır ve standart boşluklara izin verilmez.

ADDENDUM: Herkes 0'ın temel 1'de 0'ın doğru temsili olup olmadığına başlamadan önce, size bu profesörün ceviz olduğunu hatırlatmak isterim. Onunla yaşa.


1
Not: Profesörün sistemi faktöriyel sayı sistemi olarak da bilinir .
ETHproductions


Profesörün kodlamasının iyi olduğunu söylemedim .
Joe Bloggs

@KritixiLithos Bunun için teşekkür ederim! Ben onay olarak kullanmak için arıyordu.
Joe Bloggs

4
Bu arada PPCG'ye hoşgeldiniz :-)
ETHproductions 21:16

Yanıtlar:


1

Mathematica (REPL ortamı), 858 toplam bayt

9 rakamı için 86 baytlık kod snippet'i:

1;ValueQ@a||(a=0;b=3);a=10a+9;b++;FromDigits[a~IntegerDigits~MixedRadix@Range[b,1,-1]]

1'den 8'e kadar olan basamaklar için kod parçacıkları aynıdır, ancak 9'un yerine uygun basamak gelir. 0 rakamı için kod snippet'i aynıdır, ancak +9basitçe silinir.

a~IntegerDigits~MixedRadix@Range[b,1,-1]en az hane sayısı kadar büyük olduğu asürece faktöriyel sayı sistemi basamaklarının listesini hesaplar b; FromDigitsbu basamak listesini çıktı amacıyla normal bir temel 10 tamsayıya dönüştürür. (Liste öğelerinden herhangi biri 9'u aşarsa, komik bir şey olur.)

Mathematica'nın REPL ortamında, çıktıları bastırmak için hesaplamalar noktalı virgülle sonlandırılabilir; böylece noktalı virgülle ayrılmış bir zincirdeki yalnızca son çıktı görüntülenir. Parçacıklar atarafından belirlenen tamsayıyı tekrar tekrar tanımlarız ve ayrıca bgerekli olan faktöriyel sistem basamaklarının sayısına da bağlıyız. Komut ValueQ@a||(a=0;b=3), başlatılmamışsa (yani, ilk snippet'te) bu değişkenleri başlatır ve aksi takdirde onları yalnız bırakır; sonra a=10a+9;b++özyineleme yapar. Son olarak, ilk 1;parçacıklar parçacıkları birbirine yapıştırmak içindir: ara hesaplamaları 1 ile çarpar (ki daha önce hiç görmüyoruz).


Noktalı virgül istismarından hoşlanıyorum.
Joe Bloggs

0

Goruby, 790 810 980

Burada, temelde herhangi bir kabukta, satır başı ("\ r") olmadan satır başı ("\ r") yazdırılmasının, önceden yazdırılan satırın üzerine yazılması ve sonuçta yalnızca son bitin (yani nihai sonuç) gösterilir.

Bu, örneğin bir kabukta çalıştırılmalıdır ruby name_of_file.rb.

Pozitif sayıda sınırsız uzunluk için çalışır.

Kod, snippet'in on kopyasıdır ve X(üstte) her snippet için bir tane olmak üzere 0-9 arasındaki rakamlarla değiştirilir.

->*t{n,d,o="X#{t}".toi,0,''
dw{n,r=n.dm d+=1;o.pr r.ts;n>0}
$>.fu
pr"\r",o
o}

Yani, (örneğin) 8'i temsil eden snippet şöyle görünecektir:

->*t{n,d,o="8#{t}".toi,0,''
dw{n,r=n.dm d+=1;o.pr r.ts;n>0}
$>.fu
pr"\r",o
o}

Zorluk, snippet'lerin çok basamaklı bir sayıyı temsil etmek için "birleştirilmesi" gerektiğini, dolayısıyla bir sayıya rakam eklemek için sayının sonundaki köşeli parantez içine yerleştirmeniz gerektiğini belirtir. Böylece, 103 sayısı (ondalık olarak):

->*t{n,d,o="1#{t}".toi,0,''
dw{n,r=n.dm d+=1;o.pr r.ts;n>0}
$>.fu
pr"\r",o
o}[->*t{n,d,o="0#{t}".toi,0,''
dw{n,r=n.dm d+=1;o.pr r.ts;n>0}
$>.fu
pr"\r",o
o}[->*t{n,d,o="8#{t}".toi,0,''
dw{n,r=n.dm d+=1;o.pr r.ts;n>0}
$>.fu
pr"\r",o
o}[]]]

Yani sayı 108 demek.
user75200
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.