Patronunuz size en kısa zamanda yapması gereken 12 programlama görevinin bir listesini gönderdi. Görevler yeterince basit ancak patronunuz, sosyal ağlar tarafından emilen genç bir yazılım kralı olan çözümlerin tek bir Twitter tweet'ine sığabileceği konusunda ısrar ediyor .
Bu, tüm görevleri çözmek için yalnızca 140 baytlık kodunuz olduğu anlamına gelir; bu, görev başına ortalama 11,67 bayttır. (Evet, Twitter karakterleri sayar ancak patronunuz özellikle baytları söyler.)
12 görevin tümünü 140 baytta çözmenin bir yolu olmadığını biliyorsunuz ancak patronunuzun tüm çözümlerinizi gerçekten test etmeyeceğinden şüpheleniyorsunuz. Böylece, bazılarını tamamen atlayarak, mümkün olduğu kadar çok görevi çözmeye devam edersiniz. Zihniyetiniz, tamamladığınız görevlerin hangi alt kümesinin önemli olduğu değil , yalnızca alt kümenin mümkün olduğu kadar büyük olması ile ilgili .
Kaç tane görevi tamamlayabilirsin?
Meydan okuma
Her biri aşağıda listelenen 12 görevden birini doğru bir şekilde çözen en fazla 12 farklı program yazın. Bu programların uzunluklarının toplamı 140 baytı aşamaz.
Alternatif olarak, 140 bayttan daha uzun olmayan, 1'den 12'ye bir tamsayı alan tek bir program yazabilir ve (ideal olarak) ilgili görevi çözmek için ilerler, gerektiğinde daha fazla girdi elde edebilirsiniz. Bütün görevlerin çalışması gerekmiyor, sadece puanınıza sayılanların da çalışması gerekiyor. Çalışmayan görevlerin hata yapmasına veya başka bir şey yapmasına izin verilir.
Her iki durumda da bir "program" aslında girdiyi argüman olarak alan veya bunun için istenen ve çıktısını alan veya yazdıran bir fonksiyon olabilir. Örneğin, benzeyen 140 baytlık bir işlev f(taskNumber, taskInput)
yazabilir veya her görev için ayrı işlevler, bazıları işlevler, bazıları da tam teşekküllü programlar yazabilirsiniz.
Diğer detaylar:
Tüm kodlar aynı dilde yazılmalıdır.
Her zamanki gibi girdiler stdin'den, komut satırından, işlev argümanından veya diliniz için normal olandan gelmelidir. Çıktı stdout'a veya dilinizin en yakın alternatifine yazdırılır veya uygun bir şekilde döndürülür.
Makul miktarda girdi biçimlendirmesi yeterlidir; Örneğin, dizgelerin etrafındaki veya
\n
gerçek yeni satırların yerine yapılan alıntılar .Çıktı, herhangi bir yabancı biçimlendirme veya boşluk olmadan tam olarak ne için çağrılmalıdır. İstisna isteğe bağlı bir izleyen yeni satırdır.
Yalnızca bir REPL ortamında çalışan kod, bir program veya işlev oluşturmaz.
Birden fazla görevi çözen birden fazla program yazamazsınız. Tüm görevleri (ideal olarak) çözen bir program veya her biri tek bir görevi çözen (ideal) 12 programdır.
Yazmadığınız veya yalnızca biraz değiştirdiğiniz bir görev çözümünü yayınlamak, orijinal yazara atıfta bulunmadan ve ideal olarak izin almaksızın izin verilmez. Cevabınız öncelikle diğer tüm cevapların en kısa çözümlerini oluşturuyorsa, topluluk wiki olmalıdır.
puanlama
En fazla görevi tamamlayan gönderim kazanır. İki gönderim bağlanırsa, en az bayt olanı kazanır. Bayt sayıları bağlıysa, önceki başvuru kazanır. Topluluk wiki cevaplarının kazanmasına izin verilmiyor.
Bize hangi görevleri çözdüğünüzü söyleyin, yalnızca kaç tane değil!
Golfçü olmayanlar için handikap:
Bu zorluğun golf dilleri tarafından hakim olması muhtemeldir . Birçok dil 140 byte içerisinde bir veya iki görevi bile çözmekte zorlanabilir. Bu nedenle , sınırın 3 tweet olduğu, yani 420 bayt olduğu rekabetçi olmayan bir yanıt gönderebilirsiniz . Diğer tüm kurallar aynı kalır.
Görevler
Görev 1 - Üç Sayı Üçgen Oluşur mu?
Üç pozitif tamsayı alın ve bu uzunluklara sahip üç çizginin bir üçgen oluşturup oluşturamayacağını gösteren bir gerçeği / sahte değeri verin . Numaraların belirli bir sırada geldiğini varsaymayabilirsiniz.
Truthy örnekleri (satır başına bir):
20 82 63
1 1 1
2 3 4
1 2 2
Sahte örnekler:
6 4 10
171 5 4
1 1 2
1 2 3
Görev 2 - Bir Milyona En Yakın
Tam olarak 7 ondalık basamaktan oluşan bir dizge (0-9) verildiğinde, bir milyona mümkün olduğunca yakın bir sayı elde etmek için onları yeniden düzenleyin. Yani, abs(1000000 - rearrangedNumber)
en aza indirilmelidir.
Bir dizge değil, sonuçtaki sayıyı bir tamsayı olarak yazdırın veya döndürün (bu nedenle, diliniz için norm olmadıkça baştaki sıfırlar olmamalıdır).
örneğin bir girdiyle 9034318
sonuçlanmalı 984331
( sonuçlanmamalı 1033489
).
2893984
Olmalı 2348899
.
0001000
Olmalı 1000000
.
0000020
Olmalı 200000
.
Görev 3 - Basit Klavye Simülatörü
Bir dizi küçük harf (az), boşluk ve köşeli parantez içine alın <>
. Soldan sağa okunur, bu dize başlangıçta boş bir metin düzenleyici açıkken standart bir klavyede basılan tuşları temsil eder. Harfler ve boşluk normal tuşlarına <
karşılık gelir, ancak >
her ikisi de basıldığında imleci hareket ettiren sol ok tuşuna ve sağ ok tuşuna karşılık gelir .
<
imleci bir karakter sola kaydırır veya imleç dizenin başlangıcındaysa hiçbir şey yapmaz.
>
imleci bir karakter sağa taşır veya imleç dizenin sonundaysa hiçbir şey yapmaz.
Giriş dizesindeki tüm tuşlara basıldıktan sonra, metin düzenleyicide olacak olan dizeyi çıktılayın. Çıktısı çıkış kodları imleci hareket ettirmek için izin verilmez.
Girişte her zaman en az bir ok olmayan anahtar karakter olacaktır.
örneğin giriş ui<<q>>ck <<<<<<the<<<<>>> >>>>>>>>brown x<o<f
vermelidir the quick brown fox
.
op<<l>>t<<<lam>>>>>>imi<<<><>>>zer<<<<<<<<<<<<<<<<<<>>><>m
vermelisin llammoptimizer
.
e< <c<b<a
vermelisin abc e
.
<<<>><><<><toast>><<>><><<>><
vermelisin toast
.
Görev 4 - FILTHE Mektupları
Birçok yazı olarak, büyük harf İngiliz alfabesi harfleri 6 yatay ve dikey çizgilerin tamamen oluşur: E
, F
, H
, I
, L
, ve T
. Bunlara FILTHE harfleri diyeceğiz.
Bir harf büyük harf (AZ) alın ve FILTHE harflerinde satır sayısını sayın ve sonuçtaki tamsayıyı alın.
E
, F
, H
, I
, L
, Ve T
sırasıyla 4, 3, 3, 3, 2, ve 2 çizgileri vardır.
örneğin GEOBITS
4 + 3 + 2 = 9 FILTHE harfinin bir kısmı (for .E..IT.
), bu nedenle çıktı olması gerekir 9
.
ABCDEFGHIJKLMNOPQRSTUVWXYZ
çıkmalı 17
.
ABCDGJKMNOPQRSUVWXYZ
çıkmalı 0
.
FILTHYLINESINLETTERS
çıkmalı 39
.
Görev 5 - Alex Recursive A.
Moderatörümüz Alex A.'nin gizemli bir ilk kısmı "A".
Şimdi emin değilim, ama bence A.
kısaltılmış .A xelA
. Ayrıca .A
orada sinsice durduğuna eminim Alex A.
.
Bu yüzden Alex'in tam adını almak için A.
's .A
' ve 'ler:
Alex A. -> Alex [A.] -> Alex [.A xelA] -> Alex .A xelA -> Alex [.A] xelA -> Alex [Alex A.] xelA -> Alex Alex A. xelA -> etc.
Programınızın negatif olmayan bir tamsayı almasını sağlayın Alex A.
ve elde edilen dizgenin çıktısını alarak birçok kez genişletin .
Yani
0
olur Alex A.
,
1
olur Alex .A xelA
,
2
olur Alex Alex A. xelA
,
3
olur Alex Alex .A xelA xelA
,
4
olur Alex Alex Alex A. xelA xelA
,
5
olur Alex Alex Alex .A xelA xelA xelA
,
böylece ve.
(Bunu yaptım çünkü istemeden Alex’i mod haraç mücadelesinden çıkardığım için kendimi kötü hissettim .: P)
Görev 6 - Numpad Rotasyonu
1'den 9'a kadar bir tamsayı alın (dizge olarak alabilirsiniz). 3 × 3 hane kare çıktısı
789
456
123
90 ° 'lik artışlarla döndürülür, öyle ki giriş basamağı en üst sırada herhangi bir yerde görünür. 5
Girdi olduğunda , herhangi bir rotasyon geçerli çıkıştır çünkü 5
üste döndürülemez.
örn. 3
giriş olduğunda , ikisi de
963
852
741
ve
321
654
987
geçerli çıktılar.
Giriş için 4
, sadece
147
258
369
geçerli çıktı.
Görev 7 - Rakamları Onlara Ayırma
Boş olmayan bir ondalık basamak dizisi (0-9) alın ve her bölümdeki tüm basamakların tam olarak 10'a ulaştığı bitişik bölümlere ayrılabiliyorsa bir truthy değeri verin. Bu mümkün değilse, sahte bir değer verin.
örneğin 19306128
, 19|3061|28
10 (1 + 9, 3 + 0 + 6 + 1, 2 + 8) olarak toplanan bölümler gibi ayrılabilir, bu nedenle bir gerçek değer verilmelidir.
Truthy örnekleri (satır başına bir):
19306128
073
730
0028115111043021333109010
2222255
Sahte örnekler:
6810410
9218
12341
5222225
000
Görev 8 - Kare Saat
Sürekli olarak boyutlandırılmış çok satırlı bir dizge içine alın.
Çıktı 12
girişi ise
_ _
| | |
|_ _|
Çıktı 3
girişi ise
_ _
| |_|
|_ _|
Çıktı 6
girişi ise
_ _
| | |
|_|_|
Çıktı 9
girişi ise
_ _
|_| |
|_ _|
Başka girdi vakası yok.
Görev 9 - Braket Sanatı
Sol parantez her birini içeren bir 4 bayt dizesinde atın (
, [
, {
ve <
herhangi bir sırada.
Dize 8 bayt uzunluğunda ve dikey bir simetri çizgisine sahip olacak şekilde ilgili parantezleri ekleyin. örneğin [<({
olur [<({})>]
.
Ardından bu dizgideki her braketi ters çevirin. örneğin [<({})>]
olur ]>)}{(<[
.
Orijinal 8 bayt parantez dizesini ters sürümle yukarıda ve aşağıda ayrı satırlarda yayınlayın.
Giriş için son çıkış Yani [<({
olurdu
]>)}{(<[
[<({})>]
]>)}{(<[
Benzer bir şekilde, çıkış için <({[
olmalıdır
>)}][{(<
<({[]})>
>)}][{(<
Giriş (<<[
geçersiz, çünkü {
eksik ve bir fazlalık var <
.
Görev 10 - Perimiterize
.
Boş alanı X
temsil eden ve katı karoları temsil edenlerden oluşan dikdörtgen bir metin ızgarası (en küçükte 1x1) alın . Izgara sınırlarının ötesindeki hücreler boş olarak kabul edilir. 4 ızgara kenarı satırının ve sütunlarının her birinin en az birini içerdiğini varsayabilirsiniz X
.
örneğin geçerli bir giriş olabilir:
XXX.....X.....
X..X...X.X....
XXX.....X....X
Giriş ızgarasının dışındakiler de dahil olmak üzereX
dik veya çapraz olarak komşu olan her boş hücrenin oluştuğu başka bir dikdörtgen metin ızgarası çıktılayın o
. Bu nedenle, esasen o
, katı karoların tüm kısımlarının etrafına bir sınır çizilir. Yeni şebeke olması gerekenden daha büyük olmamalıdır.
Dolayısıyla yukarıdaki örneğin çıktısı şöyle olacaktır:
ooooo...ooo.....
oXXXoo.ooXoo....
oXooXo.oXoXo.ooo
oXXXoo.ooXoo.oXo
ooooo...ooo..ooo
Benzer şekilde, girişin XXX..X.X
çıkması gereken
oooooooooo
oXXXooXoXo
oooooooooo
ve çıktı
oooooooooo.
oXXXooXoXo.
oooooooooo.
En sağdaki boş sütun gerekli olmadığından geçersiz sayılır.
Herhangi 3 ayrı kullanabilir yazdırılabilir ASCII yerine karakterler .
, X
ve o
.
Görev 11 - Sator Meydanı
Çıktı Sator Kare :
SATOR
AREPO
TENET
OPERA
ROTAS
Harflerin herhangi biri küçük veya büyük harf olabilir;
SatOR
aRePO
tenet
OPERa
RoTaS
aynı zamanda geçerli çıktı.
Giriş yok.
Görev 12 - Prime Tweet
Hiçbir girdi almayın, ancak yazdırılabilir 95 ASCII karakterinden her birini içeren en az bir 140 bayt yazdırılabilir ASCII dizesi çıktı alın . (Yani 45 karakter kopyalanacaktır.)
Bu dizede tüm 140 bayt karakter kodlarının toplamı bir olmalı Sophie Germain asal , yani bir asal sayı p
olacak şekilde 2p+1
ayrıca asal olduğunu. Boşluk için karakter kodu, için 32, 33 !
, 34 için "
ve daha fazlası için 126'dır ~
. Toplam Python'da olduğu gibi hesaplanabilir sum(map(ord, myString))
.
Örnek bir çıktı:
! "#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~STUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~d
Karakter kodu toplamı, karşılık gelen güvenli prime 24407 olan prime 12203'tür.
import
s'den nasıl saymalıyız ? Diyelim ki 2 aynı modüle ihtiyaç duyduğu (örneğin import Math
) 2 işlev sayılırsa 5 işlev yazdım.