Gramming tıkınma - on iki görev Tweet


42

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 \ngerç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 9034318sonuçlanmalı 984331( sonuçlanmamalı 1033489).

2893984Olmalı 2348899.

0001000Olmalı 1000000.

0000020Olmalı 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<fvermelidir the quick brown fox.

op<<l>>t<<<lam>>>>>>imi<<<><>>>zer<<<<<<<<<<<<<<<<<<>>><>mvermelisin llammoptimizer.

e< <c<b<avermelisin 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 Tsırasıyla 4, 3, 3, 3, 2, ve 2 çizgileri vardır.

örneğin GEOBITS4 + 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 .Aorada 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
0olur Alex A.,
1olur Alex .A xelA,
2olur Alex Alex A. xelA,
3olur Alex Alex .A xelA xelA,
4olur Alex Alex Alex A. xelA xelA,
5olur 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. 5Girdi olduğunda , herhangi bir rotasyon geçerli çıkıştır çünkü 5üste döndürülemez.

örn. 3giriş 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|2810 (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ı 12girişi ise

 _ _
| | |
|_ _|

Çıktı 3girişi ise

 _ _
| |_|
|_ _|

Çıktı 6girişi ise

 _ _
| | |
|_|_|

Çıktı 9giriş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ı Xtemsil 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 ., Xve 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ı polacak şekilde 2p+1ayrı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.


7
Herhangi biri aslında her şeyi 140 bayttan daha az bir sürede çözebiliyorsa, CJam / Pyth olsa bile etkileneceğim
Fatalize

9
Ben senin gibi biri olduğum için kendimi öldürmekten onur duyuyorum. : P
Alex A.

çıktıya yazdırıldıktan sonra görevlerin bir hata ile bitmesine izin veriliyor mu?
torcado

1
Baytları imports'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.
nimi

3
Bu soruyu konu dışı olarak kapatmak için oy kullanıyorum, çünkü bu , parçalar arasındaki yetersiz etkileşim ile çok parçalı bir mücadele
pppery

Yanıtlar:


10

Pyth, 136 baytta 9 görev

Görev 1: 7 bayt

<-F_SQ0

gösteri

Azalan sırayla ( _SQ) sırala, üstlerine çıkar ( a-b-c), sonucun negatif olup olmadığını kontrol et.

Görev 2: 14 bayt

sho.a-sN^T6.pz

gösteri

Tüm dize permütasyonlarını ( .pz) formlayın , onları ( o) .a-sayı ( sN) ile bir milyon ( ^T6) arasındaki farkın ( ) mutlak değerine göre sıralayın .

İlk dizgiyi ( h) alın ve bir sayıya dönüştürün. ( s).

Görev 4: 19 bayt

s/L+\EPP*3"EFHILT"z

gösteri

Tekrar Edilen "EFHILT"üç kez ( *3), sondaki çıkarın LT( PP), ve bir ekleme E( +\E). Girişteki her harfi, o dizedeki görünüm sayısına eşleyin. ( /L ... z). Sum. ( s).

Görev 5: 16 bayt

u+"Alex "_GhQ".A

gösteri

İle başlayıp "A.", tersine çevirin ve "Alex "girişe + 1 kez girin.

Görev 7: 13 bayt

}Y-RTsMM./sMz

Giriş dizesini 1 basamaklı sayılar ( sMz) listesine dönüştürün . Tüm bölümleri ( ./) oluşturun. Her bölümün ( sMM) her elemanını toplayın . Her alt listeden ( -RT) 10s'un tümünü silin . Boş listenin genel listede olup olmadığını kontrol ederek bu listenin herhangi birinden boşaltılıp boşaltılmadığını kontrol edin ( }Y).

Görev 8: 11 bayt

*3h%%CQC\Ç4

gösteri

Modulo büyüsü. Sayıya ( CQ) dönüştürün , mod 199 ( C\Ç= 199) alın ve bu mod 4'ü alın. Sonra 1 ekleyin ve 3 ile çarpın.

Görev 9: 21 bayt

J+Xz"<{[()]}>")_zJ_JJ

gösteri

