모든 문자가 동일한 열 찾기


18

나는 SO에 대해이 질문을 보았고 좋은 골프 도전을 할 것이라고 생각했습니다. 그래서 여기 있습니다 :

도전:

일련의 문자열을 한 줄에 하나씩 읽고 각 문자열이 동일한 문자를 갖는 모든 위치의 목록을 출력하는 프로그램을 작성하십시오.

입력과 출력:

입력은 하나 이상의 인쇄 가능한 공백이 아닌 ASCII 문자로 구성되며 각 줄은 개행으로 구성됩니다. 모든 입력 라인의 길이가 같다고 가정 할 수 있습니다 . 줄 바꿈은 입력의 일부로 간주 되지 않습니다 (즉, 일치하는 문자로 출력해서는 안 됨).

입력 예 (SO 질문에서 뻔뻔스럽게 도난) :

abcdefg
avcddeg
acbdeeg

입력을 읽은 후 프로그램은 일치하는 각 열의 위치와 포함 된 문자를 인쇄해야합니다. (일치하는 열이없는 것으로 조기에 판별 할 수있는 경우 프로그램이 추가 입력을 읽는 것을 중지 할 수는 있지만 필요하지는 않습니다.) 합리적인 출력 형식이 허용됩니다. 특히 위치에 대해 0 기반 또는 1 기반 색인을 사용할 수 있습니다.

위 입력의 출력 예 (0 기반 색인 사용) :

0: a
3: d
6: g

채점 :

이것은 코드 골프이므로 최단 답변이 이깁니다. 동점 일 경우 다음과 같은 추가 기능을 위해 소수 동점 차단 문자가 제공 될 수 있습니다.

  • 길이가 다른 입력 라인을 올바르게 처리하기위한 -½ 자 (출력에는 최단 입력 라인의 끝을 지난 위치가 포함되어서는 안됩니다.)
  • 임의의 UTF-8 인코딩 유니 코드 문자로 구성된 입력을 올바르게 처리하기위한 −¼ 문자

영감을 얻으려면 SO 질문에서 골프를 타지 않은 해결책을 찾을 수 있습니다 (위 참조).

설명 :

  • 에서와 같이 단순히 위치와 문자를 연결하는 것은 "합리적인 출력"으로 계산 0a3d6g되지 않습니다 . 명확하게 구문 분석 할 수 있도록 출력의 각 요소 사이에 일종의 구분 기호 (예 : 공백)를 제공해야합니다.

  • 입력은 표준 입력 스트림 ( stdin)에 제공되거나 선택한 언어에 가장 적합한 텍스트 파일 입력 메커니즘을 사용합니다. (선택한 언어 에 파일 입력을위한 자연스러운 메커니즘 이없는 경우 가장 가까운 것으로 보이는 모든 것을 수행하십시오.)

  • 읽을 데이터가 더 이상 없으면 (즉, 파일 끝 조건이 발생하는 경우) 입력이 종료됩니다. 원하는 경우 입력을 빈 줄로 종료해야 할 수도 있습니다 (입력의 일부로 계산되지 않아야 함). 그렇게 할 경우, 다른 사람들이 테스트를위한 올바른 입력을 제공 할 수 있도록 답변에 언급하십시오.

  • 마지막 입력 줄을 포함 하여 모든 입력 줄 은 개행 문자로 끝납니다. 답은이 줄 바꿈을 일치하는 열로보고해서는 안됩니다. (솔루션이 마지막 줄이 줄 바꿈으로 끝나지 않는 입력을 처리 할 수 ​​있으면 좋지만 필수는 아닙니다.)


빈 줄이 입력을 종료합니까?
— Steven Rumbalski

"모호하지 않게 구문 분석 할 수 있도록 출력의 각 요소 사이에 일종의 구분 기호를 제공해야합니다." 공간은 구분자로 간주됩니까?
— Steven Rumbalski

@StevenRumbalski : 더 이상 읽을 데이터가 없으면 입력이 종료됩니다. 귀하의 언어가 EOF를 감지하는 데 어려움이 있다면 후행 공백을 허용 할 수 있습니다. 그리고 네, 공간은 완벽하게 좋은 분리기입니다.
— Ilmari Karonen

