নবম পৃষ্ঠাটি পান


47

একটি পৃষ্ঠা নির্বাচন ইন্টারফেস করা প্রয়োজন সাধারণ। এটি সাধারণত এটির মতো দেখাচ্ছে:

prev 1 ... 3 4 [5] 6 7 ... 173 next

যার অর্থ পুরোপুরি 173 পৃষ্ঠা রয়েছে এবং আপনি বর্তমানে 5 তম পৃষ্ঠায় রয়েছেন।

এই চ্যালেঞ্জটির জন্য আপনাকে পৃষ্ঠার মোট সংখ্যা এবং বর্তমান পৃষ্ঠা নম্বরটি ইনপুট হিসাবে গ্রহণ করতে হবে এবং পৃষ্ঠা নির্বাচককে "প্রদর্শন" করতে একটি স্ট্রিং (বা একটি অ্যারে) আউটপুট করতে হবে।

ইনপুট

2 ইতিবাচক পূর্ণসংখ্যা

  • বর্তমান পৃষ্ঠা নম্বর
  • পৃষ্ঠাগুলি গণনা

এটি গ্যারান্টিযুক্ত যে 1 <= বর্তমান <= মোট।

আউটপুট

পৃষ্ঠা নির্বাচনকারীদের জন্য ui উপস্থাপন করে এমন একটি স্ট্রিং বা একটি অ্যারের আউটপুট করুন।

  • যদি স্ট্রিং হিসাবে আউটপুট থাকে তবে প্রতিটি পৃষ্ঠার মধ্যে একটি একক স্থান (U + 0020) ব্যবহার করা উচিত।
  • যদি অ্যারে হিসাবে আউটপুট থাকে তবে অ্যারের প্রতিটি আইটেমকে স্ট্রিংয়ে রূপান্তর করার পরে স্ট্রিংয়ের মতো একই ফলাফল তৈরি করা উচিত এবং তাদের একক স্থানের সাথে যুক্ত করা উচিত।
    • তিনটি বিন্দু ( ...) অ্যারে আউটপুট জন্য notচ্ছিক নয়।

বিস্তারিত

  • যদি বর্তমান == 1, কোনও "পূর্ব" আউটপুট হবে না, অন্যথায়, "পূর্ব" প্রথমে আসে।
  • যদি বর্তমান == মোট, কোনও "পরবর্তী" আউটপুট করা হবে না, অন্যথায়, "পরবর্তী" শেষ হয় comes
  • প্রথম পৃষ্ঠা (1) এবং শেষ পৃষ্ঠা (মোট) সর্বদা আউটপুট করা উচিত।
  • বর্তমান পৃষ্ঠা, (বর্তমান - 1) পৃষ্ঠা, (বর্তমান - 2) পৃষ্ঠা, (বর্তমান + 1) পৃষ্ঠা, (বর্তমান + 2) পৃষ্ঠা যতক্ষণ না [1.tot] এর সীমার মধ্যে থাকে ততক্ষণ আউটপুট করা উচিত।
  • অন্য কোনও পৃষ্ঠাগুলির সংখ্যা আউটপুট করা উচিত নয়।
  • আউটপুট করা পৃষ্ঠাগুলি আরোহী ক্রমে বাছাই করা উচিত।
  • আউটপুটে সদৃশ পৃষ্ঠা নম্বর থাকা উচিত নয়।
  • বর্তমান পৃষ্ঠাটি একটি জোড়ায় মোড়কের মাধ্যমে হাইলাইট করা উচিত []
  • যদি কোনও প্রতিবেশীর মধ্যে ব্যবধান থাকে তবে তিনটি ডট ( ...) shouldোকানো উচিত।

পরীক্ষার মামলা

Current Total    Output
1       1        [1]
1       2        [1] 2 next
1       10       [1] 2 3 ... 10 next
3       3        prev 1 2 [3]
3       6        prev 1 2 [3] 4 5 6 next
4       6        prev 1 2 3 [4] 5 6 next
4       7        prev 1 2 3 [4] 5 6 7 next
3       10       prev 1 2 [3] 4 5 ... 10 next
5       10       prev 1 ... 3 4 [5] 6 7 ... 10 next
10      10       prev 1 ... 8 9 [10]
52      173      prev 1 ... 50 51 [52] 53 54 ... 173 next

বিধি

  • এটি কোড-গল্ফ, সংক্ষিপ্ততম কোড জিতেছে!

7
4 , 6একটি পরীক্ষার কেস হিসাবে যুক্ত করা মূল্যবান হতে পারে । 3, 6ক্ষেত্রে অনুরূপ , কিন্তু বাম দিকে বিন্দু যোগ করা হবে না তা নিশ্চিত করে।
টম কার্পেন্টার

3
ওয়েব প্রকল্পের জন্য এইগুলির মধ্যে কেবল কিছু করতে চলেছেন ...
স্ট্যান স্ট্রাম

2
টমক্যারপেন্টারের মন্তব্যে একটি 4,7পরীক্ষার কেস প্রশংসিত হবে - তা নিশ্চিত করবে যে উপবৃত্তিকে বাদ দিলে উভয় সীমানা মামলা একই সাথে মিলিত হতে পারে
টেলর স্কট

1
পছন্দ করেছেন
tsh

2
@ স্ট্যানস্ট্রাম পরবর্তী চ্যালেঞ্জটি হ'ল অসীম স্ক্রোলার লিখতে।
কার্ল

উত্তর:


9

রেটিনা , 125 113 109 107 বাইট

.+
$*
r`1\G
 1$'
¶

O`1+
\b(1+) \1\b
[$1]
 .* (1+ 1+ \[)|(] 1+ 1+) .* 
$2 ... $1
^1
prev 1
1$
1 next
1+
$.&

এটি অনলাইন চেষ্টা করুন! লিঙ্কে পরীক্ষার কেস অন্তর্ভুক্ত রয়েছে। @ মার্টিনইেন্ডারে 12 বাইট সংরক্ষণ করা হয়েছে। ব্যাখ্যা:

.+
$*

অ্যানারিতে রূপান্তর করুন।

r`1\G
 1$'

বিপরীত ক্রমে সমস্ত পৃষ্ঠা নম্বর উত্পন্ন করুন।

ইনপুট পৃথক করে নতুন লাইন মুছুন। (যেভাবেই পৃষ্ঠা নম্বর জেনারেশন থেকে একটি জায়গা আছে))

O`1+

পৃষ্ঠাগুলি আরোহণের ক্রমে সাজান। এটি বর্তমান পৃষ্ঠাকেও সাজায়, যা এখন নকল।

\b(1+) \1\b
[$1]

নকল করুন এবং []বর্তমান পৃষ্ঠার চারপাশে মোড়ানো ।

 .* (1+ 1+ \[)|(] 1+ 1+) .* 
$2 ... $1

বর্তমান পৃষ্ঠাটি কমপক্ষে 5 হলে বা বর্তমান পৃষ্ঠার পরে কমপক্ষে 4 পৃষ্ঠা থাকলে একটি উপবৃত্ত যুক্ত করুন। (উপবৃত্তের শেষ পৃষ্ঠাটি অন্তর্ভুক্ত করা এড়ানোর জন্য স্থান অনুগ্রহ করে নোট করুন))

^1
prev 1

বর্তমান পৃষ্ঠাটি 1 না হলে পূর্বের যোগ করুন।

1$
1 next

বর্তমান পৃষ্ঠাটি যদি শেষ পৃষ্ঠা না হয় তবে পরবর্তীটি যুক্ত করুন।

