Scan-tron'umu derecelendir!


10

Standart test genellikle bir tarama tronu veya cevabınızı kaydeden bir çeşit cevap belgesi ile birlikte gelir. Bir bilgisayar veya insan (lar) cevaplarınızı kontrol eder ve notunuzu belirler. Bu yüzden burada bir tarama tronu ve cevap anahtarı verildiğinde, varsa puanı ve cevapsız soruları belirleyin. Bir tarama tronu, kullanıcının doldurduğu (bu durumda daire içine alınmış) cevapları olan birden fazla satıra sahip bir belgedir. Misal:

   ---
1. |a| b c d
   --- 

Gördüğünüz gibi, bu, açevresinde bir kutu olduğu için cevap seçimi seçili 1. soru . Meydan, eşsiz bir tarama-tron verilecektir nsoruları ( 1 <= n <= 10olarak belirtilen sadece dört cevapları ile) a, b, c, veya d. Cevap anahtarı, boşluk içermeyen ve tümü küçük harfli bir dize olarak verilir. Yanıt anahtarlı scan-tron örneği:

Scan-tron
   ---
1. |a| b c d
   ---
     ---
2. a |b| c d
     ---
       ---
3. a b |c| d
       ---

Answer Key
abb

Yanıt anahtarını ve scan-tron'u ayrı girişler olarak veya tanımlanabildikleri sürece seçilen bir sırayla alabilirsiniz (yani cevap anahtarı tarama-trondan ayrılır). Puanlar bir puanın en yakın onda birine yuvarlanacaktır. Yukarıdakiler için örnek çıktı:

Score: 66.7
Missed #: 3

Kabul edilebilir diğer cevaplar:

66.7 
3

veya birden fazla soru cevaplanmazsa

66.7
3 4 5

cevapsız olanların soru sayıları boşluklarla ayrılır, puanla aynı satırda değil.

Kurallar ve Şartnameler

  • Scan-tron çok satırlı dize veya bir kerede bir soru olarak girilebilir (yeni satırlı dize kabul edilebilir olduğu için)
  • Bir tarama-tron ve cevap anahtarı verildiğinde, bir satırdaki puanı ve başka bir satırda cevapsız kalan soruları boşluklarla ayırarak çıkarmalısınız. Hiçbir soru cevaplanmazsa, soru numarası verilmemelidir
  • Skorlar en yakın onda birine yuvarlanır
  • Seçilen cevaplar bu kutu ile çevrilidir:

    ---
    | |
    ---
    
  • Tarama tronunda, her soru üç boşluk alır (kutunun üst ve alt kısmı iki ekstra satır alır)
  • Yukarıdaki örnek için çalışmalıdır
  • Her zaman yalnızca tek bir yanıt kutusunun olacağını varsayalım

Kazanma Kriterleri

En kısa kod kazanır!


scan-tron bir soru listesi olabilir mi? Ve her soru yeni satırlı tek bir dize mi?
Rod

@Rod Evet ve bunu açıklığa kavuşturacağım
Anthony Pham

2
"Kaçırılan" dili benim için kafa karıştırıcıdır, çünkü "kaçırılan" bir soru, öğrencinin cevaplayamadığı bir soru anlamına gelebilir (görünürdeki anlamınızın aksine, yanlış cevaplandı ).
Mart'ta DLosc

@DLosc Her zaman sadece bir daire içine alınmış cevap olacaktır
Anthony Pham

Bir puan 50kabul edilebilir mi, yoksa olması mı gerekiyor 50.0?
DLosc

Yanıtlar:


2

05AB1E , 43 bayt

U|3ôø`\vyy'|k>èXNèQˆ}¯OXg/3°*2z+ïT/XgL¯_Ï‚»

Çevrimiçi deneyin!

açıklama

U                                            # store the answer key in X
 |3ô                                         # split the question-rows in chunks of 3
    ø`                                       # zip and flatten
      \                                      # discard top of stack, leaving the list of
                                             # answer rows on top
       v                                     # for each answer row
         y'|k                                # get the index of the first "|"
        y    >è                              # get the character after that from the row
               XNèQ                          # compare it to the corresponding entry in 
                                             # the answer key
                   ˆ                         # add it to the global list
                    }                        # end loop
                     ¯O                      # calculate the number of correct answers
                       Xg/                   # divide by the length of the answer key
                          3°*                # multiply by 1000
                             2z+             # add 0.5
                                ï            # convert to integer
                                 T/          # divide by 10
                                   XgL       # push range [1 ... len(answer key)]
                                      ¯_Ï    # keep only numbers corresponding to 
                                             # wrong answers
                                          ‚» # format output

4

Yığılmış , 68 + 1 = 69 bayt