임의의 UTF-8 인코딩 유니 코드 문자 샘플 코드를 가질 수 있습니까?
— 사용자가 알 수 없음

답변:


12

APL, 25 자

∩/{0=⍴⍵:⍬⋄(⊂⍵,⍨¨⍳⍴⍵),∇⍞}⍞

통역사로 Dyalog APL (버전 13)을 사용했습니다. 길이가 다른 문자와 유니 코드 (UTF-8) 문자를 모두 처리합니다.

예 :

      ∩/{0=⍴⍵:⍬⋄(⊂⍵,⍨¨⍳⍴⍵),∇⍞}⍞
abcdefg
avcddeg
acbdeeg

  1 a  4 d  7 g  

      ∩/{0=⍴⍵:⍬⋄(⊂⍵,⍨¨⍳⍴⍵),∇⍞}⍞
test日本
blat日本国foo

  4 t  5 日  6 本 

오른쪽에서 왼쪽으로 설명 :

  • 이 답변의 주요 부분은 중괄호 안에 정의 된 직접 함수 (기본적으로 익명 함수)입니다. 올바른 인수는로 지정됩니다 ⍵.
    • 0=⍴⍵:⍬첫 번째 표현이며 빈 줄을 받았는지 확인합니다 (즉, 완료). 콜론 오른쪽의 표현식을 조건부로 실행하기 위해 가드 (많은 기능 프로그래머에게 친숙한 구성)를 사용합니다. 이 경우 0이 ⍴오른쪽 인수 의 모양 / 길이 ( )와 같으면 빈 세트 ( ⍬)를 반환합니다 .
    • ⋄함수 내에서 두 표현식을 구분합니다. 이전식이 평가되지 않았으므로 아무것도 반환하지 않으면 다음 식으로 이동합니다.
    • 자체 참조 함수 ( ∇)를 사용하여 함수를 재귀 적으로 호출합니다 . 함수에 대한 인수는 quote-quad ( ⍞) 로 평가되지 않은 사용자 입력 라인입니다 .
    • ⊂⍵,⍨¨⍳⍴⍵ 문자열에서 각 문자의 쌍을 만듭니다. 여기서 각 쌍의 첫 번째 요소는 문자열에서의 위치이고 두 번째 요소는 문자입니다.
    • ⍳⍴⍵1에서 벡터 ⍴⍵또는 입력 문자열의 길이를 제공합니다.
    • ⍵,⍨¨정류 된 연결 함수 ( ,⍨)를 각 ¨요소 ( )에 왼쪽 ( ⍵이 경우 사용자 입력) 및 오른쪽에 적용합니다. 연결 함수를 정류하면 왼쪽과 오른쪽 인수가 서로 바뀝니다.
    • 마지막으로 ⊂입력 줄을 구분할 수 있도록을 사용하여 결과를 묶습니다 .
  • 처음에는 함수에 사용자 입력 ( ⍞)을 공급합니다.
  • 마지막으로 /교집합 함수 ( ∩)를 사용하여 결과 쌍의 벡터로 구성된 벡터를 줄이고 ( ) 모든 하위 벡터에서 발견되는 쌍을 만듭니다.

J 나 GolfScript에없는 APL을 볼 때마다 좋은 이유는 없습니다. 그러나 어쨌든 +1은 훌륭한 솔루션입니다.
— Steven Rumbalski

나는 실제로 J로 전환하는 것에 대해 생각하고 있었다. :)
— Dillon Cower

12

골프 스크립트 (28 문자)

n/zip:^,,{.^=.&.,1>{;;}*}%n*

유니 코드를 파이핑 할 때 문자 세트 문제가 있으므로 1/4 포인트 보너스는 없습니다.


1
+1. 이것은 내 대답보다 적은 투표를해서는 안됩니다.
— Steven Rumbalski

9

J, 57 51 44 40 자

,.&.>y;y{{.z[y=.I.*/2=/\]z=.];._2]1!:1]3