1+
$.&

দশমিকের দিকে ফিরে রূপান্তর করুন।


1
কয়েকটি বাইট সংরক্ষণ করা হয়েছে: tio.run/… (যার মধ্যে একটিতে ইনপুট ফর্ম্যাটটি লাইনফিড পৃথককরণে পরিবর্তন করতে হবে)।
মার্টিন ইন্ডার

@ মার্টিনএন্ডার ধন্যবাদ, আমি বিশেষত সেই পিছনে উপবৃত্তাকার গল্ফটি পছন্দ করি, যদিও আমি মনে করি যে আমি অন্য <s> তিনটি </ s> চার বাইট ছাঁটাই করতে পারি।
নীল

9

জাভাস্ক্রিপ্ট (ES6), 130 122 121 বাইট

কারিরিং সিনট্যাক্স, যেমন উদ্বোধন করুন f(3)(10)

x=>X=>[x>1&&'prev 1',x>4&&'...',x>3&&x-2,x>2&&x-1,`[${x}]`,(X-=x)>1&&x+1,X>2&&x+2,X>3&&'...',X&&X+x+' next'].filter(_=>_)

এটি অনলাইন চেষ্টা করুন!

-1 বাইট (আরনাউল্ড): সেট Xকরুন X-x


সেই ল্যাম্বডাসকে ভালই লাগবে
স্টান স্ট্রাম

আপনার +8 যোগ করা উচিত ... .joinএটি আপনার গণনার অংশ নয়! আপনার কোডটি কেন যোগদান ব্যতীত কাজ করবে তা জানার চেষ্টা করে আমি পাগল হয়ে যাচ্ছিলাম, যদিও আমার অনুরূপ কোডটি এটি করবে না। তারপরে আমি বলি আপনি এটি কেবল আপনার সমাধানে অন্তর্ভুক্ত করেননি, তবে এটি আপনার স্নিপেটে অন্তর্ভুক্ত করেছেন!
এনএল-এক্স

@ এনএল-এক্স ওফ! আমি আমার স্নিপেট আপডেট করতে ভুলে গেছি চ্যালেঞ্জ আপনাকে স্ট্রিং বা একটি অ্যারে আউটপুট করতে দেয়; আমি আপনাকে অ্যারে হিসাবে আউটপুট দেওয়ার পরামর্শ দেব।
darrylyeo

7

6502 মেশিন কোড (সি 64), 160 বাইট

00 C0 20 9B B7 86 FB CA F0 01 CA 86 FD 20 9B B7 86 FC A6 FB E8 E4 FC B0 01 E8
86 FE A2 01 E4 FB F0 1A A9 91 A0 C0 20 1E AB A2 02 E4 FD B0 0D A9 2E 20 D2 FF
CA 10 FA 20 3F AB A6 FD 86 9E E4 FB D0 05 A9 5B 20 D2 FF A9 00 20 CD BD A6 9E
E4 FB D0 05 A9 5D 20 D2 FF 20 3F AB A6 9E E4 FC F0 25 E4 FE F0 05 E8 86 9E D0
D5 E8 E4 FC F0 0D A2 02 A9 2E 20 D2 FF CA 10 FA 20 3F AB A6 FC A9 00 20 CD BD
20 3F AB A6 FC E4 FB F0 07 A9 99 A0 C0 20 1E AB 60 50 52 45 56 20 31 20 00 4E
45 58 54 00

অনলাইন ডেমো - ব্যবহার: sys49152,[current],[total] যেমনsys49152,5,173

সংখ্যাগুলি অবশ্যই বর্তমান <= মোটের সাথে [১.২55৫] এর মধ্যে থাকা উচিত। যেহেতু এটি অন্যথায় নির্দিষ্ট করা হয়নি, এটি একটি 8 বিট প্রসেসরের "প্রাকৃতিক" স্বাক্ষরযুক্ত পূর্ণসংখ্যা পরিসীমা।


মন্তব্য বিচ্ছিন্ন তালিকা হিসাবে ব্যাখ্যা:

         00 C0       .WORD $C000        ; load address
.C:c000  20 9B B7    JSR $B79B          ; read 8bit integer
.C:c003  86 FB       STX $FB            ; store current page
.C:c005  CA          DEX                ; calculate lower start for ...
.C:c006  F0 01       BEQ .stl
.C:c008  CA          DEX
.C:c009   .stl:
.C:c009  86 FD       STX $FD            ; ... range and store
.C:c00b  20 9B B7    JSR $B79B          ; read 8bit integer
.C:c00e  86 FC       STX $FC            ; store total pages
.C:c010  A6 FB       LDX $FB            ; load current page
.C:c012  E8          INX                ; calculate upper end for ...
.C:c013  E4 FC       CPX $FC
.C:c015  B0 01       BCS .stu
.C:c017  E8          INX
.C:c018   .stu:
.C:c018  86 FE       STX $FE            ; ... range and store
.C:c01a  A2 01       LDX #$01           ; check whether first page is current
.C:c01c  E4 FB       CPX $FB
.C:c01e  F0 1A       BEQ .sequence      ; then directly to sequence
.C:c020  A9 91       LDA #<.prev        ; output string for ...
.C:c022  A0 C0       LDY #>.prev
.C:c024  20 1E AB    JSR $AB1E          ; ... "prev 1 "
.C:c027  A2 02       LDX #$02           ; check whether page 2 is in range ...
.C:c029  E4 FD       CPX $FD
.C:c02b  B0 0D       BCS .sequence      ; ... then directly to sequence
.C:c02d  A9 2E       LDA #$2E           ; load character '.'
.C:c02f   .ellip1:
.C:c02f  20 D2 FF    JSR $FFD2          ; output ...
.C:c032  CA          DEX
.C:c033  10 FA       BPL .ellip1        ; ... 3 times
.C:c035  20 3F AB    JSR $AB3F          ; output space
.C:c038  A6 FD       LDX $FD            ; load lower start for range
.C:c03a   .sequence:
.C:c03a  86 9E       STX $9E            ; store to temporary
.C:c03c   .seqloop:
.C:c03c  E4 FB       CPX $FB            ; compare with current
.C:c03e  D0 05       BNE .notcurrent1   ; yes -> output '['
.C:c040  A9 5B       LDA #$5B
.C:c042  20 D2 FF    JSR $FFD2
.C:c045   .notcurrent1:
.C:c045  A9 00       LDA #$00
.C:c047  20 CD BD    JSR $BDCD          ; output number
.C:c04a  A6 9E       LDX $9E            ; compare with current
.C:c04c  E4 FB       CPX $FB
.C:c04e  D0 05       BNE .notcurrent2   ; yes -> output ']'
.C:c050  A9 5D       LDA #$5D
.C:c052  20 D2 FF    JSR $FFD2
.C:c055   .notcurrent2:
.C:c055  20 3F AB    JSR $AB3F          ; output space
.C:c058  A6 9E       LDX $9E
.C:c05a  E4 FC       CPX $FC            ; compare position with last page
.C:c05c  F0 25       BEQ .printnext     ; if eq jump to part printing "next"
.C:c05e  E4 FE       CPX $FE            ; compare position to upper end of range
.C:c060  F0 05       BEQ .printellip2   ; if eq jump to part printing "..."
.C:c062  E8          INX
.C:c063  86 9E       STX $9E            ; next number
.C:c065  D0 D5       BNE .seqloop       ; and repeat loop for sequence
.C:c067   .printellip2:
.C:c067  E8          INX
.C:c068  E4 FC       CPX $FC            ; compare next number with last page
.C:c06a  F0 0D       BEQ .printlast     ; if eq jump to part printing page num
.C:c06c  A2 02       LDX #$02
.C:c06e  A9 2E       LDA #$2E           ; load character '.'
.C:c070   .ellip2:
.C:c070  20 D2 FF    JSR $FFD2          ; output ...
.C:c073  CA          DEX
.C:c074  10 FA       BPL .ellip2        ; ... 3 times
.C:c076  20 3F AB    JSR $AB3F          ; output space
.C:c079   .printlast:
.C:c079  A6 FC       LDX $FC            ; output last page number
.C:c07b  A9 00       LDA #$00
.C:c07d  20 CD BD    JSR $BDCD
.C:c080  20 3F AB    JSR $AB3F          ; output space
.C:c083   .printnext:
.C:c083  A6 FC       LDX $FC            ; compare current page with last page
.C:c085  E4 FB       CPX $FB
.C:c087  F0 07       BEQ .done          ; if eq nothing else to do
.C:c089  A9 99       LDA #<.next        ; output string for ...
.C:c08b  A0 C0       LDY #>.next
.C:c08d  20 1E AB    JSR $AB1E          ; "next"
.C:c090   .done:
.C:c090  60          RTS
.C:c091   .prev:
.C:c091  50 52 45 56 .BYTE "prev"
.C:c095  20 31 20 00 .BYTE " 1 ", $00
.C:c099   .next:
.C:c099  4E 45 58 54 .BYTE "next"
.C:c09d  00          .BYTE $00

