2D অ্যারের অ্যান্টি-ক্লকওয়াস ইনওয়ার্ড সর্পিল আউটপুট করুন


15

থেকে এই Stackoverflow প্রশ্ন

আকার একটি 2 ডি অ্যারের দেওয়া এম×এন , আউটপুট একটি বিরোধী ঘড়ির কাঁটার ফ্যাশন মান। আউটপুটটি অবশ্যই বাইরে থেকে ভিতরের দিকে শুরু হতে হবে এবং প্রাথমিক পয়েন্টটি সর্বদা হতে চলেছে ।(0,0)

উদাহরণ দেওয়া:

[12345678910111213141516]

ঘড়ির কাঁটার বিপরীতে প্রান্তের মানগুলি তখন ।1,5,9,13,14,15,16,12,8,4,3,2

এখন আমরা অভ্যন্তরীণ মানগুলির জন্য প্রক্রিয়াটি পুনরাবৃত্তি করি। এটি নিম্নলিখিত মত একটি ম্যাট্রিক্স সঙ্গে শেষ হবে

[671011]

এবং অভ্যন্তরীণ মানগুলি তখন6,10,11,7

চূড়ান্ত ফলাফল হবে1,5,9,13,14,15,16,12,8,4,3,2,6,10,11,7


বিধি

  • খালি খালি ইনপুট ধরে নিই
  • ধনাত্মক পূর্ণসংখ্যা হিসাবে ম্যাট্রিক্সের মানগুলি ধরে নিন
  • মানক I / O পদ্ধতি প্রয়োগ হয়
  • স্ট্যান্ডার্ড বিধি এবং জয়ের মানদণ্ড প্রয়োগ

কিছু পরীক্ষার মামলা

Input
[
  [1, 2, 3, 4, 5, 6, 7],
  [8, 9, 10,11,12,13,14],
  [15,16,17,18,19,20,21]
]
Output
1,8,15,16,17,18,19,20,21,14,7,6,5,4,3,2,9,10,11,12,13

--------------------------------------------------------

Input
[
    [1,2,3],
    [3,2,1],
    [4,5,6],
    [6,5,4],
    [7,8,9],
    [9,8,7]
]
Output
1,3,4,6,7,9,8,7,9,4,6,1,3,2,2,5,5,8

-----------------------------------------------------
Input
[
    [1]
]
Output
1
-----------------------------------
Input
[
    [1, 2],
    [2, 1]
]
Output
1,2,1,2
-----------------------------------------------------
Input
[
    [1,2,3,6,7],
    [2,4,3,2,1],
    [3,2,4,5,6],
    [6,5,6,5,4],
    [10,4,7,8,9],
    [12,4,9,8,7]
]
Output
1,2,3,6,10,12,4,9,8,7,9,4,6,1,7,6,3,2,4,2,5,4,7,8,5,5,2,3,4,6

তাহলে আমরা কি ঘড়ির কাঁটার দিকে বা ঘড়ির কাঁটার দিক দিয়ে যাচ্ছি?
LegionMammal978

@ লিজিয়নম্যামাল978 ঘড়ির কাঁটার বিপরীতে (যদিও এটিকে ঘড়ির কাঁটার বিপরীতে বলা হয়েছিল)
লুইস ফিলিপ দে জেসুস মুনোজ

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

উত্তর:


12

আর , 54 বাইট

@ জিউসেপ এবং @ জে.ডো দ্বারা বেশ কয়েকটি বাইট সংরক্ষণ করা হয়েছে।

f=function(m)if(ncol(m))c(m[,1],f(t(m[nrow(m):1,-1])))

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

অবিচ্ছিন্নভাবে প্রথম কলামটি সরিয়ে ফেলুন এবং সারি-বিপরীত / ট্রান্সপোজ (নীচের সারিটিকে নতুন প্রথম কলাম তৈরি করা হবে) বাকি ম্যাট্রিক্স পর্যন্ত আপনি কেবল একটি কলাম দিয়ে শেষ না হওয়া পর্যন্ত। অসম্পূর্ণ "traditionalতিহ্যবাহী" সংস্করণ:

f <- function(m) {
 if(ncol(m) == 1) {
    m
  } else {
    c(m[,1], f(t(m[nrow(m):1,-1])))
  }
}

এটি নির্দেশিত হয়েছিল যে অন্য বাইট সংরক্ষণ ncol(m)করার sum(m)জন্য গল্ফ করা যেতে পারে কারণ আমাদের ইতিবাচক পূর্ণসংখ্যার ম্যাট্রিক্স মানগুলি গ্রহণ করার অনুমতি দেওয়া হয়। তবে আমি এটি এটিকে ছেড়ে চলে যাব কারণ এটি সমস্ত ম্যাট্রিকের জন্য কাজ করে (স্ট্রিংয়ের ম্যাট্রিকও!)


কি দারুন! আমি পছন্দ করি কীভাবে ব্যবহারের ফলে শর্তটি বাড়ানো থেকে ডিফল্টটিকে t()বাধা দেওয়া হয় ! drop=TRUE`[`if
জিউসেপ

এবং সম্পূর্ণ প্রকাশ, আমার প্রায় 200 বাইট সলিউশন ছিল যা এমনকি কাজ করে না, তাই ইয়্ড! প্রশ্নটি যদি কোনও অনুগ্রহের যোগ্য হয়ে যায় তখন আমি সম্ভবত আপনাকে এটির জন্য একটি অনুদান প্রদানের কাছাকাছি যাব।
জিউসেপ

@ জিউজেপ্পে 59 বাইটে ফিরে আসুন! আমার আসল প্রচেষ্টায় যে পরীক্ষাটি t()ব্যবহার করা হয়নি তা শুনে আমি আনন্দিতভাবে অবাক হয়েছিলাম is.null
এনজিএম

এটি কি সর্বশেষে mশূন্য হতে চলেছে না, তাই আপনি 54 বাইটের জন্য যদি বিবৃতিটি পরিবর্তন করতে পারেন । মনে হয় পরীক্ষার ক্ষেত্রে কাজ করার জন্য।
জে.ডো


7

পাইথ , 9 বাইট

shMM.utC_

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

কিভাবে?

shMM.utC_     Full program. Takes a 2D array (matrix) from STDIN.
    .u        Until a result that has occurred before is found, loop and collect...
        _     Reverse the matrix (reverse the order of its rows).
       C      Transpose.
      t       Remove first element.
 hMM          For each element in the resulting 3D array, get the heads of its elements.
s             Flatten.

চমৎকার. পাইথ শিক্ষানবিস হিসাবে আমি এখন জানি আমার আরও অনেক কিছু শিখতে হবে,
এলপেড্রো

5

স্ট্যাক্স , 7 বাইট

ôQÖG·í<

এটি চালান এবং এটি ডিবাগ করুন

এটি এক লাইনে সারিগুলির একটি অ্যারে নেয় এবং নিউলাইন-পৃথক আউটপুট উত্পাদন করে।

আনপ্যাকড, নিরবচ্ছিন্ন এবং মন্তব্য করা হয়েছে, এটি দেখতে এটির মতো দেখাচ্ছে।

W       repeat the rest of the program until cancelled explicitly
  rM    rotate matrix *clock-wise* (yes, this is the opposite of the challenge)
  |c    assert matrix is truthy. (has rows) cancel otherwise.
  B     remove the top row of the matrix, and push separately to main stack
  rm    reverse the top row (this fixes the rotation direction), and print each value

এটি চালান


4

পাইথ, 20 বাইট

J.TQWJ=+YhJ=J_.TtJ)Y

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

ব্যাখ্যা

J.TQWJ=+YhJ=J_.TtJ)Y
J.TQ                    Call the transposed input J.
    WJ            )     While J is not empty...
      =+YhJ             ... put the top row into Y (initially [])...
           =J   tJ      ... remove the top row...
             _.T        ... reverse and transpose (rotate clockwise).
                   Y    Output the result.

4

ওকে , 12 বাইট

*+,/(1_+|:)\

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

