সেল-ফোন কী-চাপগুলি গণনা করুন


15

আপনার কাজটি পুরানো সেলফোনে প্রদত্ত পাঠ্য প্রবিষ্ট করার জন্য প্রয়োজনীয় কী-প্রেসগুলির মোট সংখ্যা গণনা করা।

কীম্যাপগুলি হ'ল:

1:1
2:abcABC2
3:defDEF3
4:ghiGHI4
5:jklJKL5
6:mnoMNO6
7:pqrsPQRS7
8:tuvTUV8
9:wxyzWXYZ9
0:<space><newline>0

টাইপ করতে exaMPle TExt 01, আপনি 33 99 2 6666 77777 555 33 0 8888 33333 99 8 0 <a 1-sec pause here in real life but we'll ignore it>000 1মোট 37 টি কিপ্রেস টিপুন ।

*কী বিশেষ অক্ষর একটি মানচিত্র দেখাবে:

.,'?!
"-()@
/:_;+
&%*=<
>£€$¥
¤[]{}
\~^¡¿
§#|`

প্রথমটি ( .) হাইলাইট করে। আপনি আয়তক্ষেত্রাকার নেভিগেশন কীগুলি ব্যবহার করে প্রয়োজনীয় চরিত্রটি হাইলাইট করার জন্য স্থানান্তর করতে পারেন এবং এটি নির্বাচন করতে অন্য কিপ্রেস লাগে।

সন্নিবেশ করতে $, আপনি টিপতে হবে *↓↓↓↓→→→<select>মোট 9 টি টিপুন।

  • sourceআপনার প্রোগ্রামের বর্তমান ডিরেক্টরি / ডিরেক্টরিতে রাখা ফাইল থেকে ইনপুট আসবে । সম্পাদনা: মন্তব্যে প্রতি অনুরোধ অনুযায়ী, আমি STDINএকটি বৈধ ইনপুট পদ্ধতি হিসাবে যুক্ত করছি । উত্তর পাওয়ার পরে অনুমানটি পরিবর্তন করার জন্য ক্ষমা চাইছি।
  • আপনি আউটপুট অবশ্যই Total key presses <total_keypresses>
  • যদি ইনপুট ফাইলটিতে প্রদত্ত কীম্যাপে কোনও অক্ষর থাকে তবে আপনার প্রোগ্রাম অবশ্যই আউটপুট Invalid character <character> in sourceএবং প্রস্থান করতে হবে।

সংক্ষেপে, আপনার প্রোগ্রামের ইনপুট এবং আউটপুটটি অবশ্যই এই (অবারিত) পাইথন স্ক্রিপ্টের সাথে সাদৃশ্যপূর্ণ:

# This Python file uses the following encoding: utf-8
from __future__ import print_function
import sys

general_dict = { '1':1,
                 'a':1, 'b':2, 'c':3, 'A':4, 'B':5, 'C':6, '2':7,
                 'd':1, 'e':2, 'f':3, 'D':4, 'E':5, 'F':6, '3':7,
                 'g':1, 'h':2, 'i':3, 'G':4, 'H':5, 'I':6, '4':7,
                 'j':1, 'k':2, 'l':3, 'J':4, 'K':5, 'L':6, '5':7,
                 'm':1, 'n':2, 'o':3, 'M':4, 'N':5, 'O':6, '6':7,
                 'p':1, 'q':2, 'r':3, 's':4, 'P':5, 'Q':6, 'R':7, 'S':8, '7':9,
                 't':1, 'u':2, 'v':3, 'T':4, 'U':5, 'V':6, '8':7,
                 'w':1, 'x':2, 'y':3, 'z':4, 'W':5, 'X':6, 'Y':7, 'Z':8, '9':9,
                 ' ':1, '\n':2, '0':3
                }

special_chars = ['.',',',"'",'?','!','"','-','(',')','@','/',':','_',';','+','&','%','*','=','<','>','£','€','$','¥','¤','[',']','{','}','\\','~','^','¡','¿','§','#','|','`']
for x in special_chars:
    general_dict[x]=(special_chars.index(x)/5) + (special_chars.index(x)%5) + 2

key_press_total = 0
with open('source') as f: # or # with sys.stdin as f:
    for line in f:
        for character in line:
            if character in general_dict:
                key_press_total+=general_dict[character]
            else:
                print('Invalid character',character,'in source')
                sys.exit(1)