6

আর , 214 বাইট 168 বাইট

function(c,m,`~`=function(x,y)if(x)cat(y)){o=-2:2+c
o=o[o>0&o<=m]
o[o==c]=paste0('[',c,']')
c>1~'prev '
c>3~'1 '
c>4~' ... '
T~o
c+3<m~' ...'
c+2<m~c('',m)
c<m~' next'}

এটি অনলাইন চেষ্টা করুন!

কিছু দুর্দান্ত গল্ফিং টিপসের জন্য @ ব্যবহারকারী 2390246 কে ধন্যবাদ



186 বাইটস যুক্তির বিপরীতে। সত্যিই একটি স্বতন্ত্র অনুভূতি মনে হয় না।
অপরাধমূলকভাবে

2
আরও গল্ফিং সহ 165 বাইট । এছাড়াও ফাংশনটি ব্যবহার করে না c(), যা ডাকা বস্তুর সাথে ভয়ঙ্কর বিভ্রান্তি থেকে মুক্তি পায় c
ব্যবহারকারী 2390246

2
বেশ কয়েকটি মন্তব্য সংস্করণে প্রদর্শিত একটি ত্রুটি সংশোধন করে 171 বাইট আপ ব্যাক করুন !
ব্যবহারকারী 2390246

1
164 বাইটের জন্য আরেকটি সামান্য উন্নতি । এটি সম্পূর্ণ হাইজ্যাক করার জন্য দুঃখিত, আমি কিছুটা দূরে সরিয়ে নিয়েছি!
ব্যবহারকারী 2390246

5

এপিএল (ডায়ালগ) , 83 82 বাইট

বাম আর্গুমেন্ট এবং ডান আর্গুমেন্ট হিসাবে মোট হিসাবে বেনামে ইনফিক্স ফাংশন।

{('prev '/⍨⍺>1),('x+'R'...'⍕∊(⊂1'][',⍕)@⍺⊢'x'@(~∊∘(1,⍵,⍺+3-⍳5))⍳⍵),' next'/⍨⍺<⍵}

এটি অনলাইন চেষ্টা করুন!

{} সুস্পষ্ট ল্যাম্বদা যেখানে এবং বাম এবং ডান যুক্তি উপস্থাপন:

⍺<⍵ মোটের চেয়ে বর্তমান কি ছোট?

' next'/⍨ যদি তাই হয় (lit. প্রতিলিপি করতে এটি ব্যবহার করুন)

