CodeNight4 Soru ve Çözümleri
Soru 1 Kriptocu Ozan
Ozan arkadaşımız kriptoya kafasını takmış durumda ve kendisi bir kripto algoritması oluşturmak istiyor. Aklına gelen fikirlerden biri, bir resmin RGB bitlerinin içine mesaj gizlemek oluyor. Bu şekilde şifrelediği bir mesajı başka bir arkadaşına yolluyor ve bunu çözmesini istiyor. Ozan’ın arkadaşına yardımcı olabilir misiniz?
Kurallar:
RGB bitlerinin hepsini kullanmanız gerekmektedir.
Girdi Biçimi:
Girdi olarak resim dosyasının yolu verilecektir.
Örnek Girdi:
Örnek Çıktı:
ACM kuruldugundan beri bilgisayar mühendisligine yön veren bir topluluktur.
Cevap:
1 2 3 4 5 6 7 8 9 10 11 12 | from PIL import Image f = Image.open(input("")) rgb_im = f.convert('RGB') colors = [] for y in range(5): for x in range(5): r, g, b = rgb_im.getpixel((x*50, y*50)) colors.append(int(r)) colors.append(int(g)) colors.append(int(b)) for i in colors: print(chr(i), end="") |
Soru 2 Hekır Leo
Leo ACM Fırat öğrenci topluluğunu sevmeyen bir arkadaşımız, her zaman bir açığımızı kolluyor ve sonunda buluyor. Sitemize root erişimi bulunan bir yönetim kurulu üyesi kantinde bilgisayarını açık bırakıyor ve bunu gören Selo hemen Chrome şifrelerinin olduğu veri tabanını kopyalıyor ve kaçıyor. Yönetim kurulu üyesi bilgisayarının bıraktığı gibi olmadığını anlayıp hemen Sistem yöneticimize söylüyor ve sistem yöneticisi Leoya güzel bir sürpriz hazırlıyor. Leonun sürprizi bir an önce görmesi için http://www.acmfirat.com/wp-login.php adresine girilen şifreyi bulmasına yardımcı olur musunuz?
Girdi Biçimi:
Girdi olarak veri tabanı dosyasının yolu verilecektir.
Örnek Girdi:
Login.db (Dosya ektedir)
Örnek Çıktı:
Kullanıcıadı:şifre
Cevap:
1 2 3 4 5 6 7 8 9 | # -*- coding: utf-8 -*- import sqlite3 f = input("") connection = sqlite3.connect(f) with connection: cursor = connection.cursor() v = cursor.execute('SELECT action_url, username_value, password_value FROM logins') value = v.fetchall() print("{}:{}".format(value[0][1],value[0][2])) |
Soru 3 Muzip Grafiker
Topluluğumuzun yeni logosunu çizdirdiğimiz grafiker bizlere muzip bir şaka hazırlıyor. Logomuzu png formatında bize yolluyor fakat logoyu açamıyoruz. Grafikeri aradığımızda pngnin header ve footerini alfabenin n. karakterine göre değiştirdiğini söylüyor. Yeni logomuzu açmamıza yardımcı olabilir misin?
Girdi Biçimi:
Resim base64 ile şifrelenmiş halde verilecektir.
Çıktı Biçimi:
Header ve footerini düzelttikten sonra tekrar şifreleyip çıktı vermeniz gerekmektedir.
Örnek Girdi:
QUJDREVGR0hJSktMTU5PUFFSU+4AAAD0CAMAAABq8zUtA….
Örnek Çıktı:
iVBORw0KGgoAAAANSUhEUgAAAe4AAAD0CAMAAABq8zUtA….
Cevap:
1 2 3 4 5 | import base64 i = base64.b64decode(input("")) i = i.replace(b"ABCDEFGHIJKLMNOPQRS", b"\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x01") i = i.replace(b"....ITUVWXYZ", b"\x00\x00\x00\x00IEND\xaeB`\x82") print(base64.b64encode(i).decode("utf-8")) |
Soru 4 Matematik
Arkadaşımıza profesörü tarafından bir ödev veriliyor. Logaritma, integral, türev ve toplam sembolü hesaplarını yazılım dillerinin hazır kütüphanelerini kullanmadan çözmesi isteniyor. Arkadaşımıza yardımcı olabilir misin?
Girdi Biçimi:
İşlemler fonksiyonadı(polinom,x değeri) şeklinde olacaktır.
Toplam sembolü için x değeri başlangıçdeğeri-bitişdeğeri şeklinde olacaktır.
Polinomlar katsayıxkuvvet şeklinde olacaktır.
İşlemler düz çizgi (“|”) işareti ile ayrılacaktır.
Çıktı Biçimi:
Verilen işlemlerin sonucu alt alta yazdırılacaktır.
Eğer işlem sonucu virgüllü ise tam sayıya çevirmeniz gerekmektedir.
Örnek Girdi:
turev(5×3+3×2+2x,4)|integral(5×3+3×2+2x,3)|logaritma(81,3)|toplam(5×2+1,1-8)
Örnek Çıktı:
266
137
4
1028
Cevap:
Soru cevabı Nihat Çelik’ten alınmıştır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 | import java.util.Scanner; public class Matematik { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String a = sc.nextLine(); String[] girdiler = a.split("\\|"); for (int i = 0; i < girdiler.length; i++) { String girdi = girdiler[i]; String ad = girdi.substring(0, girdi.indexOf("(")); girdi = girdi.substring(ad.length() + 1); String soru = girdi.substring(0, girdi.indexOf(",")); girdi = girdi.substring(soru.length() + 1); String deger = girdi.substring(0, girdi.indexOf(")")); if (ad.equals("turev")) { Turev(ad, deger, soru); } else if (ad.equals("integral")) { Integral(ad, deger, soru); } else if (ad.equals("logaritma")) { Logaritmaa(ad, deger, soru); } else if (ad.equals("toplam")) { Toplam(ad, deger, soru); } } } private static void Turev(String ad, String deger, String soru) { int x = Integer.parseInt(deger); int sonuc = 0; while (!soru.equals("")) { char islem = soru.charAt(0); if (islem != '+' && islem != '-') { islem = '+'; } else { soru = soru.substring(1); } int xIndex = soru.indexOf('x'); if (xIndex == -1) { break; } String strKatsayi = soru.substring(0, soru.indexOf('x')); soru = soru.substring(strKatsayi.length() + 1); int katsayi = Integer.parseInt(strKatsayi); int us = 0; int artiIndex = soru.indexOf('+'); int eksiIndex = soru.indexOf('-'); String strUs = ""; if (artiIndex != -1) { strUs = soru.substring(0, artiIndex); } if (eksiIndex != -1) { strUs = soru.substring(0, eksiIndex); } if (strUs.equals("")) { us = 1; } else { us = Integer.parseInt(strUs); } katsayi *= us; us--; soru = soru.substring(strUs.length()); if (islem == '+') { sonuc += (Math.pow(x, us) * katsayi); } else { sonuc -= Math.pow(x, us) * katsayi; } } System.out.println(sonuc); } private static void Integral(String ad, String deger, String soru) { int x = Integer.parseInt(deger); int sonuc = 0; while (!soru.equals("")) { char islem = soru.charAt(0); if (islem != '+' && islem != '-') { islem = '+'; } else { soru = soru.substring(1); } int xIndex = soru.indexOf('x'); if (xIndex == -1) { if (islem == '+') { int sayi = Integer.parseInt(soru); sonuc += (sayi * x); break; } else { int sayi = Integer.parseInt(soru); sonuc -= (sayi * x); break; } } else { String strKatsayi = soru.substring(0, soru.indexOf('x')); soru = soru.substring(strKatsayi.length() + 1); double katsayi = Double.parseDouble(strKatsayi); int us = 0; int artiIndex = soru.indexOf('+'); int eksiIndex = soru.indexOf('-'); String strUs = ""; if (artiIndex != -1) { strUs = soru.substring(0, artiIndex); } if (eksiIndex != -1) { strUs = soru.substring(0, eksiIndex); } if (strUs.equals("")) { us = 1; } else { us = Integer.parseInt(strUs); } us++; katsayi /= us; soru = soru.substring(strUs.length()); if (islem == '+') { sonuc += Math.pow(x, us) * katsayi; } else { sonuc -= Math.pow(x, us) * katsayi; } } } System.out.println(sonuc); } private static void Logaritmaa(String ad, String deger, String soru) { int sonuc = Integer.parseInt(soru); int us = Integer.parseInt(deger); int aktifSonuc = us; for (int i = 2; i < sonuc; i++) { aktifSonuc *= us; if (aktifSonuc == sonuc) { System.out.println(i); return; } } } private static void Toplam(String ad, String deger, String soru2) { String[] basBit = deger.split("-"); int bas = Integer.parseInt(basBit[0]); int bit = Integer.parseInt(basBit[1]); int sonuc = 0; for (int i = bas; i <= bit; i++) { String soru = soru2; while (!soru.equals("")) { char islem = soru.charAt(0); if (islem != '+' && islem != '-') { islem = '+'; } else { soru = soru.substring(1); } int xIndex = soru.indexOf('x'); if (xIndex == -1) { if (islem == '+') { int sayi = Integer.parseInt(soru); sonuc += sayi; break; } else { int sayi = Integer.parseInt(soru); sonuc += sayi; break; } } else { String strKatsayi = soru.substring(0, xIndex); soru = soru.substring(strKatsayi.length() + 1); double katsayi = Double.parseDouble(strKatsayi); int us = 0; int artiIndex = soru.indexOf('+'); int eksiIndex = soru.indexOf('-'); String strUs = ""; if (artiIndex != -1) { strUs = soru.substring(0, artiIndex); } if (eksiIndex != -1) { strUs = soru.substring(0, eksiIndex); } if ("".equals(strUs)) { us = 1; } else { us = Integer.parseInt(strUs); } soru = soru.substring(strUs.length()); if (islem == '+') { sonuc += Math.pow(i, us) * katsayi; } else { sonuc -= Math.pow(i, us) * katsayi; } } } } System.out.println(sonuc); } } |
Soru 5 Ressam(!) Elif
Topluluğumuza yeni katılan Elif kendini bir ressam olarak tanıtıyor ve istediğimiz her şeyi çizebileceğini iddia ediyor. Elif’ten ACM yazılı bir resim çizmesini istiyoruz ve bize aşağıdaki resmi gönderiyor. Bizim çok beğenmemize bir üyemiz bunu Elif’in yapmadığını bu resmin bir “ASCII ART” olduğunu ve kendisinin de yapabileceğini söylüyor. Bu üyemize “ASCII ART” algoritmasını oluşturmasında yardımcı olabilir misiniz?
Elif’in gönderdiği resim;
Kurallar:
Font olarak Microsoft Sans Serif kullanılmalıdır ve boyutu 15px olmalıdır. Yazı 11 satırdan oluşmalı sütün sayısı ise uzunluğa göre dinamik olarak değişmelidir.
Örnek Girdi:
ACM
Örnek Çıktı:
# #### # #
# ## ## # #
# # # # ## ##
# # # # # # # #
# # # # # # #
# # # # # # #
##### # # # # #
# # # # # # # #
# # # # # # # #
# # ## ## # # #
# # #### # # #
Cevap:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | from PIL import Image, ImageFont, ImageDraw font = ImageFont.truetype('micross.ttf', 15) size = (32,11) image = Image.new('1', size, 1) draw = ImageDraw.Draw(image) offset = font.getoffset("ACM") draw.text((0,(-1 * offset[1])), "ACM", font=font) line = [] for rownum in range(size[1]): for colnum in range(size[0]): if image.getpixel((colnum, rownum)): line.append(' '), else: line.append('#'), if rownum != size[1] - 1: line.append("\n") print(''.join(line)) |
Soru 6 Yazılımcı Hakkı
Hakkı kendine ait bir yazılım dili oluşturmak istiyor fakat düşük dillerle ilgili bir bilgisi olmadığından dolayı kelimelerden oluşan bir yazılım dili oluşturuyor. Yazdığı dilin derleyicisini yazarken Hakkıya yardımcı olabilir misiniz?
Kurallar:
Satırlar line feed (“\n”) yerine BOL kelimesi ile ayrılıyor.
YAZDIR+ kelimesi ile girdiyi yazdırabiliyoruz. Örnek: YAZDIR+ “Artık kendi yazılım dilim var!”
DEGISKEN+ kelimesi ile yeni bir değişken oluşturup içine verilen veriyi koyabiliyoruz. Örnek: DEGISKEN+ 1 “Değişken 1 artık bu girdiden ibaret”
DEGISKENYAZDIR kelimesi ile oluşturduğumuz değişkenin içindeki veriyi yazdırabiliyoruz. Örnek: DEGISKENYAZDIR 1
YAZ_ kelimesi ile verilen girdiyi sonunda boşluk veya line feed(“\n”) olmayacak şekilde yazdırabiliyoruz. Örnek: YAZ_ S
DONGU kelimesi ile bir döngü oluşturuyoruz ve döngünün kaç kere tekrar edeceğini verdikten sonra yukarıdaki komutlardan herhangi birini kullanabiliyoruz. Örnek: DONGU 5 “BU DİLİ ÖĞRENECEĞİM”
Örnek Girdi 1:
YAZ_ HBOLYAZ_ EBOLYAZ_ EBOLYAZ_ LBOLYAZ_ LBOLYAZ_ OBOLYAZ_ BOLYAZ_ WBOLYAZ_ OBOLYAZ_ RBOLYAZ_ LBOLYAZ_ DBOLYAZ_ !
Örnek Çıktı 1:
HELLO WORLD!
Örnek Girdi 2:
DEGISKEN+ 1 “Yeni Değişken Oluşturduk!!”BOLDEGISKEN+ 2 “Bitane daha değişken oluşturduk”BOLDEGISKENYAZDIR 1
Örnek Çıktı 2:
Yeni Değişken Oluşturduk!!
Cevap:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | import re commands = { "print": "YAZDIR+", "loop": "DONGU", "variable": "DEGISKEN+", "pvariable": "DEGISKENYAZDIR", "prints": "YAZ_", "seperate": "BOL" } vars = [""] * 100 f = input("") def parse(cmd): if commands["seperate"] in cmd: cmds = cmd.split(commands["seperate"]) for x in cmds: parse(x) elif commands["loop"] in cmd: lAmount = re.sub(commands["loop"] + " ([0-9]) .*", r"\1", cmd) for x in range(int(lAmount)): parse(cmd.replace("{} {} ".format(commands["loop"], str(lAmount)), "")) elif commands["print"] in cmd: print(cmd[len(commands["print"])+1:]) elif commands["variable"] in cmd: varNum = re.sub("\D", "", cmd) vars[int(varNum)] = re.sub('.*"(.*)".*', r"\1", cmd) elif commands["pvariable"] in cmd: varNum = re.sub("\D", "", cmd) print(vars[int(varNum)]) elif commands["prints"] in cmd: print(cmd[len(commands["prints"])+1:], end="") parse(f) |
Soru 7 Stajyer Okan
Bir e-ticaret sitesinin yazılım departmanında stajyer olan Okan’dan müşterilerin posta kodunun doğru olup olmadığını kontrol edecek bir algoritma yazması isteniyor. Okan’a yardımcı olabilir misin?
Kurallar:
Girdiler POSTAKODU-MAHALLE,İLÇE/İL olarak verilecek. Birden fazla girdi semi-colon(“;”) ile ayrılacaktır. Çıktı olarak sadece TRUE veya FALSE yazılması gerekmektedir.
Örnek Girdi 1:
23050-ÇAYDAÇIRA MAH,MERKEZ/ELAZIĞ
Örnek Çıktı 1:
TRUE
Örnek Girdi 2:
23050-ÇAYDAÇIRA MAH,MERKEZ/ELAZIĞ;35737-85.YIL CUMHURİYET MAH,KEMALPAŞA/İZMİR
Örnek Çıktı 2:
TRUE
TRUE
Örnek Girdi 3:
23050-ÇAYDAÇIRA MAH,MERKEZ/ELAZIĞ;35737-85.YIL CUMHURİYET MAH,KEMALPAŞA/İZMİR;21210-İSTASYON MAH,KARTEPE/KOCAELİ
Örnek Çıktı 3:
TRUE
TRUE
FALSE
Cevap:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | import re from openpyxl import load_workbook try: wb = load_workbook('pk_2018_08_31.xlsx') ws = wb.active lower_map = { ord(u'I'): u'ı' } regions = {} for index, row in enumerate(ws.rows): if index == 0: continue index_str = str(index + 1) city = ws["A" + index_str].value.strip() district = ws["B" + index_str].value.strip() part = ws["D" + index_str].value.strip() postal_code = ws["E" + index_str].value.strip() if city not in regions: regions[city] = {} if district not in regions[city]: regions[city][district] = {} regions[city][district][part] = postal_code except: pass f = input("") for i in f.split(";"): n = re.findall("(.*)-(.*),(.*)/(.*)", i) if regions[n[0][3]][n[0][2]][n[0][1]] == n[0][0]: print("TRUE") else: print("FALSE") |
Ek dosya: pk_2018_08_31
Soru 8 Otomatacı Engin (İPTAL)
Engin Bilgisayar Mühendisliği 3. Sınıf okuyan başarılı bir öğrencidir. Otomata dersine giren Profesörü ise kendine bir asistan aramaktadır ve verilen FSA(Finite State Automata)’yı ilk çözeni asistan olarak alacaktır. Engin’e bu FSA’yı çözmesinde ve asistan olmasında yardımcı olabilir misin?
Girdi Biçimi:
Bu soruda girdi bulunmamaktadır.
Soru Çözümü:
Görseldeki FSA’yı çözecek bir kod yazmanız ve çıktıyı binaryden asciiye çevirerek ekrana yazdırmanız gerekmektedir.
Soru 9 Kriptocu(!) Ayyüce
Ayyüce kriptoya takmış bir yazılımcıdır. Yeni bir kripto algoritması düşünürken aklına bilgisayarındaki num-pad gelir ve num-pad tuşlarından yeni bir kripto algoritması üretir.
Kurallar:
Alfabede ABCDEFIJKLMOPSTUYZ harfleri bulunmak3tadır. Örnek olarak A harfini isteyen biri 78945613 tuşlarına basmalıdır.
Tuşlar satır satır soldan başlayarak sağa doğru gitmelidir.