এটি ওকে স্থানান্তরের জন্য আকারের বিষয়ে খুব বেশি যত্ন করে বলে মনে হচ্ছে না এ বিষয়টি অপব্যবহার করে। ট সালে এই হবে 13 বাইট : *:',/(1_+|:)\

       +|:   /reverse, then transpose (rotate right)
     1_      /remove first line
    (     )\ /fixpoint of the above, keeping intermediate results (scan)
  ,/         /concatenate all the rows
*+           /get the first element of each row

3

পরিষ্কার , 69 বাইট

import StdEnv,StdLib
? =transpose
@[h:t]=h++ @(reverse(?t))
@_=[]

@o?

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

পরের সারি / কলামটিকে তালিকার শীর্ষে স্থানান্তরিত করে যাতে এটি যুক্তিতে প্যাটার্ন মেলে।

চ্যালেঞ্জের প্রথম উদাহরণের জন্য, এটির মতো দেখাচ্ছে:

@o? [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]
@ h=:[1, 5, 9, 13] t=:[[2, 6, 10, 14], [3, 7, 11, 15], [4, 8, 12, 16]]
[1, 5, 9, 13] ++ @ h=:[14, 15, 16] t=:[[10, 11, 12], [6, 7, 8], [2, 3, 4]]
[1, 6, 9, 13, 14, 15, 16] ++ @ h=:[12, 8, 4] t=:[[11, 7, 3], [10, 6, 2]]
[1, 6, 9, 13, 14, 15, 16, 12, 8, 4] ++ @ h=:[3, 2] t=:[[7, 6], [11, 10]]
[1, 6, 9, 13, 14, 15, 16, 12, 8, 4, 3, 2] ++ @ h=:[6, 10] t=:[[7, 11]]
[1, 6, 9, 13, 14, 15, 16, 12, 8, 4, 3, 2, 6, 10] ++ @ h=:[11, 7] t=:[]
[1, 6, 9, 13, 14, 15, 16, 12, 8, 4, 3, 2, 6, 10, 11, 7] ++ @ []

3

জুলিয়া 0.7 , 47 বাইট

f(m)=[m[:,1];sum(m)<1?[]:f(rotr90(m[:,2:end]))]

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

জুলিয়াতে ম্যাট্রিক্সকে 90 ডিগ্রি করে ট্রান্সপোজ-রিভার্স অপারেশনগুলির প্রয়োজনীয়তা দূর করার জন্য একটি বিল্ট-ইন অন্তর্নির্মিত রয়েছে।

আপনি সংকলক সতর্কবাণীগুলি থেকে দেখতে পাচ্ছেন, এটি জোর দিয়েছিল যে ত্রৈমাসিকী শর্তাধীন সমস্ত উপাদান ফাঁক দিয়ে আলাদা করা উচিত, এবং বনাম ১.০ এ এটি বাস্তবায়িত করা হয়েছে।

অদ্ভুতভাবে যথেষ্ট, এই পরিস্থিতিতে আমি পুনরাবৃত্তি থেকে বিরতি পাওয়া সবচেয়ে সংক্ষিপ্ত উপায়টি ছিল ট্রাই-ক্যাচ ব্লকটি ব্যবহার করা:

জুলিয়া 1.0 , 50 বাইট

f(m)=[m[:,1];try f(rotr90(m[:,2:end]))catch;[]end]

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


2

জাভাস্ক্রিপ্ট (নোড.জেএস) , 89 বাইট

f=a=>a>[]?[...a.map(x=>x[0]),...f(a[0].map((_,i)=>a.map(y=>y[i]).reverse()).slice(1))]:[]

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

প্রথম কলামটি নেয়, বাকি একটিটি স্থানান্তর করুন তারপরে প্রতিটি সারি বিপরীত করুন (= ম্যাট্রিক্স 90 ডিগ্রি সিডব্লু ঘোরানো), এবং তারপরে অ্যারেতে আরও প্রবেশাধিকার না হওয়া পর্যন্ত পুনরাবৃত্তি করুন।


2

এপিএল (ডায়ালগ) , 24 22 বাইট

{×≢⍵:⍵[;1],∇⍉⊖0 1↓⍵⋄⍬}

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

কিভাবে?