İlk önce, ayna karakterlerine ( Xz"<{[()]}>")) çevrilmiş girdiden ( + ... _z), ardından ters girişi ( ) çevrilen girdiden oluşan ilk satırı üretip kaydederiz J. Ardından bu satırı, tersini ve o satırı tekrar yazdırın ( J_JJ).

Görev 11: 22 bayt

+J"SATOR
AREPO
TEN"t_J

gösteri

Sadece bir dize ve tersini yazdırabilirsiniz, ancak merkezi çoğaltmayın N.

Görev 12: 13 bayt

++G*19\3srd\

gösteri

Kodun sonunda görünmez DEL( 7F) bir karakter var.

Bu yazdırır

abcdefghijklmnopqrstuvwxyz3333333333333333333 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

karakter toplamı olan 11321. Bu oluşur Galfabesi, 19, 3s, ve yazdırılabilir ASCII karakter bütün.


28

CJam, 140 baytta 8 9 görev

Öncelikle, işte çözümlerinizi sıralamak ve hangilerinin tweet'e sığacağını söylemek için kullanabileceğiniz bir script:

{\s\Se[oSo}:F;
qN/ee{W=,}${)_,_T+:T140>X*_{0:X;}*'=@11+*N+*o\~)YF_,ZFTZFoNo}/

12 çözümünüzü her satıra bir tane olacak şekilde girişte yapıştırın. Burada çalıştır. İlk sütun, görev numarasıdır, ikincisi onun büyüklüğü ( karakter olarak - bu bayt sayısından farklıysa kendin düzeltmek zorunda kalacaksın), üçüncüsü kümülatif boyut. Tweet'e uyan programlar diğerlerinden bir çizgi ile ayrılır ===.

Benim için çıktı şöyle görünür:

 1   7   7 q~$~\->
 8  10  17 qDbJ%5/)3*
12  12  29 ',32>_51>'d
 7  13  42 Aq{~-Ace|}/N&
 2  15  57 qe!{~1e6-z}$0=~
 4  19  76 q"FIHEELT"3*H<fe=:+
 5  20  96 ".A"q~){" xelA"+W%}*
 9  22 118 q_{_')>+)}%W%+_W%N@N3$
11  22 140 "SATOR\AREPO\TEN"_W%1>
====================================
 6  25 165 9,:)s3/zq~))3mdg*{W%z}*N*
 3  43 208 LLq{_'=-z({+}{'=>_)$\[{)@+\}{\(@\+}]=&}?}/\
10  45 253 0XW]_m*qN/{'.f+W%z}4*f{\~@m>fm>N*}(\{8f^.e>}/

İşte burada şu anda tweetin içine girebileceğim görevler.

Görev 1 - Üç Sayı Üçgen Oluşur mu? - 8 7 bayt

1 byte tasarruf için jimmy23013'e teşekkürler.

q~$~\->

Test odası.

Girişin CJam tarzı bir liste olması bekleniyor.

Bu oldukça basittir: en büyük tarafın diğer ikisinin toplamından daha kısa olup olmadığını kontrol edin. Veya eşdeğerde en kısa tarafın diğer ikisinin farkından daha uzun olduğunu kontrol edin:

q~  e# Read and eval input.
$~  e# Sort the values and dump them on the stack.
\-  e# Subtract the middle value from largest.
>   e# Check if the smallest value is greater than that.

Görev 2 - Bir Milyona En Yakın - 15 bayt

qe!{~1e6-z}$0=~

Test odası.

Basit kaba kuvvet:

q        e# Read input.
e!       e# Get all permutations.
{        e# Sort by...
  ~      e#   Evaluate the permutation to get its numerical value X.
  1e6-z  e#   abs(X - 1,000,000)
}$
0=       e# Pick the first element (which minimises the difference)
~        e# Evaluate it to get rid of the leading zeroes.

Görev 4 - FILTHE Mektupları - 21 19 bayt

2 bayt tasarrufu için jimmy23013'e teşekkürler.

q"FIHEELT"3*H<fe=:+

Test odası.

Buradaki fikir, her bir dikey çizgi için FILTHE harflerinin her birini içeren bir dize oluşturmaktır. Bu bazı komik dize manipülasyon yoluyla yapılır:

q          e# Read the input.
"FIHEELT"  e# Push this string. It first contains the 3-line letters, then the 2-line 
           e# letters, where we include 'E' twice to make it count for 4.
3*         e# Repeat 3 times: "FIHEELTFIHEELTFIHEELT"
H<         e# Truncate to 17 characters: "FIHEELTFIHEELTFIH". This is chosen such that
           e# it discards the third repetition of the 2-line letters.
fe=        e# For each character in the input, count its occurrences in this new string.
:+         e# Sum them all up.

Görev 5 - Alex Recursive A. - 27 20 bayt

".A"q~){" xelA"+W%}*