A harfi B harfi
Örnek Girdi 1:
78945613 7894123 7945613
Örnek Çıktı 1:
ACM
Örnek Girdi 2:
789456123 78945123 74123 78945613 7945613
Örnek Çıktı 2:
SELAM
Cevap:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | a = [ """ ### ### # #""", # A """ ## ### ## """, # B """ ### # ###""", # C """ ## # # ## """, # D """ ### ## ###""", # E """ ### ## # """, # F """ ### # ###""", # I """ ### # ## """, # J """ # # ## # #""", # K """ # # ###""", #L """ # # ### # #""", #M """ ### # # ###""", #O """ ### ### # """, #P """ ### ### ###""", #S """ ### # # """, #T """ # # # # ###""", #U """ # # # # """, #Y """ ### # ###""" #Z ] alphabet = [] numpad = [[0,0,0],[7,8,9],[4,5,6],[1,2,3]] for i in a: alp = [] f = i.split("\n") for y in range(0,4): if y == 0: continue for x in range(3): if f[y][x] == "#": alp.append(numpad[y][x]) alphabet.append(alp) print(alphabet) |
Soru 10 Dolambaçlı Baran
Yazılımcı olan Baran dolambaçlı şeyleri ve matrisleri çok sevdiğinden dolayı yeni bir kod yazmak ister. Fazlasıyla boş zamanı olan Baran’da aklındaki cümleyi matrise saat yönünde okunduğunda düzgün bir şekilde okunacak bir algoritma oluşturur. Baran’a bu algoritmayı koda geçirmesinde yardımcı olabilir misiniz?
Girdi Biçimi:
Matris boyutu dinamik olduğundan dolayı girdi olarak matris boyutu, ardından bir boşluk bırakılarak yazı verilecektir.
Örnek Girdi 1:
3 ACMSTDEBA
Örnek Çıktı 1:
ACMDABEST
Örnek Girdi 2:
5 ACMCOOSGEDHIZLEENIDN4THGI
Örnek Çıktı 2:
ACMCODENIGHT4EHOSGELDINIZ
Görsel Anlatım:


Cevap:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | import math f = input("") def matrix(matris, x = 0, y = 0): res = "" final = x + 1 == int(math.ceil(len(matris[0])/2.0)) or y + 1 == int(math.ceil(len(matris)/2.0)) for i in range(x, len(matris[0]) - x): res = "{}{}".format(res,matris[y][i]) for i in range(y+1, len(matris) - y - 1): res = "{}{}".format(res, matris[i][len(matris[0]) - 1 - x]) i = x while (len(matris) - 1 != 2 * y) and (i < len(matris[0]) - x): res = "{}{}".format(res, matris[len(matris) - 1 - y][len(matris[0]) - 1 - i]) i = i + 1 i = y while (len(matris[0]) - 1 != 2 * x) and (i < len(matris) - y - 2): res = "{}{}".format(res, matris[len(matris) - 2 - i][x]) i = i + 1 if not final: res = "{}{}".format(res, matrix(matris, x+1, y+1)) return res length = int(f.split(" ")[0]) string = f.split(" ")[1] array = [] for i in range(length): array.append(list(string)[i*length:(i*length)+length]) print(matrix(array)) |
Soru 11 Ses Mühendisi Baran
Aslında yazılım mühendisliği mezunu olan Baran ses mühendisliğini daha çekici bulduğu için bu alanda çalışmaya başlamıştır. Bir gün film çekiminde aşırı sıkılan Baran bir ses dosyasına nasıl mesaj gizlenir diye merak eder ve bu kodu yazmak ister. Baran’ın oluşturduğu ses dosyalarından saklanan mesajı bulabilir misiniz?
İpucu:
Mesaj ses dosyasının frekans değerlerine gizlenmiştir.
Örnek Girdi 1:
selam.wav
Örnek Çıktı 1:
ACM DA BEST
Cevap:
1 2 3 4 5 6 7 8 9 10 11 12 | import binascii from scipy.io.wavfile import read (fs, x) = read(input("")) ar = [] for i in x: if i == 205: ar.append("0") else: ar.append("1") binary = ''.join(ar) for i in range(0, len(binary)/8): print(chr(int(binary[i*8:(i+1)*8], 2)), end="") |
Ek Dosya:
Soru 12 Sayılarla Kafayı yiyen mühendis
Mühendisimiz sayılarla kafayı yemiş durumda. Girilen sayının n. tam bölenini bulan bir kod yazmak istiyor fakat yazılım uğruna hiçbir şey bilmemektedir. Bu mühendise kodu yazmasına yardımcı olabilir misiniz?
Örnek Girdi 1:
15 3
Örnek Çıktı 1:
5
Örnek Girdi 2:
5656 10
Örnek Çıktı 2:
202
Cevap:
1 2 3 4 5 6 7 | inp = input("") inp = inp.split(" ") arr = [] for i in range(1, int(inp[0])): if int(inp[0]) % i == 0: arr.append(i) print arr[int(inp[1])-1] |
Soru 13 Labirentte sıkışan Emre
Emre maceraları çok seven bir arkadaşımızdır. Bir labirente girmek ve en kısa yoldan çıkmak ister. Emre’ye yardımcı olabilir misiniz?
Kurallar:
B başlangıç noktasıdır.
Ç çıkış noktasıdır.
1 geçebileceğiniz noktadır.
0 geçemeyeceğiniz noktadır.
Girdi Biçimi:
Matris aralarında boşluk olmayacak şekilde yan yana verilecektir. Boşluktan sonra matrisin genişliği belirtilecektir.
Çıktı Biçimi:
Başlangıç noktasından çıkış noktasına gidene kadar kaç tane nokta geçtiğinizi yazdırın.
Başlangıç ve Çıkış noktalarıda bir nokta olarak sayılmaktadır.
Görsel Anlatım:
0 0 0 1 B 0 1
0 0 0 0 1 0 0
0 0 0 1 1 0 0
0 0 1 1 0 0 0
0 0 Ç 1 0 0 0
Örnek Girdi:
0001B0100001000001100001100000Ç1000 7
Örnek Çıktı:
7
Cevap:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | f = input("").split(" ") sp = lambda A, n=int(f[1]): [A[i:i+n] for i in range(0, len(A), n)] class Coor: def __init__(self, row = 0, col = 0, dist = 0): self.row = row self.col = col self.dist = dist def minDistance(array): array = sp(a) source = Coor() w, h = int(f[1]), len(array) q = [] v = [[0 for x in range(w)] for y in range(h)] for y in range(len(array)): for x in range(len(array[y])): if array[y][x] == "B": source.row = y source.col = x elif array[y][x] == "0": v[y][x] = True else: v[y][x] = False q.append(source) v[source.row][source.col] = True while not len(q) == 0: p = Coor() p = q[0] q.pop(0) if array[p.row][p.col] == 'Ç': return p.dist + 1 if p.row - 1 >= 0 and v[p.row - 1][p.col] == False: q.append(Coor(p.row - 1, p.col, p.dist + 1)) v[p.row - 1][p.col] = True if p.row + 1 < h and v[p.row + 1][p.col] == False: q.append(Coor(p.row + 1, p.col, p.dist + 1)) v[p.row + 1][p.col] = True if p.col - 1 >= 0 and v[p.row][p.col - 1] == False: q.append(Coor(p.row, p.col - 1, p.dist + 1)) v[p.row][p.col - 1] = True if p.col + 1 < w and v[p.row][p.col + 1] == False: q.append(Coor(p.row, p.col + 1, p.dist + 1)) v[p.row][p.col + 1] = True return False a = list(f[0]) print(minDistance(a)) |
Soru 14 Matematikçi Hasan
Matematiği çok seven Hasan hobisi olan yazılımla matematiği birleştirmek istiyor. Yazmak istediği kod ise verilen n tane sayının aralarına her zaman farklı olacak şekilde dört işlem (+,-,/,*) işaretlerini koyarak bütün çıktıları toplayan bir kod yazmak. Hasan’a yardımcı olabilir misin?
Sınırlar:
1≤n≤10
Girdi Biçimi:
Arasında boşluk koyularak n tane sayı verilecektir.
Örnek Girdi 1:
10 11 12 13 14
Örnek Çıktı 2:
297155
Örnek Girdi 2:
1 2 3 4 5 6 7 8 9 10
Örnek Çıktı 2:
8641438
Cevap:
1 2 3 4 5 6 7 8 9 10 11 12 13 | from itertools import product f = input("") ind = [i for i, x in enumerate(f) if x == " "] f = list(f) keywords = [''.join(i) for i in product(list("+-*/"), repeat = len(ind))] def rep(keywords): k = list(keywords) for x,y in enumerate(ind): f[y] = k[x] r = int(eval(''.join(f))) return r selam = map(rep, keywords) print(sum(list(selam))) |
Soru 15 Filolog Ceren
Filolog olarak çalışan Ceren değişik alfabeleri arşivlemek için güzel bir yöntem bulmuştur. Bu yöntem alfabedeki harf ve sayıların girilen düzene göre Unicode değerlerinin N sayısına tam bölünüyor ise bu harf veya sayıları en başa alarak oluşan alfabeyi ekrana yazdırmak.
Girdi Biçimi:
Alfabe aralarında boşluk olmayacak bir şekilde verilecektir.
N sayısı alfabeden sonra boşluk bırakılarak verilecektir.
Örnek Girdi:
ab12c3d4e5fghj0k 6
Örnek Çıktı:
f0ab12c3d4e5ghjk
Cevap:
1 2 3 4 5 6 7 8 9 | f = input("") f, n = f.split(" ") g,h = [], [] for i in list(f): if ord(i)%int(n) == 0: g.append(i) else: h.append(i) print(''.join(g+h)) |