(), নিম্নলিখিতটি পুনরায় সংশোধন করুন:

  ⍳⍵through ntegers মোট 1 মাধ্যমে

  'x'@(...)  একটি প্রতিস্থাপন x অবস্থানের যেখানে আইটেম নেই ...

   ~ না

    এর সদস্য

   1 এক

   , অনুসরণ করেছে

    সর্ব মোট

   , অনুসরণ করেছে

    ⍳5 প্রথম পাঁচ te ntegers ([1,2,3,4,5] )

    3- তিনটি থেকে বিয়োগ ([2,1,0,-1,-2] )

    ⍺+ বর্তমান যুক্ত হয়েছে ([⍺+2,⍺+1,⍺,⍺-1,⍺-2] )

    উত্পাদ যে (তোলে আলাদা থেকে'x' )

   (... ) নিম্নলিখিত মৌন ফাংশন প্রয়োগ বর্তমান অবস্থান:

     বিন্যাস (স্ট্রিংফাই)

    '][', পাঠ্যটি প্রিপেন্ড করুন ` 

    1⌽ এক ধাপ বাম দিকে ঘোরান ( ]শেষ প্রান্তে সরান )

     ঘেরযুক্ত (যাতে এটি একটি স্কেলার যা একক নির্দেশিত অবস্থানে ফিট করবে)

   ε nlist (চেপ্টা - কারণ আমরা তা নেস্টেড যখন আমরা বন্ধনী সন্নিবেশিত করেছেন)

    বিন্যাস (স্ট্রিংফাই - 1 একে অপরের থেকে এবং xরান থেকে পৃথক সংখ্যা )

  'x+'⎕R'...' পিসিআরই আর এপিলেস xতিন পিরিয়ড সহ চলমান

(), নিম্নলিখিতটি পুনরায় সংশোধন করুন:

  ⍺>1 বর্তমান 1 এর চেয়ে বড়?

  'prev '/⍨ যদি তাই হয় (lit. প্রতিলিপি করতে এটি ব্যবহার করুন)


5

ওল্ফ্রাম ভাষা (গণিত) , 131 114 109 বাইট

Range@#2/.{#->"["<>(t=ToString)@#<>"]",1->"prev 1",#2->t@#2<>" next",#-3|#+3:>"...",x_/;Abs[x-#]>2:>Nothing}&

এটি অনলাইন চেষ্টা করুন!

কিভাবে এটা কাজ করে

প্রতিস্থাপন প্রচুর। সমস্ত পৃষ্ঠার একটি তালিকা দিয়ে শুরু করে, প্রতিস্থাপন করুন, ক্রমে:

  1. #->"["<>(t=ToString)@#<>"]": বন্ধনীযুক্ত স্ট্রিং সহ বর্তমান পৃষ্ঠা,
  2. 1->"prev 1": পৃষ্ঠা 1 স্ট্রিং সহ prev 1,
  3. #2->t@#2<>" next": স্ট্রিং সহ (number) next, শেষ পৃষ্ঠা
  4. #-3|#+3:>"...": পৃষ্ঠা current-3এবং current+3স্ট্রিং সহ পৃষ্ঠা "...",
  5. x_/;Abs[x-#]>2:>Nothing: নীচে current-2বা উপরের সমস্ত current+2কিছুই (পূর্ণসংখ্যার) পৃষ্ঠা নেই with (হ্যাঁ, Nothingএটি অন্তর্নির্মিত।

4

ফানকি , 218 210 বাইট

কিছু বাইট সংরক্ষণ করা হয়েছে, যার মধ্যে কিছু ধন্যবাদ tsh

p=>m=>{t={}a=t::push b=t::pop fori=p-2i<p+3i++a(i)t[2]="[%i]"%p whilet[0]<1b(0)whilet[n=-1+#t]>m b(n)ifp>4a(0,"...")ifp>3a(0,1)ifp>1a(0,"prev")ifp<m-3a("...")ifp<m-2a(m)ifp<m a("next")t::reduce((a,b)=>a+" "+b)}

এটি অনলাইন চেষ্টা করুন!


আমি i<=p+2ফানকি জানি না, তবে মনে হয় এটি গল্ফ করা যেতে পারে i<p+3, এবং t[2]="["+t[2]+"]"হতে পারে t[2]="["+p+"]"?
tsh

4

পাইথন 2 , 136 130 বাইট

lambda p,n:[i for i,j in zip(['prev',1,'...',p-2,p-1,[p],p+1,p+2,'...',n,'next'],[1,3,4,2,1,.1,-n,1-n,3-n,2-n,-n])if p*cmp(j,0)>j]

এটি অনলাইন চেষ্টা করুন!

যদি অ্যারে হিসাবে আউটপুট থাকে তবে অ্যারের প্রতিটি আইটেমকে স্ট্রিংয়ে রূপান্তর করার পরে স্ট্রিংয়ের মতো একই ফলাফল তৈরি করা উচিত এবং তাদের একক স্থানের সাথে যুক্ত করা উচিত।

এটি অনলাইন চেষ্টা করুন!পূর্বনির্ধারিত আকারে, যেখানে আপনি পাদলেখকে "প্রতিটি স্ট্রিংয়ে রূপান্তর করতে, স্পেসে যোগ দিতে" বেশ আক্ষরিক অনুবাদ করতে পারেন।

এটি লিনের পদ্ধতির বিকল্প।


বাইট i or'...'এবং জিরো ( এই জাতীয় ) সহ একটি বাইট সংরক্ষণ করুন
জোনাথন অ্যালান

3

পাইথন 2 , 135 বাইট

lambda c,t:re.sub('  +',' ... ','prev '*(c>1)+' '.join(`[x,[x]][x==c]`*(x%t<2or-3<x-c<3)for x in range(1,t+1))+' next'*(c<t))
import re

এটি অনলাইন চেষ্টা করুন!

প্রথমে আমরা একটি স্ট্রিং তৈরি করি prev 1 3 4 [5] 6 7 10 nextযা কিছু সংখ্যক মোছার ফলে "ফাঁক" পড়েছে তবে তাদের সীমানা ছাড়ানো স্থান নয়। তারপরে আমরা ...একটি রেজেক্স ব্যবহার করে 2+ স্পেসের যে কোনও রান প্রতিস্থাপন করি ।


আপনি -1 এ ফ্লিপ (-3<x-c<3or x%t<2)করতে পারেন (x%t<2or-3<x-c<3), orঅপারেটরের উভয় যুক্তিই বুলিয়ান মান প্রদান করবে।
এরিক দি আউটগল্ফার

3

জাভা 8, 201 200 197 বাইট

t->n->(n<2?"[1] ":"prev 1 ")+(n>4?"... "+(n-2)+" "+~-n+" ["+n+"] ":n>3?"2 3 [4] ":n>2?"2 [3] ":n>1?"[2] ":"")+(n<t?(n>t-2?"":n>t-3?t-1+" ":n>t-4?(t-2)+" "+~-t+" ":++n+" "+-~n+" ... ")+t+" next":"")

ব্যাখ্যা:

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

t->n->             // Method with two integer parameters and String return-type
  (n<2?            //  If the current page is 1:
    "[1] "         //   Start with literal "[1] "
   :               //  Else:
    "prev 1 ")     //   Start with literal "prev 1"
  +(n>4?           //  +If the current page is larger than 4:
     "... "        //    Append literal "... "
     +(n-2)+" "    //    + the current page minus 2, and a space
     ~-n           //    + the current page minus 1, and a space
     +" ["+n+"] "  //    + "[current_page]" and a space
    :n>3?          //   Else-if the current page is 4:
     "2 3 [4] "    //    Append literal "2 3 [4] "
    :n>2?          //   Else-if the current page is 3:
     "2 [3] "      //    Append literal "2 [3] "
    :n>1?          //   Else-if the current page is 2:
     "[2] "        //    Append literal "[2] "
    :              //   Else (the current page is 1):
     "")           //    Append nothing
  +(n<t?           //  +If the current page and total amount of pages are not the same:
     (n>t-2?       //    If the current page is larger than the total minus 2:
       ""          //     Append nothing
      :n>t-3?      //    Else-if the current page is larger than the total minus 3:
       t-1+" "     //     Append the total minus 1, and a space
      :n>t-4?      //    Else-if the current page is larger than the total minus 4:
       (t-2)+" "   //     Append the total minus 2, and a space
       +~-t+" "    //     + the total minus 1, and a space
      :            //    Else:
       ++n+" "     //     Append the current page plus 1, and a space
       +-~n+       //     + the current page plus 2, and a space
       " ... ")    //     + literal "... "
     +t            //    + the total itself
     +" next")     //    + literal " next"
    :              //   Else (current page and total amount of pages are the same):
     "")           //    Append nothing
                   // End of method (implicit / single-line return-statement)

3

জাভা (ওপেনজেডিকে 8) , 218 179 177 167 166 বাইট

c->t->{String p,e="... ",x="["+c+"] ";int i=c-2;for(p=c>1?"prev 1 "+(c>4?e:""):x;i<c+3;i++)p+=i>1&i<t?i==c?x:i+" ":"";return p+(i<t-1?e:"")+(c<t?t+" next":t>1?x:"");}

এটি অনলাইন চেষ্টা করুন!


উত্তম উত্তর, আমার চেয়ে খাটো! ইতিমধ্যে পরে একটি জায়গা রেখে আপনি পাঁচ বাইট গল্ফ করতে পারেন"["+c+"] "; : 172 বাইট
কেভিন ক্রুইজসেন

ওহ, এবং আরও একটি বাইটটি p+=লুপের ঘোষণার আগে লুপের আগে শেষ রেখে : 171 বাইটস
কেভিন ক্রুইজসেন

3

জেলি , 59 বাইট

+2Rṫ-4>Ðḟ⁹1;;QµI’a3R”.ṁ⁸żẎ
Ị¬;n“¢©ỵY“¡&ç»ẋ"W€jçLÐfKṣ⁸j⁸WŒṘ¤

একটি সম্পূর্ণ প্রোগ্রাম * ফলাফল মুদ্রণ STDOUT। তর্ক currentএবং totalএই ক্রমে নেয় ।

এটি অনলাইন চেষ্টা করুন! অথবা পরীক্ষা-স্যুটটি দেখুন

কিভাবে?

+2Rṫ-4>Ðḟ⁹1;;QµI’a3R”.ṁ⁸żẎ - Link 1, numbers and ellipses: current, total
                           -                                   e.g. 52, 173
 2                         - literal two                            2
+                          - add to current                         54
  R                        - range                                  [1,2,3,...,53,54]
    -4                     - literal minus four                     -4
   ṫ                       - tail from index (i.e. right five)      [50,51,52,53,54]
         ⁹                 - chain's right argument, total          173
       Ðḟ                  - filter discard if:
      >                    -  greater than?                         [50,51,52,53,54]
          1                - literal one                            1
           ;               - concatenate                            [1,50,51,52,53,54]
            ;              - concatenate (implicit right = total)   [1,50,51,52,53,54,173]
             Q             - unique (remove excess 1 and/or total)  [1,50,51,52,53,54,173]
              µ            - new monadic chain, call that X
               I           - incremental differences                [49,1,1,1,1,119]
                ’          - decrement (vectorises)                 [48,0,0,0,0,118]
                  3        - literal three                          3
                 a         - logical and (vectorises)               [3,0,0,0,0,3]
                   R       - range (vectorises)                     [[1,2,3],[],[],[],[],[1,2,3]]
                    ”.     - literal '.' character                  '.'
                      ṁ    - mould like that                        [['.','.','.'],[],[],[],[],['.','.','.']]
                       ⁸   - chain's left argument, X               [1,50,51,52,53,54,173]
                        ż  - zip with that                          [[1,['.', '.', '.']],[50,[]],[51,[]],[52,[]],[53,[]],[54,['.','.','.']],[173]]
                         Ẏ - tighten                                [1,['.', '.', '.'],50,[],51,[],52,[],53,[],54,['.','.','.'],173]

Ị¬;n“¢©ỵY“¡&ç»ẋ"W€jçLÐfKṣ⁸j⁸WŒṘ¤ - Main link: current, total   e.g. 52, 173
Ị                                - insignificant? (abs(current)<=1)  0
 ¬                               - logical not                       1
   n                             - not equal (current != total)      1
  ;                              - concatenate                       [1,1]
    “¢©ỵY“¡&ç»                   - list of compressed strings        [['p','r','e','v'], ['n','e','x','t']]
               "                 - zip with:
              ẋ                  -   repeat (zeros -> empty lists)   [['p','r','e','v'], ['n','e','x','t']]
                W€               - wrap €ach (prep for the join)     [[['p','r','e','v']], [['n','e','x','t']]]
                   ç             - call last link (1) as a dyad      [1,['.', '.', '.'],50,[],51,[],52,[],53,[],54,['.','.','.'],173]
                  j              - join                              [['p','r','e','v'],1,['.','.','.'],50,[],51,[],52,[],53,[],54,['.','.','.'],173,['n','e','x','t']]
                     Ðf          - filter keep if:
                    L            -   length (removes empty lists)    [['p','r','e','v'],1,['.','.','.'],50,51,52,53,54,['.','.','.'],173,['n','e','x','t']]
                       K         - join with spaces                  ['p','r','e','v',' ',1,' ','.','.','.',' ',50,' ',51,' ',52,' ',53,' ',54,' ','.','.','.',' ',173,' ','n','e','x','t']
                         ⁸       - chain's left argument, current    52
                        ṣ        - split at that                     [['p','r','e','v',' ',1,' ','.','.','.',' ',50,' ',51,' ',],[,' ',53,' ',54,' ','.','.','.',' ',173,' ','n','e','x','t']]
                               ¤ - nilad followed by link(s) as a nilad:
                           ⁸     -   chain's left argument, current  52
                            W    -   wrap                            [52]
                             ŒṘ  -   Python string representation    ['[','5','2',']']
                          j      - join                              ['p','r','e','v',' ',1,' ','.','.','.',' ',50,' ',51,' ','[','5','2',']',' ',53,' ',54,' ','.','.','.',' ',173,' ','n','e','x','t']
                                 - implicit print                    prev 1 ... 50 51 [52] 53 54 ... 173 next

* currentবাম দিকে এবং totalডানদিকে ডায়াডিক লিঙ্ক হিসাবে এটি অক্ষর এবং পূর্ণসংখ্যার মিশ্রণ সহ একটি তালিকা দেয়; এই তালিকায় স্থানগুলি অন্তর্ভুক্ত রয়েছে। তবে অনুমানটিকে Kমেনে চলার জন্য বাইটটি সহজেই সরানো যায় না, ফলস্বরূপ ফলাফলটির পরে currentপৃথক অক্ষর (যেমন [...'[','5','2',']'...]) হিসাবে বন্ধনী তৈরি হবে সুতরাং "প্রতিটি আইটেমকে স্ট্রিংয়ে রূপান্তর করুন এবং তাদের সাথে একটি স্থানের সাথে যুক্ত করুন" কাঙ্ক্ষিত ফলাফল তৈরি করতে ব্যর্থ হবে )


2

পাইথন 2 , 178 170 বাইট

x,y=input()
e="... ",""
o=("Prev 1 ","[1] ")[y<2]+e[y<5]
for z in range(2,x):o+=("",(`z`,`[z]`)[z==y]+" ")[y-3<z<y+3]
print o+("",e[x-y<4]+(`x`+" Next",`[x]`)[y==x])[x>1]

এটি অনলাইন চেষ্টা করুন!

নিয়ম আরও মনোযোগ সহকারে পড়ার পরে দ্বিতীয় চেষ্টা।

-8 কিছু অপ্রয়োজনীয় বন্ধনী হারিয়ে।


2

অষ্টাভে , 169 196 190 181 175 169 166 বাইট

@(n,m)(r=[(n>1)*'prev ' (g=n>4)*'1 ... ' (s=@sprintf)(f='%d ',max(n-3+g,1):n-1) s('[%d]',n) 32*(q=n<m) s(f,n+1:min(n+3-(l=n<m-3),m)) l*['... ' s(f,m)] q*'next'])(r>0)

এটি অনলাইন চেষ্টা করুন!

আমি পরে একটি ব্যাখ্যা যোগ করব।

হুম, আউটপুট ফর্ম্যাটটিতে কিছু সমস্যা ছিল বলে মনে হচ্ছে। এগুলি এখন সমাধান করা হয়েছে - সমস্ত ফলাফল সঠিক। তবে হায় এর দাম 27 বাইট। কিছুটা ফ্যাট ট্রিমিংয়ের সাথে থাকলেও এই সমস্তকে পিছনে ছুঁড়ে ফেলার জন্য পরিচালিত।


  • *পরিবর্তে ব্যবহার করে 6 বাইট সংরক্ষণ করুন.* - ধন্যবাদ @ স্টিভিগ্রিফিন
  • আমার কাছে ইতিমধ্যে সেই হ্যান্ডেলটি ছিল তার sprintfপরিবর্তে 9 বাইট ব্যবহার করে সংরক্ষণ করুনnum2strs
  • []মধ্যে টানা 6 বাইট সংরক্ষণ করুনsprint কল।
  • তুলনা সংখ্যা হ্রাস করার একটি উপায় খুঁজে 6 টি বাইট সংরক্ষণ করুন।
  • strtrim()পিছনের জায়গার কারণ না করে প্রয়োজনীয় অপসারণ করে 3 বাইট সংরক্ষণ করুন ।

আপনার আউটপুটে 54 নম্বরের পরে আরও 1 স্থান রয়েছে।
tsh

@tsh এখন ঠিক করা হয়েছে। আমি সমস্ত পরীক্ষার কেস টিআইও আউটপুটে যুক্ত করেছি।
টম কার্পেন্টার

2

সি # (.নেট কোর) , 195 192 বাইট

কেভিন ক্রুইজসেনকে 3 বাইট সংরক্ষণ করা হয়েছে।

c=>t=>{var n=c>1?"prev ":"";n+=c>4?"1 ... ":c<2?"[1] ":"1 ";if(t>1){for(int i=c-3;i++<c+2;)if(i>1&i<t)n+=i==c?$"[{i}] ":i+" ";n+=c<t-4?"... "+t:c==t?$"[{t}]":t+"";n+=c<t?" next":"";}return n;}

এটি অনলাইন চেষ্টা করুন!


1
ফর-লুপের বন্ধনীগুলি সরিয়ে আপনি 2 বাইট সংরক্ষণ করতে পারেন। এবং আরও 1 টি কারিগরি ইনপুট ব্যবহার করে c=>t=>এটি এখানে চেষ্টা করুন: 192 বাইট
কেভিন ক্রুইজসেন

2

সি ++ - 247 বাইট

#include <iostream>
#define c std::cout<<
#define N (a-i<3?i-a<2?1:b-i:a-i-2)
void s(int a,int b){if(a>1)c"prev ";for(int i=1;i<=b&&N!=0;i+=N)c(i==1?"":" ")<<(a==i?"[":"")<<i<<(a==i?"]":"")<<(N>1?" ...":"");if(a<b-2)c" "<<b;if(a<b)c" next";c"\n";}

এটি অনলাইন চেষ্টা করুন!


1
নোট করুন যে "অন্য কোনও পৃষ্ঠার নম্বর আউটপুট করা উচিত নয়।"
tsh

ওহ দুঃখিত, আমি সেই নিয়মটি মিস করেছি। আমি শীঘ্রই এটি সংশোধন করব।
বালাজস্টথ

এছাড়াও, লিঙ্কটি নষ্ট হয়ে গেছে।
ইয়ান এইচ।

@Appleguy: এ বর্ণন এই - আপনার কোড পরিমাপ করা Tio উপর "কোড" ক্ষেত্রের যায়। তারপরে আপনি সেখান থেকে আপনার সম্পূর্ণ পোস্টটি সহজেই তৈরি করতে পারেন।
ফেলিক্স Palmen

2

পাইথন 2 ,  128  124 বাইট

-4 বাইট জোনাথন অ্যালানকে ধন্যবাদ !

lambda c,l:["prev"]*(c>1)+[range(1,c),[1,"...",c-2,c-1]][c>4]+[[c]]+[range(c+1,l+1),[c+1,c+2,"...",l]][l-c>4]+["next"]*(c<l)

এটি অনলাইন চেষ্টা করুন!

একটি তালিকা হিসাবে আউটপুট, কিন্তু টিও লিঙ্কে সুন্দর-মুদ্রণ অন্তর্ভুক্ত।


while ~0:যখন while 1:সূক্ষ্ম কাজ করে তখন এটি ব্যবহার করার জন্য একটি অদ্ভুত জিনিস ।
জোনাথন অ্যালান


-4 চলন্ত বাইট [[c]]আউট (যেমন এই ) সম্পাদনা - তাই না while 2*3*4*5*6*7*8*9*'I know a song that will get on your nerves, get on your nerves, get on your nerves;\n':: P
জনাথন অ্যালান

@ জোনাথন অ্যালান হ্যাঁ ধন্যবাদ, আমি কেবল এটি নিয়েই খেলছিলাম কারণ আমি অনুভব করেছি যে এটি অনর্থক।
মিঃ এক্সকোডার

2

পিএইচপি, 157 150 বাইট

আক্ষরিক অর্থে বিশদ গ্রহণ করা সবচেয়ে সংক্ষিপ্ত পদ্ধতির বলে প্রমাণিত হয়েছে:

[,$k,$n]=$argv;for($k>1&&print"prev ";$i++<$n;)$g=in_array($i,range($k-2,$k+2)+[5=>1,$n])?!print$i-$k?"$i ":"[$i] ":$g||print"... ";$k<$n&&print next;

এটি দিয়ে চালান php -nr '<code>' <curpage> <numpages>বা অনলাইনে চেষ্টা করুন


2

সিজেম, 74

q~\:A\:B]3e*[1T4A3+1A].>["prev"1'.3*_B"next"]:a.*3/5,A2-f+B,2>&*:+_A#Aa`tp