{×≢⍵:⍵[;1],∇⍉⊖0 1↓⍵⋄⍬}
{                    } - a function
 ×≢⍵:                  - if non-empty:
     ⍵[;1]             - the left column
          ,∇⍉⊖0 1↓⍵    - repeat this function without the left column, rotated counter clockwise
                   ⋄⍬  - otherwise, return an empty vector

অপারেটরদের একটি ব্যাখ্যা ভাল হবে।
আর্ক 676

1
@ Arc676, যুক্ত হয়েছে!
জাকারি

2

05 এ বি 1 , 13 11 10 বাইট

ΔRøćRˆ}¯˜þ

-2 ধন্যবাদ বাইট @Emigna

এটি অনলাইনে চেষ্টা করুন বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা:

Δ         # Loop until the stack no longer changes:
 R        #  Reverse the order of the rows
          #   i.e. [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]
          #    → [[13,14,15,16],[9,10,11,12],[5,6,7,8],[1,2,3,4]]
  ø       #  Zip, swapping rows and column
          #   → [[13,9,5,1],[14,10,6,2],[15,11,7,3],[16,12,8,4]]
   ć      #  Head extracted
          #   → [[14,10,6,2],[15,11,7,3],[16,12,8,4]] and [13,9,5,1]
    R     #  Reverse this row
          #   → [1,5,9,13]
     ˆ    #  Pop and push it to the global array
}         # After the loop:
 ¯        #  Push the global array
          #   i.e. [[1,5,9,13],[14,15,16],[12,8,4],[3,2],[6,10],[11],[7],"",""]
  ˜       #  Flatten it
          #   → [1,5,9,13,14,15,16,12,8,4,3,2,6,10,11,7,"",""]
   þ      #  Remove all empty string by only leaving all digits
          #   → ["1","5","9","13","14","15","16","12","8","4","3","2","6","10","11","7"]
          # (and output it implicitly)


1

কাঠকয়লা , 25 বাইট

≔⮌EA⮌ιθWθ«≔E§θ⁰⮌Eθ§μλθI⊟θ

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। ব্যাখ্যা:

≔⮌EA⮌ιθ

180 ° দ্বারা ইনপুটটি ঘোরান ° এটি দুটি কারণে রয়েছে: ক) শেষ সারিটি সরানো সবচেয়ে সহজ এবং খ) লুপটির শেষে সারিটি সরানো থাকলে লুপ করা সহজ। (আমি ঘড়ির কাঁটার দিকে প্রতিফলিত এবং আউটপুট দেওয়ার চেষ্টা করেছি তবে এটি একটি অতিরিক্ত বাইট নিয়েছে took)

Wθ«

অ্যারে খালি না হওয়া পর্যন্ত পুনরাবৃত্তি করুন।

≔E§θ⁰⮌Eθ§μλθ

অ্যারেটি 90 by ঘোরান °

I⊟θ

অ্যারের শেষ সারিটি সরান এবং আলাদা লাইনে স্ট্রিং হিসাবে উপাদানটি মুদ্রণ করুন।



1

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

হ্যাঁ .. পাওয়ারশেল ম্যাট্রিক্স পরিচালনা করার জন্য সেরা নয়। তবে, অ্যালগোরিদম মূলত উপরের মতই .. প্রতিটি সারিটি কমা-বিচ্ছিন্ন স্ট্রিং হিসাবে উপস্থাপিত হয় এবং আমরা প্রতিটি স্তরের জন্য মূলত একটি ঘূর্ণন এবং স্থানান্তর করি। আমি সম্ভবত আরও শেভ করতে পারি, তবে ... আমি ইতিমধ্যে আমার পায়জামায় আছি ...

Filter F{$a=$_-replace"],|]|\s",''-split'\['|?{$_-ne''};$b=@();while($a-ne $null){$N=($a[0]-split',').Count-1;$a=0..$N|%{$i=$_;($a|%{($_-split',')[$i]})-join','};if($d){[array]::Reverse($a)}if($N-gt0){$b+=$a[0];$a=$a[1..$N]}else{$b+=$a;$a=$null};$d=$true}$b-join','}

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.