'|'split[#'1-]NO neq::size:@z~>*[]YES' '#`out is0 sum z/100*1 nround

Çevrimiçi deneyin! -pBayrak için +1 (bu komut dosyası şu şekilde yürütülebilir stacked -pe "...")

Yığının üstünden iki giriş alır.

Bazı ilginç özellikler:

[#'1-]NO
[    ]NO   do not keep members where
 #'          its length
   1-          -1
             is truthy (in this case, not equal to zero).

Bu, borularla çevrili tüm harfleri verir.

:size:@z~>*[]YES
:                 duplicate indices of incorrect answers
 size             length of incorrect answers
     :@z          (stored into z)
        ~>        range from 1 to this length
          *       and multiply by this range
           []YES  keep truthy elements

Bu bize tüm yanlış soru numaralarını verir.


3

Python 2 , 94 93 bayt

L3viathan sayesinde -1 bayt

s,a=input()
l=len(s)
w=[i+1for i in range(l)if"|%s|"%a[i]not in s[i]]
print(l-len(w))*1e2/l,w

Çevrimiçi deneyin!


Güzel, benimkinden çok daha iyi. Sen yerini alabilir 100.ile1e2
L3viathan

Bunun skoru "bir noktanın en yakın onda birine" çevirme gereksinimini karşıladığına inanmıyorum, öyle değil mi?
DLosc

3

Pip , 49 46 44 48 45 bayt

Ugh, bu yuvarlama çok fazla bayt alıyor ... 44 bayt kod, -sbayrak için +1 .

(/2+m-m/#b*#P_FI{++nbNa?un}MZa@`\|..`b)//1/t

Girdiyi komut satırı bağımsız değişkenleri olarak alır (gerçek bir komut satırından çalıştırdığınızda, tarama-tron sayfasının yeni satırların tırnak içine alınması ve çıkışından geçmesi gerekir). Önce cevapsız soruları, sonra skoru çıktılar. Çevrimiçi deneyin!

açıklama

Bunu iki kısımda yapacağım: yanlış soru listesi ve skor.

P_FI{++nbNa?un}MZa@`\|..`b
                            a,b are cmdline args, u is nil, n is newline (implicit)
                            Note that a string like n, in math contexts, is equivalent to 0
                 a@`\|..`   Find all occurrences in a of | followed by 2 chars
                            Because regex matches don't overlap, this does what we need
    {         }MZ        b  Zip with b and map this function to each pair of items:
     ++n                     Increment n (so the first time through, it's 1)
        bNa                  Is 2nd arg a substring of 1st?
           ?un               If so, return nil; if not, return n
                            Now we have a list containing nil for correct questions
                            and the question number for incorrect questions
 _FI                        Filter on identity function (keep only truthy values)
P                           Print, joining on spaces (-s flag)

(/2+m-m/#b*#...)//1/t
                       a,b are cmdline args, m is 1000 (implicit)
            ...        The code from the first part
           #           Length of that list (i.e. number of incorrect questions)
      m/#b*            Times 1000/(number of questions)
    m-                 Subtracted from 1000
 /2+                   Plus 1/2 (= 0.5)
                       We now have a number like 667.1666666666667
(              )//1    Int-divide by 1 to truncate
                   /t  and divide that by 10
                       Print (implicit)

2

JavaScript (ES6), 88 bayt

x=>y=>x.replace(/\w(?=\|)/g,c=>c==y[i++]?t++:a+=i+" ",a=i=t="")&&(t/i*1e3+.5|0)/10+`
`+a

Virgül kullanarak ve her şeyi tek bir satır döndürerek 5 bayt kaydedebilir:

x=>y=>x.replace(/\w(?=\|)/g,c=>c==y[i++]?t++:a+=[,i],a=i=t="")&&(t/i*1e3+.5|0)/10+a

1

Toplu, 242 bayt

@echo off
set/as=c=0
set m=
set/pk=
:l
set/ac+=1
set/pt=
set/pl=
set/pt=
set "l=%l:*|=%
if %l:~,1%==%k:~,1% (set/as+=1)else set m=%m% %c%
set k=%k:~1%
if not "%k%"=="" goto l
set/as=(s*2000/c+1)/2
echo(%s:~,-1%.%s:~-1%
echo(%m%

Önce STDIN üzerindeki cevap anahtarını okur, ardından n*3soru satırlarını okur . Not: Skor, küçükten küçükse baştaki sıfır olmadan yazdırılır 1.0. Cevapsız cevaplar önde gelen boşluklarla yazdırılır.


0

CJam , 47 45 bayt

lqN/(;3%_'|f#:).=.=__:+\,d/e2XmOn:!_,,:).*0-p

Çevrimiçi deneyin!

açıklama

Program üç ana bölümden oluşmaktadır:

Right/wrong list

l                    e# Read the first line of input (answer key)
 qN/                 e# Read the rest of the input and split it on newlines
    (;3%             e# Delete the first line, then select every 3rd line 
        _            e# Duplicate the array
         '|f#        e# Find the index of the first | in each answer
             :)      e# Increment each, gives the index of the selected letter for each answer
               .=    e# Vectorized get-element-at with the answer strings
                 .=  e# Vectorized equality check with the answer key

Bu bölümden sonra, yanlış cevap ve doğru cevabı gösteren bir dizi 0s ve 1s var .01

Score

__              e# Duplicate the right/wrong list twice
  :+            e# Take the sum of it (number of right answers)
    \,          e# Swap top elements and take the length (total number of questions)
      d/        e# Divide (casting to double so it's not integer division)
        e2      e# Multiply by 10^2
          XmO   e# Round to 1 decimal place
             n  e# Pop and print with a newline

Bu bölümden sonra, yığın yalnızca doğru / yanlış listeyi içerir ve yüzde puanı çıkarılır.

Wrong answers

:!            e# Logically negate each element of the right/wrong list
  _,,:)       e# Generate the inclusive range 1...length(list)
       .*     e# Vectorized multiplication of the two lists
         0-   e# Remove any 0s from the result
           p  e# Print it

0

Jolf, 46 bayt

46 baytı kıramayacağım. Bu uzunlukta iki çözümüm var. Burada bir tane deneyin!

ΆRγψ~mΖ mi«\|..»d?=€H.xSEhSdHήSmX*~1/-lζlγlζ_1

(Yerine sahip 0x7fbir sonrakinde)

ΆRγψΜΖψGi'|d=1lHd?□=H.xShSEdHήSmX*~1/-lζlγlζ_1

Her iki durumda da, 15 yuvarlama için bayt: mX*~1/-lζlγlζ_1. Bunların çoğu aynıdır, ancak biri sonuçları almak için bir normal ifade eşleşmesi kullanır ve diğeri borular üzerinde böler.

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.