অ্যারে হিসাবে আউটপুট। এটি অনলাইনে চেষ্টা করুন

স্ট্রিং হিসাবে আউটপুট pসঙ্গে ফাইনাল প্রতিস্থাপন S*

ব্যাখ্যা:

q~          read and evaluate the input (pushing 2 numbers on the stack)
\:A\:B      store the numbers in A and B, keeping them in the same order
]3e*        wrap in array, then repeat each number 3 times - [A A A B B B]
[1T4        make an array containing 1, 0 (T=0 by default), 4,
A3+1A]      then A+3, 1, and A
.>          compare the 2 arrays element by element - [A>1 A>0 A>4 B>A+3 B>1 B>A]
             (each result is 1 or 0)
["prev"1    make an array containing "prev", 1,
'.3*_       "..." twice ("..." = '.' repeated 3 times),
B"next"]    then B and "next"
:a          wrap each of its elements in an array - [["prev"][1]["..."]…]
.*          repeat each of these arrays according to the previous array
             e.g. ["prev"] is repeated A>1 times - ["prev"] if A>1, else []
             [1] is repeated A>0 times (always 1), etc.
             obtaining an array of 6 arrays, some of which may be empty
3/          split into 2 arrays of 3 arrays each (between the "..." parts)
5,A2-f+     make an array [0 1 2 3 4] then add A-2 to each element
B,2>&       intersect with the array [2 3 … B-1] (these are the middle numbers)
*           join the 2 previous arrays by adding these numbers between them
:+          concatenate all these arrays and numbers together
             obtaining an array containing only numbers and strings