Test odası.

Doğrudan A.ve .Adoğrudan alt bölümünün uygulanması çok pahalıdır. Bunun yerine, her seferinde ipi ters çevirirsek sadece bir vakayı ele almamız gerektiğini fark ediyoruz. Dahası, Alexher seferinde hazırlık yapmak (ve bir boşluk) ilkini genişletmeye eşdeğerdir. Dizgeyi ters çevirmeden önce tersini ekleyerek başka bir bayt kaydedebiliriz:

".A"        e# Start with ".A" (the -1st iteration if you like).
q~)         e# Read input, eval, increment (so the following block is run at least once.)
{           e# Repeat this block that many times...
  " xelA"+  e#   Append " xelA".
  W%        e#   Reverse the string.
}*

Görev 7 - Rakamları Onlara Ayırma - 18 16 13 bayt

Aq{~-Ace|}/N&

Test odası. (Her çıkışın etrafındaki parantez ile.)

Kullanıcı dostu değil: gerçek değer tek bir yeni satır, sahte değer boş dizedir.

Temel fikir basittir: rakamları, tam olarak 10'a ulaştığında sıfırladığımız, toplamı sıfırlayın. Girişin sonunda toplam sıfır olmalıdır. Bir başlangıç ​​için, toplamda 10'a kısaltılmış ve rakamları çıkartarak toplamı 0'a çarptığımızda toplamı sıfırlayarak çıkar. Ancak, giriş tamamen sıfır olduğunda, gerçek bir şey döndürmediğimizden emin olmamız gerekir. Bunu bulmamın en kısa yolu, toplamı kod noktası 10 (satır beslemesi) olan karaktere sıfırlamak ve sonunda yığında bu karakterin 10 sayı değil de karakterde olup olmadığını kontrol etmekti. çünkü hem tamsayı sıfır hem de sıfır karakteri (boş bayt) sahtedir:

A     e# Push a 10, the initial running total.
q{    e# For each character in the input...
  ~-  e#   Evaluate the character to get the digit and subtract it from the total.
  Ac  e#   Push a linefeed character.
  e|  e#   Logical OR of the running total and the linefeed character (using
      e#   short-circuiting).
}/
N&    e# Take the set intersection with the string containing a linefeed character.
      e# If the total is still a number of any character other than the linefeed,
      e# this will yield an empty string. Otherwise, the string will remain unchanged
      e# and the linefeed will be printed.

Görev 8 - Kare Saat - 10 bayt

qDbJ%5/)3*

Test odası.

Bu, doğru değerlere göre karma olan karakter kodlarındaki oldukça rastgele modulo sihirdir. Kısacası daha kısa bir şeyin mümkün olduğuna ikna oldum, ancak bu tür bir yapı için bulduğum en kısa süre (programsal olarak):

q   e# Read the input.
Db  e# Treat the character codes of the string as digits in base 13. This maps the
    e# four inputs to the values: 2023940117708546863
    e#                            2023940113755405840
    e#                            2023940781838850791
    e#                            2023940113755390292
J%  e# Take the result modulo 19. This gives [2, 5, 12, 18], respectively.
5/  e# Divide by 5 (rounding down). [0, 1, 2, 3], respectively.
)   e# Increment. [1, 2, 3, 4], respectively.
3*  e# Multiply by 3. [3, 6, 9, 12], respectively.

Görev 9 - Braket Sanatı - 23 22 bayt