print('Total key presses',key_press_total)

এটি কোড-গল্ফ, বাইট জেতে সংক্ষিপ্ততম প্রোগ্রাম।


নির্লজ্জ অস্বীকৃতি: আমি উপরের অজগর লিপিটির বিভিন্ন ভাষায় অনুবাদ করতে এই চ্যালেঞ্জটি করেছি যা এই চ্যালেঞ্জটি স্যান্ডবক্সে স্কোর করতে ব্যবহৃত হবে ।


আমাদের ত্রুটিযুক্ত হয়ে অবিলম্বে বা অবৈধ চরিত্রের মুখোমুখি হওয়া উচিত?
nyuszika7h

@ nyuszika7h এটি আপনার উপর নির্ভর করে তবে আপনাকে অবশ্যই অবৈধ চরিত্রটি মুদ্রণ করতে হবে। ধরুন উত্সটিতে 10 টি অবৈধ অক্ষর রয়েছে, আপনি এর মধ্যে যে কোনও একটি নির্বাচন করতে পারেন, সেই অক্ষরটি অবৈধ এবং প্রস্থান করতে পারেন। এটি কোনও অবৈধ চরিত্রের প্রথম ঘটনা হওয়ার দরকার নেই।
ব্যবহারকারী 80551

7
ইনপুট প্রয়োজনীয়তা একটি লজ্জাজনক। ফাইল I / O কিছু ভাষায় অত্যন্ত ব্যয়বহুল এবং অন্যদের মধ্যে সম্পূর্ণ অসম্ভব।
ডেনিস

1
আপনি যদি আরও ফ্রি-ফর্ম আইওকে অনুমতি দিতেন তবে আমার কাছে 171 অক্ষরের জে দ্রবণ রয়েছে, যিনি শ 1 হ্যাশ 1ce5a2fdd0316e37c0a07d151d02db766a3adbb7
ɐɔıʇǝɥʇuʎs

2
@ ডেনিস মঞ্জুরিপ্রাপ্ত STDIN
ব্যবহারকারী 80551

উত্তর:


4

গল্ফস্ক্রিপ্ট, 219 টি অক্ষর

একটি সারণী ব্যবহার করে বেসিক পদ্ধতির:

"Total key presses "0@1/{"1adgjmptw °behknqux\n.°cfilorvy0,\"°ADGJMsTz'-/°BEHKNPUW?(:&°CFILOQVX!)_%>°23456R8Y@;*£¤°SZ+=€[~°79<$]^§°¥{¡#°}¿|°`°".2$?)\1$<"°"/,{"Invalid character  in source"18/*puts'"#{''exit}"'+~}if\;+}/

এখানে চেষ্টা করুন


1
খুব সুন্দরভাবে সম্পন্ন হয়েছে :) ডেলফি এই লোকে চুষছে .. সবেমাত্র আমার শেষ হয়েছে এবং আমি 459 এক্স ডি তে উন্নতি করতে হবে!
তেউন প্রংক

1
ইনপুটটি sourceএসটিডিআইএন নয়, নামের একটি ফাইল থেকে হওয়া দরকার
ব্যবহারকারী 80551

ফাইল থেকে পড়তে, রুবি থেকে ধার করুন:"#{File.read('source')}"
জাস্টিন

1
@ কুইনকুনাক্স আপনি এগুলি থেকে প্রথম বন্ধনীগুলি ফেলে দিতে পারেন:"#{File.read'source'}"
ভেন্টোরো

আপনি এটি ঠিক যেমন রাখতে পারেন, আমি এখনই এসটিডিনকে অনুমতি দিয়েছি।
ব্যবহারকারী 80551

3

রুবি 2.0, 232

$.-=~(%W[1adgjmptw\s
behknqux.\n
cfilorvy0,"
ADGJMsTz-'/
BEHKNPUW?(:&
CFILOQVX!)_%>
23456R8Y@;*£¤
SZ+=€[\\
79<$]~§
¥{^{#
}¡|
¿`].index{|s|s[$c]}||$><<"Invalid character #$c in source"&exit)while$c=$<.getc
puts"Total key presses #$."

এখনও পর্যন্ত খুব সাধারণ এনকোডিং স্কিম: স্ট্রিং / অ্যারে আক্ষরিক জন্য 75% এর বেশি অক্ষর ব্যবহৃত হয় ...


2

সিজেম, 207 বাইট

q:Q{" dptgwj1am hxk
.bnequ  ,0flco\"rviy    DT'/GsJz-AM (HP?KW&:BNEU    LXCO_>FV!%)IQ   48@3;*26R¤£5Y   €\+S[Z= $<§7~9] #{^¥ |¡}    `¿"'    /{1$#W>\}%1#)}%_0#){"Invalid character "Q@0#=" in source"}{:+"Total key presses "\}?

এই প্রোগ্রামে 207 টি অক্ষর রয়েছে। উপযুক্ত এনকোডিংয়ের সাথে (উইন্ডোজ -১২২২) এটি 207 বাইটে ফিট করে।

নোট করুন যে স্ট্যাক এক্সচেঞ্জ ট্যাবগুলিকে (যা আমি লুকিং টেবিলের ডিলিমিটার হিসাবে ব্যবহার করি) স্পেসে রূপান্তরিত করে, তাই আপনি উপরের কোডটি অনুলিপি করে আটকাতে পারবেন না।

ব্যবহার

উইন্ডোজ -১২২২ এনকোডিং

$ base64 -d > keys.cjam <<< cTpReyIgZHB0Z3dqMWFtCWh4awouYm5lcXUJLDBmbGNvXCJydml5CURUJy9Hc0p6LUFNCShIUD9LVyY6Qk5FVQlMWENPXz5GViElKUlRCTQ4QDM7KjI2UqSjNVkJgFwrU1taPQkkPKc3fjldCSN7XqUgfKF9CWC/IicJL3sxJCNXPlx9JTEjKX0lXzAjKXsiSW52YWxpZCBjaGFyYWN0ZXIgIlFAMCM9IiBpbiBzb3VyY2UifXs6KyJUb3RhbCBrZXkgcHJlc3NlcyAiXH0/
$ wc -c keys.cjam
207 keys.cjam
$ echo 'Hello, world!' | LANG=en_US.CP1252 cjam keys.cjam; echo
Total key presses 39
$ echo 'á' | LANG=en_US.CP1252 cjam keys.cjam; echo
Invalid character á in source

ইউটিএফ -8 এনকোডিং

$ base64 -d > keys.cjam <<< cTpRezpDIiBkcHRnd2oxYW0JaHhrCi5ibmVxdQksMGZsY29cInJ2aXkJRFQnL0dzSnotQU0JKEhQP0tXJjpCTkVVCUxYQ09fPkZWISUpSVEJNDhAMzsqMjZSwqTCozVZCeKCrFwrU1taPQkkPMKnN345XQkje17CpSB8wqF9CWDCvyInCS97MSQjVz5cfSUxIyl9JV8wIyl7IkludmFsaWQgY2hhcmFjdGVyICJRQDAjPSIgaW4gc291cmNlIn17OisiVG90YWwga2V5IHByZXNzZXMgIlx9Pw==
$ wc -cm keys.cjam
209 217 keys.cjam
$ echo 'Hello, world!' | LANG=en_US.UTF8 cjam keys.cjam; echo
Total key presses 39
$ echo 'á' | LANG=en_US.UTF8 cjam keys.cjam; echo
Invalid character á in source

2

পিএইচপি, 711 708 676 টি অক্ষর (এখন STDIN থেকে পড়া)

<?php $message=iconv("UTF-8","CP1252",fread(STDIN,1024));@$s=str_split;$special=iconv("UTF-8","CP1252",'.,\'?!"-()@/:_;+&%*=<>£€$¥¤[]{}\~^¡¿§#|`');$z=0;foreach($s($message)as$l){$a=ord($l);$b=$a;if($a==13)continue;($a>114||($a>82&&$a<91))&&$a--;$w=$a<58?($a-48):($a<91?($a-64):($a-96));$y=($a<58?1:($w%3?$w%3:3));$a<91&&$y+=3;$a<58&&$y=7;if($a==55||$a==57)$y=9;if($b==115||$b==122)$y=4;if($b==90||$b==83)$y=8;if(($b>79&&$b<83)||($a>85&&$a<89))$y++;($a==32||$a==49)&&$y=1;$a==10&&$y=2;$a==48&&$y=3;$u=array_search($l,$s($special));if($u!==false){$y=2+floor($u/5)+$u%5;}$z+=$y;if(($a<32||$a>127)&&$a!=10){echo"Invalid character $l in source";exit();}}echo"Total key presses $z";

আমার প্রথম গল্ফ এ পর্যন্ত :)

বরং একটি প্রচলিত পদ্ধতির চেষ্টা করতে চেয়েছিল। প্রতিটি চরিত্রের একটি তালিকা থাকার পরিবর্তে এবং এটি তৈরি করতে কতগুলি ক্লিকের প্রয়োজন তা না করে আমি চরিত্রের এএসসিআইআই মানগুলি ব্যবহার করছি এবং তাদের প্রয়োজনীয় কী-চাপগুলি গণনা করছি। ভেবেছিলাম এটি আমাকে প্রথমে কিছু চরিত্র ছাড়িয়ে দেবে, এখন আমি মনে করি এটি অ্যারে-অ্যাপ্রোচের চেয়ে বেশি দীর্ঘ।

আমার মূল সমস্যাটি হ'ল ৩ এবং 4 এর পরিবর্তে 7 এবং keys টি কী, যার letters টি পরিবর্তে letters টি বর্ণ রয়েছে Therefore সুতরাং আমার কয়েকটি ফলব্যাক তৈরি করা দরকার যা আমার কোডটিকে প্রায় ২০০ টি অক্ষর দ্বারা ফুটিয়ে তুলেছিল।

উদার সংস্করণ

<?php
@$source = source;
$h = fopen($source, @r);
$message = iconv("UTF-8", "CP1252", fread($h, filesize($source)));
@$split = str_split;
$special = iconv("UTF-8", "CP1252", '.,\'?!"-()@/:_;+&%*=<>£€$¥¤[]{}\~^¡¿§#|`');
$count = 0;
foreach ($split ($message) as $character) {
    $ascii = ord($character);
    $helper = $ascii;
    if ($a == 13) continue;
    ($a > 114 || ($a > 82 && $a < 91)) && $ascii--;
    $key = $ascii < 58 ? ($a - 48) : ($a < 91 ? ($a - 64) : ($a - 96));

    $presses = ($a < 58 ? 1 : ($key % 3 ? $key % 3 : 3));

    // This part uses a lot of (probably unnecessary or still optimizable) fallbacks
    // for those characters, that are on "4-letter-keys"
    $ascii < 91 && $presses += 3;
    $ascii < 58 && $presses = 7;
    if ($a == 55 || $a == 57) $presses = 9;
    if ($helper == 115 || $helper == 122) $presses = 4;
    if ($helper == 90 || $helper == 83) $presses = 8;
    if (($helper > 79 && $helper < 83) || ($a > 85 && $a < 89)) $presses++;
    $ascii == 32 && $presses = 1;
    $ascii == 10 && $presses = 2;
    $ascii == 48 && $presses = 3;
    $ascii == 49 && $presses = 1;

    $key = array_search($l, $split($special));
    if ($key !== false){
        $presses = 2 + floor($key/5) + $key % 5;
    }

    $count += $presses;
    if ($a < 32 && $a > 127 && $a != 10) {
        echo "Invalid character $l in source";
        exit();
    }
}
echo "Total key presses $count";

আমি ধরে নিয়েছি উন্নতির আরও অনেক জায়গা আছে তবে আমি এতে খুশি।

আর একটি খারাপ জিনিস হ'ল iconv()বিশেষ অক্ষরের তালিকার জন্য প্রয়োজনীয় ব্যবহার । এর মধ্যে কিছু ( ,, ¥...) পিএইচপি সমর্থন করে না are


¥ ¥, ইত্যাদি আসকি অক্ষর নয়, এ কারণেই আমার পাইথন স্ক্রিপ্টটি utf-8 এনকোডিং ঘোষণা করে। অজগর দ্বারা এটি ব্যাখ্যা করা একটি বিশেষ মন্তব্য।
ব্যবহারকারী 80551

utf8_decodeপ্রত্যেক অক্ষরের জন্য জরিমানা কাজ করবে ব্যতীত এর । এজন্য আমাকে iconvপরিবর্তে ব্যবহার করতে হয়েছিল। আমার কোডটি এই বিশেষ অক্ষরগুলি যেমন সাধারণ অক্ষরগুলির মতো করে তা গণনা করে না কারণ তারা ক্রমযুক্ত নয় এবং আমি নির্ভরযোগ্যভাবে তাদের নিজ নিজ ASCII মানগুলির সাথে কাজ করতে পারি না। এটি তাদের জন্য একটি সাধারণ তালিকা ব্যবহার করছে।
পাদারোম

2

পাইথন 3, 239 টি অক্ষর

s='1adgjmptw 1behknqux\n.1cfilorvy0,"1ADGJMsTz\'-/1BEHKNPUW?(:&1CFILOQVX!)_%>123456R8Y@;*£¤1SZ+=€[\\179<$]~§1¥{^#1}¡|1¿`'
print('Total key presses',sum(s[:s.find(c)+1].count('1')or exit('Invalid character %c in source'%c)for c in input()))

1

জাভাস্ক্রিপ্ট (E6) 291

সম্পাদন করা

শেল সংস্করণ, স্পাইডারমনকি শেল ব্যবহার করে। একটি 'উত্স' ফাইল থেকে পড়ুন, sdtout এ লিখুন

z=t=0,[...read('source')].map(c=>t-=~((i=".\"/&>¤\\§,-:%£[~#'(_*€]^|?);=${¡`!@+<¥}¿".indexOf(c))<0?(p="0\n 9ZYXWzyxw8VUTvut7SRQPsrqp6ONMonm5LKJlkj4IHGihg3FEDfed2CBAcba10".split(c)[1])?p.search(/\d/):z="Invalid character "+c+" in source":i%8-~(i>>3))),print(z||"Total key presses "+t)

প্রথম চেষ্টা করুন, ইনপুট এবং আউটপুট জন্য পপআপ ব্যবহার করে ফায়ারফক্স কনসোলে কাজ করে

P=m=>(z=t=0,[...m].map(c=>t-=~((i=".\"/&>¤\\§,-:%£[~#'(_*€]^|?);=${¡`!@+<¥}¿".indexOf(c))<0
?(p="0\n 9ZYXWzyxw8VUTvut7SRQPsrqp6ONMonm5LKJlkj4IHGihg3FEDfed2CBAcba10".split(c)[1]) 
?p.search(/\d/):z="Invalid character "+c+" in source":i%8-~(i>>3))),z||"Total key presses "+t);
alert(P(prompt()))

সুপাঠ্য

P=m=>(
  z=t=0,
  [...m].map(
    c=>t-=~(
      (i = ".\"/&>¤\\§,-:%£[~#'(_*€]^|?);=${¡`!@+<¥}¿".indexOf(c)) < 0
      ? (p = "0\n 9ZYXWzyxw8VUTvut7SRQPsrqp6ONMonm5LKJlkj4IHGihg3FEDfed2CBAcba10".split(c)[1]) 
        ? p.search(/\d/)
        : z="Invalid character "+c+" in source"
      : i%8 - ~(i>>3)
    )
  ),  
  z||"Total key presses "+t
);

0

ভিবিএস স্ক্রিপ্ট 435

অ-এসসিআইআই অক্ষর সমর্থন করে না। আমি আমার কোড সহ বেশ দূরে ছিলাম তাই ভেবেছিলাম রেফারেন্সের জন্য এটি পোস্ট করব। আমি মনে করি না যে অন্য কেউ এই পদ্ধতির ব্যবহার করেছেন।

i=inputbox(i)
a=SPLIT("1 abcABC2 defDEF3 ghiGHI4 jklJKL5 mnoMNO6 pqrsPQRS7 tuvTUV8 wxyzWXYZ9 0")
a(9)=" "+vbLf+"0"
b=SPLIT(".,'?! ""-()@ /:_;+ &%*=< >£€$¥ ¤[]{} \~^¡¿ §#|` x x")

for o=1 to len(i)
n=0
    for x=0 to 9
        for c=1 to 10
            d=mid(i,o,1)
            IF n=0 AND mid(b(x),c,1)=d THEN n=c+x
            IF mid(a(x),c,1)=d THEN n=c
        next
    next
    z=n+z  
    IF n=0 THEN EXIT FOR
next
o="Total key presses "+cstr(z)
IF n=0 THEN o="Invalid character "+d+" in source"
msgbox o
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.