_A#         duplicate the array then find the position of A in it
Aa`         generate the "[A]" string (with the actual number for A)
             by wrapping A in an array and getting its string representation
t           put it in the array at A's position
p           print the array's string representation

2

হাস্কেল, 145 129 বাইট

s x=show x
a#t=["prev 1"|a>1]++["..."|a>4]++map s[max 4a-2..a-1]++s[a]:map s[a+1..min(a+3)t-1]++["..."|t-a>3]++[s t++" next"|a<t]

এটি অনলাইন চেষ্টা করুন!

সম্পাদনা করুন: @ janrjan জোহানসেন 16 বাইট সংরক্ষণ করেছেন ধন্যবাদ!


1
(1) আপনি ড্রপ করতে পারেন unwords$, অ্যারে আউটপুট অনুমোদিত। (2) s x=show x; ... s[a]খাটো, যার পরে এটা দিয়ে পরের এক সাথে মার্জ করা যায় :এবং map, এবং তারপর id=<<মাত্র ব্যবহার চেয়ে দীর্ঘতর হয়ে ++সে। (3) max 4a-2এবং min(a+3)t-1সংক্ষিপ্ত হয়। এটি অনলাইন চেষ্টা করুন!
janrjan জোহানসেন

1

গল্ফ স্ক্রিপ্ট - 104 অক্ষর

~\:a;:b;1a<'prev '*3a<'1 ... '*[5,{a 2-+}/]{.0>\b)<&},{.a={'['\']'}*' '}/;b a-:c 2>' ... 'b+*0c<' next'*

Ungolfed

~\:a;:b;       # a = 1st arg, b = 2nd arg
1a<'prev '*    # if a > 1: print 'prev '
3a<'1 ... '*   # if a > 3: print '1 ... '
[5,{a 2-+}/]   # creates an array [a-2 a-1 a a+1 a+2]
{.0>\b)<&},    # keeps only elements >0 and <=b
{
  .a={'['\']'}*      # puts '[' ']' around the element equal to a
  ' '}/;             # prints each element with a leading space
b a-:c 2>' ... 'b+*  # if b-a > 2: print ' ... ' + b
0c<' next'*          # if b-a > 0: print ' next'


হ্যাঁ, আপনাকে ধন্যবাদ. আমি মোবাইলে ছিলাম, সমস্ত কোড ক্র্যাম করা একটু অস্বস্তিকর ছিল।
ফেদেরওয়ার

1

পার্ল 5, 113 + 1 (-পি) 109 +3 (-পাল) বাইট

$_=join$",1..<>;s/\b@F\b/[$&]/;s/^1/prev 1/;s/\d$/$& next/;s/(^|\] )\w+ \w+ \K[\w ]*(?= \w+ \w+( \[|$))/.../g

এটি অনলাইনে চেষ্টা করুন


1
Use `$` `` এর দুর্দান্ত ব্যবহার এবং $'! এটির সাথে একটি ছোট্ট খেলা ছিল, তবে এটি খুব বেশি নামাতে সক্ষম ছিল না, তবে <>রেইগেক্সের পরিবর্তে এবং -aএকটি রেফারেন্স রাখার সাহায্যে $_111 এ নামতে সক্ষম হয়েছি: অনলাইনে চেষ্টা করে দেখুন! ( -lপাঠযোগ্যতার জন্য যুক্ত)
ডম হেস্টিংস

ভাল, আমি
@F

আমি "@F"একক ইনপুটগুলির ব্যবহারটি উপভোগ করছি , এটি একটি দুর্দান্ত কাজ! -lযদিও, শুধুমাত্র একবার :) এ সব পরীক্ষা চালানোর জন্য বাইট গণনা মধ্যে প্রয়োজন হয় না। আমি বলিনি, তবে আপনার উপবৃত্তির বৈধতা খুব সুন্দর!
ডোম হেস্টিংস

প্রকৃতপক্ষে আমি দেখেছি যে আমার প্রথম পোস্টের একটি উন্নত হতে পারে
নাহুয়েল ফিউইলুল

1

রুবি , 127 বাইট

আমি এটি বিশেষত পূর্ব / পরবর্তী যুক্তি দিয়ে বিশেষভাবে সন্তুষ্ট নই।

->c,t{"prev #{(1..t).chunk{|n|n<2||n==t||n>c-3&&n<c+3}.map{|t,a|t ?a:?.*3}*" "} next".sub(/(prev )?\b(#{c})\b( next)?/,'[\2]')}

এটি অনলাইন চেষ্টা করুন!

Ungolfed

->c,t{
  "prev #{
    (1..t)
    .chunk {|n| n < 2 || n == t || n > c - 3 && n < c + 3 }
    .map {|t,a| t ? a : ?. * 3 } * " "
  } next"
  .sub(/(prev )?\b(#{ c })\b( next)?/, '[\2]')
}

1

পিএইচপি (ব্রাউজার), 267 বাইট

<?php parse_str($_SERVER['QUERY_STRING']);$c=$a!=1?$a>3?$a>4?'prev 1 . . . ':'prev 1 ':'prev ':'[1] ';$d=$a<$b-2?$a+3:$b;for($i=$a<=2?$a==1?$i=2:$i=$a-1:$i=$a-2;$i<$d;$i++)$c.=$a==$i?"[$i] ":"$i ";if($a<$b-2)$c.=" . . . $b next";else $c.=$a==$b?"[$b]":"$b next";echo $c?>

এটি অনলাইন চেষ্টা করুন!

অবশ্যই এটি যতটা ছোট হতে পারত না, এবং উপরে প্রদর্শিত হয়েছিল, পিএইচপি কমান্ড লাইনে ব্যবহার করা আরও ছোট হতে পারে। ইনপুটটি জিইটি অনুরোধের মাধ্যমে হয়, একটি নির্বাচিত নম্বর, খ এর সীমা। এই মত দেখাচ্ছেfoo.bar.com/index.php?a=2&b=12

Ungolfed

<?
    parse_str($_SERVER['QUERY_STRING']);
    $c=$a!=1?$a>3?$a>4?'prev 1 . . . ':'prev 1 ':'prev ':'[1] ';
    $d=$a<$b-2?$a+3:$b;
    for($i=$a<=2?$a==1?$i=2:$i=$a-1:$i=$a-2;$i<$d;$i++)
        $c.=$a==$i?"[$i] ":"$i ";

    if($a<$b-2)$c.=" . . . $b next";else
    $c.=$a==$b?"[$b]":"$b next";
    echo $c
?>

আমি নিশ্চিত যে আমার টেরিনারি অপারেটরগুলি উন্নত হতে পারে, বিনা দ্বিধায় চেষ্টা করুন।


আমার উত্তরটি কোনও ব্রাউজারে তৈরি করতে এক বা দুটি বাইট খরচ পড়তে পারে: [,$k,$n]=$argv; -> <?[$k,$n]=$_GET;আমি যদি বর্তমান পৃষ্ঠাকে প্রথম যুক্তি এবং দ্বিতীয় পৃষ্ঠার সংখ্যা বলে জোর দিই; <?extract($_GET);যদি আমি নাম যুক্তি ব্যবহার করতে চান।
তিতাস

a = b-3 এর জন্য ব্যর্থ হয়; ঠিক করার $a<$b-2সাথে প্রতিস্থাপন $a<$b-3
তিতাস

2
গল্ফড: <?=($a=$_GET['a'])>1?'prev 1 ':'[1] ',$a>4?'... ':'';for($i=$a>4?$a-3:1;$i<$a+3&++$i<$b=$_GET['b'];)echo$a-$i?"$i ":"[$i] ";echo$a<$b-3?"... ":"",$a<$b?"$b next":"[$b]";(169 বাইট)
তিতাস

1

আইবিএম / লোটাস নোটস সূত্র, 217 211 বাইট

-২ কেভিনি ক্রুজসেনকে ধন্যবাদ জানাতে

@ টেক্সট মানগুলির জন্য ভেরিয়েবল ব্যবহার করে

o:=@If(a=1;"[1]";"Prev 1 ")+@If(a>4;"... ";"");@For(x:=2;x<b;x:=x+1;T:=@Text(x);o:=o+@If(x>a-3&x<a+3;@If(a=x;"["+T+"]";T)+" ";""));Z:=@Text(b);o:=o+@If(b>1;@If(b-a>3;"... ";"")+@If(a=b;"["+Z+"]";Z+" Next");"");o

ফর্মুলা কীভাবে ব্যবহার করবেন তা মনে করার চেষ্টা করার মজাদার জন্য মূলত আমার পাইথন 2 এর একটি বন্দর।

ফর্মুলার জন্য কোনও টিআইও নেই তাই এখানে পরীক্ষার কয়েকটি মামলার স্ক্রিনশট রয়েছে:

এখানে চিত্র বর্ণনা লিখুন


1
x>a-3 & x<a+3লোটাস নোটস সূত্রে শূন্যস্থান প্রয়োজন কেন এমন কোনও কারণ আছে ? কি&x কিছু জন্য সংরক্ষিত, অথবা সেখানে বিশেষ করে কোনো কারণ নেই কেন উভয় পক্ষের স্পেস বাধ্যতামূলক? আমি কখনই এই ভাষায় বিটিডব্লুতে প্রোগ্রাম করি নি, কৌতূহল ছিল। :)
কেভিন ক্রুইজসেন

@ কেভিন ক্রুজসেন - সত্যি কথা বলতে আমি জানি না। এটি ছাড়া চেষ্টা করার কথা কখনও ভাবেননি। পাঠযোগ্য কোড :-) লেখার পক্ষে খুব বেশি অভ্যস্ত। আমি নোট ইনস্টল থাকা কোনও মেশিনে উঠলে আমি আগামীকাল পরীক্ষা করব এবং আপনাকে জানাব।
এলপেড্রো

1
@ কেভিন ক্রুজসেন - আপনি ঠিক বলেছেন!
এলপেড্রো

হেই, খুশী আমি সাহায্য করতে পারলাম। :) আমার কাছ থেকে +1, এবং আমি দেখতে পাচ্ছি আপনি @ টেক্সটের জন্য একটি ভেরিয়েবল তৈরি করে আরও কিছু গল্ফ করেছেন। গতকাল যখন আমি দেখেছি এটি গতকাল দু'বার ব্যবহৃত হয়েছিল তখন এটি আমার মনের দিক থেকে পেরিয়ে গেছে যে সম্ভবত সম্ভব।
কেভিন ক্রুইজসেন

1

এক্সেল ভিবিএ, 202 201 বাইট

বেনামে VBE তাত্ক্ষণিক উইন্ডো ফাংশন যা VBE তাত্ক্ষণিক উইন্ডোতে পরিসীমা A1:A2এবং আউটপুটগুলি থেকে ইনপুট নেয় ।

For i=[Max(A1-2,1)]To[Min(A1+2,A2)]:s=s &IIf([A1]=i,"[" &i &"]",i)&" ":Next:?[If(A1=1,"","prev "&If(A1>3,1&If(A1>4," ... "," "),""))]s[If(A1<A2,If(A1-A2<-3,"... ","")&If(A1-A2<-2,A2&" ","")&"next","")]

সাবরুটাইন সংস্করণ

পাঠযোগ্যতার জন্য অন্তর্ভুক্ত

Public Sub PageSelect(Optional ByVal Current As Long = -1, _
                      Optional ByVal Total   As Long = -1)

    Call Sheet1.Activate

    Let [A1] = IIf(Current = -1, [A1], Current)
    Let [A2] = IIf(Total   = -1, [A1], Total)

    Dim s As String
    Let s = ""

    For i = [Max(A1-2,1)] To [Min(A1+2,A2)] Step 1
        Let s = s & IIf([A1] = i, "[" & i & "]", i) & " "
    Next
    Debug.Print [If(A1=1,"","prev "&If(A1>3,1&If(A1>4," ... "," "),""))]; _
                s; _
                [If(A1<A2,If(A1-A2<-3,"... ","")&If(A1-A2<-2,A2&" ","")&"next","")]
End Sub

0

পাওয়ারশেল , 237 বাইট

param($a,$n)('prev 1','[1]')[$n-lt2]+" ... $($n-2) $($n-1) [$n]"*($n-gt4)+" 2 3 [4]"*($n-eq4)+" 2 [3]"*($n-eq3)+" [2]"*($n-eq2)+" $($n+1) $($n+2) ..."*($n-lt$a-3)+" $($n+1) $($n+2)"*($n-eq$a-3)+" $($n+1)"*($n-eq$a-2)+" $a next"*($n-ne$a)

এটি অনলাইন চেষ্টা করুন!

অনেকগুলি ডলারের লক্ষণ সহ এক বিশাল স্ট্রিং কনটেনটেশন। আরও গল্ফিং উপর কাজ। নাহ, আমি মনে করি এটি যতটা সংক্ষেপে এই পদ্ধতির যেতে পারে।


0

জাভাস্ক্রিপ্ট (ES6), 265 263 258 240 239 220 194 193 182 178 বাইট

একটি ডিবাগ সরঞ্জাম অপসারণ থেকে -2

আমি ES6 ব্যবহার করছি এবং কখনও কখনও বন্ধনীর সাথে দূরে করতে পারি তা বুঝতে পেরে -5

-18 পূর্ববর্তী সংস্করণ থেকে এমন কিছু সরিয়ে ফেলা যা এখন অপ্রচলিত

কিছু চটজলদি জিনিস করা থেকে

-19 অপ্রয়োজনীয় ভেরিয়েবলগুলি অপসারণ থেকে

-26 সমস্ত জটিল জটিল মুছে ফেলা থেকে বাইটস। আমি ES6 এ নতুন

সংক্ষিপ্ত তুলনা ব্যবহার করে -1

পুনরাবৃত্তি ফাংশন ব্যবহার করে -11

* -4 এর ?...:0সাথে প্রতিস্থাপন করা &&...এবং এর ... ${t}সাথে from...+t

এটি আমার জীবনের বেশিরভাগ সময় নিয়েছে এবং পর্যাপ্ত পরিমাণে অগ্রগতি দেয় নি। তবে আমি খুব আনন্দিত যে চূড়ান্ত কোডটি 2 (2 ^ 8) এর শক্তি, আমি জানি যে আরও একটি জাভাস্ক্রিপ্ট উত্তর রয়েছে যা প্রায় 120 বাইট। তবে আমি এখনও এই কোডটি পছন্দ করি

সম্পাদনা: আমি জানি না আমি কী ভাবছিলাম। 265 2 ^ 8 নয় ...

এটি তৈরি করার সময়, আমি চলাফেরা করা সংস্করণটি ভেঙে ফেলতে সক্ষম হয়েছি। Godশ্বর, আমি কি নিয়মাবলী কোড ঘৃণা করি?

সম্পাদনা 2: এখন এটি আরও ভাল 121 বাইট সমাধানের মতো দেখাচ্ছে

y=(e,i,t="")=>i++<e?y(e,i,t+i+' '):t.slice(0,-1);m=(t,p)=>[p-1&&"prev",p<5?y(p-1,0):"1 ... "+y(p-1,p-3),`[${t}]`,t-p<4?y(t,p):y(p+2,p)+` ... `+t,t-p&&"next"].filter(e=>e).join` `

ব্যাখ্যা:

আসার তবে মূলত আপনি y range(end, start)এবং এটি কিছু দুর্দান্ত জিনিস দেয় যেমন:

  1. প্রড শো যদি page1 হয়
  2. বাম বিন্দু যদি দেখান page > 4
  3. ডান বিন্দু যদি দেখান total - page < 4
  4. যদি পরবর্তী দেখান total - page == 0

এবং এর মতো স্টাফ এবং '' এর মাধ্যমে এটিতে যোগ দেয়। আমি জানি আপনার দরকার নেই তবে আমার কাছে এটি অর্ধ-প্রচলিত like আমি জানি না। উপভোগ করুন।

এটি অনলাইন চেষ্টা করুন!

এটি অনলাইনে বৈধতা দিন!

এখানে একটি 186 185 174 170 বাইট সমাধান যা আমি পছন্দ করি না: এটি অনলাইনে চেষ্টা করুন!


0

পাওয়ারশেল , 141 বাইট

param($c,$t)($('prev'*($c-ne1)
1
'...'*($c-gt4)
($c-2)..($c+2)-gt1-lt$t
'...'*($t-$c-gt4)
$t
'next'*($t-ne$c))|?{$_}|gu)-replace"^$c$","[$c]"

এটি অনলাইন চেষ্টা করুন!

কম গল্ফড:

param($current,$total)
$uiElements=$(
    'prev'*($current-ne1)
    1
    '...'*($current-gt4)
    ($current-2)..($current+2)-gt1-lt$total
    '...'*($total-$current-gt4)
    $total
    'next'*($total-ne$current)
)
($uiElements|where{$_}|Get-Unique)-replace"^$current$","[$current]"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.