1 byte tasarruf için Sp3000 teşekkürler.

q_{_')>+)}%W%+_W%N@N3$

Test odası.

Yeterince açıksözlü. Sol ve sağ parantez arasındaki eşleme 2 (veya parantez için 1) eklenerek yapılır:

q_      e# Read input and duplicate.
{       e# Map this block onto each character...
  _')>  e#   Duplicate and check if it's not a parenthesis.
  +     e#   Add the result, leaving parentheses unchanged and incrementing the
        e#   other bracket types.
  )     e#   Increment again.
}%
W%+     e# Reverse and add to the original, giving the middle line.
_W%     e# Duplicate and reverse, giving the first line.
N@      e# Push a linefeed, pull up the middle line.
N3$     e# Push another linefeed, copy the first line.

Görev 11 - Sator Meydanı - 22 bayt

"SATOR
AREPO
TEN"_W%1>

Burada test et.

Muhtemelen en sıkıcı çözüm. Dizenin ilk yarısını iter ve sonra tersine çevirir:

"SATOR
AREPO
TEN"    e# Push everything up to the centre of the square.
_W%     e# Duplicate and reverse.
1>      e# Discard the "N", because we don't want that twice.

Görev 12 - Prime Tweet - 13 12 bayt

',32>_51>'d

Burada test et. (Sonuç için tanılama çıkışı ile.)

Bundan sonra , SE'nin 'çıkardığı yazdırılamaz <DEL>(0x7F) var. Kopya yapıştırmak için bunun yerine bu sürümü kullanın:

'~),32>_51>'d

Yazdırılan dize

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~STUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~d

Yani başka bir vadede tarafından takip tüm karakterlerden biri run içerir olduğu Siçin ~tek ardından d. Karakter kodlarının toplamı 12203'tür. Bunu bir miktar deneme yanılma ile buldum.

'~),32>  e# Push a string with all printable characters.
_51>     e# Duplicate this and discard the first 51 of them.
'd       e# Push a "d".

1
q~$~\-> q"FIHEELT"3*H<fe=:+.
jimmy23013 12:15

@ jimmy23013 Ohhhh, bugünlerde olduğunu unutmaya devam ediyorum e=.
Martin Ender

20 karakterde 5 numara yapmayı fark etmeden önce bir şeyleri göndermek için yeterince cevap almayı umuyordum.
Peter Taylor

19

Pyth, 138 baytta 9 görev

Bu oldukça uzun sürdü.

9 görev Pyth için sınır olduğunu düşünüyorum. Bir sonraki en kısa programa dahil olmak üzere (Sator Meydanı) 160 bayt ile sonuçlanır. 20 byte golf oynamak pek mümkün değil. Biraz çirkin ve belki de kısaltılabilecek 2 veya 3 görev var, ama genel olarak çözümlerden çok memnunum.

Görev 1 - Üç Sayı Üçgen Oluşur mu ?, 8 bayt

>FsMc2SQ

Çevrimiçi deneyin: Normal Giriş veya Test Paketi

Görev 2 - Bir Milyona En Yakın, 14 bayt

ho.a-^T6NsM.pz

Çevrimiçi deneyin: Normal Giriş veya Test Paketi

Görev 4 - FILTHE Mektupları, 20 bayt

s*Vtsmmdd5/Lz"TLIHFE

Çevrimiçi deneyin: Normal Giriş veya Test Paketi

Görev 5 - Alex Recursive A., 16 bayt

u+"Alex "_GhQ".A

Çevrimiçi deneyin: Normal Giriş veya Test Paketi

Görev 6 - Numpad Rotasyonu, 20 bayt

jeo}zhN.uC_N3_c3jkS9

Çevrimiçi deneyin: Normal Giriş veya Test Paketi

Görev 7 - Rakamları Onlara Ayırma, 15 bayt

qTu+WnGTvHG-zZZ

Çevrimiçi deneyin: Normal Giriş veya Test Paketi

Görev 8 - Kare Saat, 12 bayt

*3%%Cz1978 5

Çevrimiçi deneyin: Normal Giriş veya Test Paketi