나는 천천히 그러나 확실하게 거기에 도착하고있다. 내가 생각하지만 이것은 여전히 ​​이상적이지 않습니다.

나는 후크를 사용하는 것이 답이 될 것이라고 확신했지만 불행히도 (44 자)는 아닙니다.

,.&.>((];({{.)~)([:I.[:*/2=/\]))];._2]1!:1]3

더 짧아지기 위해서는 완전히 다른 방법이 필요할 수 있습니다.


1
+1. 그러나 그렇습니다, 나는 J.에서 더 나아질 것을 기대합니다.
— Steven Rumbalski

이것은 내 대답보다 적은 투표를해서는 안됩니다.
— Steven Rumbalski

1
@StevenRumbalski upvotes가 항상 코드의 상대적 크기를 반영하는 것은 아닙니다. 때때로 언어 인기 대회가됩니다. 나는 골프 스크립트 답변이 APL과 함께 거기에 있어야한다는 것에 동의합니다. 불행히도 나는 이미 그것을 공언에 제출했으며 더 이상 추진할 수 없습니다.
— Gareth

8

하스켈, 64 자

main=interact$show.foldl1(filter.flip elem).map(zip[0..]).lines

길이가 다른 라인을 처리합니다. 유니 코드 지원은 현재 로캘 설정에 따라 다릅니다.

출력 예 :

[(0,'a'),(3,'d'),(6,'g')]

+1. 이것은 내 대답보다 적은 투표를해서는 안됩니다.
— Steven Rumbalski

7

파이썬 2, 81.5 점 ( 116 94 86 83 82 bytes 빼기 보너스)

import sys
i=0
for x in zip(*sys.stdin)[:-1]:
 i+=1
 if len(set(x))<2:print i,x[0]

멋진 파이썬 골프를 위해 +1이지만 4 개의 문자를 모두 잃을 수 있습니다 [:-1]. 입력이 끝날 때 외부 줄 바꿈을 제거하지 않으면 필요하지 않습니다 (질문에는없는 것 같습니다).
— ChristopheD

@ChristopheD : 실제로 결과는 zip(*sys.stdin)입니다 [('a', 'a', 'a'), ('b', 'v', 'c'), ('c', 'c', 'b'), ('d', 'd', 'd'), ('e', 'd', 'e'), ('f', 'e', 'e'), ('g', 'g', 'g'), ('\n', '\n', '\n')]. 마지막 줄 튜플을 제거하지 않는 방법을 보지 못했습니다. 내가 오해 한 경우 수정하십시오. 공감에 감사합니다.
— Steven Rumbalski