Görev 9 - Braket Sanatı, 20 bayt

V3_WtN+z_Xz"[<({})>]

Çevrimiçi deneyin: Normal Giriş veya Test Paketi

Görev 12 - Prime Tweet, 13 bayt

++*d44srd\\&

Çevrimiçi deneyin: Normal Giriş


2
Gönderim sonuçlarımızı birleştirerek 133 bayt.
isaacg,

9

TI-BASIC, 11 728 830 byte'ta 12 Görev

Görev 1 baytta 1

:2max(Ans)`<`sum(Ans

Giriş bir listedir Ans.

Görev 2 92 110 bayt

:seq(expr(sub(Ans,I,1)),I,1,7→L₁
:SortA(L₁
:min(7,1+sum(not(L₁
:{L₁(1)+sum(seq(L₁(I))₁₀^(I-8),I,2,7)),L₁(Ans)+sum(seq((I`>`Ans)L₁(I)₁₀^(1-I),I,2,7
:ᴇ6Ans(1+(0`>`min(ΔList(abs(1-Ans

Rakam listesi için bilgi istemi Girdi, içinde bir dizedir Ans.

119 bayttaki Görev 3

:Input Str1
:"  →Str2
:For(I,1,length(Str1
:sub(Str1,I,1→Str3
:inString("`<>`",Ans
:If Ans:Then
:max(0,min(L,C+2Ans-3→C
:Else
:C+1→C
:L+1→L
:sub(Str2,1,C)+Str3+sub(Str2,C+1,L-C+1→Str2
:End
:End
:sub(Str2,2,L

Bir dize ister. C ve L'nin tanımsız veya 0 olduğunu varsayalım.

Görev 4: 35 bayt

:sum(int(2seq(inString("TLIHFE",sub(Ans,I,1))^.4,I,1,length(Ans

Giriş bir dizedir Ans.

Görev 63 baytta 5

:Ans/2→C
:sub("A.A",1+2fPart(C),2
:For(I,0,C
 :"Alex "+Ans
 :If I≠C
  :Ans+" xelA
:End
:Ans

Giriş bir sayıdır Ans.

Görev 6, 66 bayt

: 𝑖 ^ ((Ans <7) (Ans-3 (Ans >3: İçin (Y, ,11,1: Toplam) (seq ((5-gerçek (AnsX + Ans𝑖Y)) -3 görüntü) X + 1), X, -1,1: Son

Giriş bir sayıdır Ans.

Görev 7, 36 43 bayt

:Input <strike>L₁</strike>Str1
:.5
:For(I,1,<strike>dim(L₁</strike>length(Str1
 :Ans+<strike>L₁(I</strike>expr(sub(Str1,I,1
 :If 10=int(Ans
  :0
:End
:not(Ans

Basamak dize listesi için ister .

Görev 8, 29 baytta

:18fPart(sum(seq(I(sub(Ans,I,1)=" ")/6,I,1,15

Giriş bir dizedir Ans.

Görev 9, 83 baytta

:For(I,1,16,2
 :If I<8
  :Ans+sub("`)}]>`",inString("`({[<`",sub(Ans,4,1)),1
 :sub(Ans,I,1)+Ans
:End
:For(I,⁻1,1
 :Disp sub(Ans,9-8abs(I),8
:End

Giriş bir dizedir Ans.

159 baytta Görev 10

:1→X
:Input Str1
:2+length(Str1→L
:"X
:While 2+L`>`length(Ans
 :Ans+Ans→Str2
:End
:Ans→Str3
:While 1
 :"XX
 :Ans+Str1+Ans→Str1
 :For(I,1,L
  :Ans+sub("0X.",2expr(sub(Str2,I+1,1))+not(expr(sub(Ans,I,3)+sub(Str2,I,3)+sub(Str3,I,3))),1
 :End
 :Disp sub(Ans,L+3,L
 :Str2→Str3
 :Str1→Str2
 :Input Str1
:End

Kullanımları X0.yerine .Xosırasıyla (üzgün bir şey maçları). Satır satır satır giriş ister. XÇıktıyı görmek için iki satırlı s girmelisiniz , sonra çıkmak için 2nd + Quit.

Görev 11 39 baytta

:Disp "SATOR
:Disp "AREPO
:Disp "TENET
:Disp "OPERA
:Disp "ROTAS

Görev 12'de 77 bayt

: Ans + "tvm_I% LinReg (ax + b) DS <(getKeyconj (1-PropZTest (dayOfWk (Manuel-Fit C / Yanova (* satır (HorizRegEQUnarchive [J] # $! &'' ,234567890:; = >? @GBQX \^ _`qw {|} ~

Veya altıgen olarak:

72702ABB21FFDBADBB25BB3EEF06EF16
6331BB5917746201BB695C092DBBD2BB
D3BBD4AEAE2B3A323334353637383930
3EBBD66A6CAFBBD147425158BBD7F0BB
D9BBD5BBC1BBC708BBD809BBCF

Giriş, "içinde bulunan bir dizedir Ans.

Bu aslında TI-BASIC’te mümkün değil. Basılabilir ascii karakterlerinin hepsini kaynak koduna getirmek için temel bir programın altını düzenlemek ve belirli 2 baytlık belirteçleri kullanmak mümkündür, ancak sorun bu değil. Sorun, bir "karakterin saf temelde, program girdisi olmayan temiz bir hesaplayıcıda bir karakter dizisine kaydedilmesinin bir yolu olmamasıdır (aynısı karakter için de geçerlidir , ancak bu basılabilir değil). Bununla birlikte, "temel dışında bir denkleme koymak mümkündür, bunun ardından denklemi bir dizgeye dönüştürmek ve bu dizgiyi görüntülemek için basic kullanabilirsiniz. Hepsinden öte, ekranda bir seferde 128 karaktere yetecek kadar yer var.


7

Perl, 117 baytta 4 görev

Gerçek bir dil deneyelim ;)

Henüz pes etmedim, her ne kadar olası olmasa da, 140 byte'ta 5 görevi sıkmak bile mümkün olabilir!

* Görev 1: 30 + 1 = 31 bayt

@F=sort@F;say$F[0]+$F[1]>$F[2]

Kullanımı: perl -aM5.010 entry.pl input.txt

Görev 4: 32 + 1 = 33 bayt

y/ELTFHI/4223/;s/./+$&/g;$_=eval

Kullanımı: perl -p entry.pl input.txt

Görev 5: 54 bayt

say"Alex "x($_/2+1).qw(A. .A)[$_%2]." xelA"x(--$_/2+1)

-2b Dom Hastings'e teşekkürler

Kullanımı: echo 4 | perl -M5.010 entry.pl

Görev 7: 37 + 2 = 39 bayt

($i+=$_)>10&&exit,$i%=10for@F;$_=!$i;

Kullanımı: perl -pF entry.pl input.txt

Görev 8: 21 + 2 = 23 bayt

$_=y/|_ 
/14/dr/64%14

Bu biraz zor bir şey. Her değiştirerek başlayan |ile xve her bir _ile yher ızgara için benzersiz bir iki haneli dize üretmek için daha sonra yerine boşluklar ( yyxxyxxyyx, yyxxyxxyyxyyxxxxyxyx, yyxxxxyxyxyyxyxxxyyx, yyxyxxxyyxyyxxxxyyx, yyxxxxyyx). Sonra, ben bruteforce değerleri için bir program yazdım xve ydeğiştirdikten sonra üretilen ve sayıları yapılabilir matematiksel operasyonlar xve yher sayı için 3,6,9,12 bir çıkış vermek. Sonunda x=1, y=4ve sihir operasyonu oldu /64%14.

Kullanımı: perl -0p entry.pl input.txt

Görev 11: 34 bayt

say"SATOR
AREPO
TENET
OPERA
ROTAS"

Kullanımı: perl -M5.010 entry.pl

Görev 12: 30 bayt

say d.pack"C*",32..126,83..126

Kullanımı: perl -M5.010 entry.pl

Feragatname: -M5.010 'özgür' kabul edilir


Ruby, Perl'den daha az gerçek mi? ;)
Martin Ender

9
Size cevaplar (gürültü gibi görünüyor )
görünce, Perl'i

1
İyi iş! Görev 5 qw(A. .A)[$_%2]yerine 2 bayt tasarruf edebileceğinizi düşünüyorum ("A.",".A")[$_%2]ve başka bir kaç bayt daha alabileceğinizden eminim ...
Dom Hastings

6

Ruby, 280 baytta 4 görev (rekabetçi değil)

Bu sadece bir girişim, daha sonra görevlerime devam edeceğim (ve var olanları golf oynamayı umuyorum).

Görev 1

a=gets.split.map &:to_i;p a.all?{|e|e<a.inject(:+)-e}

Görev 2

p gets.chars.permutation.map{|a|a.join.to_i}.min_by{|x|(x-1e6).abs}

Görev 4

n,b='EFHILT',0;gets.chars.map{|c|b+=n[c]==p ? 0:[4,3,3,3,2,2][n.index c]};p b

Görev 5

a='Alex A.';gets.to_i.times{|i|i%2<1 ? a.sub!('A.','.A xelA'):a.sub!('.A',a)};$><<a

6

TI-BASIC, 994 baytta 12 görev

Tümünü bir TI grup dosyası olarak indir ( .8xg )

(Spoiler etiketleri istek başına eklendi.)

Görev 1 - Üç Sayı Üçgen Oluşur mu? - 7 bayt

TI-83 + program dosyası olarak indir ( .8xp )

:2max(Ans)<sum(Ans

Görev 2 - Bir Milyona En Yakın - 114 bayt

TI-83 + program dosyası olarak indir ( .8xp )

:int(10fPart(Ans\10^(\-cumSum(binomcdf(6,0→X
:"sum(\L\X\10^(\cumSum(not(binompdf(6,0→\Y1\
:SortD(\L\X
:\Y1\→X
:sum(not(\L\X
:If Ans
:Then
:If max(\L\X=1
:X+\E\6-\10^(\6-Ans→X
:SortA(\L\X
:augment(ΔList(cumSum(\L\X)),{0→X
:End
:{X,\Y1\
:Ans(1+(0>min(ΔList(abs(\E\6-Ans

Görev 3 - Basit Klavye Simülatörü - 131 127 bayt

TI-83 + program dosyası olarak indir ( .8xp )

:Input Str1
:DelVar X1→Y
:"..→Str2
:For(Z,1,length(Str1
:sub(Str1,Z,1→Str3
:(Ans=">")-(Ans="<
:If Ans
:Then
:max(1,min(Y+Ans,X+1→Y
:Else
:sub(Str2,1,Y)+Str3+sub(Str2,Y+1,X-Y+2→Str2
:X+1→X
:Y+1→Y
:End
:End
:sub(Str2,2,X

Görev 4 - FILTHE Mektupları - 34 bayt

TI-83 + program dosyası olarak indir ( .8xp )

:sum(int(\³√(\12seq(inString("TLIHFE",sub(Ans,X,1)),X,1,length(Ans

Görev 5 - Alex Recursive A. - 107 bayt

TI-83 + program dosyası olarak indir ( .8xp )

:Input X
:".A..
:For(X,0,X
:Ans→Str1
:5int(.5X+.5
:sub(Str1,1,Ans+1)+sub(".A xelAlex A.",6gcd(X,2)-5,7)+sub(Str1,Ans+4,5X-Ans+1
:End
:sub(Ans,2,5X+2

Görev 6 - Numpad Rotasyonu - 86 bayt

TI-83 + program dosyası olarak indir ( .8xp )

:.3Ans+2(Ans=6→X
:[[9,6,3][8,5,2][7,4,1
:For(X,0,X
:rowSwap(Ans\^T\),1,3
:End
:Ans
:*row+(10,*row+(10,Ans\^T\,1,2),2,3
:For(X,1,3
:Disp Ans(3,X
:End

Görev 7 - Rakamları Onlara Ayırma - 77 bayt

TI-83 + program dosyası olarak indir ( .8xp )

:Ans+"0
:seq(expr(sub(Ans,X,1)),X,1,length(Ans
:augment(Ans,{10not(not(max(Ans→X
:1→X
:Repeat Ans≥dim(\L\X
:Ans+1
:If 10=sum(\L\X,X,Ans
:Ans+1→X
:End
:X=Ans

Görev 8 - Kare Saat - 35 bayt

TI-83 + program dosyası olarak indir ( .8xp )

:12-3max(seq(X(sub(Ans,6gcd(X,2)+X,1)≠" "),X,1,3

Görev 9 - Braket Sanatı - 86 bayt

TI-83 + program dosyası olarak indir ( .8xp )

:Input Str1
:For(X,1,4
:For(Y,0,1
:abs(X-9not(Y→Z
:"()[]{}<>
:sub(Ans,inString(Ans,sub(Str1,X,1))+Y,1
:Output(1,Z,Ans
:Output(2,9-Z,Ans
:Output(3,Z,Ans
:End
:End

Görev 10 - Perimiterleştir - 218 bayt

TI-83 + program dosyası olarak indir ( .8xp )

:".
:For(A,0,\E\9
:Input Str1
:Ans+Str1→Str2
:If Str1≠".
:End
:length(Ans→X
:round(A\^-1\(Ans-2→B
:seq(expr(sub(Str2,A,1)),A,2,X-1→B
:πAns→C
:"augment(Ans,augment(Ans,\L\B))+augment(Ans,augment(\L\C,Ans))+augment(\L\B,augment(Ans,Ans→X
:seq(0,A,1,B
:\L\X→A
:For(C,0,A+1
:seq(\L\A(A+BC),A,1,B→C
:int(Ans→B
:{0
:1+not(\L\X)+not(fPart(\L\X→B
:".
:For(X,1,B+2
:Ans+sub("120",\L\B(X),1
:End
:Disp sub(Ans,2,B+2
:End

Bu ikameler yapıldı: 0= ., 1= X, 2=o

Giriş için (program başladıktan sonra), her satırda bir satır yazıp, son satır yazılana kadar her satırda enter tuşuna basın. Sonra enter tuşuna basın, bir periyot yazın, sonra dizgenin tamamını göndermek için tekrar enter tuşuna basın.

Görev 11 - Sator Meydanı - 38 bayt

TI-83 + program dosyası olarak indir ( .8xp )

:Disp "SATOR","AREPO","TENET","OPERA
:"ROTAS

Görev 12 - Asıl Tweet - 151 bayt

TI-83 + program dosyası olarak indir ( .8xp )

:Ans+"!#$%&'()*+,-./01234567889:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
:For(X,1,45
:Ans+" 
:End
:Ans

Ansdoğrudan \Y1\denklem düzenleyiciden birisine yazarak Equ►String(\Y1\,Str1:Str1ve ana ekrandan çalıştırılarak gerçekleştirilen bir çift alıntı içermelidir .

Çıktı uzunluğu 140'dır. 8 iki kez görünür ve her biri bir kez görünen diğer ASCII karakterleriyle birlikte 45 boşluk vardır. Bu bir Sophie Germain üssü olan (33 + 34 + ... + 126) + 56 + 32 × 45 = 8969'dur.


Ben OP sordum ve sen gibi bir belirteç sayabilir sin(olarak görüntülenmesi s, i, nve (Görev 12
lirtosiast

0

Python 3, 1 görev, 268 bayt, rekabetçi olmayan

Python 3.5.2'de Görev # 2'yi denedim. Golf ve python kodlarını değiştirmek için yeni

import itertools
def f2(l):
    n=1000000
    l=list(itertools.permutations(l))
    j = len(l)
    m=[None]*j
    while j>0:
        j -= 1
        m[j]= int(''.join(str(i) for i in l[j]))
        l[j]=abs(n-m[j])
    l.sort()
    k=n-l[0]
    return(n+l[0],k)[k in m]

PPCG'ye Hoşgeldiniz. Python 3'te ifadelerinizin bazılarını bir satıra koyabilirsiniz, örneğin yazabilirsiniz x=10;print(x)Bu, girintili bölümlerinizin bazılarına yardımcı olabilir .
george
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.