당신이 당신의 데이터 파일의 마지막 줄 바꿈을 제거하면 그 라인의 튜플이 완료되지 않은 (미스 한 '\ n'을 이렇게 압축만을 고려하고 제거를 수 있도록 우리가 찾고있는 반환 데이터, [:-1]예.zip([1,2,3,4],[1,2,3])=> [(1, 1), (2, 2), (3, 3)]
— ChristopheD

@ChristopheD : 사양에 따라, "입력은 [...] 줄 [...]로 구성되며, 각각 줄 바꿈이 이어집니다."
— Ilmari Karonen

1
이 답변을 공언 한 사람이 이유를 설명 할 수 있습니까?
— Steven Rumbalski

5

(Bash) Shell 스크립팅, 105 자

누구든지 이것에 대한 트릭이 더 있다면, 자유롭게 의견을 작성하십시오!

for((i=1;i<`tail -1 $1|wc -c`;i++))do
x="cut -c$i $1";y=`$x`;[ `$x|uniq|wc -l` = 1 ]&& echo $i ${y:3};done

결과:

1 개
4 일
7 지

이 작업을 수행하는 데 문제가 있습니다. 샘플 입력에서 이것을 실행하면 일련의 오류와 같은 오류가 인쇄 /tmp/cols.sh: line 2: [1: command not found됩니다.
— Ilmari Karonen

@Ilmari Karonen : 이것은 Mac (Snow Leopard, 10.6.2)에서 테스트되었지만 다른 곳에서는 작동합니다. 나는 내일 리눅스에서 고칠 예정이다 (작은 수정일 것이다)
— ChristopheD

2
ormaaj 는 담당자가 없었지만 논평하고 싶었습니다 : Ilmari에게는 [; 뒤에 공백이 없어서 깨졌습니다 . $ {y : 3}은 정확히 3 줄의 입력에서만 작동합니다. 수율 (100 자)을 수정 및 최적화 while((++i%`tail -1 $1|wc -c`));do x=`cut -c$i $1`;((`uniq|wc -l`==1))<<<"$x"&&echo $i ${x: -1};done하고 기본값을 사용하면 하나 더 저장할 수 for((;++i<`tail -1 $1|wc -c`;))do있지만 bash에는 수정되지 않은 버그가 있습니다.
— 피터 테일러

4

펄 (Perl), 87 자 (-2/2 자 타이 브레이크 보너스)

다음 은 SO 스레드의 자체 솔루션 골프 버전입니다 .

chomp($a=$b=<>);$a&=$_,$b|=$_ for<>;@$_=$$_=~/./sgfor a,b;$b[$i++]eq$_&&say"$i:$_"for@a

SO 버전과 달리이 버전은 출력에 1 기반 인덱스를 사용합니다. Perl 5.10 say기능을 사용하므로 perl -M5.010(또는로 perl -E)을 실행해야합니다 .

SO 버전과 마찬가지로이 코드는 가변 길이 행 을 처리하고 표준 입력 및 출력이 UTF-8 모드 인 경우 임의의 유니 코드 입력을 처리합니다. 아아, 비 자유 -CS 명령 줄 스위치를 지정하지 않으면 기본적으로 그렇지 않습니다 . 따라서 -½ 문자 보너스를 얻지 만 -¼ 보너스는 얻지 않습니다.

편집 : 버그 수정을 위해 +1 char : 입력 문자열에 줄 바꿈이 포함되어 있다고해서 끝나지 않는다는 의미는 아닙니다 $a(예 :) "+" & "J" eq "\n".


1
chop대신을 사용하여 1 개의 문자를 저장할 수 chomp있습니다.
— Toto

@ M42 : 좋은 점이지만, 현재 버전의 견고성을 좋아합니다. 나는 지금은 계속 유지할 것이라고 생각 m합니다. 현재 순위와는 다른 점이 아닙니다. :)
— Ilmari Karonen

3

T-SQL

SELECT N.number, letter = MIN(SUBSTRING(L.line, N.number, 1))
FROM Lines AS L
INNER JOIN master.dbo.spt_values AS N ON N.type = 'P'
WHERE N.number BETWEEN 1 AND (SELECT MAX(LEN(L2.line)) FROM Lines AS L2)
GROUP BY N.number
HAVING COUNT(DISTINCT SUBSTRING(L.line, N.number, 1)) = 1
ORDER BY N.number

2

스칼라 115 107 (-1/4 처리 UTF-8)

io.Source.stdin.getLines.map(_.zipWithIndex).toList.flatten.groupBy(_._2).map(_._2.toSet).filter(_.size==1)

및 ungolfed Source.fromFile ("f")대신 stdin더 나은 테스트 용이성을 위해 :

io.Source.fromFile ("f").
  getLines.map (_.zipWithIndex).
    toList.flatten.groupBy (_._2). 
      map (_._2.toSet).
        filter (_.size==1)

결과:

List(Set((a,0)), Set((g,6)), Set((d,3)))

를 사용하여 크기 8을 줄인 Gareth에게 감사합니다 stdin.


8자를 저장 하는 stdin대신 사용할 수 없습니까 fromFile("f")?
— Gareth

2

VBA ( 307.25 284-0.75 보너스 = 283.25)

나는 이것이 이미 이겼다는 것을 알고 있지만, 여기 내 파일이 있습니다 (파일을 읽지 않고 문자열 만-io를 추가해야합니다). 나는 l()재귀 적 으로 사용해야한다는 것을 좋아합니다 . 나는 보통 실제 프로그래밍을 재귀 할 필요가 없다. 나는 너무 많은 테스트를했지만 유니 코드 보너스 포인트 규정을 다루고 있다고 생각합니다. 또한 vbCr라인 터미네이터 라고 가정합니다 . 이로 인해 모든 시스템으로 변환되지 않을 수 있습니다.

암호:

Function a(i)
b=Split(Left(i,Len(i)-1),vbCr):c=UBound(b):For q=1 To Len(b(c)):d=Mid(b(c),q,1):If l(b,c,q,d) Then a=a & q & ": " & d & vbCr:Next
End Function
Function l(m, n, o, p)
If n+1 Then l=IIf(o<=Len(m(n)),Mid(m(n),o,1)=p,0) And l(m,n-1,o,p) Else l=Mid(m(n+1),o,1)=p
End Function

입력 / 출력 예 :

Debug.Print a("abcdefghijklmnop" & vbCr & "abcdefg" & vbCr & "abcabcghijkl" & vbCr)

1: a
2: b
3: c
7: g

2

문 32

{a!((*:)x)a:(&)1=(#:')(?:')(+)x}

용법

q){a!((*:)x)a:(&)1=(#:')(?:')(+)x}[("abcdefg";"avcddeg";"acbdeeg")]
0| a
3| d
6| g

K, 22

위의 솔루션은 K 함수를 Q 인터프리터에 전달하지 않고 K로 완전히 작성하여 22로 줄일 수 있으므로 필요한 괄호 수가 줄어 듭니다.

{a!@[*x]a:&1=#:'?:'+x}

1

PHP, 123 127 :(

나는 그것에 만족하지 않지만 (개선해야 할 것이 있습니다), 여기에 간다 :

<?$a=$b=trim(fgets(STDIN));while($l=fgets(STDIN)){$a&=$l;$b|=$l;}$n=-1;while(@$a[++$n]){echo$a[$n]!=$b[$n]?'':"$n:{$a[$n]}\n";}

작동합니다.

누구든지 $ a와 $ b를 초기화하는 더 영리한 방법을 생각할 수 있다면 알려주십시오. 원래 나는 $a=$b=$n=''$ b가 정확했지만 [empty] & [anything] == [empty]$ a에는 결코 내용이 없었습니다.


편집 : 줄 바꿈 처리 (+6)를 수정했지만 닫기 태그 (-2)를 삭제했습니다.


궁금합니다. 왜 대부분의 답변을 커뮤니티 위키로 만드십니까?
— Gareth

나는 이것에 의미하지 않았다. 오래 전에 CodeGolf에 처음 가입했을 때 누군가 표준이라고 말했습니다. 습관을 끊어야합니다. 그래도 위키를 해제 할 수 있습니다. codegolf.stackexchange.com/a/2249/1419 (댓글 참조)
— Mr. Llama

코드 골프 질문에 대해 SO에서 작업을 수행하는 표준 방법이라고 생각하지만, 그렇지 않으면 아무도 명성을 얻지 못합니다. :-)
— Gareth

아마도 플래그를 지정하고 중재자에게 CW 해제를 요청할 수 있습니다 . 실수라고 설명하십시오.
— Ilmari Karonen

을 생략하면 두 문자를 저장할 수 ?>있습니다. 그러나 코드에 버그가 있음을 발견했습니다. 모든 줄에 지정된 줄 바꿈이 있으면 추가 일치 항목을 인쇄합니다.
— Ilmari Karonen

1

자바 스크립트 (125 (134) 140 )

for(i=s=[];I=s[++i]=prompt(o='');S=I);for(c=-1;w=r=++c<S.length;o+=r?c+':'+C+'\n':'')for(C=S[c];w<i;)r&=s[w++][c]==C;alert(o)

데모 : http://jsfiddle.net/Fv7kY/4/

편집 1 : 중괄호를 피하기 위해 루프를 다시 정렬 하십시오 . 내가 함께 초기화 []와 결합하는 s. 움직임w 표현으로 증가합니다.

편집 2 : S=I마지막에 입력 한 단어를 캡처하고을 사용하여 저장하도록 설정 합니다 s[1]. 결합 r=1하고 ++c<S.length. C=s[c]내부 루프에서 설정 하고 C이전 단어와 다음 단어 대신 비교하여 표현 s[w][c]==s[w++][c]을 just 로 단축하십시오 s[w++][c]==C. 총 9자를 저장했습니다. 또한 w=r=...그것이 진실 일 때 w=1초기화해야 할 것이기 때문에 설정 w됩니다.


1

루비 (71)

a,*s=*$<.lines
(a.size-1).times{|i|s.all?{|t|t[i]==a[i]}&&p([i,a[i]])}

산출:

[0, "a"]
[3, "d"]
[6, "g"]

참고 : Ruby 1.9가 필요한 것으로 보입니다. Ruby 1.8 호환성을 위해 t[i]로 교체하십시오 t[i,1].
— Ilmari Karonen

1

공통 Lisp, 183165 자

(let((l(loop for m =(read-line)until(equal m "")collect m)))(loop for c across(car l)for i from 0 if(null(remove c(mapcar(lambda(y)(char y i))l)))collect(list i c)))

읽을 수있는 형식 :

(let ((l (loop for m = (read-line) until (equal m "") collect m)))
  (loop for c across (car l)
        for i from 0 
        if (null (remove c 
                         (mapcar (lambda(y) (char y i))l)))
        collect(list i c)))

이것을 REPL에 직접 입력하고 빈 줄로 끝나는 줄을 입력하십시오.


1

C, 126 자

char a[999],b[999];main(i){for(gets(a);gets(b);)for(i=0;b[i];++i)a[i]^b[i]?a[i]=0:0;
while(i--)a[i]&&printf("%d:%c\n",i,a[i]);}

나는 이것을 쳐다 보았지만 더 작게 만들 수는 없다. 새로운 접근법이 필요할 수 있습니다.

(보너스 포인트는 없습니다. 첫 번째 라인이 짧은 라인 인 경우 다른 크기의 라인 만 처리합니다.)


0

.NET 4가 포함 된 C # (280)

using c=System.Console;class P{static void Main(){char[]a=c.ReadLine().ToCharArray();int r,i,l=a.Length;m:i=0;n:r=c.Read();if(r>0&&r!=10&&r!=13){if((int)a[i]!=r)a[i]='\0';i++;goto n;}for(;i>0&&i<l;)a[i++]='\0';if(r>0)goto m;for(i=0;i<l;i++)if(a[i]!='\0')c.WriteLine(i+":"+a[i]);}}
  • 한 줄, 280 자
  • 모든 필요한 using 문과 Main 메서드를 포함합니다.
  • 프로그램 은 끝에 빈 줄이 필요하지 않지만 수락합니다
  • 빈 줄은 무시됩니다
  • 모든 길이의 입력 문자열을 처리합니다.
  • 끝까지 출력을 예약합니다 (원래 답변은 증분 출력을 제공함)

읽을 수있는 버전

    char[]a=c.ReadLine().ToCharArray();
    int r,i,l=a.Length;
    m:
    i=0;
    n:
    r=c.Read();
    if(r>0&&r!=10&&r!=13){
        if((int)a[i]!=r)
            a[i]='\0';
        i++;
        goto n;
    }
    for(;i>0&&i<l;)
        a[i++]='\0';
    if(r>0)
        goto m;
    for(i=0;i<l;i++)
        if(a[i]!='\0')
            c.WriteLine(i+":"+a[i]);

원래 답변

c = System.Console; class P {static void Main () {char [] a; var b = c.ReadLine (); a = b.ToCharArray (); while (b! = "") {for (int 사용) i = 0; i

  • 1 줄
  • 207 자
  • 모든 필요한 using 문과 Main 메서드를 포함합니다.
  • 빈 줄을 입력하면 프로그램이 종료됩니다.
  • 첫 번째보다 짧은 입력 문자열을 처리하지 않습니다.


읽을 수있는 버전 :

    static void Readable()
    {
        char[]a;
        string b=System.Console.ReadLine();
        a=b.ToCharArray();
        while(b.Length>0)
        {
            for (int i = 0; i < a.Length; i++)
            {
                if (a[i] != b[i])
                {
                    a[i] = '\0';
                }
                else
                {
                    System.Console.WriteLine(i+": "+a[i]);
                }
            }
            b=System.Console.ReadLine();
        }
    }


챌린지의 테스트 입력에서 이것을 실행하면을 얻습니다 0: a 1: b 2: c 3: d 4: e 5: f 6: g 0: a 2: c 3: d 6: g 0: a 3: d 6: g. 예상 출력은입니다 0: a 3: d 6: g.
— Ilmari Karonen

@Ilmari Ok, 그러나 각 입력 행 다음에 동일한 열 / 문자를 출력합니다. 파일을 표준 입력으로 공급하는 경우 출력이 이상하게 보일 수 있지만 수동으로 입력하면 의미가 있다고 생각합니다. 그래도 리팩토링하는 방법을 고려할 것입니다.
— 윌리 박사의 견습생

줄이 첫 줄보다 길면 솔루션이 충돌합니다.
— Timwi

@Timwi Ah ... 지적 해 주셔서 감사합니다!
— 윌리 박사의 견습생

0

파이썬 122 자 :

print("\n".join([str(i)+':'+str(x[0]) for i,x in enumerate(zip(*[tuple(x) for x in input().split()])) if len(set(x))<2]))

)와 사이에 공백이 필요하지 않습니다 for. 따라서 대신에 …str(x[0]) for i,x…할 수 있습니다 …str(x[0])for i,x…. 또한에 등장 tuple(x) for하고.split()])) if
— Cyoce

-1

루비 (242)

s = %w{ abcdefg avcddeg acbdeeg aejdjeggd }
cols = []
s.sort{ |a, b| b.size <=> a.size }[0].size.times do |i|
  uneq=true
  l = s[0][i]
  s.each { |w| uneq = false if l != w[i] }
  cols << [l, i] if uneq
end
cols.each { |c| puts c.join('|') }

도전의 의도는 표준 입력에서 라인을 읽는 것이 었습니다. 그 개념이 실제로 존재하지 않는 언어 (예 : 브라우저 내 JavaScript)의 느슨 함을 줄이려고하지만 Ruby에는 STDIN( ARGF또는 그냥 평범한 gets) 있습니다.
— Ilmari Karonen

아 알았어 그러나 STDIN이 한 줄을 허용한다는 것을 고려하면 "다른 줄에 들어가거나 'n'을 멈추려면 '과 같은 것으로 가정합니까? 따라서 배열을 만들기 위해 루프를 만듭니다.
— agmcleod 2012 년

질문에 설명을 추가했습니다. 기본적으로 파일 끝에 도달 할 때까지 입력 행을 계속 읽으십시오.
— Ilmari Karonen

불필요한 공백이 많이 있습니다.
— Cyoce

-1

씨#

List<string> strings = new List<string> { "abcdefg", "avcddeg", "acbdeeg", "aejdjeggd" };
var transposes = from index in Enumerable.Range(0, strings.First().Length)
                 select new string((from s in strings select s[index]).ToArray());
int i = 0;
foreach(string transpose in transposes)
{
   if (transpose.Distinct().Count() == 1)
     Console.WriteLine("{0}: {1}", i , transpose[0]);
   i++;
}

1
안녕하세요 Arjang, codegolf.SE에 오신 것을 환영합니다! 귀하의 답변에 대한 몇 가지 의견 : 첫째, 이것은 코드 골프 과제이므로 가능한 한 빨리 솔루션을 만들려고합니다. 우선, 단일 문자로 쉽게 단축 할 수있는 긴 변수 이름과 제거 할 수있는 여분의 공백이 있습니다. ( "golfed"코드와 함께 읽을 수있는 코드 버전을 게시하는 것이 좋지만 실제로 골프 솔루션도 게시해야합니다.) 둘째, 질문을주의 깊게 읽으면 표준 입력에서 문자열을 읽어야한다고 지정했습니다. 하드 코딩하지 마십시오.
— Ilmari Karonen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.